Środowisko WinCUPL instrukcja laboratoryjna. dr inż. Jarosław Sugier

Podobne dokumenty
AHDL - Język opisu projektu. Podstawowe struktury języka. Komentarz rozpoczyna znak i kończy znak %. SUBDESIGN

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

ĆWICZENIE 4 Zapoznanie ze środowiskiem CUPL Realizacja układów kombinacyjnych na układach PLD

Programowanie w języku Python. Grażyna Koba

1 Podstawy c++ w pigułce.

Bezpieczeństwo informacji oparte o kryptografię kwantową

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Układy VLSI Bramki 1.0

Cyfrowe układy sekwencyjne. 5 grudnia 2013 Wojciech Kucewicz 2

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Lista tematów na kolokwium z wykładu z Techniki Cyfrowej w roku ak. 2013/2014

Podstawy Informatyki Elementarne podzespoły komputera

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

1. ISE WebPack i VHDL Xilinx ISE Design Suite 10.1 VHDL Tworzenie projektu Project Navigator Xilinx ISE Design Suite 10.1 File

1 Podstawy c++ w pigułce.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

MentorGraphics ModelSim

Altera Quartus II. Opis niektórych komponentów dostarczanych razem ze środowiskiem. Opracował: mgr inż. Leszek Ciopiński

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Opis szybkiego uruchomienia programu APBSoft

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

Literatura. adów w cyfrowych. Projektowanie układ. Technika cyfrowa. Technika cyfrowa. Bramki logiczne i przerzutniki.

Krótkie wprowadzenie do ModelSim i Quartus2

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Mikrokontroler ATmega32. Język symboliczny

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

1 Wstęp. 2 Proste przykłady. 3 Podstawowe elementy leksykalne i typy danych. 6 Opis strukturalny. 7 Moduł testowy (testbench)

i pakietu programowego PALASM 4

Zaawansowane aplikacje internetowe - laboratorium

1. Przypisy, indeks i spisy.

Podstawy programowania skrót z wykładów:

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: PROGRAMOWALNE STRUKTURY LOGICZNE

Podstawy programowania w środowisku Totally Integration Automation Portal

Robert Barański, AGH, KMIW MathScript and Formula Nodes v1.0

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji

Instrukcja obsługi DHL KONWERTER 1.6

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: TECHNIKA CYFROWA 2 TS1C

Laboratorium przedmiotu Technika Cyfrowa

Synteza strukturalna automatów Moore'a i Mealy

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Definicja układu kombinacyjnego była stosunkowo prosta -tabela prawdy. Opis układu sekwencyjnego jest zadaniem bardziej złożonym.

Liczniki, rejestry lab. 07 Układy sekwencyjne cz. 1

I. Interfejs użytkownika.

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Tworzenie nowego projektu w asemblerze dla mikroprocesora z rodziny 8051

Wstęp do programowania. Wykład 1

Część 3. Układy sekwencyjne. Układy sekwencyjne i układy iteracyjne - grafy stanów TCiM Wydział EAIiIB Katedra EiASPE 1

Projektowanie Urządzeń Cyfrowych

LibreOffice Calc VBA

System imed24 Instrukcja Moduł Analizy i raporty

Ukªady Kombinacyjne - cz ± I

xx + x = 1, to y = Jeśli x = 0, to y = 0 Przykładowy układ Funkcja przykładowego układu Metody poszukiwania testów Porównanie tabel prawdy

Pliki. Operacje na plikach w Pascalu

Instrukcja obsługi Multiconverter 2.0

Programowanie w języku C++ Grażyna Koba

Tab. 1 Tab. 2 t t+1 Q 2 Q 1 Q 0 Q 2 Q 1 Q 0

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 8 (3h) Implementacja pamięci ROM w FPGA

Przykładowe pytania z części PSPICE. 1. Podaj zasady tworzenia pliku symulacyjnego. 2. Czy składnia PSPICE jest czuła na wielkość liter? 3.

Zakład Systemów Rozproszonych

Podręcznik użytkownika programu. Ceremonia 3.1

Produkcja by CTI. Proces instalacji, ważne informacje oraz konfiguracja

Podstawy programowania w języku C i C++

Asynchroniczne statyczne układy sekwencyjne

Programowanie sterowników B&R

UKŁADY CYFROWE. Układ kombinacyjny

Bezpieczeństwo informacji oparte o kryptografię kwantową

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: PROGRAMOWALNE STRUKTURY LOGICZNE

Układy programowalne, część 5

Projekt prostego układu sekwencyjnego Ćwiczenia Audytoryjne Podstawy Automatyki i Automatyzacji

Metody numeryczne Laboratorium 2

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH Wydziałowy Zakład Metrologii Mikro- i Nanostruktur SEMESTR LETNI 2017

CoDeSys 3 programowanie w języku drabinkowym LD

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

Ćwiczenie MMLogic 002 Układy sekwencyjne cz. 2

Materiały pomocnicze do ćwiczeń laboratoryjnych. Projektowanie układów cyfrowych przy użyciu PLD i pakietu programowego PALASM 4

LICZNIKI LABORATORIUM. Elektronika AKADEMIA GÓRNICZO-HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE. Wydział Informatyki, Elektroniki i Telekomunikacji

INSTRUKCJA UŻYTKOWANIA

TEMAT: PROJEKTOWANIE I BADANIE PRZERZUTNIKÓW BISTABILNYCH

1. SFC W PAKIECIE ISAGRAF 2. EDYCJA PROGRAMU W JĘZYKU SFC. ISaGRAF WERSJE 3.4 LUB 3.5 1

Laboratorium WDEC. Opis posługiwania się pakietem AMPL

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 4 (3h) Przerzutniki, zatrzaski i rejestry w VHDL

Lokalizacja jest to położenie geograficzne zajmowane przez aparat. Miejsce, w którym zainstalowane jest to urządzenie.

Język opisu sprzętu VHDL

Automat skończony FSM Finite State Machine

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Użycie Visual Basic for Applications ("VBA")

Gromadzenie danych. Przybliżony czas ćwiczenia. Wstęp. Przegląd ćwiczenia. Poniższe ćwiczenie ukończysz w czasie 15 minut.

5.2. Pierwsze kroki z bazami danych

Magistrale na schematach

I. Program II. Opis głównych funkcji programu... 19

Transkrypt:

