speccy.pl
Facebook Like


SPECCY.PL

[SPECCY.PL PARTY 2023.1]

[WIKI SPECCY.PL]
Polecamy

KOMITET SPOŁECZNY KRONIKA POLSKIEJ DEMOSCENY
PIXEL HEAVEN 2023
AYGOR
Forum ZX Spectrum
Zawartość panelu chwilowo niedostępna
Archiwum plików ZX Spectrum
Nawigacja
Zróbmy sobie układ... czyli układy programowalne nie są takie straszne

Zróbmy sobie układ... czyli układy programowalne nie są takie straszne.

Pierwszymi układami godnymi tego miana (z tych które pamiętam) były MH74188 – pamięć prom o pojemności 32 słów. Oczarowany jej możliwościami, zawsze chciałem taką mieć. Nigdy mi się jej nie udało zdobyć.
Potem przyszły różne PLA, PAL, GAL, ULA i końcu CPLD i FPGA. Idea zawsze była taka sama : jest pudełko z wejściami i wyjściami, oraz klocki do poukładania w środku pudełka tak, żeby pudełko działało tak jak chcemy :)
Wybór pudełek jest coraz większy. Wszyscy którzy się choć trochę zainteresowali tematem, słyszeli o Xilinxie i Alterze. Jest mający swoją grupę wielbicieli Lattice. Miał swoje układy programowalne ś.p. Atmel. Cypress ma swoje niesamowite PSoC a programowalne bloki zaczęły się ostatnio pojawiać także w kostkach Microchipa.
Zdecydowanie więc warto się z tematem zapoznać.

Żeby w ogóle zacząć, trzeba się na coś zdecydować. A od wyboru zależeć będą nie tylko możliwości układów, ale także ich cena, oraz oczywiście ceny programatorów i zestawów deweloperskich.
Ja dawno temu wybrałem Xilinxa, więc wszelkie przykłady i opisy będą dotyczyły środowiska ISE WebPACK (darmowe).

Uprzedzając bieg wypadków, wiele istotnych problemów zostanie najzupełniej przypadkowo bądź z pełną premedytacją pominiętych, tekst ten nie ma być podręcznikiem „efpegologii stosowanej”, a jednie zachęcić do głębszego zainteresowania się układami programowalnymi.

Część 1 – schemat.

Na początek - dobra wiadomość. By przekonać się jak wygląda zabawa (bo na tym etapie to zabawa) w układy programowalne, nie trzeba kupować ani kostek, ani płytek, ani programatora. Nie trzeba znać Veriloga ani VHDL. Wymagana jest jednak choćby niewielka znajomość elektroniki. Obowiązkowo umiejętność czytania schematów. Optymalnie – umiejętność stworzenia schematu działającego urządzenia. Wystarczy zainstalować ISE (Quartusa, inny pakiet wybranego producenta).
I można już zacząć.

Jak?
Należy tworzyć nowy projekt, skonfigurować go pod xc9500xl, dobór automatyczny, top-level jako ‘Schematic’. Później z menu należy wybrać ‘Project/New source/ Schematic’, podać nazwę tworzonego układu/urządzenia. Po zatwierdzeniu nazwy otworzy się edytor schematu.

Po wybraniu w panelu po lewej zakładki ‘Symbols’ pojawi się lista dostępnych elementów. Można układać.

Dlaczego akurat xc9500xl? Bo CPLD jest dobrym etapem przejściowym. Dostępne w bibliotece moduły wyglądają dla osoby znającej układy serii 74xxx znajomo i przyjaźnie (wbrew pozorom to ważne :) i są dość standardowe. Ale oczywiście przymusu nie ma, można wybrać dowolną rodzinę układów.
(Jedna uwaga – biblioteki elementów dla różnych rodzin mogą się znacząco różnić)


