Programowany układ czasowy Zbuduj na płycie testowej ze Spartanem-3A prosty ośmiobitowy układ czasowy pracujący w trzech trybach. Zademonstruj jego działanie na ekranie oscyloskopu. Projekt z Języków Opisu Sprzętu AGH WFiIS 1
Wybór trybu realizowany jest przez wartość ładowaną do wewnętrznego rejestru zwanego słowem sterującym. Rejestr ten jest trzybitowy: Rejestr Słowa Sterującego MSB 2 Enable 1 LSB 0 2-bitowy kod trybu pracy Licznik Rejestr MSB 7 MSB 7 LSB 0 LSB 0 Enable jeśli jest 1 to układ jest uruchamiany 2
Układ czasowy - wymagania ryb 00 one-shot. Do Licznika układu jest wpisywana 8-bitowa wartość. astępnie Rejestr Słowa Sterującego jest ładowany wartością 100 i układ zaczyna zliczać w górę na każdym narastającym zboczu zegara. Kiedy w Liczniku zostanie osiągnięta wartość FF, na wyjściu układu generowany jest jeden impuls o szerokości impulsów zegarowych. Bit Enable jest ustawiany na 0 i kończy się praca układu. Powtórzenie cyklu wymaga wpisania 1 do najbardziej znaczącego bitu Rejestru Słowa Sterującego. ryb 01 generator impulsów. Do Licznika układu jest wpisywana 8-bitowa wartość. astępnie Rejestr Słowa Sterującego jest ładowany wartością 101 i układ zaczyna zliczać w górę na każdym narastającym zboczu zegara. Kiedy w Liczniku zostanie osiągnięta wartość FF na wyjściu układu generowany jest jeden impuls o szerokości impulsów zegarowych. Wartość bitu Enable nie jest zmieniana i cykl pracy układu jest ponownie rozpoczynany. Zatrzymanie pracy układu wymaga wpisania 0 do najbardziej znaczącego bitu Rejestru Słowa Sterującego lub podania stanu wysokiego na wejście ceb. 3
Układ czasowy wymagania ryb 10 generator przebiegu o wypełnieniu 50%. Do Licznika układu jest wpisywana 8-bitowa wartość. astępnie Rejestr Słowa Sterującego jest ładowany wartością 110. Układ zaczyna zliczać w dół na każdym narastającym zboczu zegara. Kiedy w Liczniku zostanie osiągnięta połowa wartości początkowej na wyjściu układu generowany jest stan wysoki 1. Dekrementacja licznika odbywa się dalej a w momencie osiągnięcia wartości 0, na wyjściu układu przywracany jest stan 0. Wartość bitu Enable nie jest zmieniana i cykl pracy układu jest ponownie rozpoczynany. Zatrzymanie pracy układu wymaga wpisania 0 do najbardziej znaczącego bitu Rejestru Słowa Sterującego lub podania stanu wysokiego na wejście ceb. W trybie 10 wyjście układu zmienia więc swoją wartość zawsze gdy licznik osiągnie połowę swojej początkowej wartości formując w ten sposób falę prostokątną. ryb 11 nie używany 4
Sygnały układu czasowego Sygnał Wej/Wyj Opis reset input Końcówka umożliwiająca sprowadzenie układu do stanu początkowego ceb input Enable układu stanem niskim 0 write input Stan 1 zezwala na wpisanie do RSS wartości trzech najmniej znaczących bitów magistrali data_in load input Stan 1 zezwala na wpisanie do rejestru 8-bitowej wartości z magistrali data_in. Stanowi to początek procesu zliczania. data_in[7:0] input 8-bitowa magistrala danych data_out output Sygnał wyjściowy clk input zegar 5
Architektura układu ceb load data_in R e j e s t r L i c z n i k D e k o d e r data_out write RSS 6
Architektura układu Bloki funkcjonalne układu: Rejestr RSS Licznik Dekoder 8-bitowy rejestr równoległy do przechowywania wartości początkowej dla Licznika Rejestr Słowa Sterującego przechowujący bit uruchamiający Enable (MSB) i dwa bity kodu trybu pracy 8-bitowy licznik zliczający w dół gdy bit Enable RSS jest ustawiony i generujący znaczniki opróżnienia i pół-opróznienia Układ kombinacyjny generujący wyjście układu w zależności od zanaczników licznika i bitów RSS 7
Diagram ładowania danych SAR ~ceb & write & ~load ~ceb & ~write & load ceb=1 Wpisz dane z data_in[2:0] do RSS Wpisz dane z data_in[7:0] do Rejestru Kasuj Rejestr i RSS 8
Diagram kasowania danych SAR arastające zbocze reset flag_counter = 0 counter = 0 flag_half_counter = 0 9
Diagram trybu 0 SAR zbocze narastające clk cwr[2]=1 A Mode1 cwr[1:0]=00 10
Diagram trybu 0 c.d. flag_counter=0 counter=ff Przepisz zatrzask do licznika i ustaw flag_counter = 1 counter=counter+1 Ustaw cwr[2]=0 flag_counter=0 11
Mode1 Diagram trybu 1 Cwr[1:0]=01 Mode2 flag_counter=0 counter=ff Przepisz zatrzask do licznika i ustaw flag_counter = 1 Ustaw flag_counter=0 counter=counter+1 A 12
Mode2 Diagram trybu 2 cwr[1:0]=10 A flag_counter=0 Przepisz zatrzask do licznika i ustaw flag_counter = 1 counter={0, latch_counter[7:1]} Ustaw half_flag_counter= ~half_flag_counter counter=counter-1 counter=0 Ustaw flag_counter=0 A 13
Diagram dekodera L i c z n i k RSS counter=ff & cwr[1:0]=00 & flag_counter=1 counter=ff & cwr[1:0]=01 cwr[1:0]=10 & flag_half_counter=1 data_out 14
Układ należy zrealizować w FPGA Spartan-3A i zademonstrować na oscyloskopie działanie układu. ryb pracy powinien być ustawiany przełącznikami i sygnalizowany na diodach. 15