Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Witamy w instrukcji, jak zbudować stoper przy użyciu podstawowej płytki VHDL i Basys 3. Cieszymy się, że możemy podzielić się z Tobą naszym projektem! To był ostatni projekt kursu CPE 133 (Digital Design) w Cal Poly, SLO jesienią 2016. Zbudowany przez nas projekt to prosty stoper, który uruchamia, resetuje i zatrzymuje czas. Jako wejścia przyjmuje trzy przyciski na płycie Basys3, a czas jest wyświetlany na czterocyfrowym siedmiosegmentowym wyświetlaczu płyty. Upływający czas jest wyświetlany w formacie sekund: centysekund. Wykorzystuje zegar systemowy płyty jako wejście do śledzenia upływu czasu i wyświetla czas w postaci czterech cyfr na siedmiosegmentowym wyświetlaczu.
Krok 1: Materiały
Materiały, których będziesz potrzebować do tego projektu:
- 1 komputer z zainstalowanym pakietem Vivado Design Suite WebPack firmy Xilinx (preferowana wersja 2016.2)
- 1 karta FPGA Digilent Basys3 Xilinx Artix-7
- 1 kabel portu USB
Krok 2: Ustawianie wejść i wyjść
Powyższy rysunek przedstawia schemat blokowy najwyższego poziomu głównego modułu stopera. Stoper przyjmuje wejścia „CLK” (zegar), „S1” (przycisk start), „S2” (przycisk pauzy) i „RST” (reset) oraz posiada 4-bitowe wyjście „Anody”, 7-bitowe wyjście „segment” i jednobitowe wyjście „DP” (przecinek dziesiętny). Gdy wejście „S1” jest w stanie wysokim, stoper rozpoczyna odliczanie czasu. Gdy „S2” jest niskie, stoper zatrzymuje czas. Gdy „RST” jest wysokie, stoper zatrzymuje się i resetuje czas. W obwodzie znajdują się cztery podmoduły: dzielnik zegara, licznik cyfr, sterownik wyświetlacza siedmiosegmentowego i koder wyświetlacza siedmiosegmentowego. Główny moduł stopera łączy wszystkie podmoduły ze sobą oraz z wejściami i wyjściami.
Krok 3: Tworzenie zegarów
Moduł dzielnika zegara pobiera zegar systemowy i wykorzystuje wejście dzielnika do utworzenia zegara o dowolnej prędkości nie większej niż zegar systemowy. Stoper wykorzystuje dwa różne moduły zegarowe, jeden, który tworzy zegar 500 Hz, a drugi, który tworzy zegar 100 Hz. Schemat dzielnika zegara pokazano na powyższym rysunku. Dzielnik zegara przyjmuje jednobitowe wejście „CLK”, 32-bitowe wejście „Divisor” i jednobitowe wyjście „CLKOUT”. „CLK” to zegar systemowy, a „CLKOUT” to zegar wynikowy. Moduł zawiera również bramkę NOT, która przełącza sygnał „CLKTOG”, gdy licznik osiągnie wartość dzielnika.
Krok 4: Liczenie do dziesięciu
Licznik cyfr zlicza każdą cyfrę od 0 do 10 i tworzy kolejny zegar dla następnej cyfry, która oscyluje, gdy liczba osiągnie 10. Moduł przyjmuje 3 wejścia jednobitowe „S”, „RST” i „CLK” i daje jednobitowe wyjście „N” i 4-bitowe wyjście „D”. Wejście „S” to zezwolenie na wejściu. Zegar włącza się, gdy „S” jest wysokie i wyłącza, gdy „S” jest niskie. „RST” to wejście resetujące, więc zegar resetuje się, gdy „RST” jest wysoki. „CLK” to wejście zegara dla licznika cyfr. „N” to wyjście zegara, które staje się zegarem wejściowym dla następnej cyfry. Wyjście „D” przedstawia binarną wartość cyfry, na której znajduje się licznik.
Krok 5: Wyświetlanie liczb
Koder wyświetlacza siedmiosegmentowego zakoduje liczbę binarną otrzymaną z modułu sterownika wyświetlacza siedmiosegmentowego i zamieni ją w strumień bitów, które będą interpretowane jako wartości „1” lub „0” dla każdego segmentu wyświetlacza. Liczba binarna jest odbierana przez moduł jako 4-bitowa „cyfra” wejścia i powoduje powstanie 7-bitowych „segmentów” wyjścia. Moduł składa się z pojedynczego bloku przetwarzania przypadku, który przypisuje określony 7-bitowy strumień dla każdej możliwej wartości wejściowej od 0 do 9. Każdy bit w siedmiobitowych strumieniach reprezentuje jeden z siedmiu segmentów cyfr na wyświetlaczu. Kolejność segmentów w strumieniu to „abcdefg”, gdzie „0” oznaczają segmenty, które zapalają się dla podanej liczby.
Krok 6: Jak wyświetlić stoper
W siedmiosegmentowym module sterownika wyświetlacza znajdują się cztery 4-bitowe wejścia „D0”, „D1”, „D2” i „D3”, z których każde reprezentuje cztery wyświetlane cyfry. Wejście „CLK” to wejście zegara systemu. Wyjście jednobitowe „DP” przedstawia kropkę dziesiętną na wyświetlaczu siedmiosegmentowym. 4-bitowe wyjście „Anody” określa, która cyfra na siedmiosegmentowym wyświetlaczu jest pokazywana, a 4-bitowe wyjście „temp” zależy od stanu 2-bitowego wejścia sterującego „SEL”. Moduł wykorzystuje 4 multipleksery dla wejścia sterującego „SEL” i trzech wyjść; „Anody”, „temp” i „DP”.
Krok 7: Połącz wszystko razem
Do utworzenia przycisków startu i pauzy używany jest blok procesowy 'if' działający w oparciu o zegar 500Hz. Następnie połącz wszystkie submoduły razem w głównym module stopera, deklarując składowe każdego submodułu i używając różnych sygnałów. Cyfrowe podmoduły przejmują wyjście zegara poprzedniego podmodułu cyfrowego, przy czym pierwszy z nich przyjmuje zegar 100Hz. Wyjścia „D” podmodułów cyfrowych stają się następnie wejściami „D” modułu sterownika wyświetlacza siedmiosegmentowego. I wreszcie, wyjście „temp” modułu sterownika wyświetlacza siedmiosegmentowego staje się wejściem „temp” siedmiosegmentowego modułu enkodera.
Krok 8: Ograniczenia
Użyj 3 przycisków (W19, T17 i U18) dla wejść "RST", "S1" i "S2". W19 to przycisk resetowania, T17 to przycisk start (S1), a U18 to przycisk pauzy (S2). Wymagane jest również ograniczenie wejścia zegara przy użyciu portu W5. Pamiętaj też, aby dodać tę linię do ograniczenia zegara:
create_clock -add -name sys_clk_pin -okres 10.00 -przebieg {0 5} [get_ports {CLK}]
Połącz również anody i segmenty z płytką, aby stoper był wyświetlany na wyświetlaczu siedmiosegmentowym, jak widać w pliku ograniczeń.
Krok 9: Testowanie
Upewnij się, że Twoje urządzenie działa, bawiąc się trzema przyciskami: naciskając i przytrzymując je w każdej możliwej kolejności, aby znaleźć ewentualne problemy z kodem.