Środowisko WinCUPL instrukcja laboratoryjna dr inż. Jarosław Sugier

J. Sugier WinCUPL instrukcja laboratoryjna 1 1 Informacje ogólne Pakiet oprogramowania WinCUPL firmy Atmel służy do specyfikacji, symulacji oraz implementacji układów cyfrowych w programowalnych układach logicznych (PLD) tej firmy. Oprócz własnych układów CPLD (Complex PLD) firmy Atmel wspierane są także standardowe układy PLD rodzin 16V8, 2V8 oraz 22V1. Wersja przeznaczona dla środowiska MS Windows jest dostępna bezpłatnie na stronie www.atmel.com. Plik instalatora ma ok. 22 MB, a po zainstalowaniu w grupie Atmel WinCupl dostępne są dwie ikony, służące do uruchamiania: zintegrowanego edytora projektu (WinCupl, ) oraz symulatora (WinSim, ). Domyślnie proponowana ścieżka instalacji środowiska to C:\Wincupl ; przy zmianie należy pamiętać o tym, że nie mogą znaleźć się w niej odstępy. Nie jest celem niniejszego opracowania przedstawienie wyczerpującego opisu języka CUPL; w tym celu patrz przede wszystkim pozycje [1] oraz [2]. Przedstawione tu informacje mają pozwolić na szybkie rozpoczęcie pracy w środowisku WinCUPL, tzn. syntezę oraz symulację funkcjonalną układów kombinacyjnych oraz sekwencyjnych. 2 Język CUPL Język CUPL służy do tekstowego opisu układu cyfrowego. Umożliwia jego specyfikację poprzez podanie równań logicznych lub poprzez opis proceduralny przy użyciu instrukcji własnych. Dodatkowe możliwości organizacji tekstu źródłowego udostępnia preprocesor podobny w składni oraz działaniu do preprocesora języka C. Tekst opisu przechowywany jest w niesformatowanych plikach tekstowych o domyślnym rozszerzeniu.pld (do symulacji dodatkowo niezbędny jest plik.si). Całość opisu w pliku.pld można podzielić na następujące sekcje (por. przykładowe projekty w dodatku B na str. 16): 1) nagłówek z informacjami ogólnymi o projekcie, 2) deklaracje wyprowadzeń przenoszących sygnały wejściowe, 3) deklaracje wyprowadzeń przenoszących sygnały wyjściowe, 4) inne deklaracje i definicje (zmiennych wewnętrznych, stałych preprocesora itp.), 5) równania logiczne lub inny opis logiki układu. 2.1 Elementy języka Komentarze Tekst umieszczony miedzy symbolami /* */ (podobnie jak w języku C) jest traktowany jako komentarz i jest ignorowany przez kompilator. Nazwy zmiennych Nazwy zmiennych identyfikują sygnały na wyprowadzeniach (PIN) oraz w tzw. węzłach wewnętrznych (NODE) układu PLD. Mogą także definiować tzw. zmienne wewnętrzne, które pomagają w bardziej czytelnym zapisie równań logicznych, lecz nie reprezentują żadnych specyficznych zasobów w strukturze układu.

J. Sugier WinCUPL instrukcja laboratoryjna 2 Nazwy mają postać ciągu złożonego z cyfr, liter i znaku pokreślenia. Muszą zawierać co najmniej jedną literę, ale nie jest wymagane, aby się od litery zaczynały. Nazwy nie mogą być takie same jak słowa kluczowe: APPEND FORMAT OUT ASSEMBLY FUNCTION PARTNO ASSY FUSE PIN COMPANY GROUP PINNNODE CONDITION IF PRESENT DATE JUMP REV DEFAULT LOC REVISION DESIGNER LOCATION SEQUENCE DEVICE MACRO SEQUENCED ELSE MIN SEQUENCEJK FIELD NAME SEQUENCERS FLD NODE SEQUENCET TABLE Wielkość liter w nazwach zmiennych JEST rozróżniana, w słowach kluczowych oznaczających instrukcje języka CUPL nie. Nazwy indeksowane Nazwy indeksowane można używać do opisu grupy sygnałów, np. magistrali. Maja postać identyfikatora, do którego dołączony jest indeks w postaci liczby dziesiętnej z przedziału 31, np.: A, A1, A2, A3, A4, A5, A6, A7 Ze względu na wewnętrzną reprezentację wektorów bitowych wskazane jest rozpoczynanie numeru indeksu od. Liczby Wszystkie operacje numeryczne wykonywane są na liczbach 32-bitowych bez znaku, stąd ich zakres wynosi od do 2 32 1. Zapis liczby możliwy jest w bazie dwójkowej, ósemkowej, dziesiętnej oraz szesnastkowej poprzez użycie odpowiedniego przedrostka: b / o / d / h. Np. Zapis Baza Wartość dziesiętna 'b' Binary 'B'111 Binary 13 'O'663 Octal 435 'D'92 Decimal 92 'h'ba Hexadecimal 186 Bazą domyślną jest zapis szesnastkowy za wyjątkiem numerów wyprowadzeń (PIN) oraz numerów indeksowych, które zawsze podawane są dziesiętnie. W niektórych konstrukcjach językowych w zapisach dwójkowych, ósemkowych oraz szesnastkowych można używać symbolu X dla oznaczenia wartości nieokreślonej.

