Logo Katedry
Strona główna
Katedra Systemów Mikroelektronicznych, Wydział Elektroniki, Telekomunikacji i Informatyki, Politechnika Gdańska Logo Wydziału
English English version

Prosty pomiar czasu

Zadanie: Układ ma mierzyć czas z dokładnością do setnych części sekundy. Kolejne naciśnięcia przycisku BTN0 wywołują następujące działanie:


Rys.1 Działanie stopera po kolejnych naciśnięciach przycisku.

Czas wyświelany ma być na wyświetlaczu LED w postaci: SS.DD, gdzie: SS=sekundy, DD=setne części sekundy. Przekroczenie czasu 59.99 sekund można zasygnalizować wyświetleniem specjalnego symbolu oznaczającego przepełnienie, np. ("--.--").

Przycisk BTN3 to dodatkowy reset asynchroniczny.

Uwaga: Układ należy zabezpieczyć przed drganiami przycisku (dot. BTN0)! Dobrze jest założyć, że po naciśnięciu przycisku, styki przycisku mogą drgać przez czas aż do 50 ms.


Rys.2 Przykładowy przebieg napięcia podczas naciskania przycisku.


W układzie należy osadzić, jako component, dzielnik częstotliwości z poprzedniego ćwiczenia oraz blok sterowania wyświetlaczem.


Napisać testbench.
Przed implementacją wykonać symulację układu z wykorzystaniem pliku testbench.

Plik ucf do zadania, płytka Digilent Spartan-3, układ Spartan-3 3S200 FT256-4:
#########################################################################################
# Clock:
NET "clk_i" LOC = "T9" ; # 50 MHz clock
#########################################################################################

#########################################################################################
NET "led7_an_o<3>" LOC = "E13" ; # leftmost digit, active low
NET "led7_an_o<2>" LOC = "F14" ; # active low
NET "led7_an_o<1>" LOC = "G14" ; # active low
NET "led7_an_o<0>" LOC = "d14" ; # rightmost digit, active low
#
NET "led7_seg_o<7>" LOC = "E14" ; # segment 'a', active low
NET "led7_seg_o<6>" LOC = "G13" ; # segment 'b', active low
NET "led7_seg_o<5>" LOC = "N15" ; # segment 'c', active low
NET "led7_seg_o<4>" LOC = "P15" ; # segment 'd', active low
NET "led7_seg_o<3>" LOC = "R16" ; # segment 'e', active low
NET "led7_seg_o<2>" LOC = "F13" ; # segment 'f', active low
NET "led7_seg_o<1>" LOC = "N16" ; # segment 'g', active low
NET "led7_seg_o<0>" LOC = "P16" ; # segment 'dp', active low
#########################################################################################

#########################################################################################
# Push-buttons:
NET "start_stop_button_i" LOC = "M13" ; # BTN0 active high
NET "rst_i" LOC = "L14" ; # BTN3 active high
#########################################################################################

Wyświetlacz LED
Rys. 2 Opis podłączeń poszczególnych segmentów wyświetlacza. Przykład wyświetlenia cyfry '2'