GAL'e - technologia obróbki

Podstawy FPGA, a może nie tylko podstawy?
Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

GAL'e - technologia obróbki

Postautor: gaweł » czwartek 01 lis 2018, 17:17

Układy GAL

Jakiś czas temu [tutaj] dałem się namówić
do dywagacji na temat układów GAL,
czas się wywiązać o obietnic.


Działaniom towarzyszyła mi całkiem spokojna muza,
bo ponad wszystko najważniejszy jest spokój...:
https://www.youtube.com/watch?v=i8A849ZvOAE


Jest kilka narzędzi dedykowanych do potyczek z układami programowalnymi (PLD) o prostej budowie i małej skali integracji, czyli generalnie układami GAL. Wcześniejsze układy typu PAL lub PALCE obecnie właściwie wyszły z użycia. Przede wszystkim z racji tego, że układy PAL nie są reprogramowalne, chociaż PALCE ponoć są, ale jakoś do tej pory nie przyszło mi się sprawdzić tej cechy. Bo ja wszystko sprawdzam na sobie i nie przyjmuję na wiarę (no może z wyjątkiem jednej osoby, której wierzę bezwarunkowo, bo mnie jeszcze nigdy nie okantowała, chociaż nie zawsze to wygląda tak prosto). Większość układów PAL będących z odzysku poszła... na odzysk złota. Zostawiłem sobie tylko kilkanaście układów typu PALCE (bo to nówki sztuki nie śmigane).

gal01_ilu01.jpg

Układy GAL są w pełni reprogramowalne, toteż nawet te z odzysku mają rację bytu i można je używać. Obecnie chyba jedynie dwóch producentów wytwarza te układy. Są to LATTICE (twórca technologii) oferujące układy o oznaczeniu GAL<coś tam> oraz ATMEL (który wszedł w struktury Microchip) z układami o oznaczeniu ATF<coś tam>. Podejrzewam, że z racji swoistej konkurencji między firmami oprogramowanie Lattice nie koniecznie będzie generować pliki dla układów Atmela oraz vice versa. W przypadku układów GAL można je obrabiać za pomocą programu oferowanego przez Lattice o nazwie ispLEVER. W przypadku układów atmelowych do obróbki dedykowane jest oprogramowanie WinCUPL.
Potyczki z układami GAL należy zacząć od pozyskania odpowiednich narzędzi programowych. W przypadku układów latticowych, należy wejść na stronę tej firmy: http://www.latticesemi.com/ispleverclassic lub wyklikać zakładkę Products i tam odnaleźć odsyłacz oznaczony islLEVER Classis.

gal01_ilu02.png

By pobrać odpowiednie oprogramowanie należy się zarejestrować (klikając na Register), wypełnić odpowiednie pola. Loginem jest podany adres mail, na który przyjdzie wiadomość zawierająca link do kliknięcia by aktywować utworzone konto. Posiadając już konto w Lattice można pobrać oprogramowanie narzędziowe.

gal01_ilu03.png

Wybieramy wskazaną pozycję do ściągnięcia. Przyjdzie w formie spakowanej (jako ZIP). Po rozpakowaniu (jest jeden plik EXE) należy go uruchomić. Na początek poklikać na wyrażenie zgody i inne podobne dyrdymały a potem pozostaje cierpliwie poczekać.
gal01_ilu04.png
gal01_ilu05.png
gal01_ilu06.png
gal01_ilu07.png

Teraz pozostało cierpliwie poczekać.

gal01_ilu08.png
gal01_ilu09.png
gal01_ilu10.png
gal01_ilu11.png
gal01_ilu12.png
gal01_ilu13.png
gal01_ilu14.png

No i w końcu oczekiwane szczęśliwe zakończenie.

gal01_ilu15.png

Wracamy na stronę Lattice by pobrać plik licencji. Będzie potrzebny numer karty sieciowej, czyli tzw. adres MAC karty sieciowej. Można go wyklikać:

gal01_ilu16.png

Do pobrania pliku licencji należy przejść do

gal01_ilu17.png

To prowadzi do miejsca, gdzie należy podać uzyskany z własnego kompa adres MAC karty sieciowej, który należy wpisać i klikając na właściwy button zażądać wygenerowania pliku licencji.

gal01_ilu18.png

Plik licencji przyjdzie pocztą na podane jako login konto poczty mail.

gal01_ilu19.png

Tak jak jest napisane w email, plik załącznika należy zapisać do kartoteki o nazwie \license. Program narzędziowy uruchamia się jako