J. Sugier WinCUPL instrukcja laboratoryjna 3 Listy Lista jest wygodną notacją używaną np. przy deklaracji wielu wyprowadzeń lub węzłów. Ma postać oddzielanego przecinkami ciągu nazw, ujętych w parę nawiasów kwadratowych: [zm, zm, zm] np. [ Clk, A, B, Cin ] Jeśli lista składa się z nazw indeksowych o kolejnych numerach indeksów, można użyć zapisu skrótowego: [zmk.. zml] gdzie K / L są odpowiednio pierwszym i ostatnim numerem w zakresie indeksu (nie jest wymagane, aby K < L). Można wówczas pominąć nazwę zmiennej przed indeksem końcowym L: [A, A1, A2, A3, A4, A5, A6, A7] [A..A7] [A..7] Deklaracje wyprowadzeń (PIN) W deklaracji PIN następuje przypisanie nazwy do sygnału na wyprowadzeniu o podanym numerze oraz określenie jego polaryzacji. Składnia: PIN pin_n = [! ] zm ; gdzie: PIN jest wymaganym słowem kluczowym, pin_n jest zapisanym dziesiętnie numerem wyprowadzenia obudowy, a zm jest nazwą przypisanego sygnału. Występujący opcjonalnie znak negacji! określa polaryzację ujemną (stan aktywny = logiczne). Podobnie jak w języku C, znakiem końcowym musi być średnik. Elementy pin_n oraz zm można zapisać w postaci list o tej samej długości. Przykłady: PIN 1 = Clk; PIN [ 2, 5, 6 ] = [ A, B, C ]; PIN [ 1..7 ] = [ A3.. ]; Deklaracje węzłów (NODE) Niektóre układy PLD zawierają zasoby wewnętrzne, które generują funkcje logiczne, ale nie są przypisane do wyprowadzeń zewnętrznych. Dostęp do nich jest możliwy poprzez zdefiniowanie tzw. węzłów wewnętrznych w poleceniu NODE: NODE [!] zm ; Liczba węzłów wewnętrznych oraz ich funkcje to dane specyficzne dla konkretnego układu i aby je poznać należy odwołać się do jego opisu. W prostych układach PLD używanych na laboratorium (G16V8, G22V1) węzły wewnętrzne nie występują. Pola bitowe Deklaracja pola bitowego przypisuje nazwę do listy sygnałów jednobitowych. Ma postać: FIELD zm = [zm, zm, zm] ; Po taki przypisaniu nazwa może występować w wyrażeniach tak, jakby w jej miejscu wystąpił odpowiedni zapis listy, a operacje wykonywane na niej są wykonywane na każdym bicie z przypisanej grupy.

J. Sugier WinCUPL instrukcja laboratoryjna 4 Preprocesor Podobnie jak w języku C, preprocesor przetwarza tekst źródłowy przed przekazaniem go do kompilatora CUPL. Rozpoznaje on następujące dyrektywy ([1]): $DEFINE $IFDEF $UNDEF $ELSE $IFNDEF $REPEAT $ENDIF $INCLUDE $REPEND $MACRO $MEND Np. dla nadawania stałym czytelnych nazw symbolicznych należy używać dyrektywy $DEFINE: $DEFINE StateA b $DEFINE StateB b 1 $DEFINE StateC b 11 $DEFINE StateD b 1 W dyrektywach preprocesora wielkie i małe litery nie są rozróżniane, ale zwykle pisze się je wielkimi literami podobnie jak słowa kluczowe języka. 2.2 Składnia języka Operatory logiczne Do zapisu wyrażeń logicznych w języku CUPL dostępne są cztery podstawowe operatory, każdy o innym priorytecie. W kolejności od priorytetu najwyższego są to:! np.!a NOT & A & B AND # A # B OR $ A $ B XOR W wyrażeniach złożonych wymaganą kolejność operacji określa się nawiasami ( ). Dwuargumentowe operatory logiczne mogą występować obok notacji listowej wg następujących reguł: (A) [zm, zm zm] @ arg2 [zm @ arg2, zm @ arg2 zm @ arg2] (B) [z1, z1 z1] @ [z2, z2 z2] [z1 @ z2, z1 @ z2 z1 @ z2] (C) [zm, zm zm] : @ zm @ zm @ zm Symbol @ oznacza tu operator &, # lub $. Przykłady: [D, D1, D2, D3] & read [D & read, D1 & read, D2 & read, D3 & read] [A..3] $ [B..3] [A $ B, A1 $ B1, A2 $ B2, A3 $ B3] [A3,A2,A1,A]:$ A3 $ A2 $ A1 $ A Operatory i funkcje arytmetyczne Wyrażenia arytmetyczne mogą wystąpić jedynie w poleceniach preprocesora $REPEAT (powielanie fragmentu tekstu) oraz $MACRO (tworzenie makr). Szczegóły podane są w [1].

J. Sugier WinCUPL instrukcja laboratoryjna 5 Przyrostki nazw (rozszerzenia) Przyrostki dodawane są do nazw, aby wskazać specyficzna funkcję, związaną z realizacją danego sygnału. Kompilator sprawdza, czy podany przyrostek jest odpowiedni jako funkcja sygnału w konkretnym układzie i na konkretnym wyprowadzeniu oraz czy nie pozostaje on w konflikcie z innymi użytymi przyrostkami. W przypadku błędów generowany jest odpowiedni komunikat. Pełna lista przyrostków podana jest w dodatku C. Przykład użycia przyrostków: S.D = A $ B; /* funkcja zatrzaskiwana w rejestrze */ S.AR = R; /* asynchroniczne kasowanie sygnałem R */ S.OE = E &!R; /* kontrola bufora WY sygnałami E oraz R */ Użycie przyrostków musi być w zgodzie z możliwościami struktury wybranego układu. Np. w układach 22V1 sygnał.ar jest wspólny dla wszystkich przerzutników (zatem nie można definiować go dwukrotnie w różny sposób) oraz musi mieć postać pojedynczego prostego termu. Niespełnienie tych wymogów powoduje wygenerowanie błędu. W układach 16V8 oraz 22V1 sygnały zegarowe przerzutników nie są programowalne i zastosowanie dla nich przyrostka.ck spowoduje błąd. Wyrażenia logiczne Wyrażenia logiczne są konstruowane przy użyciu wymienionych czterech operatorów, nazw zmiennych oraz par nawiasów ( ). Jeśli w wyrażeniu złożonym na jednym jego poziomie występują te same operatory, kolejność ich wykonania jest od strony lewej do prawej (tzn. operatory są lewostronnie łączne). 2.3 Opis zależności kombinacyjnych Układ kombinacyjny można opisać podając jego równanie boolowskie, tabelę prawdy lub opisując jego pracę na wyższym poziomie instrukcją CONDITION. Równania logiczne Ogólna postać równania logicznego jest następująca: [!]zm[.ext] = wyr ; gdzie zm jest zmienną, której równanie jest przypisywane,.ext oznacza opcjonalne rozszerzenie precyzujące aspekt działania zmiennej, a wyr jest wyrażeniem logicznym. Nazwę zmiennej można poprzedzić!, co określa jej ujemną polaryzację (w tym kontekście daje to efekt identyczny, jak zanegowanie wyrażenia stojącego po prawej stronie znaku = ). Przykład użycia przyrostków (powyżej) zawiera także przykłady równań logicznych. Jeśli zm nie jest nazwą zadeklarowaną uprzednio w instrukcji PIN lub NODE, kompilator automatycznie przyjmuje, że równanie definiuje nową zmienną wewnętrzną, do której można się odwoływać w innych wyrażeniach logicznych. Zmienne wewnętrzne zazwyczaj wprowadza się po to, aby uprościć i uczynić bardziej czytelnym zapis innych wyrażeń. W miejscu zm może w równaniu wystąpić notacja listowa; w takim wypadku równanie logiczne stosuje się do każdego elementu listy indywidualnie, np.:

