Wstęp do symulacji
w ActiveHDL
Program ActiveHDL jest rozbudowanym narzędziem służącym do
projektowania i symulacji układów cyfrowych. W ramach laboratorium z Techniki
Cyfrowej używany będzie tylko edytor schematu BDE oraz symulator, w którym
poprzez podanie wymuszeń na końcówki wejściowe narysowanego schematu można
sprawdzić poprawność działania układu poprzez oglądanie przebiegów na końcówkach
wyjściowych oraz sygnałach wewnętrznych (pomocniczych). Inne możliwości tego
programu będą nauczane na późniejszych przedmiotach takich jak: Języki Opisu
Sprzętu oraz Sprzętowa Implementacja Algorytmów. Niniejszy wstęp pokazuje
tylko przykładowe etapy postępowania, które są zalecane na początku, ale
podobny efekt można osiągnąć wybierając inne opcje.
Uruchomienie programu ActiveHDL
1. Otwórz program ActiveHDL oraz utwórz nowy (otwórz istniejący) projekt
nadrzędny (workspace). W przypadku otwarcia nowego projektu nadrzędnego
w okienku: Getting Started wybierz opcję: Create New Workspace.
2. W następnym oknie New Workspace wybierz nazwę projektu nadrzędnego np.
tc. (Zaleca się wybranie katalogu c:\my_designs jako nadrzędnego w którym
umieszczane będą wszystkie projekty).
3. W następnym okienku: New Design Wizard wybierz opcje: create an empty
design.
4. W oknie następnym wybierz rodzinę bramek np. Virtex jak to ilustruje
poniższy rysunek.
Rysowanie schematu
1. Otwórz program edycji schematu poprzez kliknięcie ikony BDE (zob.
poniższy rysunek)
W okienku New Source File Wizard - Language wybierz format EDIF.
W okienku New Source File Wizard - Name wpisz nazwe schematu np. licznik.bde
W następnym oknie New Source File Wizard - Ports możliwe jest dodanie wyprowadzeń
- ale można również to zrobić już w samym schemacie, dlatego prosze zakończy
2. Osadzanie elementów. Wybierz menu: View/Symbol Toolbox (lub naciśnij
klawisz S). W nowym okienku: Symbol Toolbox wybierz znak + koło Virtex (lub
innej wybranej rodziny bramek). W ten sposób ukaże się pełna lista dostępnych
symboli podstawowych z których można następnie budować schemat. Wybierz
element CB4CLED. Przyciskając lewym klawiszem myszki wybrany element należy
go przeciągnąć na odpowiednie miejsce schematu. Czynność powtórz dla innych
elementów w naszym przypadku bramki AND2 (zwróć uwagę na bramki z negatorem
na wejściu jak np. AND2B1, które są bardzo przydatne do późniejszych schematów)
oraz GND i VCC (GND i VCC można również osadzić przyciskając odpowiednio
klawisze G i P). Aby zakończyć wstawianie elementu przyciśnij Esc. Zamknij
okno Symbol Toolbox.
3. Łączenie elementów. Wybierz w menu: Diagram/Wire (lub przyciśnij klawisz
W, bardzo często wystarczy najechać myszką na końcówkę aby automatycznie
została wybrane menu Wire). Połącz wejścia danych wpisu równoległego do
masy (D0-3), uwaga: kończąc rysowanie ścieżki na innej ścieżce automatycznie
wstawiana jest kropka. Połącz wejście Up (kierunku liczenia) do VCC (zawsze
liczy do przodu). Podłącz wyjście Q0 i Q2 do wejść bramki AND. Wyjście bramki
do wejścia L (Load) licznika. Aby zakończyć łączenie elementów (lub też inne
czynności) przyciśnij klawisz Esc.
4. Wyprowadzenia układu. Osadź wejście (wyjście) poprzez wybór w memu
Diagram/Terminal/Input (Output) (lub szybko przyciskając klawisze I (O)).
Aby zakończyć przyciśnij Esc. Następnie połącz porty wejściowe do końcówek
clk (clock), ce (clock enable), clr (clear), za pomocą ścieżek (ang. wire).
Następnie klikając podwójnie porty wejściowe zmień ich nazwy na clk, ce i
clr. Podobnie można postąpić dla wyjścia TC
5. Łączenie magistral. Zamiast prowadzić wiele podobnych połączeń pojedynczych
należy stoswać magistrale. Wybierz menu: Diagram/Bus (lub klawisz B) i narysuj
magistralę w kształcie litery L w pobliżu wyjść Q0-2. Magistralę zakończ
terminatorem (przyciskając prawy przycisk myszki lub wybierając menu: Diagram/Terminator/BusOut).
Terminator nazwij Q, index range: 2 - 0. Następnie wybierając menu: Diagram/Wire
połącz wyjście licznika Q0 do magistrali. Czynność powtórz dla wyjść Q1-2.
Każde wejście do magistrali należy nazwać poprzez dwukrotne kliknięcie myszką.
W naszym przypadku użyj nazw: Q(0), Q(1) oraz Q(2).
6. Nazwanie sygnałów wewnętrznych. Każda ścieżka na schemacie ma swoją
unikalną nazwę nadawaną automatycznie np. NET93. Dlatego dobrą metodą projektowania
jest własnoręczne nazwanie wszystkich ścieżek na schemacie. W naszym przypadku
należy nazwać tylko wejście L licznika (wszystkie pozostałe sygnały są już
wyprowadzone na zewnątrz). Dwukrotni klikając tą ścieżkę nazwij ją Load.
7. Kompilacja. Aby sprawdzić poprawność wprowadzonego schematu i dodać
go do projektu należy wybrać menu: Design/Compile (lub przycisnąć klawisz
F11).
Symulacja schematu
1. Wybór schematu nadrzędnego do symulacji. Wybierz menu: Desigm/Settings,
a następnie wybierz element nadrzędny (licznik) do symulacji w menu rozwijanym
Top Level Selection for Simulation.
2. Wybierz w menu: Simulation/Initialize Simulation.
3. Wybranie symulowanych sygnałów. Otwórz okno do oglądania sygnałów poprzez
wybranie 4 ikony od lewej (New Waveform - zob. rys poniżej). Następnie aby
dodać wszystkie dostępne sygnały należy w oknie Design Browser zaznaczyć
element nazwa_schematu i przeciągnąć go na nowo utworzony Waveform. Sygnały,
które nie chcemy oglądać możemy usunąć poprzez ich zaznaczenie i przyciśnięcie
klawisza Del. Aby oglądać tylko wybrane sygnały należy przycisnąć '+' koło
nazwa_schematu i następnie zaznaczyć wybrany sygnał i przeciągnąć go na
okno Waveform.
Wymuszenia
Stan każdy sygnału wejściowego powinien być określony w każdym momencie
czasowym. Istnieje kilka rodzajów wymuszeń: 0- stan niski, 1-stan wysoki,
Z- stan wysokiej impedancji, X- stan nieokreślony. Aby wymusić dany sygnał
należy go zaznaczyć a następnie przycisnąć prawy przycisk myszki i wybrać
opcje: Stimulators. Istnieją różne rodzaje określenia wymuszenia:
1. Sygnał zegara: clock - Określa się okres i współczynnik wypełnienia.
W naszym przypadku sygnał clk powinien być wymuszony sygnałem o częstotliwości
10MHz.
2. Formula - wartość sygnału określana w dowolnych chwilach czasowych
np. dla sygnału ce można wpisać następujące wymuszenie: 0 0 ns, 1 370 ns,
0 1070 ns, oraz sygnał clr 0 0 ns, 1 250 ns, 0 270 ns
3. Value - przypisanie na stałe danej wartości. NAleży przypisać sygnałowi
Vcc wartość 1 a sygnałowi GND wartość 0.
4. Counter - przypisanie zalecane dla magistral, gdzie wartość zmienia
się tak jak to ma to miejsce w licznikach.
5. Hotkey oraz definicja klawisza skrótu - powoduje ze podczas symulacji
naciśnięcie tego klawisza zmienia stan sygnału na przeciwny
Symulacji cd.
4. W menu wybierz: Simulation/Run for (lub przyciśnij klawisz
F5) Alternatywną możliwością jest przyciśnięcie ikony zaznaczonej na poniższym
rysunku, czas symulacji można zdefiniować poprzez wpis do sąsiedniego okienka.
Aby powtórzyć symulację dla innych wymuszeń należy przycisnąć ikonę restart
(następna po Run for) a następnie Run for.
5. Dla zadanych wymuszeń oglądnąć otrzymane przebiegi.
6. Odpowiedz na następujące pytania:
a) modulo ile jest to licznik?
b) do czego służy wejście ce (clock enable)?
c) czym różni się wejście L (dla D(3-0)= 0) od wejścia clr. W tym celu
podłącz wyjście bramki AND do wejścia clr, modulo ile będzie wtedy licznik?
d) do czego służą wyjścia TC i CEO (czym się różnią) - w tym celu usuń
bramkę AND a wejście L podłącz do masy, używaj sygnału CE (np. aktywne co
drugi cykl zegara).