Trochę podpowiedzi:

  • Narzędzia od góry:
    • łapka, służy do manipulowania obiektami na schemacie
    • powiększanie obszaru, lupa
    • rysowanie połączeń, typ połączenia (wire, bus) jest ustawiany automatycznie
    • nazywanie połączeń, połączenie może zmienić typ po zmianie nazwy
    • modyfikacja nazw w magistrali, na początek raczej mało przydatne...
    • podłączenie do pojedynczego sygnału z magistrali
    • port IO, czyli punkt połączenia urządzenia na schemacie ze światem zewnętrznym
    • wybór elementu z biblioteki
  • Porty IO to ‘nóżki’ tworzonego układu. Fizyczne, dla schematu głównego (top-module), wirtualne dla tworzonych podukładów.
  • Pojedynczych połączeń nie trzeba nazywać, chyba że chcemy je podglądać w symulacji, wtedy warto.
  • Bus, (szynę, magistralę) nazywamy nazwa(bit_x:bit_y), np. adres(15:0).
  • Pojedynczy sygnał z magistrali to nazwa(bit), np. adres(3).
  • Żeby utworzyć szynę z osobnych sygnałów, nadajemy jej nazwę złożoną z nazw poszczególnych sygnałów, oddzielonych przecinkiem (bez spacji!), np. „bus(1),selectA,selectB,data(4:2)”
  • Jeśli bit szyny ma mieć cały czas ustaloną wartość (0,1) należy wstawić do schematu GND lub VCC, utworzyć do niego połączenie (wire), nazwać je, a potem wykorzystać tą nazwę w wymaganych miejscach.


Chcesz najpierw popatrzeć jak to wygląda? YouTube Twoim przyjacielem!
Przykładowe tutoriale :

Po uważnym sprawdzeniu listy dostępnych elementów, okaże się że zbiór odpowiedników układów serii 74xxx jest dość ubogi. I raczej prędzej niż później okaże się że akurat nie ma absolutnie potrzebnego układu. Gdy tworzymy swój układ od zera, nie jest to w zasadzie problemem (wystarczy zapomnieć o istnieniu listy tych odpowiedników i z niej nie korzystać). Trudniejsza sprawa, gdy chcemy przerysować gotowy, sprawdzony już schemat. Można go oczywiście przeprojektować pod dostępne elementy. Można też stworzyć sobie bibliotekę brakujących elementów. Nie jest to wcale takie trudne, wymaga jedynie dokładnego przeczytania (ze zrozumieniem!) PDFa ze specyfikacją układu (zwracając szczególną uwagę na zbocza i poziomy).

Stwórzmy kilka nowych „podzespołów”.
Na początku prosty bufor. Z menu : ‘Project/New source/Schematic’, nazwa t74245.
Potrzebny będzie blok BUFE8, negator… i w zasadzie tyle.


Element BUFE8 - to osiem (8) buforów (BUF) z wyjściem trójstanowym (E, Enable).
Wszystkie elementy w bibliotece posiadają nazwy utworzone w zbliżony sposób - skrót nazwy elementu, informacja o wejściach dodatkowych, liczba określająca ilość wejść (lub tak jak tu, ilość elementów w grupie / bloku).
Tak wygląda połówka układu 74245, która zostanie wykorzystana w dalszej części artykułu.
Stworzenie całego układu pozostawmy p.t. czytelnikom jako ćwiczenie :)



W zakładce ‘Design’ szukamy u góry pozycji t74245, panel poniżej klikamy na ‘Design utilities’ i ‘Create schematic symbol
W zakładce ‘Symbols’ pojawi się nowa pozycja, zawierająca stworzony właśnie ‘układ’.
Tak utworzony element możemy teraz wykorzystać na schemacie projektowanego urządzenia.
Zanim to jednak nastąpi, sugeruję by każdy taki nowy element poddać symulacji i przekonać się czy faktycznie działa zgodnie ze specyfikacją. Drobne przeoczenie może spowodować, że część układów 'zbudowanych' na takim wadliwym elemencie nie będzie działać - a znalezienie wadliwej cegiełki w rozbudowanym układzie może okazać się kłopotliwe.
Dlatego - korzystajmy z symulacji. Warto.
Sam proces symulacji zostanie opisany w kolejnej części, ponieważ wymaga podstawowej znajomości HDL. Poprzednie wydania ISE miały wbudowane narzędzie pozwalające wygodnie generować (czytaj - wyklikać) sygnały wejściowe dla symulacji. Niestety w ostatnich wydaniach Xilinx z niego zrezygnował...