J. Sugier WinCUPL instrukcja laboratoryjna 6 [Q2..].OE =!PinOE; Q2.OE =!PinOE; Q1.OE =!PinOE; Q.OE =!PinOE; Instrukcja APPEND, która może poprzedzać równanie logiczne, umożliwia konstruowanie opisu zmiennej etapami poprzez dodawanie kolejnych członów, które są ze sobą logicznie sumowane. Np.: APPEND Y = A & A1 ; APPEND Y = B & B1 ; Y = (A & A1) # (B & B1) # (C & C1) ; APPEND Y = C & C1 ; W takiej sytuacji pierwsze równanie dla zmiennej Y nie musi być poprzedzone słowem APPEND, ale kolejne - tak. Mechanizm polecenia APPEND jest niekiedy konieczny w opisach proceduralnych układu cyfrowego. Tabele prawdy Proste funkcje kombinacyjne można opisać podając ich tabelę prawdy. Składnia odpowiedniego polecenia jest następująca: TABLE lista_zmwe => lista_zmwy { WE_ => WY_ ; WE_N => WY_N ; } gdzie: lista_zmwe oraz lista_zmwy to listy zmiennych wejściowych i wyjściowych funkcji, a WE_i oraz WY_i to stałe opisujące kolejne wiersze tabeli prawdy, czyli argumenty oraz przyporządkowane im wartości. Przykład: TABLE [ A, B ] => Y /* Y = A XNOR B */ { b => b 1; b 1 => b ; b 1 => b ; b 11 => b 1; } Instrukcja CONDITION Instrukcja CONDITION służy do opisu funkcji kombinacyjnych na wyższym poziomie niż równania logiczne. Ma postać: CONDITION { IF wyr OUT zm ; IF wyrn OUT zmn ; [ DEFAULT OUT zmm ; ] } gdzie: wyrx jest wyrażeniem logicznym złożonym ze zmiennych wejściowych funkcji, a zmx jest nazwą zadeklarowaną w instrukcji PIN lub grupą takich nazw zapisanych w notacji listowej. Zapis taki oznacza, że zmienna zmx ma być ustawiona w stan

J. Sugier WinCUPL instrukcja laboratoryjna 7 aktywny (jeden lub zero w zależności od polaryzacji logicznej podanej w deklaracji PIN), gdy spełniony jest warunek wyrx; jeśli żaden z warunków nie jest spełniony, układ ustawia wyjścia wg opcjonalnej instrukcji DEFAULT. Należy zaznaczyć, że powyższy opis podaje tylko te sytuacje, w których zmienne są ustawiane; jeśli dla jakiegoś pobudzenia WE zmienna jest kasowana, nie zapisuje się tego w instrukcji CONDITION (tzn. zabroniony jest zapis OUT!zmX). Przykład opisu dekodera 2:4 z sygnałem Enable: PIN [1,2] = [A,B] ; /* Data Inputs */ PIN 3 =!enable ; /* Enable Input */ PIN [12..15] = [Y..3] ; /* Decoded Outputs */ CONDITION { IF enable &!B &!A OUT Y ; IF enable &!B & A OUT Y1 ; IF enable & B &!A OUT Y2 ; IF enable & B & A OUT Y3 ; } 2.4 Opis układów sekwencyjnych Maszyny stanów opisywane są w języku CUPL za pomocą instrukcji SEQUENCE. Jej ogólna postać jest następująca: SEQUENCE lista_zm_stanu { PRESENT stan instrukcje; PRESENT stann instrukcje; } gdzie: lista_zm_stanu jest listą zmiennych kodujących stan automatu, stanx identyfikuje konkretny stan (tzn. jest stałą podającą wartość zmiennych stanu), a instrukcje opisują zachowanie automatu w tym stanie. Specyfikacja przełączania automatu Przełączanie się automatu między stanami opisują instrukcje NEXT, które występują w wersji bezwarunkowej lub warunkowej. Jeśli dla stanu bieżącego stanem następnym jest zawsze jeden i ten sam stan (czyli w grafie automatu ze stanu wychodzi tylko jedna krawędź), opisuje to instrukcja NEXT bezwarunkowa: PRESENT stank NEXT stanl ; Np. pracę prostego licznika modulo 3 (tu układ bez wejść) można wyrazić następująco: SEQUENCE [Q1, Q] { PRESENT 'b' NEXT 'b'1 ; PRESENT 'b'1 NEXT 'b'1 ;

J. Sugier WinCUPL instrukcja laboratoryjna 8 PRESENT 'b'1 NEXT 'b' ; } Dla zwiększenia czytelności należy za pomocą dyrektywy $DEFINE definiować nazwy symboliczne dla stałych, które reprezentują poszczególne stany; najczęściej definiuje się także pole bitowe FIELD dla listy zmiennych stanu. Powyższy przykład należy więc przepisać następująco: FIELD zmstan = [Q1, Q]; $DEFINE Stan 'b' $DEFINE Stan1 'b'1 $DEFINE Stan2 'b'1 SEQUENCE zmstan { PRESENT Stan NEXT Stan1 ; PRESENT Stan1 NEXT Stan2 ; PRESENT Stan2 NEXT Stan ; } Warunkowa instrukcja NEXT opisuje przełączanie się automatu uzależnione od pobudzeń wejściowych: PRESENT stank IF warunek NEXT stanl ; gdzie warunek jest wyrażeniem logicznym, w którym zazwyczaj występują pobudzenia WE automatu. W sytuacji, gdy ze stanu stank wychodzi w grafie wiele krawędzi, dla każdej z nich należy zapisać odpowiednią warunkową instrukcję NEXT. Np. dla licznika rewersyjnego, którego kierunek zliczania określa sygnał jednobitowy CountUp: ( ) PRESENT Stan1 IF CountUp NEXT Stan2 ; IF!CountUp NEXT Stan ; ( ) Listę warunkowych instrukcji NEXT może opcjonalnie kończyć instrukcja DEFAULT stanx ;, która podaje do jakiego stanu automat ma się przełączyć, jeśli żaden z wcześniejszych warunków nie jest spełniony. Np. dla licznika rewersyjnego z dwoma sygnałami sterującymi CountUp oraz CountDown: ( ) PRESENT Stan1 IF CountUp NEXT Stan2 ; /* step up */ IF CountDown NEXT Stan ; /* step down */ DEFAULT Stan1 ; /* freeze */ ( ) Instrukcję DEFAULT należy stosować rozważnie, ponieważ powoduje ona dodanie warunku będącego negacją sumy wszystkich warunków wcześniejszych. W przypadku dużych automatów może prowadzić do zależności złożonych, które będą się źle odwzorowywały w zasobach układu

J. Sugier WinCUPL instrukcja laboratoryjna 9 PLD. Metodą lepszą jest wypisanie explicite dodatkowych warunków w postaci jawnych instrukcji IF NEXT ;. Specyfikacja funkcji wyjść automatu Sygnały wyjściowe generowane przez automat opisuje instrukcja OUT. Sygnały te po obliczeniu w odpowiednim wyrażeniu logicznym mogą być wyprowadzane kombinacyjnie lub zatrzaskiwane w przerzutnikach mówi się wówczas odpowiednio o instrukcji OUT asynchronicznej bądź synchronicznej. Ponadto sygnały te mogą zależeć tylko od zmiennych stanu (model Moore a) lub od zmiennych stanu oraz sygnałów wejściowych (model Mealy ego) w nomenklaturze CUPL będą to sygnały wyjściowe odpowiednio bezwarunkowe oraz warunkowe. (A) Asynchroniczne WY bezwarunkowe (model Moore a) Polecenie OUT należy umieścić w instrukcjach związanych z odpowiednim stanem, bez żadnych dodatkowych informacji. Zapis: PRESENT stank OUT zm... OUT zm ; oznacza, że w stanie stank będą ustawiane zmienne wymienione po słowach OUT. Uwaga: jeśli jakaś zmienna WY ma być w danym stanie kasowana, nie występuje na liście; w tym kontekście (podobnie jak dla instrukcji CONDITION) nie jest dopuszczalne używanie notacji OUT!zm ; Np. dla PRESENT b 1 /* FIELD zmstan = [Q1, Q]; */ OUT Y OUT Z ; zostanie automatycznie dodany opis sygnałów Y, Z: APPEND Y =!Q1 & Q; APPEND Z =!Q1 & Q; (B) Asynchroniczne WY warunkowe (model Mealy ego) Polecenia OUT należy poprzedzić klauzulami warunkowymi IF, testującymi stan pobudzeń WE. Powstają w ten sposób dwa rodzaje warunków IF dla każdego stanu: pierwsze opisują przełączanie się stanu (z instrukcjami NEXT), drugie opisują generowanie sygnałów WY (z instrukcjami OUT). Zapis: PRESENT stank IF wyr OUT zm... OUT zm ; IF wyr OUT zm... OUT zm ; [ DEFAULT OUT zm... OUT zm ; ] podaje, jakie zmienne WY będą ustawiane w stanie stank przy spełnieniu odpowiednich warunków logicznych wyr. Opcjonalna instrukcja DEFAULT opisuje stan wyjść gdy żaden z warunków nie będzie spełniony. Podobnie jak w (A), jeśli jakaś zmienna WY ma być dla danego warunku zerowana, nie występuje na liście.

J. Sugier WinCUPL instrukcja laboratoryjna 1 Np. dla: PRESENT 'b'1 IF INA OUT Y; IF!INA OUT Z; zostanie wygenerowany opis sygnałów Y, Z: APPEND Y =!Q1 & Q & INA; APPEND Z =!Q1 & Q &!INA; (C) Synchroniczne WY bezwarunkowe (model Moore a + WY z przerzutnikami) W tym przypadku opis WY dokonuje się w instrukcji NEXT: PRESENT stank NEXT stanl OUT [!]zm... OUT [!]zm ; Odmiennie niż w (A) i (B), nazwy sygnałów WY można poprzedzić operatorem negacji, co powoduje ustawianie ich na wartość zamiast 1. Np. dla PRESENT 'b'1 NEXT 'b'1 OUT Y OUT!Z ; zostanie wygenerowany opis sygnału Y (w przypadku korzystania z przerzutnika typu D opis zmiennej Z nie zostanie wygenerowany): APPEND Y.D =!Q1 & Q; /* brak nowego opisu dla sygnału Z */ (D) Synchroniczne WY warunkowe (model Mealy ego + WY z przerzutnikami) W tym przypadku polecenia OUT należy umieszczać w warunkowych instrukcjach NEXT, opisujących przełączanie się automatu: PRESENT stank IF wyr NEXT stanl OUT [!]zm... OUT [!]zm ; IF wyr NEXT stanl OUT [!]zm... OUT [!]zm ; [ DEFAULT NEXT stanl OUT [!]zm... OUT [!]zm ; ] Podobnie jak w (C), poprzedzenie nazwy sygnału WY operatorem negacji oznacza jego ujemną polaryzację logiczną. Np. dla: PRESENT 'b'1 IF INA NEXT 'b'1 OUT Y; IF!INA NEXT 'b'11 OUT Z; zostanie dodany opis sygnałów Y, Z: APPEND Y.D =!Q1 & Q & INA; APPEND Z.D =!Q1 & Q &!INA;