gal01_ilu20.png

Jeżeli plik licencji nie zostanie zapisany lub nie we właściwym miejscu, program ispLever wypnie się na współpracę z nami.

gal01_ilu21.png

Jeżeli zaistnieje właściwa harmonia, to program uruchomi się bez żadnych problemów.

Ten pakiet oprogramowania narzędziowego obrabia wszystkie układy firmy Lattice. Fajną sprawą jest to, że udostępniają możliwość obrabiania starych układów. Nie wszyscy tak robią, toteż obok bardziej współczesnych układów:

gal01_ilu22.jpg

można obrabiać układy już trochę leciwe,

gal01_ilu23.jpg
gal01_ilu24.jpg

oraz klasyczne układy GAL.

gal01_ilu25.jpg
gal01_ilu26.jpg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: GAL'e - technologia obróbki

Postautor: gaweł » czwartek 01 lis 2018, 18:52

Układy GAL
projekt dla układu kombinacyjnego


Najprostszy przykład wykorzystania układu GAL, to czysta logika kombinacyjna. Może to znaleźć zastosowanie w wielu miejscach, ot, choćby w zespole do generowania sygnałów typu chip select na magistrali mikroprocesorowej do aktywacji różnych portów. Typowym rozwiązaniem jest użycie układu 74HC138. Ma on wszystko co potrzeba, 3 linie do selekcji oraz kilka linii do aktywacji samego dekodera. Wyjścia ma w tzw. logice ujemnej (stan aktywny jest zerem logicznym). Jednak zdarzyło mi się , gdzie wyjścia dekodera w kilku przypadkach wymagały logiki dodatniej (tj. stanem aktywnym jest jedynka logiczna). Można, rzecz jasna dać w torze negator, albo... użyć układu GAL i zaprogramować właściwe warianty. Poniżej przedstawię jakiś wyimaginowany projekt, w którym układ GAL będzie pełnił czystą funkcję kombinacyjną. Przykładowo niech to będzie trzy linie wejściowe (dane wejściowe to trzy sygnały logiczne) i oczekiwane są trzy wyniki różnych funkcji kombinacyjnych. W sumie nie jest istotne jaką funkcję realizuje układ. Zapewne każdy jest w stanie bazując na bieżącym przykładzie utworzyć takie zapisy, jakie są mu niezbędne. W ogólnym przypadku może być inna liczba linii wejściowych oraz inna liczba linii wyjściowych. Tutaj jest jakiś abstrakcyjny projekt.
Odpalamy rakietę o nazwie ispLEVER i tworzymy nowy projekt: File → New project.

gal02_ilu01.png

W odpowiednich polach należy wprowadzić nazwę projektu, jego lokalizację na dysku (np. microgeek/gal/ezample1) i określić, że projekt będzie w języku ABEL.

gal02_ilu02.png

Po kliknięciu na Dalej, istnieje możliwość wybrania układu.

gal02_ilu03.png

W zestawie Family, nie znajdziemy pozycji GAL. To są już przestarzałe układy, toteż konieczne jest zaznaczenie ptaszka „Show Obsolete Devices”. To daje możliwość wybrania różnych starych rodzin.

gal02_ilu04.png

Więc wybieramy: GAL i układ GAL16V8. Przechodząc Dalej, w pewnym momencie mamy podsumowanie projektu:

gal02_ilu05.png

W końcu dobijamy się do poprawnie zdefiniowanego projektu. Teraz należy wklepać, co układ ma robić. Tworzymy pusty plik zawierający specyfikację funkcji układu.

gal02_ilu06.png
gal02_ilu07.png

Po wybraniu „języka”, utworzony jest prawie pusty plik:

gal02_ilu08.png

Wklepujemy tekst, opisując jakąś wyimaginowaną funkcję logiczną. Niech będzie to na pinach 1, 2 i 3 wejście sygnałów logicznych oraz na pinach 6, 7 i 8 wyjście sygnałów. W sumie realizowana funkcja nie tu istotnego znaczenia.

Kod: Zaznacz cały

MODULE logic1

Title 'Logika bramkowa'
"library 'lattice';

InpSig1, InpSig2, InpSig3      pin 1, 2, 3;
OutSig1, OutSig2, OutSig3      pin 6, 7, 8;

equations
      OutSig1 = InpSig1 & InpSig2 ;
      OutSig2 = InpSig2 $ InpSig3 ;
      OutSig3 = ( InpSig1 & InpSig3 ) $ ( InpSig2 & InpSig3 ) ;