Następnym układem będzie 74LS574. Potrzebny będzie zatrzask wyzwalany zboczem opadającym. Schemat jak na rysunku poniżej.

Jak widać na obu schematach, bloki w ISE łączy się całymi szynami danych (tak, na upartego da się inaczej, nie, nie polecam) a kierunek przepływu danych wskazuje strzałka portu IO.
Po porównaniu z dokumentacją 74574, widać że ten układ także został nieco uproszczony - by nie gmatwać niepotrzebnie schematu niewykorzystanymi elementami, pominięte zostało wyjście trójstanowe. 'Pełny' układ powinien zawierać jeszcze element BUFE8 z negatorem...


Na koniec proponuję stworzenie komparatora 74LS688.




Mała dygresja na temat tych wszystkich inwerterów. Od starych dobrych czasów TTLi (a nawet wcześniejszych), świat ‘zewnętrzny’ preferuje sytuację, w której stanem aktywnym jest stan niski. Wyjścia są aktywowane zerem, zapis do pamięci następuje gdy WE=0, zatrzaski łapią wartość na opadającym zboczu. Logika programowalna twardo się trzyma podejścia odwrotnego - stanem aktywnym jest stan wysoki. W zasadzie nie stwarza to problemów (pomijając kwestie przyzwyczajeń) oprócz sytuacji gdy chcemy pożenić obie te domeny. Ponieważ innych układów (np. pamięci) nie zmodyfikujemy, trzeba dodawać inwertery do tworzonego układu by odwrócić polaryzację sygnału wyjściowego z CPLD/FPGA…


Wykorzystajmy w końcu nowe bloczki. I zróbmy sobie interfejs :)
Na pustym wciąż głównym arkuszu projektu, układamy :

Kliknij aby powiększyć



I oto mamy TI-of-TTL.

Po kliknięciu na ‘Implement Design’ (w zakładce ‘Design’), wszystko powinno się bez problemów skompilować (z warningami).
Dla ciekawskich – opcja ‘View RTL Schematic’ pokaże nasz schemat tak jak go widzi układ syntezy.
Opcja ‘View Technology Schematic’ pokaże jak układ został zaimplementowany.
Uwaga, pierwszy kontakt może spowodować osłupienie.


Jak widać w logu, interfejs mieści się swobodnie w niewielkim układzie XC9572


Device Used: XC9572XL-5-VQ64
Fitting Status: Successful

******************  Mapped Resource Summary  *******************

Macrocells     Product Terms    Function Block   Registers           
Used/Tot       Used/Tot         Inps Used/Tot    Used/Tot       
20 /72  ( 28%) 54  /360  ( 15%) 69 /216 ( 32%)   8  /72  ( 11%)


I co teraz? No, niewiele. Trzeba obowiązkowo wykonać symulację (o tem potem, przebiegi z symulacji poniżej).

Kliknij aby powiększyć
Jeśli symulacja wypadnie poprawnie, można pokusić się o zaimplementowanie w fizycznej kostce i sprawdzić czy faktycznie działa (co nigdy nie jest gwarantowane, sim simem, elektrony elektronami)

Dla chętnych, archiwum z projektem.
Dla biznesmenów – przypominam, że TI-of-TTL to 10%-ware i przerysowanie go do ISE nie zmienia licencji :)
Dla chętnych (jeśli się tacy znajdą) – kolejna część, w której okaże się co to takiego ten verilog i co z nim można zrobić, a co nie.
Oraz iSim.

Autor: steev

Licencja Creative Commons Artykuł autorstwa steev został wydany na licencji Creative Commons Uznanie autorstwa - Użycie niekomercyjne - Bez utworów zależnych 4.0 Międzynarodowe License.W oparciu o utwór dostępny pod adresem http://speccy.pl/articles.php?article_id=53

Brak komentarzy. Może czas dodać swój?
Dodaj komentarz
Zaloguj się, aby móc dodać komentarz.
Oceny
Tylko zarejestrowani użytkownicy mogą oceniać zawartość strony
Zaloguj się , żeby móc zagłosować.

Brak ocen. Może czas dodać swoją?