J. Sugier WinCUPL instrukcja laboratoryjna 11 3 Praca w środowisku WinCUPL Aplikacja Wincupl.exe jest głównym interfejsem pracy ze środowiskiem. Umożliwia edycje tekstu plików źródłowych oraz wywołuje inne narzędzia pakietu, takie jak kompilator CUPL oraz symulator WinSim. Plikami źródłowymi (których tekst przygotowuje użytkownik) są: plik.pld dla kompilatora oraz plik.si dla symulatora. 3.1 Aplikacja WinCupl Za pomocą aplikacji WinCupl można tworzyć nowe projekty, wprowadzać tekst źródłowy, poddawać go kompilacji oraz wywoływać symulator. Opis kroków, które składają się na te operacje, podany jest w podpunkcie 3.3. Szczegóły dotyczące dostępnych poleceń menu dostępne są w systemie pomocy, ale standardowy interfejs okienkowy tej aplikacji jest na tyle prosty, że poruszanie się w nim nie powinno sprawiać problemu. Tekst źródłowy w pliku.pld należy przygotować zgodnie z opisem języka CUPL, podanym w rozdziale 2. 3.2 Aplikacja WinSim Aplikacja WinSim umożliwia symulację funkcjonalną projektu opisanego w języku CUPL. Do jej pracy konieczne jest utworzenie pliku.si, w którym zapisuje się pobudzenia testowe symulacji. Treść pliku.si składa się z dwóch części (por. przykładowe pliki w dodatku B na str. 16): blok nagłówka - ma postać identyczną jak nagłówek pliku.pld projektu; blok instrukcji - opisuje symulację układu. Instrukcja ORDER Instrukcja ORDER podaje, jakie sygnały projektu mają uczestniczyć w symulacji: ORDER: zm, zm, zm ; Dla grupy sygnałów indeksowych można użyć skrótowej notacji listowej, w tym przypadku bez pary nawiasów [ ], np.: ORDER: Clk, Reset, Q..7; Grupy sygnałów zapisane w notacji listowej są wyświetlane w oknie WinSim jako jeden sygnał (magistrala); aby zobaczyć poszczególne składowe należy zaznaczyć nazwę sygnału, kliknąć na nią prawym klawiszem myszy oraz wybrać opcję Bus Members. Instrukcja VECTORS Instrukcja VECTORS: rozpoczyna część pliku.si, w której podany jest ciąg wektorów z pobudzeniami testowymi. W wektorach należy podać odpowiedni symbol dla każdego sygnału z listy ORDER, zarówno wejściowego, jak i wyjściowego. Symbole dla sygnałów WE określają ich pobudzenia podczas symulacji, natomiast symbole dla sygnałów WY podają oczekiwane odpowiedzi. Symbole dla sygnałów wejściowych (zadawane pobudzenia): zadaj stan niski (Lo) 1 zadaj stan wysoki (Hi) C zadaj impuls dodatni (sekwencję stanów Lo - Hi Lo)

J. Sugier WinCUPL instrukcja laboratoryjna 12 Rysunek 1: Symulacja układu sekwencyjnego wykonana poleceniami C (kroki 1 1) oraz identyczny ciąg wejściowy zadany przy pobudzaniu sygnału zegarowego poleceniami / 1 (kroki 11 3). Trzy odpowiedzi układu Y = 1 nie są takie same, co widać dopiero w symulacji CLK = / 1. K zadaj impuls ujemny (sekwencję stanów Hi - Lo Hi) X brak pobudzenia danego WE Symbole dla sygnałów wyjściowych (testy odpowiedzi): L testuj stan niski (L) H testuj stan wysoki (H) Z testuj stan wysokiej impedancji X nie testuj stanu * wyznacz w symulacji stan sygnału i wstaw go do wektora Przykład: ORDER: WeA, WeB, WyC, WyS; VECTORS: ** 1** 11** 1** Symbole C oraz K są wygodne w tworzeniu pobudzeń sygnałów zegarowych, ale należy pamiętać, że generują one ciąg 3 stanów w symulacji, a na wykresie wyświetlany jest tylko jeden krok przedstawiający odpowiedzi. W niektórych przypadkach, kiedy potrzebna jest dokładna analiza przełączania się układu, może być konieczne zastąpienie ich ciągiem pobudzeń pojedynczych. Przykład takiej sytuacji ilustruje rysunek 1. Dyrektywy symulatora Dyrektywy można umieszczać w liniach za instrukcją VECTOR i służą do kontroli procesu symulacji. Wszystkie rozpoczynają się znakiem $ i kończą średnikiem. Pełna lista 6 dyrektyw podana jest w [1]. Szczególnie użyteczna może być dyrektywa $REPEAT n ; gdzie n jest liczbą z przedziału 1..9999, która powoduje n krotne powtórzenie (jednego) zapisanego za nią wektora.