END

gal02_ilu09.png

Maszynerię odpala się klikając prawym klawiszem myszki na Create Fuse Map. No to w drogę...

gal02_ilu10.png

Wyszło... jak wyszło. Oprogramowanie ma jakieś uwagi do moich działań. Zapewne ma rację.

gal02_ilu11.png

Zobaczmy czego chce...

gal02_ilu12.png

Mówi, że pin 6, 7 i 8 nie może być pinem wyjściowym. Sprawdźmy. W dokumentacji do układu jest:

gal02_ilu13.png

No tak. Rzeczywiście wybrane piny nie mogą być wyjściami. Nie należy nic robić na pałę, bo rzeczywistość to i tak zweryfikuje. Jak coś jest takie jakie jest, to tak musi być, nie da się inaczej. Gdybym realizował rzeczywisty projekt, to zapewne byłby bardziej przemyślany, a tak, tworzony ad hoc, w sposób nie do końca przemyślany minął się z rzeczywistością (tak kulą w płot).
Dobra, mała poprawka. Zmieniamy specyfikację pinów wejściowych i wyjściowych na: 2, 3 i 4 oraz 19, 18, 17.

gal02_ilu14.png

Tym razem już bez pudła, prosto do celu.

gal02_ilu15.png

Narządź twierdzi, że jest pełny sukces. Rzeczywiście, w kartotece przewidzianej na projekt powstał plik o rozszerzeniu JED (plik wynikowy w formacie JEDEC).

gal02_ilu16.png

Ponieważ jest to plik tekstowy, można go podejrzeć dowolnym edytorem.

gal02_ilu17.png

Wygląda jak powinien (swego czasu naoglądałem się trochę tych plików).
Jak wdusić zawartość tego pliku do środka układu GAL to inna bajka. Ja mam swój programator, co potrafi to robić. A jak się takiego nie ma? To można użyć układów typu isp (programowanych w układzie).

Obecne oprogramowanie, w stosunku do wręcz starożytnych rozwiązań bazujących na DOS (jak PALASM) to całkiem inny level. Może warto trochę odkurzyć te interesujące układy o całkiem fajnych możliwościach zamiast odesłać je na śmietnik historii. Uratujmy ich ile się tylko da, bo tak trzeba.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: GAL'e - technologia obróbki

Postautor: gaweł » piątek 02 lis 2018, 19:54

Układy GAL
projekt dla układu kombinacyjnego
opisany jako schemat


Do obróbki GAL'i nie jest konieczna znajomość jakiegokolwiek języka typu HDL. Równie dobrze funkcjonalność układu cyfrowego może zostać narysowana. Program ispLEVER umożliwia narysowanie schematu bloku cyfrowego, jaki ma być realizowany przez układ GAL. Tradycyjnie należy odpalić nawigator projektu. Zaczynamy od utworzenia nowego projektu.

gal03_ilu01.png

W okienku dialogowym wklepujemy podstawowe informacje dotyczące projektu: jego nazwę i lokalizację plików projektowych. Po kliknięciu na Dalej w następnym kroku określany jest docelowy układ.

gal03_ilu02.png

Po zaznaczeniu ptaszkiem „Show Obsolete Devices”, wybieramy pozycję GAL i układ GAL18V8 (to już nie jest Gal Anonim :) ). Dodajemy nowy plik źródłowy do projektu.

gal03_ilu03.png

Tym razem specyfikując szczegóły należy wskazać, że będzie to schemat.

gal03_ilu04.PNG

Zaowocuje to otwarciem programu do obróbki schematów. Zanim oddamy się radosnej twórczości związanej z wymyślaniem czegokolwiek lub innych niestworzonych rzeczy, plik należy nazwać. Drogi dojścia do finalnego schematu mogą być różne. Ja zacząłem od położenia na schemacie „nóżek układu”. Wybrałem z zasobnika narzędziowego funkcję „Add symbol”. Klik otwiera całą gamę dostępnych dla wybranego GAL'a elementów.

gal03_ilu06.PNG

Z zasobnika wybieram: iopads.lib a następnie G_INPUT.

gal03_ilu07.PNG

Powstaje kawałek schematu. Wybierając „Add Wire” dorysowuję kilka drutów na wejściach.

gal03_ilu08.PNG

Nazywam nóżki układu. Wybieram „Add Net Name”, na dole ekranu wklepuję z klawiatury nazwę sygnału i po Enter etykietę „kładę” na początek druta.

