KOLEGIUM KARKONOSKIE Państwowa WyŜsza Szkoła Zawodowa w Jeleniej Górze mgr inŜ. Aleksander Dziuda mgr inŜ. Waldemar Krupa LABORATORIUM TECHNIKI CYFROWEJ JELENIA GÓRA 2006 PRZEWODNICZĄCY RADY PROGRAMOWO - WYDAWNICZEJ dr hab. Henryk GRADKOWSKI RECENZENT prof. dr hab. inŜ. Jan Jagielski Niniejsze wydawnictwo moŜna kupić w Bibliotece Uczelnianej Kolegium Karkonoskiego PWSZ w Jeleniej Górze ul. Lwówecka 18 tel. 0 75 645 33 52 Druk i oprawa: INTROLIGATORSTWO - MAŁA POLIGRAFIA 58-503 ul. PodchorąŜych 1/6 tel. 0 75 6474006 tel. kom. 0 501 181516 ISBN 83-912031-7-4 ISBN 978-83-912031-7-0 SPIS TREŚCI OD AUTORÓW. .................................................................................... 5 1. REGULAMIN LABORATORIUM TECHNIKI CYFROWEJ. .......... 7 2. MAKIETA LABORATORYJNA ML-1. ........................................... 19 2.1. Struktura sprzętowa systemu. ...................................................... 19 2.1.1. Moduł układów cyfrowych. ................................................. 20 2.1.2. Tryby pracy mikroprocesorowego sterownika systemu. ..... 24 2.1.3. Zasilacz. ............................................................................... 27 2.1.4. Inne elementy. ...................................................................... 27 2.2. Program „Makieta laboratoryjna 1.0”. ......................................... 28 2.2.1. Interfejs uŜytkownika. .......................................................... 28 2.2.2. Komunikaty występujące w programie. .............................. 34 2.2.3. Pomoc programu. ................................................................. 37 3. ĆWICZENIA LABORATORYJNE. .................................................. 39 3.1. Cele kształcenia. ........................................................................... 39 3.2. Charakterystyka ćwiczeń. ............................................................ 39 3.2.1. Wprowadzenie do ćwiczeń laboratoryjnych, wymagania, literatura, zasady BHP. ........................................................ 40 3.2.2. Zapoznanie się z makietą laboratoryjną, moŜliwościami, właściwościami, oprogramowaniem sterownika. ................ 40 3.2.3. Podstawowe elementy logiczne rodziny 74 LS. ................... 41 3.2.4. Układy konwersji kodów. ..................................................... 43 3.2.5. Układy komutacyjne. ............................................................ 44 3.2.6. Rejestry równoległe i przesuwne. ......................................... 46 3.2.7. Liczniki asynchroniczne. ...................................................... 48 3.2.8. Liczniki synchroniczne. ........................................................ 49 3.2.9. Układy arytmetyczne. ........................................................... 50 3.2.10. Termin obróbczy. ................................................................ 53 3.3. Elementy logiczne i bloki funkcjonalne występujące na stanowisku laboratoryjnym. ............................................................. 54 3.3.1. Podstawowe oznaczenia graficzne. ....................................... 54 3.3.2. Wykaz układów scalonych 74LS serii TTL dostępnych na stanowisku laboratoryjnym. ............................................ 57 3.3.3. Funkcje układów scalonych 74LS występujących na stanowisku laboratoryjnym. ..................................................... 58 3.3.4. Wyciąg z not katalogowych układów scalonych 74LS występujących na stanowisku laboratoryjnym. ................... 61 3.4. Literatura do ćwiczeń laboratoryjnych. ........................................ 76 4. NARZĘDZIA WSPOMAGAJĄCE PROJEKTOWANIE UKŁADÓW CYFROWYCH W STRUKTURACH PLD. .......................... 77 4.1. Programy systemu WinCUPL. ..................................................... 77 4.2. Podstawy języka CUPL. ............................................................... 79 4.2.1. Elementy języka i składnia. ................................................. 80 4.2.2. Preprocesor. ........................................................................ 104 4.2.3. Opis automatów. ................................................................ 107 4.2.4. Format pliku źródłowego. .................................................. 110 4.3. Program WinCUPL. ................................................................... 115 4.3.1. Obsługa WinCUPL. ........................................................... 116 4.3.2. Praca z przykładowym projektem. ..................................... 126 4.3.3. Pierwszy program. ............................................................. 132 4.4. Programator LabTool-48XP. ...................................................... 146 4.3.1. Praca z programatorem. ..................................................... 149 4.3.2. Programowanie układu. ..................................................... 153 4.5. Literatura do rozdziału 4. ........................................................... 157 4 OD AUTORÓW Niniejsze opracowanie jest przeznaczona dla studentów przygotowujących się i wykonujących ćwiczenia laboratoryjne w ramach przedmiotów „Technika cyfrowa” na kierunku ELEKTRONIKA I TELEKOMUNIKACJA oraz „Elektrotechnika i elektronika” z zakresu układów cyfrowych na kierunku EDUKACJA TECHNICZNO-INFORMATYCZNA, prowadzonych w Instytucie Techniki Kolegium Karkonoskiego. Przyjmuje się, Ŝe studenci znają działanie i właściwości projektowanych układów logicznych z informacji przekazywanych na wykładach i ćwiczeniach audytoryjnych poprzedzających zajęcia laboratoryjne. Opracowanie zawiera Regulamin Laboratorium Techniki Cyfrowej, opis Makiety Laboratoryjnej ML-1 na której realizowane są ćwiczenia laboratoryjne oraz programu „Makieta laboratoryjna 1.0”, materiały poświęcone kaŜdemu ćwiczeniu i opis narzędzi wspomagających projektowanie układów cyfrowych w strukturach PLD. W regulaminie laboratorium określono cel ćwiczeń laboratoryjnych, zasady przygotowania się i zaliczenia ćwiczeń oraz wskazówki o sposobie wykonania sprawozdań z ćwiczeń. Ponadto przedstawiono podstawowe zasady BHP obowiązujące w Laboratorium Techniki Cyfrowej podczas wykonywania ćwiczeń. 5 Materiały poświęcone kaŜdemu ćwiczeniu obejmują charakterystykę badanych układów, proponowany program ćwiczenia oraz przykładowe problemy do samodzielnego rozwiązania. Narzędzia wspomagające projektowanie układów cyfrowych w strukturach PLD zapoznają z podstawami języka CUPL, programami systemu WinCUPL oraz programatorem LabTool-48XP. Informacje zawarte w pracy pozwalają na wykonanie ćwiczeń zgodnie z podanym programem. Załączony spis literatury powinien zachęcić studentów do samodzielnego pogłębiania i rozszerzania swojej wiedzy z zakresu Techniki Cyfrowej. 6 1. REGULAMIN LABORATORIUM TECHNIKI CYFROWEJ Laboratorium z Techniki Cyfrowej jest ilustracją wykładów i ćwiczeń audytoryjnych o tym samym tytule, prowadzonych w Instytucie Techniki Kolegium Karkonoskiego. Zajęcia laboratoryjne mają na celu: Praktyczną weryfikację, ugruntowanie i poszerzenie nabytej wiedzy teoretycznej oraz kształtowanie praktycznych umiejętności wykorzystania scalonych układów cyfrowych, poprawnego odczytywania wyników i prowadzenia odpowiedniej dokumentacji pomiarów. Kształtowanie umiejętności metrologicznych, takich jak: prawidłowe zaplanowanie pomiarów, celem przeprowadzenia doświadczenia, poprawna organizacja stanowiska pomiarowego i właściwa eksploatacja aparatury oraz ocena i dyskusja wyników pod względem ich wiarygodności. Zapoznanie studentów z elementami cyfrowymi klasy TTLS, stosowanymi strukturami układów cyfrowych, a takŜe metodyką projektowania urządzeń cyfrowych na poziomie stosowania bloków funkcjonalnych. Oczekuje się, Ŝe uczestnictwo w zajęciach pozwoli studentom na wykonywanie samodzielnych projektów z uŜyciem układów cyfrowych oraz interpretację i dyskusję otrzymanych wyników w trakcie badań. 7 Podstawą przygotowania się do ćwiczeń laboratoryjnych są wiadomości nabyte przez studentów podczas wykładów i ćwiczeń audytoryjnych w ramach kursów „Technika cyfrowa I” i „Technika cyfrowa II” oraz korzystanie z dostępnej, obowiązkowej i zalecanej literatury. Realizacja ćwiczeń laboratoryjnych, to samodzielna działalność i podejmowanie decyzji przez studentów w trakcie wykonywania ćwiczeń. Przygotowanie się studentów do ćwiczeń laboratoryjnych polega na: zapoznaniu się z tematem i celem ćwiczenia, przyswojeniu teoretycznych podstaw zachodzących w badanych układach, poznaniu zasad badania określonych zjawisk i wynikającego z niej układu, określeniu przewidywanych efektów pomiarów (charakterystyk, wyników, itp.), przyswojeniu sobie wiadomości dotyczących budowy i zasady działania uŜytych w ćwiczeniu przyrządów pomiarowych, przygotowaniu protokołu pomiarów (tabelki, schematy, wstępne obliczenia). KaŜdy student przed rozpoczęciem ćwiczeń laboratoryjnych obowiązany jest zapoznać się z Regulaminem Laboratorium Techniki Cyfrowej oraz Przepisami BHP obowiązującymi w laboratorium, co winno być udokumentowane podpisem. Studenci wykonują ćwiczenia w Laboratorium Techniki Cyfrowej w podgrupach składających się z zespołów dwuosobowych lub w szczególnych przypadkach trzyosobowych pod kierunkiem pracownika Instytutu Techniki. Ćwiczenia wykonywane są w systemie całościowym, tzn. ustawiony jest w laboratorium jeden temat ćwiczeń, realizowany przez wszystkie podgrupy. 8 Podgrupy laboratoryjne wykonują ćwiczenie według ustalonego przez prowadzącego schematu. Po wykonaniu kaŜdego etapu ćwiczenia naleŜy uzyskane wyniki zaprezentować prowadzącemu w celu sprawdzenia i potwierdzenia realizacji programu. KaŜda podgrupa laboratoryjna prowadzi jeden protokół, w którym notuje wyniki pomiarów, uwagi dotyczące przebiegu ćwiczenia, schematy połączeń, obliczenia oraz polecenia prowadzącego zajęcia dotyczące danego ćwiczenia. Zatwierdzenie protokołu oznacza zaliczenie części praktycznej danego ćwiczenia. W sprawozdaniu zawarte winny być tylko wyłącznie wyniki z zatwierdzonego protokołu. Studenci przedstawiają sprawozdanie z ćwiczenia w formie pisemnej. Szczegółowe zasady wykonywania sprawozdania określa prowadzący kurs. Sprawozdanie, wraz z zatwierdzonym protokołem pomiarów, studenci mają obowiązek przedstawić prowadzącemu do oceny na następnych zajęciach. W przypadku niespełnienia tego warunku studenci nie są dopuszczoni do wykonywania ćwiczenia. W ciągu semestru odbywa się 8 ćwiczeń (8 spotkań). KaŜde ćwiczenie trwa 3 godziny lekcyjne. Pierwsze spotkanie organizacyjne stanowi wprowadzenie oraz dokonywany jest podział na podgrupy laboratoryjne. Dziesiąte spotkanie przeznaczone jest na ewentualne odrobienie zaległego ćwiczenia. W przypadkach usprawiedliwionej nieobecności na ćwiczeniach istnieje moŜliwość odrobienia ćwiczenia z inną grupą laboratoryjną, jeŜeli będą wolne miejsca. Przypadek taki naleŜy uzgodnić z prowadzącym ćwiczenia w danej grupie. W czasie ćwiczenia obowiązuje znajomość instrukcji oraz teorii z wykładu i ćwiczeń audytoryjnych obejmujących tematykę ćwiczenia. 9 W przypadku niedostatecznego przygotowania teoretycznego prowadzący moŜe niedopuścić studenta do wykonywania ćwiczenia. Przypadek taki jest równoznaczny z nieobecnością nieusprawiedliwioną. Student, który nie został dopuszczony do wykonywania ćwiczenia ma prawo uczestniczyć w wykonywaniu ćwiczenia, jednak bez moŜliwości oddania protokołu i sprawozdania. Takie ćwiczenie musi być powtórzone w czasie wyznaczonym przez prowadzącego w ramach limitu nieobecności nieusprawiedliwionych. W przypadku raŜąco nieudolnego wykonywania ćwiczenia, nieumiejętnego posługiwania się sprzętem laboratoryjnym, niszczenia sprzętu pomiarowego a takŜe innego wyposaŜenia laboratorium lub innego postępowania szkodliwego z punktu widzenia pozostałych osób korzystających z laboratorium studenci mogą zostać usunięci z laboratorium. Sposób oceniania wykonania ćwiczenia przez studentów jest przedstawiany przez prowadzącego w czasie zajęć wprowadzających do ćwiczeń laboratoryjnych. W laboratorium obowiązuje następujący regulamin: 1. Płaszcze i inne okrycia wierzchnie naleŜy pozostawić w szatni. 2. W laboratorium naleŜy zachować ciszę. Konwersację z innymi studentami naleŜy ograniczyć do niezbędnego minimum i prowadzić głosem ściszonym, tak aby nie zakłócić ciszy i nie rozpraszać pozostałych ćwiczących. 3. Nie wolno samowolnie zamieniać ani przenosić przyrządów oraz korzystać ze sprzętu laboratoryjnego nie wchodzącego w zestaw danego ćwiczenia. 4. Modelowania realizowanych w ramach ćwiczeń laboratoryjnych projektów układów studenci dokonują uŜywając wyłącznie układów scalonych znajdujących się na danym stanowisku laboratoryjnym. 10 5. Studenci mogą włączać napięcia zasilające oraz włączać i wyłączać komputery wyłącznie za zgodą prowadzącego. 6. Studenci są zobowiązani do zachowania szczególnej ostroŜności w uŜytkowaniu przyrządów i komputerów. O wszelkich uszkodzeniach naleŜy natychmiast powiadomić prowadzącego zajęcia. 7. Winni zniszczenia lub uszkodzenia układu wskutek samowolnego włączenia napięcia lub niestosowania się do wskazówek prowadzącego ćwiczenia – będą usuwani z zajęć. 8. Rozłączenie badanego układu tak w trakcie ćwiczenia jak i po zakończeniu pomiarów jest dozwolone po zatwierdzeniu wyników przez prowadzącego ćwiczenie. 9. Po wykonaniu ćwiczenia studenci wykonują jedno sprawozdanie na podgrupę. 10. Zaliczenie ćwiczeń laboratoryjnych następuje na podstawie; wykonania wszystkich ćwiczeń przewidzianych programem laboratorium, zaliczenia sprawozdań ze wszystkich wykonanych w laboratorium ćwiczeń. 11. Zabrania się dokonywania jakichkolwiek zmian w konfiguracji systemu Windows 98SE (dotyczy to równieŜ pulpitu!) i w zainstalowanych programach. 12. Zakazuje się wgrywania, „ściągania” z Internetu oraz instalowania oprogramowania na komputerach znajdujących się w laboratorium. 13. Zabrania się tworzenia nowych katalogów oraz wgrywania plików do komputerów znajdujących się w laboratorium. 14. Nie wolno umieszczać na pulpicie systemu Windows 98SE Ŝadnych skrótów, folderów czy plików. 11 15. W trakcie zajęć zabrania się z korzystania z Internetu (przeglądarek WWW, poczty elektronicznej, a szczególnie z usług typu: Gadu-Gadu, IRC, Chat, itp.). MoŜna korzystać z przeglądarek WWW w przypadku, gdy jest to wymagane do zaliczenia danego ćwiczenia. 16. Wykonując dane ćwiczenie naleŜy pracować wyłącznie w katalogu roboczym wskazanym w instrukcji tego ćwiczenia i zgodnie z tą instrukcją. Celem uniknięcia nieszczęśliwym wypadkom naleŜy przestrzegać następujących zasad (wyciąg z instrukcji BHP): 1. Pracę na stanowiskach laboratoryjnych powinna cechować szczególna ostroŜność i rozwaga. 2. Przed przystąpieniem do łączenia układu pomiarowego, naleŜy sprawdzić czy źródła zasilania są odłączone. 3. Zabrania się uŜywania przewodów łączących z uszkodzoną izolacją lub oberwanymi końcówkami. 4. Zabrania się włączenia napięcia bez sprawdzenia układu przez prowadzącego ćwiczenia i uzyskania jego zgody. 5. Wszystkie zmiany w układzie, jak równieŜ jego rozłączenie jest dozwolone jedynie przy odłączeniu napięcia. 6. Włączenie napięcia po dokonanej zmianie w układzie moŜe nastąpić dopiero po sprawdzeniu układu przez prowadzącego ćwiczenia. 7. Zabrania się dotykać części elementów układu znajdującego się pod napięciem, a w szczególności zacisków przyrządów i końcówek przewodów łączących. 8. W razie odłączenia źródeł zasilania przez bezpiecznik automatyczny, znajdujący się na listwie zasilającej, naleŜy niezwłocznie powiadomić o tym fakcie prowadzącego ćwiczenia. 9. W przypadku poraŜenia prądem elektrycznym naleŜy: 12 natychmiast wyłączyć napięcie zasilające za pomocy wyłącznika głównego lub wyłączników znajdujących się na listwach zasilających, uwolnić poraŜonego spod działania prądu elektrycznego, powiadomić prowadzącego ćwiczenia oraz lekarza, przystąpić do udzielenia pierwszej pomocy zgodnie z zasadami udzielania pomocy w przypadku poraŜenia prądem, poddać poszkodowanego opiece lekarskiej, niezaleŜnie od tego czy stracił przytomność czy nie. 11. W razie poŜaru naleŜy: wyłączyć napięcie zasilające, nieść pomoc osobom zagroŜonym, zachować spokój, nie wywoływać paniki, przystąpić do gaszenia poŜaru za pomocy dostępnych środków gaśniczych, np.: kocy gaśniczych, gaśnic. Uwaga! do gaszenia urządzeń elektrycznych nie wolno uŜywać gaśnic pianowych, powiadomić straŜ poŜarną – telefon 998, studenci, którzy nie biorą udziału w akcji ratowniczej muszą bezwzględnie opuścić laboratorium. 12. W razie powstania innego wypadku (urazy mechaniczne, chemiczne, itp.) naleŜy: usunąć czynniki szkodliwe, zawiadomić o wypadku pracownika prowadzącego ćwiczenia, udzielić pierwszej pomocy, w razie potrzeby wezwać lekarza, ewentualnie przewieźć poszkodowanego do szpitala. 13 UWAGA! Wykonując ćwiczenie PRZESTRZEGAJ przepisów BHP związanych z obsługą urządzeń elektrycznych. Uszkodzenia bądź nieprawidłowości w funkcjonowaniu urządzeń ZGŁOŚ prowadzącemu zajęcia. Urządzenia uszkodzone ODSTAW w miejsce z opisem “Urządzenia uszkodzone”. Po wykonaniu ćwiczenia laboratoryjnego: ∗ ROZŁĄCZ badane układy, ∗ WYŁĄCZ zasilanie urządzeń i stołu, ∗ UŁÓŹ przewody w uchwytach, ∗ ODSTAW urządzenia przestawione z innych stanowisk na ich pierwotne miejsce. 14 Zalecany układ sprawozdania: tabela nagłówkowa sporządzona według wzoru; KOLEGIUM KARKONOSKIE INSTYTUT TECHNIKI LABORATORIUM TECHNIKI CYFROWEJ Numer grupy: Skład podgrupy: 1. 2. Numer ćwiczenia: Temat ćwiczenia: Prowadzący: Data wykonania: Ocena: Podpis: cel ćwiczenia; rozwiązania zadań otrzymanych w ramach przygotowania się do ćwiczeń laboratoryjnych; schematy połączeń zaprojektowanych układów faktycznie stosowanych w ćwiczeniu; tabele z wynikami badań i obliczeń; wzory stosowane do obliczeń i obliczenia; przebiegi czasowe; wnioski i uwagi z przebiegu ćwiczenia i otrzymanych wyników. Oceniając sprawozdanie bierze się pod uwagę: poprawność otrzymanych wyników i wykresów; stopień wyczerpania tematu we wnioskach; staranność wykonania schematów, tabel i wykresów. 15 Uwaga: do sprawozdania winien być dołączony protokół z pomiarów zawierający: krótką charakterystykę przeprowadzonych badań, uwzględniając cel ćwiczenia oraz zastosowaną metodę pomiaru; dyskusję otrzymanych wyników i analizę wykonanych wykresów w oparciu o teoretyczne uzasadnienie zjawisk; uwagi i spostrzeŜenia poczynione w trakcie ćwiczenia. Sprawdzone i zaliczone sprawozdania przechowywane są do końca semestru przez prowadzących zajęcia laboratoryjne. Zasady zaliczenia laboratorium Ustala się następujące zasady zaliczenia laboratorium: 1. Zaliczenie wszystkich ćwiczeń laboratoryjnych przewidzianych programem studiów. 2. Dopuszczalna jest nieobecność na dwóch ćwiczeniach pod warunkiem ich wykonania w wyznaczonych terminach odróbczych. Liczba nieobecności przewyŜszająca 2 będzie traktowana zgodnie z regulaminem studiów Kolegium Karkonoskiego. 3. Ocena końcowa będzie wyznaczona jako średnia arytmetyczna ocen cząstkowych uzyskanych z kaŜdego ćwiczenia. 4. Ocenie moŜe podlegać aktywność studentów podczas laboratorium. Ad.1. Warunkiem zaliczenia ćwiczenia jest: a) Przygotowanie do ćwiczenia, zgodne z wykazem materiału obowiązującego wykazanego w instrukcji do ćwiczenia. 16 b) Pozytywna ocena ze sprawdzianu weryfikującego przygotowanie do ćwiczenia (jeśli ćwiczenie zostało objęte sprawdzianem). Dopuszcza się przeprowadzenie kolokwium z zakresu materiału obejmującego wykonane ćwiczenia w terminie ustalonym z co najmniej 14 dniowym wyprzedzeniem oraz po uzgodnieniu wagi jego oceny. Zaliczenie tematyki ćwiczenia moŜe nastąpić w trakcie wykonywania ćwiczenia lub poprzez kolokwium po kaŜdej serii ćwiczeń c) Rozliczenie sprawozdania z ćwiczenia poprzedniego. d) Uzyskanie pozytywnej oceny z wykonywania ćwiczenia. Uwaga: Niespełnienie warunków, o których mowa w punktach a) - d), moŜe spowodować usunięcie ćwiczącego z zajęć i równoczesne wykreślenie z listy obecności w danym dniu. 17 2. MAKIETA LABORATORYJNA ML-1 2.1. Struktura sprzętowa systemu Rys. 2.1. Widok stanowiska laboratoryjnego Stanowisko laboratoryjne w przedstawionej powyŜej konfiguracji (rysunek 2.1) przeznaczone jest do wykonywania ćwiczeń laboratoryjnych z „Techniki cyfrowej” na kierunku ELEKTRONIKA I TELEKOMUNIKACJA oraz „Elektrotechniki i elektroniki” z zakresu układów cyfrowych na kierunku EDUKACJA TECHNICZNO-INFORMATYCZNA. 19 Do właściwych zasobów sprzętowych systemu naleŜą: ∗ Moduł układów cyfrowych wraz z mikroprocesorowym sterownikiem systemu; ∗ Komputer klasy PC wraz z oprogramowaniem; ∗ Zasilacz; ∗ Inne elementy: zestaw układów scalonych klasy TTLS, przewody połączeniowe. 2.1.1. Moduł układów cyfrowych Moduł układów cyfrowych jest uniwersalnym układem zawierającym podstawowe elementy umoŜliwiające szybkie zamodelowanie badanego układu cyfrowego i dokonanie niezbędnych prób. SłuŜy do modelowania układów cyfrowych projektowanych oraz badanych w ramach ćwiczeń laboratoryjnych. Wygląd modułu przedstawia rysunek 2.2. Moduł zawiera następujące elementy: 1. 4 podstawki 16 nóŜkowe zerowego docisku (TEXTOOL); 2. 1 podstawkę 40 nóŜkową zerowego docisku (TEXTOOL); 3. 10 diod elektroluminescencyjnych LED zespolonych w jednym bloku; 4. 7-segmentowy wskaźnik cyfrowy; 5. mikroprzełącznik DIP Switch 8-bitowy; 6. pola sygnałów zerojedynkowych i sygnałów impulsowych: o monitorowanie wyjść; o fala prostokątna; o tryb pracy; o wektor wejść; o generator impulsów; 7. mikroprocesorowy sterownik systemu; 8. złącze zasilające; 9. łącze szeregowe (RS – 232). 20 Rys. 2.2. Moduł układów cyfrowych. Moduł układów cyfrowych jest zasilany napięciem stabilizowanym + 5V. KaŜda podstawka (1, 2) pod układ scalony ma wyprowadzone wszystkie nóŜki na zgrupowane wokół niej szpilki. Zasilanie układu scalonego włoŜonego do podstawki moŜna dołączyć w sposób elastyczny, zaleŜnie od typu, wykorzystując szpilki zasilania GND i +5V doprowadzone bezpośrednio w pobliŜe podstawki. Dźwigienka dociskowa umoŜliwia łatwą wymianę układu scalonego. Zespolone diody LED (3) (linijka 10-diodowa koloru białego) słuŜą do bezpośredniej obserwacji stanów logicznych badanego układu (max. 10 wejść/wyjść). Sygnałem aktywnym (świecenie diody) jest poziom niski LOW – odpowiada to 0 logicznemu. Wskaźnik 7-segmentowy (4) umoŜliwia badanie układów transkoderów kodu BCD (lub innych) na kod wskaźnika. Poszczególne segmenty wskaźnika 21 zostały oznaczone literami a, b, c, d, e, f, g, h. Sygnałem aktywnym (świecenie segmentu) jest poziom niski LOW. Mikroprzełącznik 8-segmentowy (5) umoŜliwia dołączenie, zaleŜnie od potrzeb, stanów logicznych 0 i 1 (poziomów LOW i HIGH). Odpowiadające tym stanom poziomy napięć generowane są na wyjściach 1 – 8 mikroprzełącznika stosownie do ustawiania odpowiedniego segmentu. UWAGA: w pozycji 1 segmentu na stosownym wyjściu pojawia się poziom HIGH (1 logiczna), a w pozycji 0 segmentu na wyjście dołączony jest poziom LOW (0 logiczne). Pola sygnałów zerojedynkowych i sygnałów impulsowych (6) ilustrują stan i pracę mikroprocesorowego sterownika systemu (rysunek 2.3): tryby pracy, wektora stanów wejściowych, generatora impulsów, falę prostokątna, monitorowanie wyjść. Rys. 2.3. Pole sygnałów związanych ze sterownikiem. Mikroprocesorowy sterownik systemu (7) stanowi rozwiązanie na bazie mikrokontrolera AT89C51. Tworzą go dwa elementy: elektroniczny sterow22 nik makiety układów cyfrowych oraz rezydujące w komputerze PC oprogramowanie. Oprogramowanie praktycznie steruje całą pracą elektronicznego sterownika. Sterownik systemu, przedstawiony na rysunku 2.4, umoŜliwia programową realizację podstawowych funkcji niezbędnych do badania modelowanych struktur cyfrowych. 8 9 Rys. 2.4. Mikroprocesorowy sterownik systemu. Sterownik sprzęgany jest z makietą układów cyfrowych za pomocą trzech złącz – J1, J2 i J3. Złącze zasilające (8) doprowadza napięcie zasilające do makiety oraz mikroprocesorowego sterownika systemu z zasilacza modułu układów cyfrowych. Łącze szeregowe RS – 232 (9) odpowiada za współpracę PC z interfejsem sterownika. 23 2.1.2. Tryby pracy mikroprocesorowego sterownika systemu Tryb ręczny Ustalona wartość wektora pojawia się na wyjściach dopiero po zaakceptowaniu i obowiązuje do następnej akceptacji (jedna operacja). ∗ Wektor 10-bitowy kodu „1 z10”: - przesuwanie „1” - aktywny poziom wysoki [HIGH]; - przesuwanie „0” - aktywny poziom niski [LOW]. ∗ Wektor bitowy o zmiennej długości – swobodne ustalenie wartości wektora przez ustawienie pojedynczego bitu ∈{0,1}. Długość wektora z zakresu od 2 do 8 bitów. ∗ Wektor 5-bitowy licznikowy: - opcja zliczanie w przód w NKB (inkrementacja); - opcja zliczania w tył w NKB (dekrementacja). Tryb automatyczny Zmiana wartości wektora i jego akceptacja dokonywane są automatycznie (przez program) po upływie czasu t, spójny zakres zmian wartości wektora. Wybór tej opcji powoduje automatyczne cykliczne generowanie wartości wektora i jego akceptację po czasie t. Czas t jest wybieralnym parametrem w menu trybu pracy, t ∈{1s, 2s, 4s}. ∗ Wektor 10-bitowy kodu „1 z10”: - przesuwanie „1” - aktywny poziom wysoki [HIGH]; - przesuwanie „0” - aktywny poziom niski [LOW]. ∗ Wektor 5-bitowy licznikowy: - opcja zliczanie w przód w NKB (inkrementacja); - opcja zliczania w tył w NKB (dekrementacja). Generator pojedynczych impulsów. ∗ generator zadanej liczby impulsów: 24 − generuje zaprogramowaną liczbę impulsów z zakresu od 2 do 255 na jednym programowo wyróŜnionym wyjściu, z wybraną częstotliwością f. Na wyjściu drugim - stały, ustawiany programowo, poziom napięcia (LOW lub HIGH); − częstotliwość f wybierana programowo o wartościach 1Hz, 1kHz. ∗ generator pojedynczych impulsów: − dwa funkcjonalnie zróŜnicowane wyjścia: jedno impulsowe, drugie stałopoziomowe (programowo wybierany poziom LOW lub HIGH); − programowe ustalenie czasu t trwania impulsu na wyjściu impulsowym: t∈{50µs; 100µs; 500µs; 1ms; 50ms; 100ms; 0,5s; 4s}; − przełączanie (zmiana funkcji) wyjść za pomocą jednej operacji; − generowanie impulsów według programowych ustaleń (jedna operacja odpowiada jednemu impulsowi na wyjściu); − licznik liczby wygenerowanych impulsów na ekranie monitora (z moŜliwością zerowania). ∗ generator fali prostokątnej: − częstotliwość f wybierana programowo o wartościach 1Hz, 1kHz, 10kHz; − częstotliwość na wyjściach A, B, C, D odpowiednio równa: fA = 1 1 1 1 f ; f B = f ; fC = f ; f D = f . 2 4 8 16 Monitorowanie wyjść badanego układu - wizualizacja na monitorze PC stanów logicznych wybranych wyjść badanego układu cyfrowego (dołączonych do końcówek 7÷0) w dwóch opcjach: - w kodzie NKB; - w kodzie szesnastkowym (HEX). 25 Zakłada się, Ŝe na wszystkich końcówkach (7÷0) istnieją stabilne stany (LOW lub HIGH), Funkcje realizowane przez komputer PC ∗ Tryb ręczny: - „1 z 10” – wysyłanie i odbieranie po kaŜdym naciśnięciu przycisku, - „Wektor bitowy” – wysłanie i odbieranie po kaŜdym naciśnięciu przycisku, - „5-bitowy licznik” – wysłanie i odbieranie po kaŜdym naciśnięciu przycisku. ∗ Tryb automatyczny: - „1 z 10” – po naciśnięciu przycisku uruchamiany jest zegar, który realizuje wysyłanie komend i odbieranie w określonych odstępach czasu, - „5-bitowy licznik” – wysyłanie i odbieranie realizowane przez zegar. Funkcje realizowane przez komputer wysyłają, określony dla danej funkcji pakiet komend, który jest odpowiednio interpretowany przez mikrokontroler i odbierają sygnały zwrotne po upływie określonego czasu. Funkcje realizowane przez interfejs modułu Funkcje realizowane przez interfejs modułu, zawierają się w trzecim trybie pracy. Stanowią je Generatory: - „Generator pojedynczych impulsów” – wysyłanie i odbieranie po kaŜdym naciśnięciu przycisku, - „Generator zadanej liczby impulsów” – odbiera komendy wysłane przez komputer i uruchamia generator, - „Generator fali prostokątnej” – komendy otrzymane przez komputer, uruchamiają generator fali prostokątnej. 26 Realizowane jest równieŜ wysyłanie sygnałów zwrotnych. ZaleŜnie od częstotliwości, sygnał jest wysyłany po kaŜdym wygenerowanym impulsie (częstotliwość 1 Hz) lub po zatrzymaniu procesu generacyjnego (częstotliwości powyŜej 1 Hz). 2.1.3. Zasilacz Dla układów TTL standardowym napięciem zasilania jest + 5V. Maksymalna odchyłka napięcia zasilania wynosi ±0,25V. Pobierane jest z modułu zasilacza µM-UNI wyposaŜonego w stabilizator napięcia +5V. 2.1.4. Inne elementy Wszystkie połączenia zamodelowanego układu cyfrowego realizowane są za pomocą giętkich przewodów o zróŜnicowanej długości, dołączonych w odpowiedniej liczbie do kaŜdego stanowiska laboratoryjnego. Do modelowania układów cyfrowych słuŜy zestaw elementów i bloków funkcyjnych w postaci układów scalonych klasy TTL. Dostępna jest równieŜ sonda logiczna TTL i CMOS typu Instek GLP-1A (rysunek 2.5). UmoŜliwia ona sprawdzanie stanów logicznych badanych układów cyfrowych. Rys. 2.5.Sonda logiczna Instek GLP-1A. 27 2.2. Program Makieta laboratoryjna 1.0 Program Makieta laboratoryjna 1.0© jest integralną częścią modułu układów cyfrowych. Został napisany w ramach pracy inŜynierskiej przez Bartłomieja Denisa. Wszelkie prawa do programu posiada Kolegium Karkonoskie. 2.2.1. Interfejs uŜytkownika Interfejs uŜytkownika składa się z trzech zakładek, z których kaŜda reprezentuje określony tryb pracy, a w związku z tym ściśle określone funkcje. KaŜdy tryb charakteryzuje się odpowiednią dla niego funkcjonalnością, gdzie kaŜde naciśnięcie przycisku powoduje wykonanie pojedynczej akcji lub uruchomienie procedury generacyjnej. Dodatkowo, istnieją róŜnorodne zabezpieczenia w kaŜdym z trybów, spełniające zarówno funkcje eliminacji moŜliwości wystąpienia błędów, jak równieŜ funkcje czysto informacyjne. Dwukrotne kliknięcie ikony Makieta.exe, znajdującej się na pulpicie monitora, spowoduje pojawienie się okna „Makieta do badania układów cyfrowych”, przedstawionego na rysunku 2.6. Program posiada górne menu. Zakładka Makieta zawiera opcję ponownego wyszukania połączenia z makietą, zaś zakładka Pomoc zawiera informacje typu proceduralnego oraz informację o programie. Wciśnięcie przycisku „Szukaj połączenia” rozpoczyna procedurę wyszukiwania połączenia z modułem układów cyfrowych. Operacja przebiega automatycznie bez ingerencji uŜytkownika. 28 Rys. 2.6.Okno główne programu Makieta laboratoryjna. W przypadku braku połączenia z modułem zostanie wygenerowany komunikat (rysunek 2.7): Rys. 2.7. Komunikat braku połączenia z modułem. Wciśnięcie przycisku „Przerwij” zakończy działanie programu. Naciśnięciu przycisku „Ponów próbę” spowoduje ponowne uruchomienie procedury wyszukiwania modułu. Wciśnięcie przycisku „Ignoruj” pozwala na pracę bez podłączonego modułu, umoŜliwiając zapoznania się z interfejsem programu. Gdy program „znajdzie” połączenie z mikroprocesorowym sterownikiem systemu, pojawia się uŜytkownikowi zestaw trybów pracy z całą gamą funkcji. Jako pierwsza zakładka pojawia się TRYB RĘCZNY (rysunek 2.8), gdzie 29 kaŜde naciśnięcie odpowiedniego przycisku wysyła sygnał do sterownika modułu. Podzielona jest na kilka sekcji, z których kaŜda realizuje ściśle określoną funkcję. Zestaw przycisków jest jednoznacznie przypisany do odpowiedniej funkcji, zaś ich opisy informują o wykonywanych akcjach. Rys. 2.8. Zakładka TRYB RĘCZNY. Tryb „1 z 10” pozwala na przesuwanie stanu aktywnego w prawą bądź lewą stronę. Określenie rodzaju stanu aktywnego pozostawione jest uŜytkownikowi. PoniŜej znajdują się okna monitorów, czyli pola tekstowe, w których rejestrowane są sygnały wyjściowe z modułu, reprezentowane w kodzie binarnym oraz szesnastkowym. MoŜliwość włączenia lub wyłączenia monitorowania, realizowane jest za pomocą przycisku „Włącz monitorowanie”. Przy uruchomieniu programu monitorowanie jest domyślnie ustawione w trybie wyłączonym. 30 Po prawej stronie mamy do dyspozycji dwa funkcjonalnie zróŜnicowane obszary: - „Wektor bitowy” - „5-bitowy licznik” „Wektor bitowy” pozwala na wygenerowanie słowa bitowego, którego wybrana powyŜej długość zmusza uŜytkownika do ustawienia poszczególnych bitów jako „1” lub „0”. Naciśnięcie przycisku „Zatwierdź” wysyła wektor do modułu, na wejścia badanego układu. „5-bitowy licznik, umoŜliwia ustawienie stanu początkowego, a poprzez wciśnięcie przycisku „Zatwierdź” wysłania bezpośrednio do sterownika modułu. Aby ułatwić wysyłanie kolejnych stanów licznika mamy do dyspozycji przyciski inkrementacji lub dekrementacji stanów. MoŜemy po kaŜdej zmianie skorzystać z przycisku zatwierdzającego lub uŜyć opcji pracy automatycznej. Włączając automatyczną pracę licznika kaŜdy kolejny stan jest od razu wysyłany bez konieczności kaŜdorazowego zatwierdzania. Kolejna zakładka to TRYB AUTOMATYCZNY (rysunek 2.9). Składa się z dwóch, podobnych jak w trybie ręcznym sekcji: „1 z 10” oraz „5-bitowy licznik”. Zasada działania automatycznego trybu pracy oparta jest na automatycznej procedurze generacji określonych stanów w określonych odstępach czasu. Funkcja „1 z 10” działa podobnie jak w trybie ręcznym, jednak tutaj naciśnięcie któregokolwiek z przycisków uruchamia automat generacyjny. Do dyspozycji są trzy przedziały czasu: 1, 2 lub 4 sekundy. Wysyłanie sygnałów do sterownika następuje kaŜdorazowo, co konkretny przedział czasu, do momentu zatrzymania. UŜytkownik ma moŜliwość przerwania procedury w kaŜdym momencie jej działania. W obszarze „5-bitowy licznik” znajduje się dodatkowy przycisk „Zatwierdź”, który powoduje zatwierdzenie ustawionego początkowego stanu licznika. Oczywiście jak we wszystkich trybach pracy do 31 dyspozycji mamy monitor, na podstawie którego moŜemy śledzić zmiany występujące w badanym układzie. Rys. 2.9. Zakładka TRYB AUTOMATYCZNY. NajwaŜniejszym i najbardziej rozbudowanym trybem pracy są GENERATORY (rysunek 2.10). Tryb ten stanowi grupę róŜnych generatorów, z których kaŜdy jest nieodzownym elementem badań układów cyfrowych. Interfejs na pierwszy rzut oka, moŜe wydawać się niezwykle skomplikowany, jednak po bardziej wnikliwym przyjrzeniu się dostępnym opcjom, staje się czytelny i przejrzysty. 32 Rys. 2.10. Zakładka GENERATORY pracy oprogramowania. Największą ilość ustawianych parametrów daje nam generator pojedynczych impulsów. Oprócz podstawowego wyboru wyjścia generatora, dokonujemy równieŜ wyboru rodzaju impulsu, stanu na wyjściu stałopoziomowym oraz czasu generowanego impulsu. KaŜde naciśnięcie przycisku „Generuj” powoduje generację pojedynczego impulsu, który jednocześnie jest zliczany przez licznik umieszczony z lewej strony zakładki. Ilość generowanych impulsów nie jest ograniczona. Po prawej stronie zakładki znajduje się generator zadanej liczby impulsów. W przeciwieństwie do generatora pojedynczych impulsów, naciśnięcie przycisku „Generuj” uruchamia procedurę generacyjną określonej liczby impulsów. Proces trwa do momentu wygenerowania zadanej liczby impulsów lub wcześniejszego przerwania przez uŜytkownika. Funkcja ta umoŜliwia do33 konanie wyboru wyjścia generatora, stanu na wyjściu stałopoziomowym oraz wartości częstotliwości. Generator pozwala na ustawienie ilości impulsów w przedziale od 2 do 255. Ostatnią funkcją w tym trybie pracy jest generator fali prostokątnej. W swoich opcjonalnych moŜliwościach pozwala na ustawienie częstotliwości. Uruchomiony, działa do momentu przerwania przez uŜytkownika lub zakończenia programu. Dostępny jest równieŜ monitor, ale w odróŜnieniu od poprzednich trybów pracy monitor zbiorowy pojawia się po naciśnięciu przycisku „Wszystkie stany”. Działanie tego trybu pracy, poza generatorem pojedynczych impulsów, polega na wysłaniu odpowiedniej komendy do mikrokontrolera, który uruchamia odpowiadający jej generator. 2.2.2. Komunikaty występujące w programie W programie „Makieta laboratoryjna” występują zarówno komunikaty informujące o wystąpieniu błędu, jak równieŜ komunikaty wymagające od uŜytkownika podjęcia określonej decyzji. Wszystkie wpisywane przez uŜytkownika dane muszą być w reprezentacji binarnej, stąd kaŜda próba zatwierdzenia nieprawidłowo wpisanych danych jest odrzucana. Wizualizacja tego rodzaju przypadków realizowana jest w postaci dwóch komunikatów. Pierwszy z nich (rysunek 2.11) występuje wówczas, gdy wpisane słowo jest niewłaściwej długości (stosowane przy funkcji „wektor bitowy”). Rys. 2.11. Niewłaściwa długość słowa. 34 Dodatkowo informuje uŜytkownika, jaka jest prawidłowa długość słowa. Natomiast, komunikat drugi (rysunek 2.12) przypomina uŜytkownikowi, iŜ wpisywana liczba musi być w systemie binarnym. Rys. 2.12. Konieczność wpisywania danych w systemie binarnym. Działanie generatorów polega na wygenerowaniu określonej, zaleŜnie od rodzaju generatora, liczby impulsów o ustalonych parametrach. Szczególne znaczenie ma ustawienie wszystkich parametrów, gdyŜ brak jakiegokolwiek spowodowałoby nieprawidłową pracę a nawet brak reakcji sterownika makiety. Działanie generatorów realizowane jest przez mikrokontroler, umieszczony w sterowniku makiety, a więc nieotrzymanie dokładnej listy komend nie uruchomi Ŝadnej funkcji generacyjnej. Dodatkowo brak ustawienia jakiejkolwiek z opcji powoduje wygenerowanie komunikatu informacyjnego (rysunek 2.13), zmuszającego uŜytkownika do ustawienia wszystkich parametrów pracy określonego generatora. Rys. 2.13. Ustawienie wszystkich parametrów. W generatorze zadanej liczby impulsów, poza informacją o parametrach pojawia się jeszcze jeden komunikat. Ze względu na przedział liczbowy, w jakim musi się zawierać ilość generowanych impulsów, naleŜało zablokować moŜliwość wpisania liczby z poza przedziału. JeŜeli wpiszemy liczbę mniejszą od 2 lub większą od 255 wygenerowany zostanie komunikat monitujący uŜytkownika do zmiany liczby (rysunek 2.14). 35 Rys. 2.14. Liczba generowanych impulsów. NajwaŜniejszym komunikatem, stanowiącym integralną część systemu zwarciowego sterownika modułu jest wizualizacja wystąpienia zwarcia. W momencie, kiedy podczas podłączania układu cyfrowego, na którym będziemy przeprowadzać badania, wystąpi zwarcie, na monitorze pojawi się komunikat (rysunek 2.15). Rys. 2.15. Zwarcie na module. Komunikat jednocześnie zmusza uŜytkownika do sprawdzenia połączeń i wyeliminowania zwarcia. Będzie do tej pory się pojawiał dopóki zwarcie nie zostanie wyeliminowane. Rozwiązanie niejednokrotnie moŜe ustrzec uŜytkownika przed uszkodzeniem badanego układu a nawet modułu. Gdy skończyliśmy badania i chcemy zakończyć pracę programu, po naciśnięciu przycisku „Zakończ program” pojawi się jeszcze jeden komunikat (rysunek 2.16), proszący o potwierdzenie decyzji o zakończeniu pracy. . Rys. 2.16. Zakończenie pracy programu. 36 2.2.3. Pomoc programu System pomocy programu „Makieta laboratoryjna” jest typu proceduralnego. Zakładka Pomoc, w górnym menu okna programu, umoŜliwia dostęp do dokumentacji tekstowej popartej ilustracjami umoŜliwiającej odwołanie się do programu (rysunek 2.17). Opisane są krok po kroku czynności, jakie musi wykonać uŜytkownik, aby wykonać konkretne zadanie, np. wygenerować 20 impulsów o konkretnych parametrach za pomocą generatora zadanej liczby impulsów. Jest podzielona na trzy grupy, odpowiadające podziałowi interfejsu, czyli tryb ręczny, tryb automatyczny oraz generatory. Ponadto znajdują się informacje o instalacji oraz procesie uruchamiania oprogramowania. Ze względu na zawartość i przeznaczenie system pomocy moŜna podzielić na kilka kategorii, spełniających zapotrzebowanie na róŜnego rodzaju informacje. Są to: ∗ pomoc proceduralna - opisuje metody wykonywania konkretnych zadań, ∗ pomoc koncepcyjna - wyjaśnia mechanizmy działania poszczególnych trybów pracy i leŜące u ich podstaw zasady, ∗ pomoc instruktaŜowa - zawiera informacje, spełniające funkcje nauczania uŜytkownika metod korzystania z programu. 37 Rys. 2.17. Okno „Pomocy”. 38 3. ĆWICZENIA LABORATORYJNE 3.1. Cele kształcenia Zajęcia laboratoryjne mają na celu praktyczną weryfikację, ugruntowanie i poszerzenie nabytej wiedzy teoretycznej oraz kształtowanie umiejętności praktycznych łączenia układów pomiarowych, poprawnego odczytywania wyników i prowadzenia odpowiedniej dokumentacji pomiarów. Kształtowanie umiejętności metrologicznych, takich jak: prawidłowe zaplanowanie pomiarów celem przeprowadzenia doświadczenia, poprawna organizacja stanowiska pomiarowego i właściwa eksploatacja aparatury oraz ocena i dyskusja wyników pod względem ich wiarygodności. Zapoznanie studentów z układami cyfrowymi klasy TTLS, stosowanymi strukturami układów cyfrowych, a takŜe metodyką projektowania urządzeń cyfrowych na poziomie stosowania bloków funkcjonalnych. Oczekuje się, Ŝe uczestnictwo w zajęciach pozwoli studentom na wykonywanie samodzielnych projektów z uŜyciem cyfrowych układów oraz interpretację i dyskusję otrzymanych wyników w trakcie badań. 3.2. Charakterystyka ćwiczeń Treści programowe Określenie właściwości logicznych badanych monolitycznych cyfrowych układów scalonych realizowanych w klasie TTLS, poznanie moŜliwości realizacji dowolnych wyraŜeń logicznych na podstawie wybranych elementów scalonych małej skali integracji. 39 Zagadnienie praktycznej realizacji zadanej funkcji logicznej rozwaŜa się w dwóch aspektach: - z punktu widzenia przypadkowego zestawu wolnych funktorów, - z punktu widzenia doboru właściwych funktorów, aby otrzymany układ zawierał minimalną liczbę elementów scalonych. 3.2.1. Wprowadzenie do ćwiczeń laboratoryjnych, wymagania, literatura, zasady BHP Omówienie spraw organizacyjnych związanych z wykonaniem i zaliczeniem ćwiczeń laboratoryjnych: podział na grupy i podgrupy, zapoznanie z Regulaminem Laboratorium Techniki Cyfrowej oraz Przepisami BHP obowiązującymi w laboratorium, przedstawienie tematyki i zasad zaliczenia ćwiczeń laboratoryjnych, zapoznanie z literaturą podstawową i uzupełniającą. 3.2.2. Zapoznanie się z makietą laboratoryjną, moŜliwościami, właściwościami oraz oprogramowaniem sterownika Celem ćwiczenia jest poznanie środowiska projektowego: − makiety laboratoryjnej ML-1; − programu „Makieta laboratoryjna 1.0.” Program ćwiczenia obejmuje: Poznanie budowy makiety laboratoryjnej ML-1 oraz moŜliwości modelowania układów logicznych z jej wykorzystaniem. Poznanie programu Makieta laboratoryjna 1.0. Zaprojektowanie i sprawdzenie poprawności działania trójwejściowych elementów logicznych zrealizowanych z elementów dwuwejściowych. Zrealizowanie funkcji logicznych z bramek NAND i NOR. Przygotowanie do ćwiczeń. Studenci winni zapoznać się z instrukcją laboratoryjną „Laboratorium Techniki Cyfrowej”, ze szczególnym zwróceniem uwagi na rozdział 2 - Ma40 kieta laboratoryjna ML-1. Wymagana jest znajomość podstaw matematycznych układów przełączających: algebra Boole’a, aksjomaty, definicje i twierdzenia, podstawowe funkcje logiczne - suma, iloczyn, negacja, suma zanegowana, iloczyn zanegowany, suma modulo 2, postać kanoniczna sumy i iloczynu dla funkcji logicznej. 3.2.3. Podstawowe elementy logiczne rodziny 74LS Celem ćwiczenia jest zapoznanie się z: − strukturą i właściwościami logicznymi podstawowych elementów logicznych badanych monolitycznych układów scalonych: bramek i przerzutników; − problemami związanymi z syntezą kombinacyjnych układów logicznych opartyą na zadanym zbiorze bramek logicznych; − wyrobienie umiejętności budowy układów kombinacyjnych i sekwencyjnych z podstawowych elementów kombinacyjnych na podstawie opisu słownego, tablicowego lub numerycznego. Program ćwiczenia obejmuje: Sprawdzenie poprawności działania wskazanych bramek. Zaprojektowanie i sprawdzenie prostych cyfrowych sieci kombinacyjnych. Sprawdzenie poprawności działania przerzutników. Transformację róŜnych typów przerzutników. Syntezę jednowyjściowych układów kombinacyjnych oraz sposób ich realizacji. Badane układy scalone: ∗ 74LS00 74LS02 74LS04 74LS08 ∗ 74LS10 74LS20 74LS32 74LS38 ∗ 74LS86 74LS74 74LS107 74LS244 41 Przygotowanie do ćwiczeń. KaŜda grupa otrzymuje indywidualne zadania projektowe. Treść i formę prezentacji zadań określa prowadzący zajęcia. Do kaŜdego zadania studenci przygotowują rozwiązania w postaci wyraŜeń logicznych i schematu ideowego układu, zaprojektowanego z dostępnych w zestawie elementów cyfrowych. Rozwiązania winny być przedstawione w protokole, który jest podstawą wykonania ćwiczenia. Wymagana jest znajomość podstawowych pojęć i toŜsamości algebry Boole’a, praw De Morgana, metod syntezy funkcji logicznych jednowyjściowych na elementach małej skali integracji, rodzaje przerzutników, realizacja przerzutnika RS w oparciu o bramki NAND lub NOR, pojęcie przerzutnika synchronicznego i asynchronicznego, konwersja przerzutników synchronicznych. Zagadnienia do opracowania: 1. Zdefiniować podstawowe funkcje logiczne. 2. Omówić sposoby przedstawiania funkcji logicznych. 3. Przedstawić postać sumacyjną i iloczynową wyraŜeń logicznych tej samej funkcji przełączającej. 4. Przedstawić konstrukcję mapy Karnaugha i wykorzystanie jej do minimalizacji funkcji. 5. Zdefiniować podstawowe parametry statyczne układów cyfrowych i podać ich typowe wartości dla układów TTLS. 6. Podać klasyfikację przerzutników. 7. Podać równania funkcyjne przerzutników: SR, JK, D, T. 8. Omówić budowę i działanie przerzutnika wyzwalanego impulsem JKMS. 9. Podać schematy funkcjonalne konwersji przerzutnika T w przerzutniki JK i D. 10.Wyjaśnić pojęcie dwójki liczącej oraz podać przykłady realizacji z wykorzystaniem przerzutników. 42 3.2.4. Układy konwersji kodów Celem ćwiczenia jest zapoznanie się z: − projektowaniem prostych układów logicznych realizujących funkcje koderów, dekoderów i transkoderów z wykorzystaniem wybranych elementów scalonych małej skali integracji; − budową i zasadą działania układów konwersji kodów realizowanych z bramek logicznych lub wykonanych w postaci monolitycznych układów scalonych; − sposobami realizacji układów konwersji kodów techniką TTL i metodami ich badania. Program ćwiczenia obejmuje: Zaprojektowanie z bramek i sprawdzenie poprawności działania wskazanych układów: − kodera zwykłego lub priorytetowego; − dekodera kodu BCD na kod „1 z n”; − transkodera zadanego kodu wejściowego na wyróŜniony kod wyjściowy. Zapoznanie się z budową i badanie scalonego enkodera priorytetowego 74LS148. Zapoznanie się z budową i badanie scalonych dekoderów 74LS138 i 74LS145. Zapoznanie się z budową i zasadą działania dekodera kodu BCD na kod wskaźnika siedmiosegmentowego 74LS47. Badane układy scalone: ∗ 74LS47 74LS138 74LS145 74LS148 Do realizacji układów konwersji kodów z układów scalonych małej i średniej skali integracji moŜna zastosować inny zestaw laboratoryjny, po wcześniejszym uzgodnieniu z prowadzącym zajęcia. 43 Przygotowanie do ćwiczeń. KaŜda grupa otrzymuje indywidualne zadania projektowe. Treść i formę prezentacji zadań określa prowadzący zajęcia. Do kaŜdego zadania studenci przygotowują rozwiązania w postaci wyraŜeń logicznych i schematu ideowego układu zaprojektowanego z dostępnych w zestawie elementów cyfrowych. Rozwiązania winny być przedstawione w protokole, który jest podstawą wykonania sprawozdania. Wymagana jest znajomość podstawowych rodzajów kodów binarnych: NKB, BCD, 1 z n, Greya, metod syntezy funkcji logicznych wielowyjściowych na elementach małej i średniej skali integracji. Zagadnienia do opracowania: 1. Omówić zasady konwersji liczb dziesiętnych na liczby binarne i odwrotnie. 2. Omówić kody naturalne i kody BCD. 3. Zdefiniować i dokonać podziału konwerterów kodów. 4. Omówić budowę i zasadę działania iteracyjnego enkodera priorytetowego. 5. Omówić budowę i właściwości enkodera 74LS148. 6. Omówić budowę i przeznaczenie dekodera. 7. Omówić budowę i właściwości dekoderów scalonych 74LS138 i 74LS145. 8. Przedstawić zasady syntezy transkoderów. 9. Przedstawić zasady konwersji liczb binarnych na liczby zapisane w kodzie Graya. 10.Omówić przeznaczenie wejść funkcyjnych układu scalonego 74LS47. 3.2.5. Układy komutacyjne Celem ćwiczenia jest: − poznanie budowy, zasady działania i zastosowań scalonych układów multiplekserów i demultiplekserów; 44 − praktyczna realizacja i badanie zadanych układów komutacyjnych; − praktyczna realizacja i badanie generatorów funkcji logicznych budowanych z bloków komutacyjnych. Program ćwiczenia obejmuje: Zaprojektowanie z podstawowych bramek logicznych multipleksera czterobitowego i sprawdzenie poprawności jego działania. Sprawdzenie działania logicznego scalonych układów 74LS151, 74LS153 i 74LS155. Zastosowanie multiplekserów i demultiplekserów do realizacji zadanych funkcji boolowskich. Zaprojektowanie i sprawdzenie układu generatora impulsów zegarowych: − o programowanym współczynniku wypełnienia, − wielofazowego (2 lub więcej faz), realizowanego za pomocą bramek, przerzutnika i multipleksera. Symulację 4 kanałowego przesyłania informacji jedną linią od nadajnika do odbiornika. Badane układy scalone: ∗ 74LS153 74LS155 Do realizacji układów komutacyjnych z układów scalonych małej i średniej skali integracji moŜna zastosować inny zestaw laboratoryjny, po wcześniejszym uzgodnieniu z prowadzącym zajęcia. Przygotowanie do ćwiczeń. KaŜda grupa otrzymuje indywidualne zadania projektowe. Treść i formę prezentacji zadań określa prowadzący zajęcia. Do kaŜdego zadania studenci przygotowują rozwiązania w postaci wyraŜeń logicznych i schematu ideowego układu, zaprojektowanego z dostępnych w zestawie elementów cyfrowych. Rozwiązania winny być przedstawione w protokole, który jest podstawą wy45 konania sprawozdania. Wymagana jest znajomość budowy, zasady działania, metod syntezy funkcji logicznych wielowyjściowych oraz sposoby ich realizacji na elementach średniej skali integracji. Zagadnienia do opracowania: 1. Omówić właściwości multipleksera. 2. Scharakteryzować metodę syntezy układów kombinacyjnych z uŜyciem multiplekserów wykorzystująca tablice Karnaugha. 3. Omówić budowę i właściwości multipleksera 74LS153. 4. Omówić budowę multipleksera piramidalnego. 5. Omówić zasady budowy multiplekserowych układów wielopoziomowych. 6. Omówić właściwości demultipleksera. 7. Podać róŜnicę między dekoderem a demultiplekserem. 8. Scharakteryzować metodę syntezy układów kombinacyjnych z uŜyciem demultiplekserów. 9. Omówić budowę i właściwości demultipleksera/dekodera 74LS155. 10.Omówić zastosowanie multipleksera i demultipleksera jako układów uniwersalnych. 3.2.6. Rejestry równoległe i przesuwające Celem ćwiczenia jest zapoznanie się ze sposobami realizacji podstawowych rodzajów rejestrów równoległych i przesuwających, z ich budową, zasadą działania oraz moŜliwościami funkcjonalnymi scalonych układów rejestrów równoległych i szeregowych (przesuwnych). Program ćwiczenia obejmuje: Sprawdzenie poprawności działania logicznego scalonych układów rejestrów równoległych: 74LS174 i 74LS175. Zaprojektowanie, realizację i sprawdzenie działania wskazanego układu rejestru przesuwnego: 46 − 3 bitowego rejestru rewersyjnego z przesuwem informacji; − 6 bitowego rejestru z przesuwem informacji w prawo albo w lewo (naleŜy zastosować bramki i układy 74LS174, 74LS175), − licznika pierścieniowego z układem kombinacyjnym pełniącym rolę przełącznika ładowanie/zamknięcie pierścienia. Sprawdzenie poprawności działania logicznego scalonych układów rejestrów przesuwnych 74LS164, 74LS165 i 74LS194. Badane układy scalone: ∗ 74LS164 74LS165 74LS174 74LS194 Przygotowanie do ćwiczeń. KaŜda grupa otrzymuje indywidualne zadania projektowe. Do kaŜdego zadania studenci przygotowują rozwiązania w postaci schematu ideowego układu, zaprojektowanego z dostępnych w zestawie elementów cyfrowych. Rozwiązania winny być przedstawione w protokole, który jest podstawą wykonania sprawozdania. Wymagana jest znajomość budowy, zasady działania, sposoby wprowadzania informacji do rejestrów i wyprowadzania informacji z rejestrów, budowy struktury wewnętrznej i zasady działania badanych układów. Zagadnienia do opracowania: 1. Zdefiniować układ sekwencyjny. 2. Przerzutniki jako elementy pamięci w układach sekwencyjnych - opis słowny, tablicowy, za pomocą grafu i funkcji logicznej. 3. Napisać tablice wzbudzeń dla przerzutników JK, D, T. 4. Podać podstawowe rodzaje rejestrów. 5. Omówić układy równoległego wprowadzania informacji do rejestru. 6. Scharakteryzować rejestry przesuwające. 7. Podać strukturę rejestru liczącego. 8. Omówić układy odczytu równoległego informacji z rejestru. 47 9. Wyjaśnić zamianę informacji równoległej na szeregową i odwrotnie na przykładzie scalonych rejestrów 74LS164 oraz 74LS165. 10. Omówić budowę i właściwości rejestru uniwersalnego 74LS194. 3.2.7. Liczniki asynchroniczne Celem ćwiczenia jest poznanie własności oraz zasad projektowania podstawowych liczników asynchronicznych modulo N, budowanych z odpowiednio ze sobą połączonych przerzutników TTLS oraz zapoznanie się z budową i zasadą działania scalonych liczników asynchronicznych dziesiętnych i binarnych. Program ćwiczenia obejmuje: Zaprojektowanie i badanie poprawności działania zadanych liczników, realizowanych z bramek i przerzutników bistabilnych. Zapoznanie się z budową i moŜliwościami funkcjonalnymi asynchronicznych liczników scalonych 74LS90 i 74LS93. Zaprojektowanie i sprawdzenie poprawności działania liczników modulo N, realizowanych za pomocą bramek i liczników scalonych. Wartość N zadaje prowadzący zajęcia (naleŜy tu uwzględnić liczniki o pojemności z zakresu 2÷255). Badane układy scalone: ∗ 74LS90 74LS93 Przygotowanie do ćwiczeń. KaŜda grupa otrzymuje indywidualne zadania projektowe. Do kaŜdego zadania studenci przygotowują rozwiązania w postaci schematu ideowego układu, zaprojektowanego z dostępnych w zestawie elementów cyfrowych. Rozwiązania winny być przedstawione w protokole, który jest podstawą wykonania sprawozdania. Wymagana jest znajomość budowy, metod syntezy liczników mod. N, struktury wewnętrznej i zasady działania badanych układów. Zagadnienia do opracowania: 48 1. Wymienić główne kryteria podziału i rodzaje liczników. 2. Przedstawić schemat logiczny asynchronicznego licznika liczącego w przód. 3. Przedstawić schemat logiczny asynchronicznego licznika liczącego w tył. 4. Narysować i omówić schematy funkcjonalne liczników scalonych 74LS90 i 74LS93. 5. Omówić właściwości liczników scalonych 74LS90 i 74LS93. 6. Narysować schemat logiczny licznika asynchronicznego o zadanym modulo N, stosując metodę rozkładu liczby N na czynniki. 7. Narysować schemat układu licznika o zadanym modulo wykorzystując układy 74LS90 lub 74LS93. 8. Przedstawić rozwiązanie programowalnego dzielnika częstotliwości opartego o licznik o pojemności 8. 9. Omówić szeregowy sposób łączenia liczników asynchronicznych dla uzyskania licznika o większej pojemności. 10.Omówić równoległy sposób łączenia liczników asynchronicznych dla uzyskania licznika o większej pojemności. 3.2.8. Liczniki synchroniczne Celem ćwiczenia jest kształtowanie umiejętności projektowania liczników synchronicznych realizowanych z przerzutników i bramek logicznych oraz zapoznanie się z budową, zasadą działania i moŜliwościami funkcyjnymi wybranych scalonych układów liczników synchronicznych. Program ćwiczenia obejmuje: Zaprojektowanie, realizację i sprawdzenie poprawności działania liczników synchronicznych o zadanej pojemności, budowanych z bramek i przerzutników: 49 − zliczających w przód, dla zadanego typu przerzutnika i rodzaju przeniesienia (szeregowego albo równoległego); − zliczających w tył, dla zadanego typu przerzutnika i rodzaju przeniesienia; − dwukierunkowych (rewersyjnych). Zapoznanie się z budową, moŜliwościami funkcjonalnymi i sprawdzenie działania scalonych liczników 74LS192 i 74LS193. Zaprojektowanie, realizację i badanie liczników o programowanej pojemności N z zakresu 1÷15, a takŜe liczników o pojemności z zakresu 2÷255 (naleŜy stosować bramki i liczniki scalone). Poznanie budowy i zasady działania programowalnych dzielników częstotliwości. Badane układy scalone: ∗ 74LS163 74LS193 74LS197 Przygotowanie do ćwiczeń. KaŜda grupa otrzymuje indywidualne zadania projektowe. Do kaŜdego zadania studenci przygotowują rozwiązania w postaci schematu ideowego układu, zaprojektowanego z dostępnych w zestawie elementów cyfrowych. Rozwiązania winny być przedstawione w protokole, który jest podstawą wykonania sprawozdania. Wymagana jest znajomość budowy, sposoby projektowania na przerzutnikach JK, D i T, struktury wewnętrznej i zasady działania badanych grup układów, zasady projektowania liczników mod. N. Zagadnienia do opracowania: 1. Wyjaśnić podstawowe róŜnice pomiędzy licznikami asynchronicznymi a synchronicznymi. 2. Omówić budowę jednokierunkowego synchronicznego licznika dwójkowego zliczającego w naturalnym kodzie dwójkowym. 50 3. Omówić właściwości liczników jednokierunkowych na przykładzie układu 74LS163. 4. Przedstawić zasady kaskadowego łączenia liczników 74LS163. 5. Scharakteryzować synchroniczne liczniki rewersyjne. 6. Omówić właściwości licznika scalonego 74LS193. 7. Omówić rozwiązania licznika zliczającego mod. N wykorzystując układ 74LS193. 8. Przedstawić zasady kaskadowego łączenia liczników 74LS193 w licznik o duŜej pojemności. 9. Omówić właściwości licznika scalonego 74LS197. 3.2.9. Układy arytmetyczne Celem ćwiczenia jest doświadczalne poznanie: − budowy, właściwości funkcyjnych i logicznych badanych sumatorów dwójkowych; − moŜliwości wykorzystania sumatorów liczb dwójkowych i dwójkowo-dziesiętnych; − budowy i przeznaczenia komparatorów. Program ćwiczenia obejmuje: Zbudowanie i zbadanie półsumatora i sumatora jednobitowego. Zaprojektowanie i sprawdzenie działania: − układu sumatora dwóch liczb dwubitowych, − układu subtraktora dwóch liczb dwubitowych. Zapoznanie się z budową i sprawdzenie działania: − scalonego układu sumatora dwóch liczb czterobitowych 74LS83, − scalonego układu komparatora dwóch liczb czterobitowych 74LS85. Zaprojektowanie i sprawdzenie działania wskazanego układu: 51 − realizującego dodawanie i odejmowanie dwóch liczb czterobitowych w kodzie uzupełnienia do 2, − komparatora szeregowego dwóch liczb czterobitowych A i B w kodzie naturalnym binarnym określającego relacje A=B, A≠B. Badane układy scalone: ∗ 74LS83 74LS85 Przygotowanie do ćwiczeń. KaŜda grupa otrzymuje indywidualne zadania projektowe. Treść i formę prezentacji zadań określa prowadzący zajęcia. Do kaŜdego zadania studenci przygotowują rozwiązania w postaci wyraŜeń logicznych i schematu ideowego układu, zaprojektowanego z dostępnych w zestawie elementów cyfrowych. Rozwiązania winny być przedstawione w protokole, który jest podstawą wykonania sprawozdania. Wymagana jest znajomość systemów zapisu liczb stosowanych w arytmetyce urządzeń liczących, zasady działania badanych grup układów oraz realizacji podstawowych operacji arytmetycznych na liczbach dwójkowych i dwójkowo-dziesiętnych, przedstawionych w róŜnych kodach. Zagadnienia do opracowania: 1. Zdefiniować i dokonać podziału układów arytmetycznych. 2. Opisać budowę i działanie sumatora jednobitowych liczb dwójkowych. 3. Podać funkcje logiczne sumatora i subtraktora pełnego. 4. Sumator binarny jako przykład układu iteracyjnego. Realizacja dodawania w zapisie ZU1i ZU2. 5. Wyjaśnić zasadę szeregowego dodawania wielobitowych liczb dwójkowych. 6. Wyjaśnić zasadę równoległego dodawania wielobitowych liczb dwójkowych. 7. Opisać budowę i działanie sumatora akumulującego. 8. Omówić budowę układu dodająco-odejmujacego liczb czterobitowych. 52 9. Omówić budowę komparatora równoległego. 10.Omówić budowę komparatora szeregowego. 3.2.10. Termin odróbczy MoŜliwość poprawienia i odrobienia zaległości. W terminie obróbczym istnieje moŜliwość poprawienia jednego ćwiczenia laboratoryjnego. 53 3.3. Elementy logiczne i bloki funkcjonalne występujące na stanowisku laboratoryjnym 3.3.1. Podstawowe oznaczenia graficzne Nazwa elementu Oznaczenie graficzne Realizowana funkcja AND (I) y = x1 ⋅ x2 OR (LUB) y = x1 + x2 NAND (NIE-I) y = x1 ⋅ x2 NOR (NIE-LUB) y = x1 + x2 y = x1 ⊕ x2 = EXOR (Wyłącznie LUB) = x1 x2 ∨ x1 x2 y = x1 ⊗ x2 = EXNOR = x1 x 2 ∨ x1 x2 NOT (NIE) y=x BUFOR y=x BUFOR TRÓJSTANOWY Ekspander AND ENB y=x y = x1 ⋅ x2 zwiększenie liczby wejść AND bramka wielowejściowa NOR bramka wielowejściowa 54 y = x1 ⋅ x2 ⋅ ... ⋅ xn y = x1 + x2 + ... + xn Nazwa elementu Oznaczenie graficzne Przerzutnik Qn+1 = S + RnQn synchroniczny SR Przerzutnik Qn +1 = J n Qn + K n Qn synchroniczny JK Przerzutnik Qn +1 = Dn synchroniczny D Przerzutnik synchroniczny T Rejestr Licznik Realizowana funkcja T D SET Q Qn +1 = Tn Qn + Tn Qn = Tn ⊕ Qn CLR Q Y := SHR ( x p , Y ) Y := SHL(Y , xl ) Y := Y + 1 = INC (Y ) Y := Y − 1 = DEC (Y ) 55 Nazwa elementu Oznaczenie graficzne Realizowana funkcja N −1 Multiplekser yk = e∑ Pk ( A)d k k =0 56 Demultiplekser yk = ePk ( A)d Dekoder y k = Pk ( A) Sumator Y = A + B + c0 Komparator Yi = f i ( A − B ) 3.3.2. Wykaz układów scalonych 74LS dostępnych na stanowisku laboratoryjnym Elementy logiczne i bloki funkcjonalne Lp. Typ elementu Ilość (szt.) Lp. Typ elementu Ilość (szt.) 1. 74LS00 2 16. 74LS138 1 2. 74LS02 2 17. 74LS145 2 3. 74LS04 1 18. 74LS148 1 4. 74LS08 2 19. 74LS153 1 5. 74LS10 2 20. 74LS155 1 6. 74LS20 2 21. 74LS163 1 7. 74LS32 2 22. 74LS164 1 8. 74LS38 2 23. 74LS165 1 9. 74LS47 1 24. 74LS174 1 10. 74LS74 2 25. 74LS193 2 11. 74LS83 2 26. 74LS194 1 12. 74LS86 2 27. 74LS197 1 13. 74LS90 2 28. 74LS244 2 14. 74LS93 2 29. 74LS245 2 15. 74LS107 2 30. 74LS259 1 Struktury PLD Lp. Typ elementu Ilość (szt.) 1. GAL16V8 2 2. GAL22V10 2 57 3.3.3. Funkcje układów scalonych 74LS występujących na stanowisku laboratoryjnym 7400 - Quad 2-input NAND gates. – Czterokrotne, 2-wejściowe bramki NAND. 7402 - Quad 2-input NOR gates - Czterokrotne, 2-wejściowe bramki NOR. 7404 - Hex inverters - Sześciokrotne inwertory. 7408 - Quad 2-input AND gates - Czterokrotne, 2-wejściowe bramki AND. 7410 - Triple 3-input NAND gates - Trzykrotne, 3-wejściowe bramki NAND. 7420 - Dual 4-input NAND gates - Dwukrotne, 4-wejściowe bramki NAND. 7432 - Quad 2-input OR gates - Czterokrotne, 2-wejściowe bramki OR. 7438 - Quad 2-input open-collector NAND gates with buffered output Czterokrotne, 2-wejściowe bramki buforowe NAND z otwartym kolektorem tranzystora wyjściowego. 7447 - Open-collector BCD to 7-segment decoder/common-anode LED driver with ripple blank input - Dekoder kodu BCD na kod wskaźnika 7-segmentowego, z wyjściami typu otwarty kolektor. 7474 - Dual D flip-flop with set and reset - Dwukrotne przerzutniki typu D wyzwalane dodatnim zboczem. 7483 - 4-bit binary full adder with fast carry - Pełny sumator 4-pozycyjny (binarny) z szybkim przeniesieniem. 7486 - Quad 2-input XOR gates - Czterokrotne, 2-wejściowe bramki exclusive-OR 7490 - 4-bit asynchronous decade counter with /2 and /5 sections, set(9) and reset - 4-bitowy asynchroniczny licznik dziesiętny. 7493 - 4-bit asynchronous binary counter with /2 and /8 sections and reset 4-bitowy asynchroniczny licznik dwójkowy. 74107 - Dual J-K flip-flop with clear - Dwukrotne przerzutniki J-K MS z wejściem zerowania. 58 74138 - 1-of-8 inverting decoder/demultiplexer. - Dekoder/demultiplekser z 3 linii na 8 linii. 74145 - 1-of-10 open-collector inverting decoder/demultiplexer. - Dekoder kodu BCD na kod dziesiętny z wyjściami typu otwarty kolektor. 74148 - 8-to-3 line inverting priority encoder with cascade inputs. - Enkoder priorytetowy typu "8 linii na 3 linie". 74153 - 8-to-2 line noninverting data selector/multiplexer with separate enables. - Podwójne, 4-wejściowe multipleksery/selektory danych. 74155 - 2-of-8 inverting decoder/demultiplexer with separate enables. Podwójne dekodery/demultipleksery z 2 linii na 4 linie. 74163 - 4-bit synchronous binary counter with load, reset, and ripple carry output. - Synchroniczny, 4-bitowy licznik dwójkowy z wejściem zerującym. 74164 - 8-bit serial-in parallel-out shift register with asynchronous reset and two AND gated serial inputs. - 8-bitowy rejestr przesuwający, z wejściami szeregowymi i wyjściami równoległymi. 74165 - 8-bit parallel-in serial-out shift register with asynchronous parallel load and two OR gated clock inputs. - 8-bitowy rejestr przesuwający, z wejściami równoległymi i wyjściami szeregowym. 74174 - 8-bit D flip-flop with reset. - Ośmiokrotne przerzutniki typu D, z wejściem zerującym. 74193 - 4-bit synchronous binary up/down counter with asynchronous load and reset, and separate up and down clocks. Carry and borrow outputs. - Synchroniczny binarny licznik rewersyjny o 2-wejściach zegarowych z kasowaniem. 74194 - 4-bit bidirectional universal shift register with asynchronous reset. 4-bitowy, dwukierunkowy rejestr przesuwający. 74197 - 4-bit asynchronous binary counter with /2 and /8 sections, load and reset. - 30 MHz, ustawialny, 4-bitowy, dwójkowy licznik/zatrzask. 59 74244 - Dual 4-bit 3-state noninverting buffer/line driver. - 8-bitowy (dwukrotny, 4-bitowy), buforowany odbiornik linii, wyjście proste. 74245 - 8-bit 3-state noninverting bus transceiver. Enable and direction pins control output enables. - 8-bitowa brama, wyjścia 3-stanowe, proste. 74259 - 1-of-8 addressable latch with reset. - 8-bitowy adresowany zatrzask. 60 3.3.4. Wyciąg z not katalogowych układów scalonych 74LS występujących na stanowisku laboratoryjnym 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 3.4. Literatura do ćwiczeń laboratoryjnych Literatura podstawowa: 1. Dziuda A., Krupa W.: Laboratorium Techniki Cyfrowej. Introligatorstwo – Mała Poligrafia. Jelenia Góra 2006. 2. Łakomy M., Zabrodzki J.: Cyfrowe układy scalone. WNT. Warszawa 1980. 3. Pieńkos J., Turczyński J.: Układy scalone TTL w systemach cyfrowych. WKiŁ. Warszawa 1986. 4. Sasal W.: Układy scalone serii UCY 74LS i UCY 74S. Parametry i zastosowania. WKiŁ. Warszawa 1987. 5. Sasal W.: Układy scalone serii UCA 74/ UCY 74. Parametry i zastosowania. WKiŁ. Warszawa 1985. Literatura uzupełniająca: 76 1. Układy logiczne. Ćwiczenia laboratoryjne. [red:] Łukowicz M. Oficyna Wydawnicza Politechniki Wrocławskiej. Wrocław 2002. 2. ATMEL - WinCUPL. User’s Manual. Copyright Atmel Corporation 1997. 3. Advantech Equipment Corp.: LABTOOL-48XP. Intelligent Universal Programmer. User’s Manual. Printed in Taiwan. July 2002. 4. NARZĘDZIA WSPOMAGAJĄCE PROJEKTOWANIE UKŁADÓW CYFROWYCH W STRUKTURACH PLD 4.1. Programy systemu CUPL System CUPL (Compiler Universal for Programmable Logic) jest kompilatorem firmy LOGICAL DEVICES INC. Podstawowe jego zalety to: • uniwersalność - moŜliwość zastosowania róŜnych typów układów PLD i pamięci pochodzących od róŜnych producentów; • prosta składnia - maksymalne uproszczenie języka przy zachowaniu moŜliwie duŜych moŜliwości; • samodokumentowanie się - konstrukcja pliku opisu logicznego nie wymaga Ŝadnych dodatkowych opisów; • łatwość współpracy z programatorami – mapa przepaleń tworzona jest m.in. w formacie jedec, który jest najczęściej wykorzystywanym formatem w programatorach. System CUPL tworzą następujące programy (rysunek 4.1): o CUPL (Universal Compiler for Programmable Logic) - uniwersalny kompilator do programowalnych układów. Pozwala on na translację zbiorów dyskowych zapisanych w języku specyfikacji zadania na zbiory zawierające rozkazy dla programatorów programowalnych układów logicznych. 77 o CSIM (CUPL Simulator) - symulator układów logicznych zaprogramowanych kodem wytworzonym przez kompilator CUPL. o CBLD (CUPL Build) - program zarządzający bibliotekami układów logicznych dla kompilatora CUPL. o PTOC (PALASM to CUPL Translator) - program do tłumaczenia zbiorów dyskowych zapisanych w formacie programu PALASM na format wejściowy kompilatora CUPL. Rys. 4.1. Schemat współpracy programów systemu CUPL. 78 Zbiory wejściowe do kompilatora (rozszerzenie *.PLD) i symulatora (rozszerzenie *.SI) są zbiorami zawierającymi wyłącznie znaki ASCII. Zbiory wyjściowe mogą być wyprowadzone w formatach: - *.JED - plik wejściowy dla programatora z wektorami testowymi (2) lub bez (1); - *.HEX - plik wejściowy dla programatora układów PROM; - *.HL - plik wejściowy dla programatora układów ImFL firmy Signetics; - *.DOC - plik dokumentacji - zawiera rozszerzone równania logiczne i tablice symboli zmiennych; - *.LST - plik błędów - lista błędów kompilacji; - *.SO - plik błędów wykrytych podczas symulacji; - *.MX - plik zawierający rozwinięcie makr. Kompilator CUPL moŜe słuŜyć jako program translacji na format Berkeley (*.PLA) oraz dodatkowo produkuje zbiór dla potrzeb symulatora (*.ABS).1 4.2. Podstawy języka CUPL Język CUPL słuŜy do tekstowego opisu układu cyfrowego. UmoŜliwia jego specyfikację przez podanie równań logicznych lub przez opis procedury przy uŜyciu instrukcji własnych. Dodatkowe moŜliwości organizacji tekstu źródłowego udostępnia preprocesor podobny w składni do preprocesora języka C. Podczas tworzenia projektu dobrze jest zastosować metodę analizy: „góra-dół”. Oznacza to, Ŝe naleŜy zacząć od ogólnego zarysu projektu, a później przesuwać się cały czas w głąb, definiując kolejne elementy. 1 Łuba T., Markowski M. A., Zbierzchowski B. Kompilatory układów logicznych. Oficyna Wydawnicza PW. Warszawa 1995. 79 Tekst opisu przechowywany jest w niesformatowanych plikach tekstowych o rozszerzeniu *.PLD. Do symulacji niezbędny jest dodatkowo plik o rozszerzeniu *.SI. 4.2.1. Elementy składni języka Komentarze Komentarze moŜna zamieszczać w pliku źródłowym. Rozpoczynają się i kończą znakami /* */. Tekst umieszczony między tymi symbolami trak- towany jest jako komentarz. Znaki te mogą obejmować jedną i więcej linii koniec linii nie oznacza końca komentarza. Przykłady: 1. /*******************************************/ /* To jest przyklad tworzenia tytulu lub */ /* bloku informacyjnego pliku zrodlowego* / /*******************************************/ 2. /* Inny przyklad tworzenia bloku informacyjnego */ 3. out1=in1 # in2; /* Funkcja OR */ out2=in1 & in2; /* Funkcja AND */ out3=in1 $ in2; /* Funkcja XOR */ Komentarz jest ignorowany przez kompilator. Plik źródłowy nie powinien zawierać kodów rozszerzonych (m.in. polskich znaków). Zmienne Zmienne są ciągami znaków alfanumerycznych (cyfry, litery, podkreślenia) zawierające co najmniej jedną literę. Określają one wyprowadzenia układu (pin), wewnętrzne węzły (node), stałe, sygnały wejściowe, wyjściowe oraz pośrednie lub zbiory sygnałów. Nazwy zmiennych mogą składać się maksymalnie z 31 znaków (przy dłuŜszych nazwach są one obcinane do 31 zna80 ków). W języku CUPL wyróŜnia się duŜe i małe litery. W skład nazwy zmiennej nie moŜe wchodzić spacja. Nazwy zmiennych nie mogą być nazwami zarezerwowanych symboli języka CUPL (tabela 4.1) oraz nazwami zastrzeŜonymi słów kluczowych (tabela 4.2). Tabela 4.1. Zarezerwowane symbole języka CUPL. & # ( ) - * + [ ] / : . .. /* */ ; , ! ' = @ $ ^ % Tabela 4.2. Zarezerwowane słowa kluczowe języka CUPL. APPEND CONDITION DEVICE FORMAT IF MACRO OUT PRESENT SEQUENCED TABLE ASSEMBLY DATE ELSE FUNCTION JUMP MIN PARTNO REV SEQUENCEJK ASSY DEFAULT FIELD FUSE LOC NAME PIN REVISION SEQUENCERS COMPANY DESIGNER FLD GROUP LOCATION NODE PINNODE SEQUENCE SEQUENCET Przykłady poprawnych nazw zmiennych: a0, A0, 8250_ENABLE, Real_time_clock_interrupt_address; 81 Zmienne indeksowe Są to zmienne zawierające w nazwie numer. Zakończone zawsze liczbą dziesiętną z zakresu od 0 do 31. Zmiennymi takimi mogą być nazwy opisujące linie adresowe, linie danych lub inne kolejno numerowane elementy. Indeksowanie najlepiej zaczynać od zera. Zmienna z indeksem 0 zawsze oznacza najmniej znaczący bit. Przykłady poprawnych zmiennych indeksowych: a23, D07, D7, counter_bit_3. Zmienne D07 i D7 są róŜnymi zmiennymi. Listy Listy są obiektami umoŜliwiającymi skrócony zapis grupy zmiennych. Są one powszechnie uŜywane przy deklaracji wielu wyprowadzeń i węzłów, deklaracji pól bitowych, równań logicznych i zbioru operacji. Nawiasy prostokątne [ ] ograniczają zasięg deklaracji listy. Format listy ma postać: [zm1, zm2, … zmn] Gdy zmienne są indeksowe, moŜna zastosować skróconą notację; [zmm..n] gdzie: m - pierwszy indeks w liście, n – ostatni indeks w liście. Przykłady: [UP, DOWN, LEFT, RIGHT] [A0, A1, A2, A3, A4, A5, A6, A7] [A0..2, A3, A4, A5..7] [A0..7, B0..3] 82 Stałe liczbowe Liczby mogą być reprezentowane w jednym z czterech dostępnych formatów: binarnym - ‘b’, ósemkowym - ‘o’, dziesiętnym - ‘d’ oraz szesnastkowym - ‘h’. W pliku źródłowym przyjmuje się przez domniemanie, Ŝe uŜywane stałe są w zapisie szesnastkowym, oprócz liczb określających numery wyprowadzeń (pin) i indeksów zmiennych indeksowych, dla których przyjmuje się, Ŝe są w systemie dziesiętnym. Wszystkie operacje na liczbach realizowane są z dokładnością 32-bitową, daje to zakres wartości od 1 do 232- 1. W zapisach dwójkowych, ósemkowych i szesnastkowych liczby w swym zapisie mogą zawierać znak X - wartość nieoznaczona. Przykłady zapisu liczb w czterech formatach przedstawia tabela 4.3. Tabela 4.3. Zapis liczb w języku CUPL. Format Liczba Wartość dziesiętna Dwójkowy ‘b’0 lub ‘B’0 0 Dwójkowy ‘b’1101 lub ‘B’1101 13 Ósemkowy ‘o’663 lub ‘O’663 435 Ósemkowy (zakres wartości) ‘O’[300..477] 192..314 Dziesiętny ‘d’79 lub ‘D’79 79 Szesnastkowy ‘h’BA lub ‘H’BA 186 Deklaracje Deklaracje wyprowadzeń z układu pin Deklaracja pin przypisuje nazwy (zmienne) dla sygnału na wyprowadzeniu układu scalonego o podanym numerze oraz określa jego polaryzację. Składnia ma postać: PIN pin_n=[!]zm; 83 gdzie: PIN - wymagane słowo kluczowe, pin_n - zapisany dziesiętnie numer wyprowadzenia obudowy, zm - nazwa (zmienna) przypisanego sygnału, ! - definiowanie polaryzacji sygnału wejściowego lub wyjściowego, polaryzacja ujemna, = - operator przypisania, który powoduje przypisanie wartości wyraŜenia zmiennej lub liście zmiennych, Przykłady: pin 1 = clock; /* Register Clock */ pin 2 = !enable; /* Enable I/O Port */ pin [3,4] = ![stop,go]; /* Control Signals */ pin [5..7] = [a0..2]; /* Address Bits 0-2 */ W deklaracji wyprowadzeń z układu nie podaje się, czy dane wyprowadzenie jest wejściem, wyjściem albo jest dwukierunkowe. Deklaracje węzłów node, pinnode Niektóre układy PLD zawierają zasoby wewnętrzne, które generują funkcje logiczne, ale nie są dostępne bezpośrednio z wyprowadzeń zewnętrznych układu. Dostęp do nich jest moŜliwy przez zdefiniowanie węzłów wewnętrznych (buried). W celu zdeklarowania zmiennych dla ukrytych funkcji uŜywa się słowa kluczowego NODE, którego format jest następujący: NODE [!] zm; gdzie: NODE - wymagane słowo kluczowe, ! – opcjonalnie, określa polaryzację sygnału, zm – nazwa (zmienna) przypisanego sygnału. Przykład: 84 NODE [State0..5]; /* wewnetrzne bity stanu */ NODE !Invert; /* For Complement Array */ W celu wyraźnego zdefiniowania ukrytych węzłów uŜywa się słowa kluczowego PINNODE. UmoŜliwia ono połączenie węzła o numerze n ze zmienną. Format deklaracji jest następujący: PINNODE node_n = [!]zm; gdzie: PINNODE - wymagane słowo kluczowe, node_n – numer węzła w zapisie dziesiętnym, ! - opcjonalnie, określa polaryzację sygnału, zm - nazwa (zmienna) przypisanego sygnału. = - operator przypisania, który powoduje przypisanie wartości wyraŜenia zmiennej lub liście zmiennych, Przykład: PINNODE [29..34] = [State0..5]; PINNODE 35 = !Invert; Deklaracje pól bitowych Deklaracja pola bitów łączy pojedynczą zmienną z grupą bitów. Gdy uŜyte zostanie słowo kluczowe FIELD, kompilator generuje pojedynczą 32-bitową zmienną, która jest uŜywana do reprezentacji zmiennych w polu bitowym. Składnia ta jest głównie uŜywana do definicji adresów i szyn danych. Format jest następujący: FIELD zm = [zm1, zm2, ... zmn]; Przykład: FIELD count=[Q3..0]; FIELD mode =[clr,dir]; Zmienna utworzona za pomocą słowa kluczowego FIELD moŜe zawierać maksymalnie 32 bity. Operatory logiczne Operatorami logicznymi moŜna działać na zmienne i listy - wynikami są odpowiednio zmienne i listy. W języku CUPL dostępne są cztery standardowe operatory logiczne: NOT, AND, OR, XOR. 85 Sposób zapisu operacji logicznych oraz kolejność wykonania przedstawia tabela 4.4. Tabela 4.4. Operatory logiczne. Operator Opis ! NOT- negacja (dopełnienie) !A 1 & AND - koniunkcja A&B 2 # OR - alternatywa A#B 3 $ XOR - róŜnica symetryczna A$B 4 Przykład Kolejność Przykłady: bitowe operatory logiczne. WyraŜenie: [A0, Al, A2, A3] # [B0, B1, B2, B3]; jest równowaŜne wyraŜeniu: [AO # B0, A1 # B1, A2 # B2, A3 # B3]; listowe operatory logiczne. WyraŜenie: [D0, D1, D2, D3] &; jest równowaŜne wyraŜeniu ; D0 & D1 & D2 & D3; Operatory arytmetyczne i równań Operatorami arytmetycznymi moŜna działać na zmienne i listy - wynikami są odpowiednio zmienne i listy. W języku CUPL dostępnych jest sześć operatorów arytmetycznych: potęgowanie, mnoŜenie, dzielenie, moduł, dodawanie, odejmowanie. Sposób zapisu operacji arytmetycznych oraz kolejność wykonania przedstawia tabela 4.5. 86 Tabela 4.5. Operatory arytmetyczne i równań. Operator Opis Przykład Kolejność ** Potęgowanie 2**3 1 * MnoŜenie 2*4 2 / Dzielenie 6/3 2 % Modulo 7%5 2 + Dodawanie 4+5 3 - Odejmowanie 6-4 3 Równania logiczne Równania logiczne umoŜliwiają połączenie zacisków wejściowych z wyjściowymi poprzez zaprojektowane funkcje. Sposób zapisu równań jest następujący: [!]zm[.ext] = wyr; gdzie: zm - pojedyncza zmienna lub lista zmiennych, zdefiniowana zgodnie z zasadami notacji listowej, .ext - opcjonalne rozszerzenie umoŜliwiające przyłączenie funkcji do większości węzłów wewnątrz programowalnych układów, wyr - wyraŜenie będące kombinacją zmiennych i operatorów logicznych, = - operator przypisania, który powoduje przypisanie wartości wyraŜenia zmiennej lub liście zmiennych, ! – definiowanie polaryzacji sygnału, w tym kontekście jest to zanegowanie wyraŜenia stojącego po prawej stronie znaku. Jeśli zm nie jest nazwą (zmienną) zadeklarowaną uprzednio w instrukcji PIN i NODE, kompilator automatycznie przyjmie, Ŝe równanie definiuje nową zmienną wewnętrzną, do której moŜna się odwołać w innych wyraŜeniach logicznych. Q0.D=Q1 & Q2 & Q3; /* Wyjscie w D flip-flop */ 87 Q1.J = Q2 # Q3; /* Wyjscie w JK flip-flop */ Q1.K = Q2 & !Q3; MREQ=READ # WRITE; /* Zmienna posrednia */ [D0..3] = 'h'FF; /* Przyporzadkowanie wartosci stałej */ W miejsce 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.: Przykłady: [Q2..0].OE=!PinOE; ⇔ Q2.OE=!PinOE; Q1.OE=!PinOE; Q0.OE=!PinOE; Instrukcja APPEND Standardowo w równaniach logicznych tylko jedno wyraŜenie moŜe być połączone z jedną zmienną. Słowo kluczowe APPEND umoŜliwia połączenie jednej zmiennej z wieloma wyraŜeniami. Sposób uŜywania APPEND jest identyczny do definiowanych równań logicznych, z tym Ŝe słowo kluczowe występuje na początku kaŜdego równania. Instrukcja ma postać: APPEND [!]zm[.ext] = wyr; Wynikiem stosowania słowa APPEND jest suma logiczna OR dla wszystkich wyraŜeń. Przykład: APPEND Y = A0 & A1; APPEND Y = B0 & B1; APPEND Y = C0 & C1; PowyŜsze trzy równania są równowaŜne równaniu: Y = A0 & A1 # B0 & B1 # C0 & C1; 88 Operacje na zbiorach Wszystkie operacje mogą być wykonywane na pojedynczych bitach (przykładowo na sygnałach wejściowych) lub na informacjach zgrupowanych w zbiory. Operacje na zbiorach moŜna stosować pomiędzy zbiorem a zmienną lub wyraŜeniem, lub pomiędzy dwoma zbiorami. Wynikiem operacji między zbiorem a zmienną (lub wyraŜeniem) jest nowy zbiór, w którym operacje są wykonywane pomiędzy kaŜdym elementem i zmienną (lub wyraŜeniem). JeŜeli operacja wykonywana jest na dwóch zbiorach, muszą mieć one te same rozmiary (ilość elementów). W wyniku powstaje nowy zbiór złoŜony z elementów stanowiących wynik operacji pomiędzy elementami kaŜdego ze zbiorów. Przykład: WyraŜenie [D0, D1, D2, D3] & read jest równowaŜne [D0 & read, D1 & read, D2 & read, D3 & read] Gdy operacje są wykonywane pomiędzy dwoma zbiorami, zbiory muszą mieć taki sam wymiar (tzn. taką samą liczbę elementów). Wynikiem operacji między zbiorami jest nowy zbiór, w którym operacje są wykonywane pomiędzy kolejnymi elementami kaŜdego ze zbiorów. Przykład: WyraŜenie: [A0, A1, A2, A3] & [B0, B1, B2, B3] jest równowaŜne [A0 & B0, A1 & B1, A2 & B2, A3 & B3] Do grupowania zmiennych w zbiór, który moŜe być identyfikowany poprzez jedną zmienną słuŜy słowo kluczowe FIELD. Przykład: FIELD a_inputs = [A0, A1, A2, A3]; 89 FIELD b_inputs = [B0, B1, B2, B3]; Operacja iloczynu logicznego pomiędzy zbiorami wygląda następująco: a_inputs & b_inputs Przy operacjach pomiędzy zbiorami i liczbami, liczby są traktowane jako maska bitów. Przykładowo przedstawiono równania logiczne dla 4-bitowego licznika: FIELD count=[Q3..0]; cound.d = ‘b’0001 & (!Q0) # ‘b’0010 & (Q1 $ Q0) # ‘b’0100 & (Q2 $ Q1 & Q0) # ‘b’1000 & (Q3 $ Q2 & Q1 &Q0); Są one równowaŜne równaniom: Q0.d = ! Q0; Q1.d = Q1 $ Q0; Q2.d = Q2 $ Q1 & Q0; Q3.d = Q3 $ Q2 & Q1 & Q0; Operator równości Operator równości pozwala sprawdzić równość pomiędzy zbiorami zmiennych a stałą na poziomie poszczególnych pozycji bitowych. Realizuje pojedyncze wyraŜenie logiczne. Pozycje binarne w zmiennej są porównywane z odpowiadającymi im pozycjami w zbiorze. Gdy pozycja binarna w zmiennej jest równa 1, element w zbiorze pozostaje niezmieniony, gdy jest równa 0 element zostaje zanegowany, gdy jest równa binarnemu X element zostaje usunięty. Wynikowe elementy zostają przekształcone w postać koniunkcji, celem stworzenia pojedynczych wyraŜeń. Format operatora równości jest następujący: 1. [zm1, zm2, ... , zmn]: constant; 2. bit_fileld_zm: constant; 90 gdzie: [zm1, zm2, ... , zmn] - zbiór zmiennych, constant - stała (standardowo w kodzie szesnastkowym), bit_field_zm - zmienna zdefiniowana za pomocą słowa kluczowego FIELD, : - operator równości. Przykład: WyraŜenia 1. select = [A3..0]:’h’D; 2. select = [A3..0]:'b'1X0X; są równowaŜne 1. select = A3 & A2 & !A1 & A0 ; 2. select = A3 & !A1 ; Operator równości moŜna równieŜ wykorzystać, gdy operacje wykonywane są na identyczności. Format jest następujący: [zm, zm,..., zm]:op; co jest równowaŜne zm op zm op ... zm; gdzie: op - operator logiczny, zm – zmienna. Przykład: WyraŜenia [A3,A2,A1,A0]:& [B3,B2,B1,B0]:# [C3,C2,C1,C0]:$ są równowaŜne wyraŜeniom A3 & A2 & A1 & A0 B3 # B2 # B1 # B0 C3 $ C2 $ C1 $ C0 91 Operator równości moŜe być takŜe stosowany do tworzenia funkcji tablicowej wyjściowych wartości. Dla przykładu przedstawiono zapis równań logicznych tabeli stanów zapisanej w tabeli 4.6. Tabela 4.6. Tabela prawdy. in2 in1 in0 out1 out0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 Przykład: FIELD input = [in2..0]; FIELD output = [out1, out0] ; output=input:0&[0,0]#input:1&[0,1]#input:2&[1,0]&input:3[0,1] #input:4&[1,1]#input:5&[0,1]#input:6&[1,0]&input:7[1,1] Operacje na zakresach liczb Operacje na zakresach liczb są podobne do operatora równości, przy czym stałą zastępuje zbiór stałych o określonym zakresie ograniczonym nawiasami [ ]. Operacja ta sprawdza równość pomiędzy zbiorem zmiennych a kaŜdą ze stałych znajdujących się w obrębie rozwaŜanego zakresu. Format jest następujący: 1. [zm1, zm2, ..., zmn]:[stala_lo..stala_hi]; 2. bit_field_zm:[stala_lo..stala_hi]; gdzie: [zm1, zm2, ..., zmn] - zbiór zmiennych, stala_lo, stala_hi - liczby definiujące zakres operacji. 92 Przykład: FIELD address =[A3..0]; /* definicja szyny adresowej */ WyraŜenie select = address:[C..F]; /* rownanie zakresu */ jest równowaŜne select = address:C # address:D # address:E # address:F; co moŜna rozwinąć do postaci: select = A3 & A2 & !A1 & !A0 # A3 & A2 & !A1 & A0 # A3 & A2 & A1 & !A0 # A3 & A2 & A1 & A0; Tablice prawdy W niektórych przypadkach najłatwiejszym sposobem zapisu równań logicznych jest zastosowanie metody opisowej, czyli tablicy prawdy. CUPL umoŜliwia za pomocą słowa kluczowego TABLE utworzyć taką tablicę. W tablicy prawdy naleŜy zdefiniować zaleŜności pomiędzy kombinacjami zmiennych wejściowych i wyjściowych, a następnie sprecyzować jednoznaczne powiązania pomiędzy zdekodowanymi wartościami wejścia i listą zmiennych wyjściowych. Format uŜycia operatora TABLE jest następujący: TABLE zm_list_1 ⇒ zm_list_2 { input_0 => output_0; ......................... input_n => output_n; } gdzie: zm_list_1 - określenie zmiennych wejściowych, 93 zm_list_2 - określenie zmiennych wyjściowych, input_n - wartość lub lista wartości zmiennych wejściowych odpowiadających stanowi n, output_n - wartość lub lista wartości zmiennych wyjściowych odpowiadających stanowi n, => - operator powiązania zmiennych wejściowych z wyjściowymi. Przykład: opis dekodera kodu szesnastkowego na kod BCD FIELD input = [in3..0] ; FIELD output = [out4..0] ; TABLE input => output { 0=>00; 1=>01; 2=>02; 3=>03; 4=>04; 5=>05; 6=>06; 7=>07; 8=>08; 9=>09; A=>10; B=>11; C=>12; D=>13; E=>14; F=>15; } Instrukcja CONDITION Słowo kluczowe CONDITION umoŜliwia opis funkcji logicznych na wyŜszym poziomie niŜ pozwala na to pisanie standardowych równań logicznych. Instrukcja ma postać: CONDITION { IF wyr0 OUT . . 94 zm0; IF wyrn OUT DEFAULT zmn; OUT zmM ; } gdzie: wyrX - wyraŜenie logiczne złoŜone ze zmiennych wejściowych funkcji, zmX - nazwa (zmienna) zadeklarowana w instrukcji PIN lub grupa takich nazw (zmiennych) zapisanych w notacji listowej, Zapis taki oznacza, Ŝe zmienna zmX ma być ustawiona w stan aktywny (jeden lub zero w zaleŜności od polaryzacji podanej w deklaracji PIN), gdy spełniony jest warunek wyrX; jeŜeli Ŝaden z warunków nie jest spełniony, układ ustawia wyjścia wg opcjonalnej instrukcji DEFAULT. Przykład: opis dekodera dwuwejściowego na kod 1 z 4 PIN [1,2] = [A,B]; /* Data Inputs */ PIN 3 = !enable; /* Enable Input */ PIN [12..15] = [Y0..3]; /* Decoded Outputs */ PIN 14 = no_match; /* Match Output */ CONDITION { IF enable & !B & !A out Y0; IF enable & !B & A out Y1; IF enable & B & !A out Y2; IF enable & B & A out Y3; } 95 Rozszerzenia Rozszerzenia mogą być dodawane do nazw zmiennych w celu wskazania specyficznych funkcji powiązanych z głównymi węzłami wewnątrz programowalnego układu. Kompilator sprawdza rozszerzenie zmiennej w celu stwierdzenia, czy jest ono poprawne dla wybranego programowalnego układu oraz czy jego uŜycie nie jest w konflikcie z innymi uŜytymi rozszerzeniami. CUPL uŜywa tych rozszerzeń, Ŝeby skonfigurować makrokomórki układu PLD. MoŜna w ten sposób wykorzystać wbudowane w strukturę układu przerzutniki oraz bufory trójstanowe. Na rysunku 4.2 przedstawiono przykład uŜycia rozszerzeń zmiennych. Rys. 4. 2. Obwód ilustrujący uŜycie rozszerzeń. Tabela 4.7 przedstawia listę najczęściej uŜywanych rozszerzeń. Kompletną listę moŜna znaleźć w podręczniku „CUPL PLD/FPGA Language Compiler” (Wincupl2→Help→ CUPL Programmers Reference). 96 Tabela 4.7. Lista rozszerzenia zmiennych. Rozszerzenie Strona podstawienia .AP L Asynchroniczne ustawienie przerzutnika. .AR L Asynchroniczne zerowanie przerzutnika. .CE L Wejście zezwalające CE. .CK L Programowalny zegar przerzutnika. .CKMUX L Wybór multipleksowanego zegara. .D L Wejście informacyjne przerzutnika typu D. .DFB R Wyjście przerzutnika D w trybie kombinacyjnym makroceli. .DQ R Wyjście Q przerzutnika typu D. .INT R Zwrotny sygnał z wewnętrznego wyjścia rejestrowego. .IO R SprzęŜenie zwrotne od końcówki wyjściowej. .IOD R SprzęŜenie zwrotne przez przerzutnik typu D. .IOL R SprzęŜenie zwrotne przez „latch”. .J L Wejście J przerzutnika typu JK. .K L Wejście K przerzutnika typu JK. .L L Wejście informacyjne przerzutnika typu „latch”. .LE L Wyjście Latch Enable przerzutnika typu „latch”. .LQ R Wyjście Q przerzutnika typu „latch”. .OE L Programowalne Output Enable. .R L Wejście R przerzutnika typu RS. .S L Wejście S przerzutnika typu RS. .SP L Wejście synchronicznego ustawiania przerzutnika. .T L Wejście T przerzutnika typu T. .TFB R Wyjście przerzutnika T w trybie kombinacyjnym makroceli. Opis 97 Rozszerzenie .AP: Rozszerzenie .AP stosowane jest celem zdefiniowania wyraŜenia dla asynchronicznego sygnału ustawienia przerzutnika. Na przykład, wyraŜenie "Y.AP = A & B;" powoduje, Ŝe przerzutnik jest asynchronicznie ustawiany, kiedy A i B są logicznie prawdziwe. Rozszerzenie .AR: Rozszerzenie .AR stosowane jest celem zdefiniowania wyraŜenia dla asynchronicznego sygnału zerowania przerzutnika. Jest ono stosowane dla układów mających jedną lub więcej linii zaleŜności podłączonych do asynchronicznego przerzutnika. Rozszerzenie .CE: Rozszerzenie .CE stosowane jest przy wykorzystaniu przerzutników typu D, które posiadają wejścia wyzwalane zegarem (przerzutniki D-CE). SłuŜy do sprecyzowania wejść do termu CE (Clock Enable) przerzutnika. JeŜeli są nie 98 uŜywane, winny być ustawione w stan 1 - przerzutnik zachowuje się jak przerzutnik typu D. Rozszerzenie .CK: Rozszerzenie .CK stosowane jest do określenia zegara sterującego określonym termem. UŜywamy go celem podłączenia zegara przerzutnika do dedykowanego pinu. Rozszerzenie .CKMUX: Rozszerzenie .CKMUX stosowane jest do podłączenia zewnętrznego zegara sterującego przerzutnikiem. UŜywanie rozszerzenia . CKMUX jest bardziej wydajne niŜ uŜywanie rozszerzenia .CK. Rozszerzenie .D: Rozszerzenie .D stosowane jest do określenia wejścia D do przerzutnika. Opcja ta powoduje skonfigurowanie przez kompilator makrokomórki w układach PLD jako przerzutnik typu D. 99 Rozszerzenie .DFB: Rozszerzenie .DFB stosowane jest do skonfigurowania makrokomórek jako wyjście kombinacyjne w trybie kombinacyjnym. Rozszerzenie .DBF pozwala na realizację funkcji wejścia lub wyjścia jako podzestaw funkcji wejściowo-wyjściowej (I/O function). Rozszerzenie .DQ: Rozszerzenie .DQ stosowane jest do sprecyzowania wejścia D do przerzutnika. Opcja ta powoduje automatyczne ustawienie wejścia jako rejestrowe. Nie jest ono uŜywane do sprecyzowania wyjścia Q przerzutnika D. Rozszerzenie .INT: Rozszerzenie .INT stosowane jest do określenia wewnętrznej ścieŜki połączeń zwrotnych. MoŜe być wykorzystane do określenia ścieŜek zwrotnych 100 kombinatoryki typu „buried” zarówno dla wejść rejestrowych oraz kombinacyjnych. Rozszerzenie .IO: Rozszerzenie .IO stosowane jest do zaznaczenia połączeń zwrotnych pinów z komórkami. Jest ono przydatne gdy sam proces projektowy wymaga uŜycia pinów I/O oraz logiki typu „buried” w obrębie tej samej makrokomórki. Jest równieŜ uŜyteczne przy implementacji dwukierunkowych wyjść w CUPL. Rozszerzenie .J i .K: Rozszerzenie .J i .K stosowane jest do określenia wejść J-K do przerzutnika. Opcja ta powoduje skonfigurowanie przez kompilator makrokomórki w układach PLD jako przerzutnika typu J-K. Rozszerzenie .L: 101 Rozszerzenie .L stosowane jest do określenia wejść typu „zatrzask” (latch). Opcja ta powoduje skonfigurowanie przez kompilator makrokomórki w układach PLD jako przerzutnika typu zatrzask. Rozszerzenie .LE: Rozszerzenie .LE stosowane jest do określenia równań obsługujących przerzutniki typu „zatrzask” (latch). Jest wymagane przy projektowaniu z wykorzystaniem moŜliwości wyzwalania przerzutników poziomem. Powoduje ono, Ŝe term produkcji łączony jest z blokiem LE. Rozszerzenie .LQ: Rozszerzenie .LQ stosowane jest do specyfikacji zatrzasku wejściowego (input latch). Opcja ta powoduje automatyczne ustawienie wejścia jako zatrzaskowe (latched). Rozszerzenie .OE: 102 Rozszerzenie .OE stosowane jest do specyfikacji sygnału wyjściowego dla termu produkcji. Jest wymagane przy wykorzystywaniu dwukierunkowych pinów I/O oraz indywidualnie programowalnych termów wyjściowych. Rozszerzenie .S i .R: Rozszerzenie .S i .R stosowane jest do określenia wejść S-R do przerzutnika. Opcja ta powoduje skonfigurowanie przez kompilator makrokomórki w układach PLD jako przerzutniki typu S-R. Rozszerzenie .SP: Rozszerzenie .SP stosowane jest do ustawienia synchronicznego wejścia ustawiającego preset przerzutnika na określone wyraŜenie. Na przykład równanie Y.SP = A & B; /*gdzie A i B sa wejsciami*/ Powoduje, Ŝe wyjście Y jest ustawiane synchronicznie z zegarem lokalnym uŜytym w makroceli, gdzie wejścia A i B są logicznie prawdziwe. Rozszerzenie .T: 103 Rozszerzenie .T stosowane jest do określenia wejścia T do przerzutnika. Opcja ta powoduje skonfigurowanie przez kompilator makrokomórki w układach PLD jako przerzutniki typu T. Rozszerzenie .TFB: Rozszerzenie .TFB stosowane jest wówczas, gdy mikrokomórka jest ustawiona na kombinacyjne wyjście, ale przerzutnik T pozostaje podłączony do wyjścia. Rozszerzenie .TEB pozwala na sprzęŜenie zwrotne rejestrowej reprezentacji kombinacyjnego wyjścia z powrotem do układu programowalnego. 4.2.2. Preprocesor Kompilator języka CUPL zawiera preprocesor umoŜliwiający makrogenerację, generację warunkową oraz włączenie do programów zawartości wskazanych plików. Wiersze programu zaczynające się znakiem $ słuŜą do komunikacji z preprocesorem. W instrukcjach tych nie występuje znak średnika ani znak przypisania. Instrukcje rozpoznawane przez preprocesor przedstawia tabela 4.8. Tabela 4.8. Instrukcje preprocesora. 104 $DEFINE $IFDEF $UNDEF $ELSE $IFNDEF $REPEAT $ENDIF $INCLUDE $REPEND $MACRO $MEND W instrukcjach preprocesora duŜe i małe litery nie są rozróŜnialne, ale zwyczajowo pisze się je duŜymi literami. Instrukcja $DEFINE Instrukcja $DEFINE zastępuje ciąg znakowy przez określony operator, liczbę lub zmienną. Format instrukcji jest następujący: $DEFINE argument1 argument2 gdzie: argument1 - ciąg znakowy, argument2 - operator, liczba lub zmienna. Przykład: $DEFINE ON 'b'1 $DEFINE OFF ‘b'0 $DEFINE PORTC 'h'3F0 $DEFINE pozwala równieŜ tworzyć osobisty zbiór logicznych operatorów. Przykład: $DEFINE { /* zastepuje poczatek komentarza $DEFINE } */ zastepuje koniec komentarza $DEFINE / ! zastepuje Negacje $DEFINE * & zastepuje AND $DEFINE + # zastepuje OR $DEFINE :+: $ zastepuje XOR Instrukcja $UNDEF Instrukcja $UNDEF odwraca działanie komendy $DEFINE. Zleca zaprzestanie zastępowanie identyfikatora. Format instrukcji jest następujący: $UNDEF argument gdzie: argument - ciąg znakowy uŜyty w komendzie $DEFINE. Instrukcję $UNDEF moŜna uŜyć do przedefiniowania ciągu znakowego. Przykład: Pin [3..6] = [in3..0]; 105 $DEFINE S0 ‘B’0010 select1 =[in3..0]:’S0; $UNDEF S0 $DEFINE S0 ‘B’1000 select2=[in3..0]:S0; Instrukcja $INCLUDE Instrukcja $INCLUDE zleca wstawienie w jej miejsce zawartości pliku o podanej nazwie. Format instrukcji jest następujący: $INCLUDE filename gdzie: filename – nazwa zbioru dyskowego. Instrukcja $IFDEF Instrukcja $IFDEF sprawdza, czy identyfikator jest aktualnie zdefiniowany w preprocesorze. Format instrukcji jest następujący: $IFDEF argument Instrukcja $IFNDEF Instrukcja $IFNDEF sprawdza, czy identyfikator nie jest aktualnie zdefiniowany w preprocesorze. Format instrukcji jest następujący: $IFNDEF argument Po instrukcjach sterujących $IFDEF oraz $IFNDEF następuje dowolna liczba wierszy programu, wśród których moŜe wystąpić wiersz: $ELSE Całą konstrukcję kończy instrukcja: $ENDIF Przykład: $DEFINE Prototype X /* define Prototype*/ $IFDEF Prototype pin 1 = memreq; /* memory request on */ /* pin 1 of prototype*/ pin 2 = ioreq; 106 /* I/O request on*/ /* pin 2 of prototype*/ $ELSE pin 1 = ioreq; /* I/O request on*/ /* pin 1 of PCB*/ pin 2 = memreq; /* memory request on */ /* pin 2 of PCB*/ $ENDIF JeŜeli sprawdzony warunek jest prawdziwy, to wszystkie wiersze pomiędzy $ELSE i $ENDIF są ignorowane. Natomiast, jeŜeli warunek jest fałszywy, to są ignorowane wiersze pomiędzy testem a instrukcją $ELSE lub $ENDIF w przypadku braku $ELSE. 4.2.3. Opis automatów Model układu sekwencyjnego w języku CUPL przedstawia rysunek 4.3. UŜywa on sześciu komponentów: wejść, logiki kombinacyjnej, rejestrów składowych, bitów stanu, wyjść rejestrowych i wyjść kombinacyjnych. Rys. 4.3. Model układu sekwencyjnego. Wejścia - sygnały wejściowe do układu mające swój początek w innym układzie. Logika kombinacyjna - dowolna kombinacja bramek logicznych (najczęściej AND i OR), które generują sygnał wyjściowy o czasie opóźnienia Tpd (propagation delay time). Rejestry składowe - przerzutniki, które otrzymują na wejście informacje z logiki kombinacyjnej układu sekwencyjnego. Niektóre przerzutniki konfigu107 rowane są na potrzeby bitów stanu, inne na potrzeby rejestrowych wyjść. Rejestrowe wyjście charakteryzuje się czasem Tco (clock to out time), który reprezentuje opóźnienie pomiędzy zboczem sterującym sygnału zegara a wystąpieniem zmian na odpowiednim wyjściu przerzutnika. Bity stanu - wyjścia przerzutników, które uŜywane są przy sprzęŜeniach zwrotnych. Zawierają informacje o aktualnym stanie przerzutników. Wyjścia kombinacyjne – wyjścia bezpośrednie z układu logiki kombinacyjnej. Mogą być funkcją bitu stanu lub sygnału wejściowego. Generują sygnał wyjściowy o czasie opóźnienia Tco + Tpd. Wyjścia rejestrowe – wyjścia z układu przerzutników składowych. Rysunek 4.4 przedstawia przebiegi czasowe na poszczególnych wejściach i wyjściach układu sekwencyjnego. Rys. 4.4. Przebiegi czasowe dla układu sekwencyjnego. Aby zaimplementować układ sekwencyjny, CUPL udostępnia składnię, która pozwala wykonać kaŜdą funkcję moŜliwą w automacie. śeby wprowa- 108 dzić funkcję logiczną za pomocą grafu przejść stanów, stosuje się składnię złoŜoną ze słów kluczowych: SEQUENCE, PRESENT. Opis układu sekwencyjnego jest moŜliwy przez zastosowanie instrukcji o następującym formacie: SEQUENCE state_zm_list { PRESENT state_n0 statements; . . . PRESENT state_nn statements; } gdzie: state_zm_list - lista zmiennych uŜywanych w grafie przejść stanów, state_n - numer stanu i zdekodowana wartość z listy state_zm_list, jest on liczbą, która jest unikalna dla kaŜdego stanu w składni SEQUNECE ..PRESENT, statements - warunki lub wyraŜenia wyjściowe opisane w następnych sekcjach, słowa kluczowe NEXT, OUT, IF. Przejścia warunkowe W składni SEQUENCE .. PRESENT moŜna umieścić warunki, od których będzie zaleŜało przejście między stanami. Format składni jest następujący: SEQUENCE state_zm_list { PRESENT state_n IF expr NEXT state_n OUT [!]zm ... OUT [!]zm; .............. IF expr NEXT state_n OUT [!]zm ... OUT [!]zm; [[DEFAULT] NEXT state_n OUT [!]zm;] } 109 gdzie: NEXT: - słowo kluczowe określające stan następny. OUT: - słowo kluczowe określające stan wyjścia powiązanego z przejściem w określonym stanie. IF: - słowo kluczowe określające warunkową zmianę stanu. Listę warunkowych instrukcji NEXT moŜe opcjonalnie kończyć instrukcja DEFAULT. Określa ona do jakiego stanu automat ma się przełączyć, gdy Ŝaden z warunków wcześniejszych nie jest spełniony. Instrukcję DEFAULT naleŜy stosować z rozwagą, poniewaŜ powoduje ona dodanie warunku będącego negacją sumy wszystkich warunków wcześniejszych. Sygnały generowane przez automat opisuje instrukcja OUT. Sygnały te mogą być wyprowadzane jako kombinacyjne lub zatrzaskiwane w przerzutnikach. Mówimy wówczas o instrukcji OUT asynchronicznej lub synchronicznej. Ponadto sygnały te mogą zaleŜeć tylko od zmiennej stanu - sygnały bezwarunkowe - lub od zmiennych stanu oraz sygnałów wejściowych - sygnały warunkowe. 4.2.4. Format pliku źródłowego Struktura opisu pliku źródłowego powinna być zgodna z ustalonym szablonem i powinna zawierać następujące elementy: nagłówek, blok tytułowy, deklarację wyprowadzeń układu (pinów), definicję zmiennych przejściowych, równania logiczne. Opisy poszczególnych elementów pliku źródłowego zilustrowano rysunkami programu Wincupl znajdującego cupl\Examples\Atmel\Barrel22.pld. 110 się w katalogu Win- Nagłówek Nagłówek (tabela 4.9) umoŜliwia identyfikację pliku źródłowego dla celów archiwalnych. Jest on umieszczany na początku pliku. Na jego podstawie moŜna określić: autora, czas powstania projektu, typ wykorzystywanego układu itp. CUPL dostarcza dziesięciu słów kluczowych do wykorzystania w nagłówku. W przypadku braku któregokolwiek z nich, kompilator wysyła komunikat z ostrzeŜeniem. Po słowach kluczowych musi znajdować się informacja zakończona znakiem średnika (rysunek 4.5). Tabela 4.9. Nagłówek pliku źródłowego. Słowa kluczowe Znaczenie Name opis nazwy pliku (do 32 znaków - w systemie DOS do 8 znaków). Jeśli pole Name nie zawiera nazwy pliku, CUPL nie wygeneruje pliku wynikowego. Partno określenie numeru części dla konkretnego projektu (np.: opis układu, w którym znajduje się element) - nie jest to nazwa typu elementu PLD. Date data ostatniej zmiany pliku źródłowego. Revision numer wersji kodu źródłowego (zaczynać od 01). Designer nazwisko i imię projektanta. Company nazwa firmy, dla której zaprojektowano układ. Assembly numer płytki drukowanej, na której będzie uŜyty układ. Location numer elementu na płytce. Device nazwa programowalnego układu logicznego (dla celów kompilacji). Format format pliku wyjściowego: h - plik w formacie ASCII-hex, i - plik w formacie Signetics HL, j - plik w formacie JEDEC. 111 Rys. 4. 5. Struktura nagłówka. Blok tytułowy Blok tytułowy (rysunek 4.6) zawiera dodatkowe informacje opisujące projektowany układ. Tekst ujęty jest w znaki początku i końca komentarza. Rys. 4.6. Struktura bloku tytułowego. Deklaracje wyprowadzeń W polu tym (rysunek 4.7) znajdują się deklaracje wyprowadzeń z układu: wejść i wyjść poprzedzonych słowem kluczowym PIN. Deklaracje wyprowadzeń występują opcjonalnie, gdy zadeklarowany jest typ układu. Rys. 4. 7. Struktura bloku deklaracyjnego. 112 Definicje zmiennych przejściowych W polu tym (rysunek 4.8) znajdują się deklaracje wewnętrznych węzłów, pól bitowych oraz innych zmiennych, którym chce się przyporządkować wartości początkowe. Deklarowane są zmienne pomocnicze w postaci tablic (wektorów) zawierających nazwy zadeklarowanych wcześniej sygnałów lub będących wynikiem operacji na tych sygnałach. Rys. 4. 8. Struktura zmiennych przejściowych. Równania logiczne W polu tym (rysunek 4.9) wpisywane są równania boolowskie, tablice prawdy układów logicznych oraz opis automatów (grafy przejść w formie tekstowej). Rys. 4. 9. Struktura opisu logicznego. Przykładowy program Barrel22.pld Przykład opisu źródłowego 8-bitowego rejestru przesuwnego przedstawia listing programu barrel22.pld 113 Name Partno Date Revision Designer Company Assembly Location Device Barrel22; CA0006; 05/11/89; 02; Kahl; Logical Devices, Inc.; None; None; g22V10; /**************************************************************/ /* 8-Bit Registered Barrel Shifter */ /* This 8-bit registered barrel shifter takes 8 data inputs */ /* and cyclically rotates the data from 0 to 7 places under */ /* control of the select ( S0, S1, S2 ) inputs. A SET input */ /* can be used to initialize the outputs to the all ones state*/ /**************************************************************/ /* Allowable Target Device Types : PAL22V10 */ /**************************************************************/ /** Inputs **/ PIN PIN PIN PIN PIN 1 [2..9] [10,11,14] 13 23 /** Outputs = = = = = clock; [D7..0]; [S2..0]; !out_enable; preset; /* /* /* /* /* Register Clock Data Inputs Shift Count Select Inputs Register Output Enable Set to Ones Input */ */ */ */ */ **/ PIN [15..22] = [Q7..0]; /* Register Outputs */ /** Declarations and Intermediate Variable Definitions **/ field shift = [S2..0]; field input = [D7..0]; field output = [Q7..0]; /* Shift Width Field /* Inputs Field /* Outputs Field */ */ */ /** Logic Equations **/ output.d = # # # # # # # [D7, [D0, [D1, [D2, [D3, [D4, [D5, [D6, D6, D7, D0, D1, D2, D3, D4, D5, D5, D6, D7, D0, D1, D2, D3, D4, D4, D5, D6, D7, D0, D1, D2, D3, D3, D4, D5, D6, D7, D0, D1, D2, D2, D3, D4, D5, D6, D7, D0, D1, D1, D2, D3, D4, D5, D6, D7, D0, D0] D1] D2] D3] D4] D5] D6] D7] & & & & & & & & shift:0 shift:1 shift:2 shift:3 shift:4 shift:5 shift:6 shift:7; output.sp = preset; /* synchronous preset */ output.oe = out_enable; /* tri-state control */ output.ar = 'h'00; /* asynchronous reset not used */ _ 114 4.3. Program WinCUPL WinCUPL jest zaadaptowaną wersją dla Windows DOS-owego programu CUPL (Compiler Universal for Programmable Logic). Filozofia obsługi i sterowania bibliotekami pozostała niezmieniona. Pomimo niezbyt bogatej biblioteki układów obsługiwanych przez WinCUPL-a (dostępne są układy EPLD/CPLD firmy Atmel oraz standardowe układy PLD rodziny 16v8, 20v8, 22v10), nadal cieszy się sporym powodzeniem wśród uŜytkowników, ze względu na moŜliwości szybkiego i łatwego przygotowania projektów dla układów PLD. Program cechuje nieskomplikowana składnia i łatwość opisu przy jednocześnie dość duŜych moŜliwościach. Rys. 4.10. Okno powitalne WinCUPL i WinSim. Program ten umoŜliwia kompilację tekstowych plików źródłowych opisujących układy, realizowane w strukturze programowalnej, do formatu (jedec) akceptowanego przez programatory oraz symulację działania zapisanej logiki przy wykorzystaniu programu WinSim. Projekt układu opisuje się przy pomocy języka wysokiego poziomu, który nosi nazwę CUPL (został on opisany w rozdziale 4.2). Przy jego pomocy moŜliwe jest tworzenie opisów cyfrowych układów kombinacyjnych i sekwencyjnych. WinCUPL udostępnia typowe dla opisów stosowanych w technice cyfrowej tablice prawdy, dowolne funkcje logiczne, grafy przejść, a takŜe moŜliwości bliskie typowym makroasemblerom, tj. makropolecenia, predefiniowane funkcje oraz moŜliwość deklarowania stałych i zmiennych opisu. 115 Symulacja tworzonych projektów ogranicza się do symulacji funkcjonalnej, bez uwzględniania parametrów czasowych układów. Ograniczoną funkcjonalnie do kompilatora i symulatora wersję oprogramowania narzędziowego udostępnia na swojej stronie internetowej firma Atmel w porozumieniu z firmą Logical Devices, która jest producentem tego oprogramowania. (http://www.atmel.com.). Pakiet WinCUPL zawiera następujące narzędzia: WinCUPL - kompilator języka CUPL, zintegrowany z edytorem tekstowym. UmoŜliwia translację zbiorów zapisanych w języku CUPL na zbiory zawierające rozkazy dla programatora. WinSim - symulator funkcjonalny projektów układów kompilowanych przez WinCUPL. Rezultat symulacji moŜe być graficznie modyfikowany. Po zainstalowaniu programu dostępne są dwie ikony, słuŜące do uruchamiania: - zintegrowanego edytora projektu WinCUPL, - symulatora WinSim. 4.3.1. Obsługa WinCUPL Aplikacja WinCUPL Za pomocą aplikacji WinCUPL moŜna tworzyć nowe projekty, wprowadzać tekst źródłowy, poddawać go kompilacji oraz wywoływać symulator. Plikami źródłowymi są: plik *.PLD dla kompilatora oraz plik *.SI dla symulatora. 116 Po uruchomieniu programu WinCUPL pojawia się główne okno. Widok domyślnego okna głównego z otwartym przykładowym projektem przedstawia rysunek 4.11. Rys. 4.11. Główne okno programu WinCUPL. Okno główne składa się z paska menu i opcjonalnie z dodatkowego paska narzędzi oraz trzech części charakterystycznych dla pakietu WinCUPL: 117 • Okna edytora tekstowego, w którym znajduje się plik źródłowy, automatycznie kolorującego słowa kluczowe i inne elementy tworzonego opisu źródłowego, zgodnie z regułami języka. • Okna komunikatów, w którym wyświetlane są raporty z działania poszczególnych plików będących efektem kompilacji, w tym komunikaty o błędach. • Okna zawartości projektu, przedstawiającego listę plików źródłowych wykorzystywanych w projekcie. Na pasku tytułu, znajdującego się w jego górnej części okna głównego, wyświetlana jest wersja WinCUPL-a udostępniana przez firmę Atmel Corporation. Pasek menu zawiera listę poleceń, przez wybranie których moŜemy tworzyć, drukować i zapisywać (w postaci odpowiednich plików) wyniki wykonywanych czynności, jak np. kompilacji, symulacji. Pasek narzędzi zawiera przyciski, z których korzysta się zamiast najczęściej uŜywanych poleceń menu (rysunek 4.12). Rys. 4.12. Pasek menu i narzędzi programu WinCUPL. Menu File New - utworzenie nowego projektu. Open - otwarcie istniejącego projektu. Close - zamknięcie aktywnego okna projektu. Save - zapisanie aktywnego projektu. Save As - zapisanie obecnie modyfikowanego projektu pod nową nazwą. Save All - zapisanie wszystkich otwartych projektów. Open Project - otwarcie istniejącego projektu. 118 Close Project - zamknięcie projektu. Print Setup Print - wybór ustawień drukowania. - druk aktywnego dokumentu. MRU… - lista ostatnio otwartych projektów. Exit - wyjście z programu WinCUPL. Menu Edit Undo - cofnięcie ostatnio dokonanej zmiany. Cut - przeniesienie zaznaczonego tekstu do schowka. Copy - skopiowanie zaznaczonego tekstu do schowka. Paste - wklejenie zawartości schowka w miejsce wskazane przez kursor. Find - wyszukanie tekstu w aktywnym dokumencie. Find Next - wyszukanie następnego wystąpienia ostatnio poszukiwanej frazy. Replace - wyszukanie i zastąpienie tekstu w aktywnym projekcie. Insert CUPL Macro Reference - wstawienie referencji makra CUPL do aktywnego dokumentu. Insert CUPL Macro Definition - wstawienie definicji makra CUPL do aktywnego dokumentu. Update Macro Symbol Table - uaktualnienie tabeli symboli referencji makr. Insert Table - wstawienie Tabeli prawdy. Menu View Toolbar - włączenie i wyłączenie paska narzędzi. Status Bar - włączenie i wyłączenie paska stanu. Project - wyświetlenie lub ukrycie okna projektu. Font - zmiana czcionki zaznaczonego tekstu. Refresh - odświeŜenie aktywnego projektu. 119 Menu Options Compiler - ustawienie opcji kompilatora. Devices - wybór docelowego układu programowalnego z listy układów. Simulator - ustawienie opcji symulatora. WinCUPL - ustawienie opcji środowiska WinCUPL. Menu Run Device Dependent Compile - kompilacja zaleŜna od układu. Device Independent Compile - kompilacja niezaleŜna od układu. Device Dependent Simulation - symulacja zaleŜna od układu. Device Independent Simulation - symulacja niezaleŜna od układu. Menu Utilities DOS - wywołanie wiersza poleceń DOS. WinSim - uruchomienie programu WinSim. CUPL Tools - uruchomienie wszystkich narzędzi WinCUPL. Menu Window Cascade - kaskadowe rozmieszczenie okien. Tile Horizontal - rozmieszczenie okien w poziomie. Tile Vertical - rozmieszczenie okien w pionie. Arrange Icons - rozmieszczenie ikon zamkniętych okien. Auto Arrange - automatyczne rozmieszczenie okien. Menu Help Contents - wyświetlenie tematów pomocy. Search - wyświetlenie okna wyszukiwania w pliku pomocy. CUPL Programmers Reference Guide - otwarcie Podręcznika Programisty CUPL. Simulator - otwarcie pliku pomocy symulatora WinSim. Atmel Info - wyświetlenie listy dokumentów. About 120 - wyświetlenie wersji aplikacji. Pasek narzędzi - utworzenie nowego projektu, - otwarcie istniejącego projektu, - zapisanie na dysk aktywnego projektu, - wydruk aktywnego projektu na domyślnej drukarce, - przeniesienie do schowka aktualnie zaznaczonego obiektu, - skopiowanie do schowka aktualnie zaznaczonego obiektu, - wklejenie zawartości schowka do aktywnego projektu, - kompilacja zaleŜna od układu, - kompilacja niezaleŜna od układu, - symulacja zaleŜna od układu, - symulacja niezaleŜna od układu, - wywołanie wiersza poleceń DOS, - uruchomienie programu WinSim, - uruchomienie wszystkich narzędzi WinCUPL. Aplikacja WinSim WinSim jest środowiskiem umoŜliwiającym symulację funkcjonalną projektu opisanego w języku CUPL stworzonego w programie WinCUPL. Do jej pracy niezbędne jest utworzenie pliku *.SI, w którym zapisuje się pobudzenia testowe symulacji. 121 Jego struktura jest zbliŜona do struktury pliku opisującego logikę i zawiera następujące elementy: nagłówek, blok deklaracji sygnałów wejściowych i wyjściowych do obserwacji po słowie kluczowym ORDER, blok wektorów testowych definiowany po słowie kluczowym VECTORS. Blok nagłówka powinien być identyczny z tym określonym w pliku źródłowym z rozszerzeniem *.PLD. Blok deklaracji sygnałów wejściowych i wyjściowych określa kolejność występowania w wektorach testowych poszczególnych zmiennych. Rozpoczyna go instrukcja ORDER. Blok wektorów testowych umieszczony za słowem kluczowym VECTORS powinien uwzględniać wszystkie zmienne wejściowe sprawdzanych funkcji logicznych. Ilość wektorów testowych zaleŜna jest od ilości kombinacji sygnałów wejściowych, na które chcemy znać odpowiedź projektowanych funkcji logicznych. Najczęściej uwzględnia się wszystkie moŜliwe kombinacje. Sygnały wejściowe muszą być wprowadzane do wektora testowego w kolejności ustalonej w bloku deklaracji sygnałów. W miejsce badanych sygnałów wyjściowych wstawia się znak *. Po uruchomieniu aplikacji WinSim pojawia się główne okno. Widok domyślnego okna głównego przedstawia rysunek 4.13. 122 Rys. 4.13. Główne okno programu WinSim. Pasek menu zawiera listę poleceń, przez wybranie których moŜemy tworzyć, drukować i zapisywać (w postaci odpowiednich plików) wyniki wykonywanych czynności, jak np. symulacji. Pasek narzędzi zawiera przyciski, z których korzysta się zamiast najczęściej uŜywanych poleceń menu (rysunek 4.14). Rys. 4.14. Pasek menu i narzędzi programu WinSim. Menu File New - utworzenie nowego projektu. Open - otwarcie istniejącego projektu. Close - zamknięcie aktywnego okna. Save - zapisanie aktywnego projektu. Save As - zapisanie obecnie modyfikowanego projektu pod nową na- zwą. 123 Save All - zapisanie wszystkich otwartych projektów. Print Setup - wybór ustawień drukowania. Print - druk aktywnego dokumentu. MRU… - lista ostatnio otwartych projektów. Exit - wyjście z programu WinSim. Menu View Status Bar - włączenie i wyłączenie paska stanu. Source - otwarcie okna tekstowe z aktywnym projektem z pliku *.SI. Signal Definitions - otwarcie okna Signal Definitions dla aktywnej symulacji. Grid - włączenie siatki w polu wyświetlania sygnałów. Grid Size - ustawienie rozmiarów siatki w polu wyświetlania sygnałów. Colors - zmiana kolorów wyświetlanych sygnałów na ekranie. Wide Signals - przełączenie grubości linii wyświetlanego sygnału. Refresh - odświeŜenie aktywnego dokumentu. Menu Signal Add Signal - dodaje nowe sygnały do symulacji. Delete Signal - usuwa zaznaczone sygnały z symulacji. Rename Signal - zmienia nazwę wybranego sygnału. Add Vector - dodaje nowe wektory do symulacji. Delete Vector - usuwa wybrane wektory z symulacji. Add Message - dodaje wiersz wiadomości $MSG w pliku źródłowy stanowiący komentarz opisujący np. wektor testowy. Bus Members - przełączenie na ekran szyny pamięci z wybranego sygnału. Menu Simulator Run Simulator - uruchamia symulator CSIM dla aktywnego projektu. Compile and Simulate - kompiluje plik źródłowy *.PLD i uruchamia symulator CSIM. 124 Assign Simulator Results - przyporządkowuje sygnały z symulacji do pliku symulującego. Set Library - wybór bibliotek symulatora. Menu Window Cascade - kaskadowe rozmieszczenie okien. Tile Horizontal - rozmieszczenie okien w poziomie. Tile Vertical - rozmieszczenie okien w pionie. Arrange Icons - rozmieszczenie ikon zamkniętych okien. Menu Help Contents - wyświetlenie tematów pomocy. Search For Help On - wyświetlenie okna wyszukiwania w pliku pomocy. About WinSim - wyświetlenie wersji aplikacji. Pasek narzędzi - utworzenie nowego projektu, - otwarcie istniejącego projektu, - zapisanie na dysk aktywnego projektu, - wydruk aktywnego projektu na domyślnej drukarce, - dodanie nowego sygnału, - usunięcie zaznaczonych sygnałów, - dodanie wektorów testowych, - usunięcie zaznaczonych wektorów testowych, - uruchomienie symulatora, - kompilacja projektu i uruchomienie symulatora, - zwiększenie szerokości linii siatki, 125 - zmniejszenie szerokości linii siatki, - zwiększenie wysokości linii siatki, - zmniejszenie wysokości linii siatki, - uruchomienie wszystkich narzędzi WinCUPL. 4.3.2. Praca z przykładowym projektem W celu otwarcia, kompilacji oraz symulacji przykładowego projektu naleŜy wykonać następujące czynności: 1. Uruchomić WinCUPL z listy programów menu Start lub uŜywając ikony słuŜącej do uruchomienia aplikacji projektu. Po uruchomieniu programu WinCUPL pojawia się główne okno. Widok domyślnego okna głównego przedstawia rysunek 4.15. Rys. 4.15. Widok okna główne programu WinCUPL. 126 2.Otworzyć wybrany projekt umiejscowiony w: C:\Wincupl2\Examples\Atmel\COUNT10.PLD (rysunek 4.16). Plik ten przedstawia czterobitowy licznik dziesiętny liczący w górę i dół, z moŜliwością synchronicznego kasowania. Rys. 4.16. Widok okna wyboru projektu. 3. Po dokonaniu wyboru projektu pojawia się główne okno programu podzielone na trzy okna (rysunek 4.17), w których dostępne są podstawowe informacje. Okno zawartości projektu (PROJECT) przedstawia wszystkie pliki skojarzone z otwartym projektem lub drzewo z plikami. Dwukrotne kliknięcie na nazwie danego pliku z tego drzewa powoduje otwarcie tego pliku w oknie edytora. Zamknięcie okna projektu powoduje zamknięcie wszystkich okien związanych z projektem. Okno edytora tekstu (Editor) przedstawia pełny tekst tworzonego opisu pliku źródłowego licznika. 127 Okno komunikatów (Messages) jest czyste. Po przeprowadzeniu procesu kompilacji będzie przedstawiać raporty z działania plików i komunikaty o błędach podczas kompilacji. Dzięki ich wskazaniu i skomentowaniu błędy mogą być stosunkowo łatwo usunięte. Wykaz wszystkich błędów generowanych podczas kompilacji i symulacji znajdziesz w pliku pomocy CUPL Programmers Reference, rozdział 4 Error Messages. Rys. 4.17. Widok okien z projektem „Count 10”. 4. Wybór parametrów kompilacji. Otworzyć okno Compiler Options poprzez wybranie z menu głównego Options→Compiler. Okno przedstawia opcje bezpośrednio wpływające na minimalizację, optymalizację i format plików wyjściowych (rysunek 4.18). W zakładce Output Files w obszarze Downland powinien być zaznaczony JEDEC, w obszarze Doc File Options, jeŜeli chcemy otrzymać dokument z rysunkiem układu, zaznaczamy Fuse Plot i Equations. 128 RównieŜ ustawiamy parametry w pozostałych zakładkach, np.: General – Simulate, JEDEC name = PLD name. Zakładki Minimization oraz Optymization umoŜliwiają wybór sposobu minimalizacji i optymalizacji, który będzie domyślny dla całego projektu. Rys. 4.18. Widok okna konfiguracji kompilatora WinCUPL z aktywną zakładką Output Files. Minimalizację uŜywa się do ustawienia stopnia minimalizacji dla poszczególnych zmiennych. MoŜna wybrać jeden ze sposobów: brak minimalizacji, szybka, Quinn-McCluskey, Presto, Expresso. 5. Wybór układu dla projektu. Otworzyć okno Devices Selection (rysunek 4.19) poprzez wybranie z menu głównego Options→Devices. W oknie ukaŜą się pola zawierające listę układów EPLD (Devices), nazwę firmy producenta Atmel (Manufacture), typ obudowy układu scalonego (Package Type). W dolnej części okna występuje pole edycyjne Device mnemonic oraz przycisk wielokrotnego wyboru Device in file. Wybrać (zaznaczyć przycisk wyboru) z pola Device in file oraz wybrać symbol układu (dla układów GAL: g16v8 lub g22v10) w polu Device. Porównaj czy symbol układu w polu Devi- 129 ce Mnemonic jest taki sam jak w nagłówku pliku źródłowego w pozycji Device okna edytora tekstowego. Rys. 4.19. Widok okna wyboru układu. 6. Kompilacja pliku źródłowego. Z menu głównego wybierz Run → Device Dependent Compile (skrót F9 lub ). Jest to polecenie kompilacji projektu zapisanego w pliku źródłowym. Pamiętaj, Ŝe jeŜeli plik źródłowy został zmodyfikowany, to przed kompilacją naleŜy go zapisać. Po zakończeniu kompilacji zostanie wyświetlony komunikat z przebiegu kompilacji (rysunek 4.20). Rys. 4.20. Widok okna przebiegu kompilacji. 130 7. Symulacja skompilowanego projektu. Kiedy kompilacja przebiegnie bez błędów, wykonaj dwukrotne kliknięcie na pliku z drzewa plików o nazwie Count10.SI. Otworzy się okno wywołania symulatora “Open with Winsim” (rysunek 4.21). Rys. 4.21. Okno wywołania symulatora WinSim. Wybierz przycisk Tak. Spowoduje to otwarcie symulatora funkcyjnego WinSim. Symulację pliku źródłowego moŜesz równieŜ wykonać wybierając zakładkę Run → Device Dependent Simulate (skrót F7 lub ). Uwaga! JeŜeli wybierzesz przycisk Nie z okna “Open with Winsim” (rysunek 4.21), to w oknie edytora tekstowego otwarty zostanie plik .SI. W otwartym oknie symulatora WinSim przedstawiony jest proces symulacji (rysunek 4.22) omawianego projektu. Rys. 4.22. Widok okna z wynikiem symulacji. 131 4.3.3. Pierwszy program W celu utworzenia nowego projektu zapisanego w postaci pliku źródłowego naleŜy uruchomić opcję File/New/Project. Pojawi się okno kreatora nagłówka (rysunek 4.23), w którym naleŜy podać parametry identyfikacyjne nagłówka pliku źródłowego (Desing Properties), ilość końcówek wejściowych (Input Pins) i wyjściowych (Output Pins) wykorzystywanych w projekcie oraz ilość węzłów wewnętrznych (Pinnodes). JeŜeli w projekcie wykorzystujemy konkretny układ PLD naleŜy wpisać go w pole Device nagłówka projektu. Lista układów, które moŜna zastosować, dostępna jest w bibliotece CUPL po uruchomieniu opcji Option/Devices (patrz rozdział 4.3.2 - pkt 5). Rys. 4.23. Okno kreatora nagłówka oraz deklaracji końcówek wyjściowych, wejściowych i węzłów wewnętrznych. Po określeniu parametrów identyfikacyjnych pliku źródłowego oraz parametrów projektu: liczby wyprowadzeń WEJŚĆ, liczby wyprowadzeń WYJŚĆ oraz ilości węzłów wewnętrznych, zostanie utworzony pliku źródłowy z roz132 szerzeniem Bramki.PLD z pustym szablonem. Widok okna głównego z pustym szablonem przedstawia rysunek 4.24. Rys. 4.24. Szablon pliku źródłowego z rozszerzeniem *.PLD. W oknie edytora tekstowego, zachowując strukturę opisu pliku źródłowego, określamy: blok tytułowy, deklaracje wyprowadzeń z układu: wejść (Input pins) i wyjść (Output pins) - numery końcówek układu PLD, równania logiczne lub inne opisy funkcjonalne projektowanych układów - patrz rozdział 4.2.4. Podawane deklaracje wyprowadzeń w deklaracji PIN muszą być zgodne z rodzajem wyprowadzenia (WEJŚĆ, WYJŚĆ, WEJŚĆ/WYJŚĆ) dla uŜytego układu GAL16V8. Funkcje poszczególnych wyprowadzeń naleŜy odczytać z jego schematu logicznego. Znajdziesz go w nocie katalogowej (Specifications GAL16V8 High Performance E2CMOS PLD Generic Array Logic™) znajdującej się na stronie internetowej http://www.atmel.com/. 133 Widok okna edytora tekstu z pełnym tekstem pliku źródłowego przedstawia rysunek 4.25. Rys. 4.25. Okno edytora tekstowego z plikiem źródłowym. Opisana w pliku źródłowym struktura przedstawia osiem bramek logicznych. Schemat logiczny projektowanego układu przedstawia rysunek 4.26. 134 Pin 1 = a a b Pin 2 = b a b a b a b a b a b Pin 19 = xnor Pin 18 = xor Pin 17 = nor Pin 16 = or Pin 15 = nand Pin 14 = and Pin 13 = invb b Pin 12 = inva a Rys. 4.26. Struktura omawianego przykładu. Gdy opisane zostaną wszystkie elementy pliku źródłowego, naleŜy wykonać kompilację pliku źródłowego Bramki.PLD. Istotną sprawą jest sprawdzenie parametrów kompilacji pliku źródłowego, które decydują o formacie pliku wynikowego oraz ewentualnej symulacji działania zrealizowanej logiki. Parametry kompilacji dostępne są po uruchomieniu opcji Option/Compiller. Wybór parametrów umoŜliwiający utworzenie pliku wynikowego w formacie jedec, przeprowadzenie symulacji oraz generację dokumentu z rysunkiem układu przedstawia rysunek 4.27. Rys. 4.27. Widok okna wyboru parametrów kompilacji. 135 Ustawienie parametrów w zakładce General – opcje Simulate, JEDEC name = PLD name oraz w zakładce Output Files w obszarze Downland opcji JEDEC, zaś w obszarze General opcji Absolute, spowoduje, Ŝe w wyniku kompilacji otrzymamy plik JEDEC z wektorami testowymi. JeŜeli w obszarze Doc File Options zakładki Output Files zaznaczamy opcje Fuse Plot i Equations, to otrzymamy dokument z rysunkiem układu. Bardzo pomocnym jest równieŜ zaznaczenie opcji List oraz Expanded Macro w obszarze General. Otrzymamy wówczas pełne informacje o procesie kompilacji. JeŜeli dokonaliśmy wyboru opcji kompilatora, moŜemy dokonać kompilacji poleceniem Run → Device Dependent Compile, skrót F9 lub przycisk z paska narzędzi . Ta funkcja skompiluje plik źródłowy, stworzy plik Bramki.JED, wykona symulację i doda do programu wektory testowe. NaleŜy pamiętać, Ŝe jeŜeli dokonaliśmy modyfikacji pliku, to naleŜy go zapisać przed kompilacją. Proces zakończenia kompilacji bez błędów jest potwierdzony komunikatem (rysunek 4. 28). Rys. 4.28. Widok okna z komunikatem zakończenia kompilacji. Gdy proces kompilacji przebiegnie bez błędów zostaną stworzone m.in. następujące pliki (rysunek 4.29): - JEDEC (Bramki.jed) - plik wejściowy dla urządzenia programującego, - plik bezwzględny (Bramki.abs) - do uŜycia z CSIM, - plik błędów (Bramki.lst) - lista błędów w pliku źródłowym, 136 - plik dokumentacji (Bramki.doc) - zawiera rozszerzone równania logiczne i tablice symboli zmiennych, - plik PLA (Bramki.pla) - uŜywany przez filtry końcowe. Rys. 4.29. Lista tworzonych plików. Kolejnym etapem realizacji projektu jest jego symulacja. Uruchomienie symulatora realizujemy poprzez polecenie Utilities → WinSim lub przyciskiem z paska narzędzi . Nie naleŜy uruchamiać symulatora bez uprzedniej kompilacji projektu. Uwaga ta dotyczy takŜe wprowadzania poprawek do projektu: naleŜy pamiętać, aby po modyfikacji pliku Bramki.PLD lub Bramki.SI wykonać kompilację przed wywołaniem WinSim. Uruchomienie symulatora otworzy domyślne okno główne aplikacji WinSim. Widok domyślnego okna głównego przedstawiony był na rysunku 4.13. 137 Po uruchomieniu symulatora rozpoczynamy od utworzenia pliku źródłowego z rozszerzeniem Bramki.SI. Widok okna głównego programu WinSim z pustym szablonem pliku źródłowego przedstawia rysunek 4.30. Rys. 4.30. Szablon pliku źródłowego z rozszerzeniem *.SI. Polecenie File→New otwiera okno dialogowe kreatora nagłówka. Zamiast wprowadzać ponownie takie same parametry nagłówka, jak dla pliku źródłowego Bramki.PLD, moŜna wybrać przycisk Desing File… i wskazać plik Bramki.PLD o odpowiedniej nazwie. NaleŜy pamiętać, Ŝe dane w nagłówkach obu plików muszą być identyczne. W przeciwnym wypadu jest wysyłany komunikat ostrzegający o braku zgodności danych. Po zatwierdzeniu danych pojawi się okno główne z otwartym oknem symulacji - rysunek 4.31. 138 Rys. 4.31. Otwarte okno symulacji. Kolejnym krokiem jest dodanie śledzonych sygnałów oraz dodanie wektorów testowych. Śledzone sygnały – poszczególne zmienne - dodajemy poleceniem Signal→Add Signal lub przyciskiem z paska narzędzi (rysunek 4.32). W pliku Bramki.SI zostanie dopisana instrukcja ORDER, która podaje, jakie sygnały projektu mają uczestniczyć w symulacji. Rys. 4.32. Okno definiowania sygnałów. 139 Instrukcja ORDER Instrukcja ORDER podaje kolejność występowania w wektorach testowych poszczególnych zmiennych. Deklaracja kolejności ma postać: ORDER: zm1, zm2, output; W deklaracji kolejności powinno stosować się te same identyfikatory co w specyfikacji układu. JeŜeli stosuje się skrócony zapis listowy, polaryzacja pierwszej zmiennej indeksowej determinuje polaryzację reszty zmiennych indeksowych. Dla grupy sygnałów indeksowych moŜna uŜyć skrótowej notacji listowej. W deklaracji kolejności moŜna wstawić stałe tekstowe, które oddzielają zmienne między sobą. Stała tekstowa będzie się pojawiać w wydruku w kaŜdym wektorze. Stałe tekstowe naleŜy ująć w znaki cudzysłowu: „stala tekstowa” Formatując wydruk moŜna równieŜ zadeklarować wstawienie spacji za pomocą operatora %, po którym naleŜy podać liczbę określającą liczbę spacji. Przed deklaracją kolejności moŜna wstawić podstawę systemu liczbowego (za pomocą słowa kluczowego BASE), który będzie się stosować do stałych liczbowych ujętych w apostrofy.2 Przykłady deklaracji kolejności: ORDER: clock, input, output; ORDER: A0, A1, A2, A3, SELECT, !OUT0, !OUT1; ORDER: A0..3, SELECT, !OUT0..1; ORDER: clock, %2, input, %2, output; Dla rozpatrywanego przykładu postać instrukcji ORDER przedstawia rysunek 4.33. 2 Łuba T., Markowski M. A., Zbierzchowski B. Kompilatory układów logicznych. Oficyna Wydawnicza PW. Warszawa 1995. 140 Rys. 4.33. Otwarte okno z instrukcją ORDER. Dodawanie wektorów testowych (rysunek 4.34) spowoduje dopisanie instrukcji VECTORS w pliku źródłowym Bramki.SI. KaŜdy wektor testowy musi zawierać się w pojedynczej linii, bez znaku średnika. MoŜna to uczynić poprzez wpisanie ich jako tekstu do pliku Bramki.SI po otwarciu go poleceniem View→Source lub skorzystać z interfejsu graficznego - polecenie Signal→Add Victor lub przycisk z paska narzędzi . Rys. 4.34. Okno definiowania wektorów. Dodawanie wektorów testowych poprzez interfejs graficzny sprowadza się do klikania myszą w odpowiedni punkt wykresu (tabela 4.10). NaleŜy pamiętać o zapisaniu zmian w pliku Bramki.SI. 141 Tabela 4.10. Wykorzystanie interfejsu graficznego do dodania wektorów testowych. Sygnał/Wektor 1 2 Obszar Klawiatura 5 6 1 Nie Wartość wejściowa HO (High) 2 Nie Wejście zegarowe (Low-High-Low) 3 Nie Wartość testowa (wyjściowa) High 4 Nie Wartość wysokiej impedancji (wejściowa i wyjściowa) 4 Alt Ustawienie stanu początkowego rejestr 4 Shift Wyjście nietestowane 4 Ctr Wartość nieokreślona 5 Nie Wartość wejściowa LO (Low) 6 Nie Wejście zegarowe (High-Low-High) 7 Nie Wartość testowa (wyjściowa) Low 3 4 7 Wynik Instrukcja VECTORS Instrukcja VECTORS rozpoczyna tę część pliku *.SI, w której podany zostaje ciąg wektorów z pobudzeniami testowymi. W wektorach określamy odpowiedni symbol dla kaŜdego sygnału z listy ORDER - wejściowego i wyjściowego. Symbole dla sygnałów WEJŚĆ określają ich pobudzenia podczas symulacji, natomiast symbole dla sygnałów WYJŚĆ podają oczekiwane odpowiedzi. Symbole dla sygnałów wejściowych (zadawane pobudzenia): 0 – zadaj stan niski (L) - wartość wejściowa LO (Low). 1 – zadaj stan wysoki (H) - wartość wejściowa HO (High). C – zadaj impuls dodatni - wejście zegarowe (Low-High-Low). K – zadaj impuls ujemny - wejście zegarowe (High-Low-High). X – wartość nieokreślona. P – ustawienie stanu początkowego rejestru. 142 ‘ ‘ – wartość wejściowa, która będzie rozwinięta według zadanej podstawy liczbowej wyspecyfikowanej w deklaracji BASE, dozwolone znaki od 0 do F i X. „ „ – wartość wyjściowa, która będzie rozwinięta według zadanej podstawy liczbowej wyspecyfikowanej w deklaracji BASE, dozwolone znaki od 0 do F, X oraz H, L, Z. Symbole dla sygnałów wyjściowych (testy odpowiedzi): L – testuj stan niski (L) - wartość testowa (wyjściowa) Low. H – testuj stan wysoki (H) - wartość testowa (wyjściowa) High. Z – testuj stan wysokiej impedancji - wartość wysokiej impedancji (wejściowa i wyjściowa). N – nie testuj stanu - wyjście nietestowane. * – wyznacz w symulacji stan sygnału i wstaw go do wektora - wartość wstawiana przez symulator (tylko dla wyjść). Dla rozpatrywanego przykładu postać instrukcji VECTORS przedstawia rysunek 4.35. Rys. 4.35. Otwarte okno z instrukcją VECTORS. 143 Plik źródłowy Bramki.SI ma postać: Name PartNo Date Revision Designer Company Assembly Location Device Bramki; KK0001; 20/04/06; 02; Student; KK; None; None; g16v8a; /***********************************************************/ /* */ /* Przyklad kompilacji pojedynczych bramek */ /* */ /***********************************************************/ /* * Order: definicja kolejnosci, polaryzacji i spacji * podczas symulacjii i odpowiedzi na zadane wartosci */ ORDER: a, %2, b, %4, inva, %3, invb, %5, and, %8, nand, %7, or, %8, nor, %7, xor, %8, xnor; /* * Vectors: definicja symulacji i odpowiedzi na zadane wartosci z naglowka i posrednich widomosci z listy symulacji. */ VECTORS: $MSG $MSG $MSG $MSG " " " a " - b - 00HHLHLHLH 01HLLHHLHL 10LHLHHLHL 11LLHLHLLH 1XLXXXHLXX X1XLXXHLXX 0XHXLHXXXX X0XHLHXXXX XXXXXXXXXX 144 inverters and !a !b a & b -- ------ symulacja pojedynczych bramek"; nand or nor xor !(a & b) a # b !(a # b) a $ b -------- ----- -------- ----- xnor"; !(a $ b)"; --------"; Gdy plik Bramki.SI jest gotowy, naleŜy uruchomić symulator poleceniem Simulator→Run Simulator lub przyciskiem z paska narzędzi . Jeśli w pliku źródłowym nie było błędów, w oknie symulatora zostaną wyświetlone wykresy z przebiegami czasowymi. Wykresy z przebiegami czasowymi dla projektu Bramki przedstawia rysunek 4.36. Rys. 4.36. Wynik symulacji projektu Bramki. 145 4.4. Programator LabTool-48XP LabTool-48XP jest programatorem firmy Advantech Equipment cieszącym się duŜą popularnością na całym świecie ze względu na duŜą wydajność, uniwersalność, prostotę obsługi i niezawodność. Lista obsługiwanych przez niego układów zawiera ponad 5000 pozycji a producent zapowiada jej kwartalne rozszerzanie o ponad 100 nowych układów 3. Rys. 4.37. Widok programatora LabTool48XP. LabTool-48XP (rysunek 4.37) jest wysokiej jakości programatorem uniwersalnym współpracującym z komputerem PC przez port drukarki. Standardowo wyposaŜony jest w gniazdo 48-stykowe ZIF (Zero Insertion Force) do programowania układów w obudowach typu DIL. KaŜda nóŜka gniazda programującego jest uniwersalna (moŜna na nią podać 4 róŜne napięcia, masę, sygnał TTL, podciąg rezystorem PULL UP i PULL DOWN, szybkie sygnały - zegar, dane, adresy, sygnały strobujące - pozostawić w wysokiej impedancji, moŜna równieŜ czytać jej stan logiczny). Dla układów w obudowach innych niŜ DIL (SO, SOIC, SSOP, TSOP, PSOP, PLCC, PQFP, BGA i innych) o róŜnych rozstawach nóŜek oraz róŜnych szerokościach często z większą 3 http://www.elmark.com.pl 146 liczbą wyprowadzeń niŜ 48 firma Advantech skonstruowała wiele rodzajów adapterów (rysunek 4.38). Ze względu na uniwersalność gniazda LabTool’a, wszystkie adaptery są jedynie prostymi przejściówkami nie zawierającymi elementów aktywnych. Zmniejsza to późniejsze ewentualne koszty rozbudowy stanowiska pracy. Opis adapterów (tablica połączeń) jest dostępny na stronie producenta http://www.aec.com.tw. Do obsługi większości układów pamięciowych wystarczy kilka rodzajów adapterów (44-pin PLCC, 48-pin TSOP, 40-pin TSOP i 32-pin TSOP). Rys. 4.38. Przykłady adapterów programatora LabTool48XP. Podstawowe parametry programatora znajdują się w Instrukcji obsługi Advantech Equipment Corporation.: LABTOOL-48XP. Intelligent Universal Programmer. User′s Manual. Copyright Notice, którą znajdziesz na stronie internetowej http://www.aec.com.tw/ firmy Advantech. Programator (rysunek 4.37) posiada trzy diody LED informujące o stanie pracy programatora. Dioda zielona (GOOD) - ostatnia operacja programowania przebiegła pomyślnie. Dioda Ŝółta (BUSY) - programator jest zajęty (wykonywana jest operacja na układzie zamontowanym w podstawce). Uwaga! Nie wolno wkładać i wyjmować układu z podstawki, dopóki nie zaświeci się dioda zielona lub czerwona. Wkładanie lub wyjmowanie układu w czasie, gdy świeci się dioda Ŝółta, moŜe spowodować jego uszkodzenie. 147 Dioda czerwona (ERROR) - operacja programowania przebiegła nieprawidłowo. Pulsowanie diody z częstotliwością 5Hz sygnalizuje, Ŝe układ scalony został zaprogramowany i zweryfikowany, oczekuje na wyjęcie i włoŜenie nowego układu. Opcja ta występuje w przypadku stosowania trybu programowania seryjnego „Mass Production Mode”, dzięki któremu moŜna przyśpieszyć programowanie większej liczby układów. Programator obsługiwany jest przez program pod kontrolą systemu Windows LT48XP_660.EXE. Ze strony producenta (http://www.atmel.com) lub dystrybutorów (http://www.elmark.com.pl; www.labtool.com) moŜna pobrać (bezpłatnie) zawsze aktualną wersję oprogramowania obsługującego programator. Wszystkie polecenia programu są dostępne poprzez kliknięcie myszką, wykorzystując widoczne na ekranie menu. Często jednak sekwencję kliknięć moŜna zastąpić uŜyciem klawiatury, przyspieszając w ten sposób wykonanie wielu czynności. Informacje na temat dostępnych klawiszy skrótu są dostępne w menu po jego rozwinięciu. Oprogramowanie programatora, oprócz standardowych funkcji, które posiada kaŜdy programator (Read, Program, Blank Check, Verify, Erase), posiada dodatkowe, które znacznie usprawniają pracę. NaleŜą do nich m.in.: - Insertion Test - test poprawności włoŜenia układu do podstawki, jak równieŜ połączenia kaŜdej nóŜki z odpowiadająca jej nóŜką podstawki. Sprowadza się to do sprawdzania kontaktu między programatorem a układem. W czasie tego testu jest wykrywane kaŜde błędne włoŜenie układu do podstawki (adaptera), przesunięcie układu w podstawce, odwrotne włoŜenie układu. Dzięki temu zapobiega się uszkodzeniom programatora i programowanego układu. - Auto ID - automatyczne rozpoznawanie 8-bitowych pamięci Flash lub EPROM. Większość producentów pamięci wyposaŜa swoje układy w funkcje 148 odczytu ID producenta (numer identyfikacyjny składający się z dwóch bajtów) i ID układu, starając się nie powtarzać numeracji zajętej juŜ przez innych producentów. Programator po odczytaniu ID układu porównuje je ze swoją bazą danych i pokazuje uŜytkownikowi do zatwierdzenia znaleziony układ. Wcześniej jest wykonywany dodatkowo test kontaktu (ze względów bezpieczeństwa). - Mass Production Mode - tryb programowania seryjnego, dzięki któremu moŜna przyśpieszyć programowanie większej liczby układów. Funkcja moŜe być zintegrowana z automatycznym numerowaniem (nadawanie numeru seryjnego programowanym układom). Obsługujący sam ustala, pod jakimi adresami pamięci oprogramowanie moŜe wstawić numer seryjny i o jaką wartość ma być inkrementowany. Programator pracujący w tym trybie automatycznie wykrywa obecność układu w gnieździe i jego wymianę po zaprogramowaniu. Na tej podstawie przechodzi do obsługi kolejnego układu. MoŜna tu równieŜ wyłączyć autonumerowanie i wszystkie układy będą programowane jednakową zawartością. 4.4.1. Praca z programatorem Obsługa programatora LabTool-48XP/UXP nie wymaga Ŝadnych skomplikowanych czynności. Przed przystąpieniem do pracy naleŜy jedynie sprawdzić czy podłączenie programatora do komputera zrealizowane jest w sposób prawidłowy. Oprogramowanie sterujące automatycznie wykrywa podłączenie programatora do portu. Stosowny komunikat wyświetlany jest w polu tekstowym okna głównego programu. Po uruchomieniu programu LabTool-48XP/UXP LabTool-48XP.lnk pojawia się główne okno programu sterującego pracą programatora. Widok domyślnego okna głównego programu przedstawia rysunek 4.39. W oknie przedstawione są komunikaty ukazujące gotowość programatora do pracy wraz z datą 149 uŜytkowania, numer portu równoległego/drukarkowego (LPT1) i wersja sprzętu (Firmware Version 3.10). Rys. 4.39. Okno główne programu sterującego pracą programatora. Na pasku tytułu wyświetlana jest nazwa programatora. Pasek menu zawiera listę poleceń umoŜliwiająca zaprogramowanie, wykonanie weryfikacji i zabezpieczenie układu. Pasek narzędzi zawiera przyciski, z których korzystamy zamiast najczęściej uŜywanych poleceń menu (rysunek 4.40). Rys. 4.40. Pasek menu i pasek narzędzi programu LabTool-48XP. Polecenia menu głównego mogą być wybierane przy uŜyciu myszki lub klawisza ALT i wciśnięciu podkreślonej litery nazwy rozkazu (np. ALT-F dla 150 polecenia “File”). Po rozwinięciu menu poszczególne rozkazy wymagają tylko naciśnięcia klawisza odpowiadającego podkreślonej na ekranie literce. Menu File (ALT-F) Save Buffer (ALT-S) - zapis zawartości bufora do pliku na dysku. Load File (ALT-L) - odczyt danych z pliku i wpisanie ich do bufora. Exit (ALT-X) - wyjście z programu LabTool-48XP. Menu Project (ALT-J) Save Project (ALT-F1) - zapisuje aktualne ustawienia oprogramowania LabTool’a do wskazanego pliku projektu. Load Project (ALT-F2) - przywraca ustawienia oprogramowania do takich, jak poprzednio uŜywane i zapisane do wskazanego pliku projektu. Menu Device (ALT-D) Change (ALT-C) - wybór układu do programowania. Auto Select EPROM (ALT-A) - automatyczne wyszukanie pamięci typu EPROM lub FLASH. Mass Production Mode - tryb seryjnego programowania. Edit (ALT-E) - edycja bufora. Modify Vectors - modyfikacja wektora testującego (dostępna tylko przy wyborze układu PLD). Read (ALT-R) - odczytanie zawartość układu i wpisanie jej do bufora. Blank Check (ALT-B) - sprawdzanie czystości układu scalonego. Program/Auto (ALT-P) - programowanie układu z aktualną zawartością bufora. Verify (ALT-V) - weryfikacja poprawności zapisu bufora z zawartością układu scalonego. Erase (Ctrl-F1) - kasowanie zawartości układu znajdującego się w podstawce. 151 Secure (ALT-U) - zabezpieczenie układu. Compare (Ctrl-F3) - porównanie zawartości układu z zawartością bufora. Configuration (ALT-G) - ustawienia konfiguracyjne rejestrów. Menu Options (ALT-O) Modify Programming Parameter (F3) - modyfikacja parametrów programowania układu. Device Operation Options (F4) - ustawienia opcji operacji dla programowanego układu. Paralel Port Selection (F5) - wybór portu równoległego. Statistics (F6) - wybór funkcji statystycznych. Menu Diagnostic Self Test (F7) - włączenie testów programatora. Menu Help (ALT-H) Help Topic (F1) - wyświetlenie tematów pomocy. About - wyświetlenie informacji o aplikacji. Pasek narzędzi - zapisuje aktualne ustawienia oprogramowania LabTool’a do wskazanego pliku projektu, - przywraca ustawienia oprogramowania do takich, jakie były poprzednio uŜywane i zapisane do wskazanego pliku projektu, - wybór układu do programowania, - automatyczne wyszukanie i wybór pamięci EPROM lub FLASH, - edycja bufora, - modyfikacja wektora testującego, - odczyt zawartości układu i zapisanie jej do bufora, - sprawdzanie czystości układu scalonego, 152 - programowanie układu aktualną zawartością bufora, - weryfikacja poprawności zapisu bufora z zawartością układu scalonego, - kasowanie zawartości układu znajdującego się w podstawce, - porównanie zawartości układu z zawartością bufora, - zabezpieczenie zawartości układu, - ustawienia konfiguracyjne rejestrów, - ustawienia opcji operacji dla programowanego układu. 4.4.2. Programowanie układu W celu zaprogramowania układu naleŜy wykonać następujące czynności: 1. Wybrać układ programowany. UŜyj polecenia z menu Device→Change lub klawiszy skrótu „ALT-C” (ikona Select na pasku narzędzi). Wpisz pełną nazwę układu scalonego, który chcesz programować. Operację ta moŜna wykonać uŜywając myszki, dokonując wyboru układu z listy (rysunek 4.41). Rys. 4.41. Okno Change Device wyboru układu. 153 2. Załaduj plik projektu do zapisania w układzie. UŜyj polecenia z menu File→Load File lub klawiszy skrótu „ALT-L” (ikona Load na pasku narzędzi). Wybierz plik do załadowania z rozsze- rzeniem JEDEC (rysunek 4.42). Plik typu JEDEC zawiera spis połączeń w macierzy elementów, reprezentowany przez adres oraz serię znaków „1” bądź „0” odpowiednio sygnalizujących obecność połączenia lub jego brak. Zawiera równieŜ wektory testowe (lista pinów oraz wartości kaŜdego z nich dla kaŜdego kroku testowego) umoŜliwiające przeprowadzenie przez programator testów funkcjonalności projektu. Rys. 4.42. Okno główne z załadowanym projektem (format jedec). Opcjonalnie, moŜna załadować bufor zawartością danych odczytanych z innego zaprogramowanego układu. Operację odczytu zawartości układu dokonujemy poleceniem z menu Device→Read lub przy uŜyciu klawiszy skrótu „ALT-R” (ikona Read 154 na pasku narzędzi). 3. WłóŜ do podstawki ZIF czysty (blank) układ przeznaczony do zaprogramowania. UŜyj polecenia z menu Options→Operation lub klawiszy skrótu „F4” (ikona Option na pasku narzędzi). Następnie wybierz opcje ope- racji dla programowanego układu (rysunek 4.43). Po wykonaniu tej czynności, włączamy programowanie uŜywając klawiszy skrótu „ALT-P” lub ikona Prog. na pasku narzędzi. Rys. 4.43. Okno ustawienia opcji dla programowanego układu. 4. W przypadku programowania większej liczby układów naleŜy zmienić tryb programowania na tryb programowania seryjnego Mass production mode, dzięki któremu moŜna przyśpieszyć programowanie. UŜyj polecenia z menu Device→ Mass production mode (rysunek 4.44). Po wejściu w ten tryb programowania, wszystkie funkcje (skróty) klawiatury i funkcje myszy są nieaktywne. Po włączeniu tej opcji LabTool-48XP/UXP biedzie automatycznie programować układ po poprawnym umieszczeniu w podstawce ZIF. 155 Zaprogramowanie układu jest sygnalizowane mruganiem zielonej diody LED. Wtedy naleŜy wyjąć z podstawki zaprogramowany układ i włoŜyć do podstawki nowy. Po włoŜeniu do podstawki nowego układu, programator najpierw sprawdza poprawność kontaktów, ID i następnie przechodzi do programowania. Dzięki zablokowaniu funkcji klawiatury i myszy, nie istnieje ryzyko nieoczekiwanej zmiany zawartości bufora. Pamiętaj, Ŝe nie wolno wyjmować lub wkładać układu do podstawki, dopóki nie zaświeci się dioda zielona lub czerwona, zgaśnie Ŝółta. Rys. 4.44. Okno trybu programowania seryjnego. 5. Jeśli układ posiada konfigurowalne opcje oscylatora, watchdoga, zabezpieczenia, itp. MoŜesz włączyć konfigurowanie tych ustawień skrótem „ALT-G” (ikona Config ). Opcje te są dostępne tylko wtedy, gdy układ ma takie moŜliwości. Programowanie konfiguracji lub zabezpieczenia układu moŜe być takŜe wykonywane po wciśnięciu ikony Proct lub wraz z operacją programo- wania układu Programm. Konfigurację i zabezpieczenie układu w operacji programowania osiągamy uŜywając polecenia z menu Options→Secure lub 156 klawiszy skrótu „ALT-U”. NaleŜy zaznaczyć okno wielokrotnego wyboru „Secure aft. Prog”. Zapisanie zabezpieczenia odczytu w układach posiadających tą funkcję spowoduje brak moŜliwości weryfikacji poprawności programowania układu oraz odczytu zawartości układu przez programator. 157 4.5. Literatura do rozdziału 4 1. Advantech Equipment Corp.: LABTOOL-48XP. Intelligent Universal Programmer. User’s Manual. Printed in Taiwan. July 2002. 2. Atmel: WinCUPL. User’s Manual. Copyright Atmel Corporation 1997. 3. Atmel: ABEL/CUPL. Design File Conversion. Aplication Note. Atmel Corporation 2002. 4. Atmel: WinCUPL.Tutorial 1. 5. CUPL Programmers Reference Guide. Atmel Corporation. Library, ETC. 6. Łuba T., Markowski M. A., Zbierzchowski B. Kompilatory układów logicznych. Oficyna Wydawnicza PW. Warszawa 1995. 7. Pasierbiński J., Zbysiński P.: Układy programowalne w praktyce. WKŁ. Warszawa 2001. 8. Zbysiński P., Pasierbiński J.: Układy programowalne - pierwsze kroki. Wyd. II. BTC. Warszawa 2004. 158 159