J. Sugier WinCUPL instrukcja laboratoryjna 13 3.3 Przewodnik krok po kroku Poniższe 1 kroków opisuje pełną ścieżkę pracy w środowisku WinCUPL: od utworzenia nowego projektu po uzyskanie wyników symulacji. Wymagane polecenia opisano w najprostszej wersji, natomiast w zintegrowanym środowisku istnieją inne, niekiedy bardziej wygodne możliwości ich wykonania (np. symulator można uruchomić klikając dwukrotnie na nazwę pliku.si w oknie projektu WinCupl itp.). 1) Uruchom program WinCupl i wybierz polecenie File New Project. 2) W pierwszym oknie dialogowym wpisz informacje, jakie znajdą się w nagłówku pliku.pld; z informacji istotnych: jako Name podaj nazwę projektu, która będzie jednocześnie nazwą pliku (zaleca się, by nazwa nie miała więcej niż 8 znaków i spełniała wymagania nazw DOS); jako Device wpisz symbol układu (dla układów GAL: G16V8 lub G22V1). Układy PLD dostępne w bibliotece CUPL można przeglądać poleceniem Options Devices. 3) W kolejnych oknach dialogowych podaj parametry projektu: ilość wyprowadzeń WE, ilość wyprowadzeń WY oraz ilość węzłów wewnętrznych (w układach GAL węzły wewnętrzne nie występują). 4) Zostanie utworzony plik.pld z pustym szablonem; wpisz do niego deklaracje wyprowadzeń WE oraz WY (instrukcje PIN) oraz równania logiczne lub inny opis funkcjonalny układu. Podawane numery wyprowadzeń w deklaracji PIN muszą zgadzać się z rodzajem wyprowadzenia (WE, WY lub WE/WY) dla użytego układu; funkcje poszczególnych wyprowadzeń należy odczytywać z jego schematu logicznego. 5) Gdy opis układu będzie kompletny, wykonaj kompilację pliku PLD (polecenie Run Device Dependent Compile, skrót F9 lub klawisz ); gdy kompilacja przebiegnie bez błędów, możesz przejść dalej. 6) Uruchom symulator: polecenie Utilities WinSim lub klawisz. Nie należy uruchamiać symulatora bez uprzedniej kompilacji projektu; praca symulatora zależy od dodatkowych plików generowanych podczas kompilacji i ich brak będzie powodował błędy. Uwaga ta dotyczy także wprowadzania poprawek do projektu: należy pamiętać, aby po modyfikacji pliku.pld lub.si zawsze wykonać kompilację przed wywołaniem WinSim. 7) W symulatorze WinSim rozpocznij od utworzenia pliku.si poleceniem File New (Ctrl+N). W oknie dialogowym, zamiast wprowadzać ponownie takie same informacje jak dla pliku.pld (dane w nagłówkach obu plików muszą być identyczne), naciśnij klawisz Desing File i wskaż odpowiedni plik.pld. Po zatwierdzeniu danych w symulatorze pojawi się okno symulacji. 8) Dodaj śledzone sygnały poleceniem Signal Add Signal (klawisz ); w pliku.si zostanie dopisana instrukcja ORDER. Następnie zapisz plik poleceniem File Save (zostanie utworzony nowy plik). 9) Dodaj wektory testowe, tzn. instrukcję VECTORS. Można to wykonać poprzez interfejs graficzny (polecenie Signal Add Vector lub klawisz i następnie

J. Sugier WinCUPL instrukcja laboratoryjna 14 klikanie myszką w odpowiedni punkt wykresu), ale bardziej niezawodną i zalecaną metodą jest wpisanie ich jako tekst do pliku.si po otwarciu go poleceniem View Source. Pamiętaj o zapisaniu zmian w pliku.si. 1) Gdy plik.si jest gotowy, uruchom symulator poleceniem Simulator Run Simulator (klawisz ). Jeśli w plikach źródłowych nie było błędów, w oknie symulatora zostaną wyświetlone wykresy z przebiegami czasowymi w układzie. Literatura [1] CUPL Programmer's Reference Guide, Atmel Corporation (wersja elektroniczna w systemie pomocy aplikacji wincupl.exe). [2] T. Łuba, M.A. Markowski, B. Zbierzchowski, Komputerowe projektowanie układów cyfrowych w strukturach PLD, WKŁ. [3] Atmel WinCUPL User s manual, Atmel Corporation, dokument dostępny jako plik pdf na www.atmel.com. [4] Pliki pomocy aplikacji WinCupl oraz WinSim.

J. Sugier WinCUPL instrukcja laboratoryjna 15 Dodatek A: Środowisko CUPL Input file types:.pld Logic source file.si Simulation source file Output file types:.so Simulator Output with errors.hl HL Download file.hex Hex Download file.jed JEDEC file without test vectors JEDEC file with test vectors

J. Sugier WinCUPL instrukcja laboratoryjna 16 Dodatek B: Przykłady plików projektowych 1) HalfAdd.PLD: Name HalfAdd; PartNo ; Date 26-2-16 ; Revision 1 ; Designer Engineer ; Company PWr ; Assembly None ; Location None; Device G16V8 ; /* *************** INPUT PINS *********************/ PIN 2 = A; PIN 3 = B; /* *************** OUTPUT PINS *********************/ PIN 15 = S; /* sum */ PIN 16 = C; /* carry */ S = A $ B; /* S = A XOR B */ C = A & B; /* C = A AND B */ HalfAdd.SI: Name _HAdd; PartNo ; Date 26-2-16; Revision 1; Designer Engineer; Company PWr; Assembly None; Location None; Device G16V8; ORDER: A, B, C, S; VECTORS: ** 1** 11** 1**

J. Sugier WinCUPL instrukcja laboratoryjna 17 2) Johnson.PLD: Name Johnson ; PartNo ; Date 26-2-27 ; Revision 1 ; Designer Engineer ; Company PWr ; Assembly None ; Location ; Device G22V1 ; /* *************** INPUT PINS *********************/ PIN 1 = Clk; /* clock */ PIN 2 = Reset; /* control */ /* *************** OUTPUT PINS *********************/ PIN [23..16] = [Q7..]; /* outputs */ Q.D =!Q7; Q1.D = Q; Q2.D = Q1; Q3.D = Q2; Q4.D = Q3; Q5.D = Q4; Q6.D = Q5; Q7.D = Q6; [Q..7].AR = Reset; Johnson.SI: Name Johnson; PartNo ; Date 26-2-27; Revision 1; Designer Engineer; Company PWr; Assembly None; Location ; Device G22V1; ORDER: Reset, Clk, Q..7; VECTORS: 1C******** $REPEAT 11; C******** 1C******** 1C******** $REPEAT 3; C********

J. Sugier WinCUPL instrukcja laboratoryjna 18 3) 11_ML.PLD: Name 11_ML ; /* Detektor sekwencji 11 w wersji Mealy */ PartNo ; Date 26-3-1 ; Revision 1 ; Designer Engineer ; Company PWr ; Assembly None ; Location ; Device G16V8 ; /* *************** INPUT PINS *********************/ PIN 1 = Clk; PIN 2 = X; /* WE */ /* *************** OUTPUT PINS *********************/ PIN [12, 13] =![Q1, Q]; /* Stan */ PIN 14 = Y; /* WY */ FIELD Stan = [Q1, Q]; $DEFINE StanA 'b' $DEFINE StanB 'b'1 $DEFINE StanC 'b'11 SEQUENCE Stan { PRESENT StanA IF!X NEXT StanB; IF X NEXT StanA; PRESENT StanB IF!X NEXT StanB; IF X NEXT StanC; PRESENT StanC IF!X NEXT StanB; IF X NEXT StanA; IF X OUT Y; } 11_ML.SI: Name 11_ML; PartNo ; Date 26-3-1; Revision 1; Designer Engineer; Company PWr; Assembly None; Location ; Device G16V8;