gal03_ilu09.png

Analogicznie pozostałe. W dalszej kolejności analogicznie tworzę piny wyjściowe układu (tym razem wybrane są elementy G_OUTPUT).

gal03_ilu10.PNG

Jak się zrobi Save, to program ponazywa nowe elementy. Przywiązanie utworzonych pinów do wyprowadzeń fizycznych układu scalonego realizowane jest poprzez edycję atrybutów elementu. Po kliknięciu na „Edit Symbol Attribute” kolejnym klikiem należy wskazać edytowany element, co spowoduje otwarcie odpowiedniego okienka dialogowego, gdzie należy wybrać pozycję PinNumber i w okienku wpisać numer wyprowadzenia rzeczywistego układu.

gal03_ilu12.PNG

Analogicznie pozostałe elementy. Powstaje:

gal03_ilu13.PNG

Teraz jest faza radosnej twórczości związanej z realizowaną logiką dla układu GAL. Tym razem z biblioteki wybrane są elementy GATES.

gal03_ilu14.PNG

Dodając „druty” tworzymy jakąś „fikcję” ( w sumie do prezentacji nie ma to żadnego znaczenia, w końcu jest to całkowicie wyspekulowana koncepcja nie mająca nic wspólnego z rzeczywistością, chodzi o zasady).

gal03_ilu15.PNG

Analogicznie wyjścia układu.
Z wprowadzonych etykiet sygnałów należy zrobić wejścia i wyjścia. Z zasobnika narzędziowego należy wybrać „Add I/O Marker”, ewentualnie kliknąć, na „Input”, trzymając lewy klawisz myszki zaznaczyć obszar nad etykietą. Po puszczeniu klawisza przerobi się to na swoisty port.

gal03_ilu16.PNG

Analogicznie wyjścia układu.

gal03_ilu17.PNG

Wracając do programu nawigatora projektu należy uruchomić maszynerię klikając prawym klawiszem na pozycję „Create Fuse Map” i wybierając „Start”. Świsnęło, błysnęło i...

gal03_ilu18.PNG

jest plik JEDEC.

gal03_ilu19.PNG
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1259
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: GAL'e - technologia obróbki

Postautor: gaweł » niedziela 04 lis 2018, 14:33

Układy GAL
projekt w VHDL


Funkcjonalność układów GAL można również wyprodukować w moim ulubionym wariancie, czyli w VHDL. By to uczynić, tradycyjnie należy odpalić nawigator projektu i utworzyć nowy projekt. Tym razem w specyfikacji projektu należy wskazać wariant VHDL.

gal04_ilu01.png
gal04_ilu02.png
gal04_ilu03.PNG

Dodajemy nowy plik do projektu.

gal04_ilu04.PNG

Otworzy się okienko do wprowadzenia kolejnych szczegółów.

gal04_ilu05.PNG

Poza, rzecz naturalna, podaniem nazwy pliku można wklepać listę sygnałów. Jeżeli tworzony moduł jest „top'owy”, to wprowadzona lista identyfikatorów będzie nazwami nóżek.

gal04_ilu06.PNG

To taki wariant dla trochę leniwych, gdyż z wprowadzonych informacji zostanie utworzony fragment pliku źródłowego w języku VHDL. Pozostanie jedynie wypełnić środek. Ja teraz wpiszę co „serce mi dyktuje” gdyż jest to w kategoriach prezentacji, jednak w rzeczywistych rozwiązaniach trzeba wszystko dokładnie przemyśleć a generalnie zawsze należy myśleć co się robi.
Powstaje opis o przykładowej treści:

Kod: Zaznacz cały

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity logic3 is port ( A: in std_logic ;
                        B: in std_logic ;
                        C: in std_logic ;
                        D: in std_logic ;
                        Y1: out std_logic ;
                        Y2: out std_logic ;
                        Y3: out std_logic ;
                        Y4: out std_logic  );
end ;

architecture behavioral of logic3 is
begin
  Y1 <= A and B ;
  Y2 <= C nand D ;
  Y3 <= A or C ;
  Y4 <= B xor D ;
end behavioral ;

No to w drogę...

gal04_ilu07.PNG

Pomiędliło dyskiem...

gal04_ilu08.PNG

i powiedziało, że zrobiło. Rzeczywiście, powstał plik JEDEC.

gal04_ilu09.PNG
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse


Wróć do „FPGA - ogólnie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości