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.


5. W następnym oknie podaj unikalna nazwę projektu (design) np. licznik.
6. W następnym oknie przyciśnij przycisk zakończ potwierdzający wpisane dane.

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).