J. Sugier WinCUPL instrukcja laboratoryjna 19 ORDER: Clk, X, Q1, Q, Y; VECTORS: C*** C*** C*** 4) 11_MR.PLD: Name 11_MR ; /* Detektor sekwencji 11 w wersji Moore */ PartNo ; Date 26-3-1 ; Revision 1 ; Designer Engineer ; Company PWr ; Assembly None ; Location ; Device G16V8 ; /* *************** INPUT PINS *********************/ PIN 1 = Clk; PIN 2 = X; /* WE */ /* *************** OUTPUT PINS *********************/ PIN [12, 13] =![Q1, Q]; /* Stan */ PIN 14 = Y; /* WY */ FIELD Stan = [Q1, Q]; $DEFINE StanA 'b' $DEFINE StanB 'b'1 $DEFINE StanC 'b'11 $DEFINE StanD 'b'1 SEQUENCE Stan { PRESENT StanA IF!X NEXT StanB; IF X NEXT StanA; PRESENT StanB IF!X NEXT StanB; IF X NEXT StanC;

J. Sugier WinCUPL instrukcja laboratoryjna 2 } PRESENT StanC IF!X NEXT StanB; IF X NEXT StanD; PRESENT StanD IF!X NEXT StanB; IF X NEXT StanA; OUT Y; 11_MR.SI: Name 11_MR; PartNo ; Date 26-3-1; Revision 1; Designer Engineer; Company PWr; Assembly None; Location ; Device G16V8; ORDER: Clk, X, Q1, Q, Y; VECTORS: C*** C*** C***

J. Sugier WinCUPL instrukcja laboratoryjna 21 Dodatek C: Rozszerzenia nazw w języku CUPL Uwaga: kolumna Poz. podaje, czy dany przyrostek występuje w równaniu przy nazwie znajdującej się po lewej (L) bądź po prawej (R) stronie znaku =. Nazwa Poz. Opis.AP L Asynchronous preset of flip-flop.ar L Asynchronous reset of flip-flop.apmux L Asynchronous preset multiplexer selection.armux L Asynchronous reset multiplexer selection.byp L Programmable register bypass.ca L Complement array.ce L CE input of enabled D-CE type flip-flop.ck L Programmable clock of flip-flop.ckmux L Clock multiplexer selection.d L D nput of D-type flip-flop.dfb R D registered feedback path selection.dq R Q output of D-type flip-flop.imux L Input multiplexer selection of two pins.int R Internal feedback path for registered macrocell.io R Pin feedback path selection.ioar L Asynchronous reset for pin feedback register.ioap L Asynchronous preset for pin feedback register.iock L Clock for pin feedback register.iod R Pin feedback path through D register.iol R Pin feedback path through latch.iosp L Synchronous preset for pin feedback register.iosr L Synchronous reset for pin feedback register.j L J input of JK-type output flip-flop.k L K input of JK-type output flip-flop.l L D input of transparent latch.le L Programmable latch enable.lemux L Latch enable multiplexer selection.lfb R Latched feedback path selection.lq R Q output of transparent input latch.obs L Programmable observability of buried nodes.oe L Programmable output enable.oemux L Tri-state multiplexer selection.pr L Programmable preload.r L R input of SR-type output flip-flop.s L S input of SR-type output flip-flop.sp L Synchronous preset of flip-flop.sr L Synchronous reset of flip-flop.t L T input of toggle output flip-flop.tec L Technology-dependent fuse selection.tfb R T registered feedback path selection.t1 L T1 input of 2-T flip-flop.t2 L T2 input of 2-T flip-flop

J. Sugier WinCUPL instrukcja laboratoryjna 22 Dodatek D: Schematy logiczne wybranych układów PALCE22V1 and PALCE22V1Z Families CLK/I 1 (2) 1 3 4 7 8 11 12 15 16 19 2 23 24 27 28 31 32 35 36 39 4 43 AR 1 24 (28) V CC 9 D AR Q Q SP 1 1 1 23 I/O 9 (27) 1 1 1 2 D AR Q Q SP 1 1 1 22 I/O 8 (26) I 1 2 (3) 21 1 1 33 D AR Q Q SP 1 1 1 21 I/O 7 (25) I 2 3 (4) 34 1 1 48 D AR Q Q SP 1 1 1 2 I/O 6 (24) I 3 4 ( 5 ) 49 1 1 D AR Q Q SP 1 1 1 19 I/O 5 (23) I 4 5 ( 6 ) 65 66 1 1 D AR Q Q SP 1 1 1 18 I/O 4 (21) I 5 6 ( 7 ) 82 83 1 1 97 D AR Q Q SP 1 1 1 17 I/O 3 (2) I 6 7 ( 9 ) 98 1 1 11 D AR Q Q SP 1 1 1 16 I/O 2 (19) I 7 8 ( 1 ) 111 1 1 121 D AR Q Q SP 1 1 1 15 I/O 1 (18) I 8 9 ( 11 ) 122 1 1 13 D AR Q Q SP 1 1 1 14 I/O (17) I 9 1 ( 12 ) 131 SP 1 I 1 G N D 11 ( 13 ) 12 ( 14 ) 3 4 7 8 11 12 15 16 19 2 23 24 27 28 31 32 35 36 39 4 43 13 I 11 (16) 16564E-6

J. Sugier WinCUPL instrukcja laboratoryjna 23 Schemat blokowy układu PALCE22V1 Schemat logiczny makrokomórki Rozkład wyprowadzeń układu PALCE22V1

J. Sugier WinCUPL instrukcja laboratoryjna 24 PALCE16V8 1 3 4 7 8 11 12 15 16 19 2 23 24 27 28 31 V CC 2 2 32 64 96 128 16 192 224 MC7 CL1=248 CL=212 PTD=2128-2135 19 3 256 288 32 352 384 416 448 48 MC6 CL1=249 CL=2121 PTD=2136-2143 18 4 512 544 576 68 64 672 74 736 MC5 CL1=25 CL=2122 PTD=2144-2151 17 5 768 8 832 864 896 928 96 992 MC4 CL1=251 CL=2123 PTD=2152-2159 16 6 124 18 115 121 156 8 112 2 1184 6 1248 MC3 CL1=252 CL=2124 PTD=216-2167 15 7 128 1312 1344 1376 148 1472 144 154 MC2 CL1=253 CL=2125 PTD=2168-2175 14 8 1536 1568 16 1632 1664 1696 1728 176 MC1 CL1=254 CL=2126 PTD=2176-2183 13 9 1792 1824 1856 1888 192 1984 1952 216 MC CL1=255 CL=2127 PTD=2184-2191 12 1 3 4 7 8 11 12 15 16 19 2 23 24 27 28 31 11

J. Sugier WinCUPL instrukcja laboratoryjna 25 Schemat blokowy układu PALCE16V8 Schemat logiczny makrokomórki Tryby konfiguracji