Modelowanie liczników w języku Verilog i ich implementacja w strukturze FPGA

Podobne dokumenty
Układy sekwencyjne. Podstawowe informacje o układach cyfrowych i przerzutnikach (rodzaje, sposoby wyzwalania).

Ćwiczenie MMLogic 002 Układy sekwencyjne cz. 2

Liczniki, rejestry lab. 07 Układy sekwencyjne cz. 1

Programowalne układy logiczne

LABORATORIUM ELEKTRONIKI I TEORII OBWODÓW

Cel. Poznanie zasady działania i budowy liczników zliczających ustaloną liczbę impulsów. Poznanie kodów BCD, 8421 i Rys. 9.1.

(przykład uogólniony)

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Badanie układów średniej skali integracji - ćwiczenie Cel ćwiczenia. 2. Wykaz przyrządów i elementów: 3. Przedmiot badań

UKŁADY CYFROWE. Układ kombinacyjny

WOJSKOWA AKADEMIA TECHNICZNA im. Jarosława Dąbrowskiego LABORATORIUM UKŁADÓW PROGRAMOWALNYCH I SPECJALIZOWANYCH

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 4 (3h) Przerzutniki, zatrzaski i rejestry w VHDL

f we DZIELNIKI I PODZIELNIKI CZĘSTOTLIWOŚCI Dzielnik częstotliwości: układ dający impuls na wyjściu co P impulsów na wejściu

Podstawy Elektroniki dla Elektrotechniki. Liczniki synchroniczne na przerzutnikach typu D

LICZNIKI PODZIAŁ I PARAMETRY

1.Wprowadzenie do projektowania układów sekwencyjnych synchronicznych

Laboratorium Podstaw Techniki Cyfrowej

Ćwiczenie 01 - Strona nr 1 ĆWICZENIE 01

Elementy struktur cyfrowych. Magistrale, układy iterowane w przestrzeni i w czasie, wprowadzanie i wyprowadzanie danych.

WYKŁAD 8 Przerzutniki. Przerzutniki są inną niż bramki klasą urządzeń elektroniki cyfrowej. Są najprostszymi układami pamięciowymi.

LICZNIKI Liczniki scalone serii 749x

Elementy struktur cyfrowych. Magistrale, układy iterowane w przestrzeni i w czasie, wprowadzanie i wyprowadzanie danych.

dwójkę liczącą Licznikiem Podział liczników:

Systemy Czasu Rzeczywistego FPGA

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

4. Karta modułu Slave

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

Politechnika Wrocławska, Wydział PPT Laboratorium z Elektroniki i Elektrotechniki

Elementy struktur cyfrowych. Magistrale, układy iterowane w przestrzeni i w czasie, wprowadzanie i wyprowadzanie danych.

Odbiór i dekodowanie znaków ASCII za pomocą makiety cyfrowej. Znaki wysyłane przez komputer za pośrednictwem łącza RS-232.

Ćw. 7: Układy sekwencyjne

Ćwiczenie D2 Przerzutniki. Wydział Fizyki UW

Programowany układ czasowy

Układy sekwencyjne. 1. Czas trwania: 6h

Układy czasowo-licznikowe w systemach mikroprocesorowych

2. Architektura mikrokontrolerów PIC16F8x... 13

LABORATORIUM TECHNIKA CYFROWA LICZNIKI I REJESTRY. Rev.1.1

Laboratorium przedmiotu Technika Cyfrowa

Systemy Czasu Rzeczywistego FPGA

WFiIS CEL ĆWICZENIA WSTĘP TEORETYCZNY

Podstawy Elektroniki dla Informatyki. Pętla fazowa

Podstawowe elementy układów cyfrowych układy sekwencyjne. Rafał Walkowiak

Projektowanie i badanie liczników synchronicznych i asynchronicznych

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Cyfrowe Elementy Automatyki. Bramki logiczne, przerzutniki, liczniki, sterowanie wyświetlaczem

SML3 październik

Zapoznanie się z podstawowymi strukturami liczników asynchronicznych szeregowych modulo N, zliczających w przód i w tył oraz zasadą ich działania.

Układy czasowo-licznikowe w systemach mikroprocesorowych

Podstawowe elementy układów cyfrowych układy sekwencyjne Rafał Walkowiak Wersja

Temat: Projektowanie i badanie liczników synchronicznych i asynchronicznych. Wstęp:

Projekt z przedmiotu Systemy akwizycji i przesyłania informacji. Temat pracy: Licznik binarny zliczający do 10.

Ćwiczenie Digital Works 003 Układy sekwencyjne i kombinacyjne

Elektronika i techniki mikroprocesorowe

Układ sterowania 4-cyfrowym wyświetlaczem 7-segmentowym LED

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Energoelektroniki i Maszyn Elektrycznych REJESTRY

Parametryzacja przetworników analogowocyfrowych

Przerzutniki. Układy logiczne sekwencyjne odpowiedź zależy od stanu układu przed pobudzeniem

1. Poznanie właściwości i zasady działania rejestrów przesuwnych. 2. Poznanie właściwości i zasady działania liczników pierścieniowych.

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

LICZNIKI LABORATORIUM. Elektronika AKADEMIA GÓRNICZO-HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE. Wydział Informatyki, Elektroniki i Telekomunikacji

Projektowanie układów VLSI-ASIC techniką od ogółu do szczegółu (top-down) przy użyciu pakietu CADENCE

Temat 7. Dekodery, enkodery

Programowanie Układów Logicznych kod kursu: ETD6203 W dr inż. Daniel Kopiec. Pamięć w układach programowalnych

Systemy Czasu Rzeczywistego FPGA

Systemy Czasu Rzeczywistego FPGA

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Podstawy Elektroniki dla Elektrotechniki. Układy cyfrowe - bramki logiczne i przerzutniki

Kodowanie liczb całkowitych w systemach komputerowych

4. UKŁADY FUNKCJONALNE TECHNIKI CYFROWEJ

Naturalny kod binarny (NKB)

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

Elektroniczny sejf hotelowy

Ćwiczenie 27C. Techniki mikroprocesorowe Badania laboratoryjne wybranych układów synchronicznych

Układy kryptograficzne z uŝyciem rejestrów LFSR

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

1.1. Pozycyjne systemy liczbowe

Układy kombinacyjne - przypomnienie

Podstawy działania układów cyfrowych...2 Systemy liczbowe...2 Kodowanie informacji...3 Informacja cyfrowa...4 Bramki logiczne...

Ćwiczenie 23. Cyfrowe pomiary czasu i częstotliwości.

Układy sekwencyjne. 1. Czas trwania: 6h

CZ1. Optymalizacja funkcji przełączających

Stan wysoki (H) i stan niski (L)

Projekt Koder HDB-3. Wykonali: Agnieszka Sikorska, Łukasz Kokosza EiTI Politechnika Warszawska Warszawa Projekt UCYF Koder HDB-3

KURS Hexcalcul (2) Implementacja kalkulatora kodu BCD na Hex w układzie programowalnym

Przerzutniki RS i JK-MS lab. 04 Układy sekwencyjne cz. 1

Elektronika i techniki mikroprocesorowe. Instrukcja do zajęć laboratoryjnych. Część: Technika Cyfrowa Liczba zajęć: 3 + zaliczające

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Specyfika projektowania Mariusz Rawski

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

W przypadku spostrzeżenia błędu proszę o przesłanie informacji na adres

Cyfrowy zapis informacji. 5 grudnia 2013 Wojciech Kucewicz 2

Spis treści 1. Wstęp 2. Ćwiczenia laboratoryjne LPM

AKADEMIA GÓRNICZO-HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE. Wydział Informatyki, Elektroniki i Telekomunikacji LABORATORIUM.

U 2 B 1 C 1 =10nF. C 2 =10nF

Programowalne Układy Cyfrowe Laboratorium

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 8 (3h) Implementacja pamięci ROM w FPGA

Ćwiczenie 23. Cyfrowe pomiary czasu i częstotliwości.

interfejs szeregowy wyświetlaczy do systemów PLC

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Transkrypt:

Modelowanie liczników w języku Verilog i ich implementacja w strukturze FPGA Licznik binarny Licznik binarny jest najprostszym i najpojemniejszym licznikiem. Kod 4 bitowego synchronicznego licznika binarnego pokazano poniżej: module bin_cnt(clk, en, cnt); input en; // enable output [3:0] cnt; reg [3:0] cnt = 0; cnt <= en? (cnt + 1) : cnt; cnt = 0000 cnt = 0011 cnt = 0101 cnt = 0110 cnt = 0111 Licznik pierścieniowy Licznik pierścieniowy to układ sekwencyjny pracujący w kodzie 1 z n. W trakcie działania tylko jeden z bitów może mieć wartość 1 dla układu z krążącą jedynką (lub 0 dla krążącego zera ). Kod 4 bitowego licznika pierścieniowego z krążącą jedynką pokazano poniżej: module ring(clk, cnt); output [3:0] cnt; reg [3:0] cnt = 4'b0001; cnt <= {cnt[2:0], cnt[3]}; Działanie tego licznik można przetestować korzystając z poniższego modułu testowego: module ring_tb(); reg clk; wire [3:0] LED; ring ring_u(clk, LED); reg [3:0] i; initial begin $dumpfile("./ring.vcd"); $dumpvars(0); // zapisz wynik symulacji // wartości wszystkich zmiennych (rejestry) for(i=0; i < 10; i=i+1) begin #1 clk = 0; #1 clk = 1; $display("%d: %b", i, LED);

Symulacja pracy licznika W niniejszej instrukcji proponuje się przeprowadzenie symulacji z wykorzystaniem narzędzi opensource. W tym celu: a) pobieramy pakiet symulator + przeglądarka http://bleyer.org/icarus/iverilog-10.0-x86_setup.exe b) Instalujemy w katalogu domyślnym tj. C:\iverilog, wraz z przeglądarką GTKWave c) Uruchamiamy konsolę poleceniem cmd, za pomocą polecenia cd przechodzimy do katalogu w którym znajduje się plik z kodem testowanego licznika tj. ring.v i kompilujemy go komą c:\iverilog\bin\iverilog ring.v Wynik kompilacja umieszczany zostaje w pliku a.out. Symulację uruchamiamy komą: c:\iverilog\bin\vvp a.out d) Przegladarkę uruchamiamy komą c:\iverilog\gtkwave\bin\gtkwave -f ring.vcd Następnie wybieramy sygnały które chcemy obejrzeć (Rys poniżej): Rys. Przebiegi symulacji pracy 4-bitowego licznika pierścieniowego. Rys. Przebiegi symulacji pracy 6-bitowego licznika pierścieniowego z układem dodatkowego dzielnika częstotliwości przez 8. Testowanie licznik pierścieniowego na FPGA Na płytce Basys3 dostępny jest zegar 100 MHz. Częstotliwość tego zegara jest za wysoka do sterowania wyświetlaczem LED, dlatego musi być ona podzielona, tak by uzyskać sygnał o

częstotliwości rzędu 1 khz (lub mniej, w zależności od zastosowania). W tym celu należy skorzystać z przygotowanego modułu clk_divider, którego kod wraz z licznikiem umieszczony jest w pliku ring_fpga.v. Zanim przeprowadzisz implementację na FPGA wykonaj symulację i obejrzyj przebiegi czasowe w układzie. Jak widać (rysunek wyżej) zegar taktujący licznik ring, tj. sygnał clk w module ring_top, ma częstotliwość 8 razy mniejszą jak sygnał clk_100mhz pochodzący z generatora zewnętrznego; dlaczego?. Zmień współczynnik podziału tak by licznik pracował z taką częstotliwością by można było zaobserwować efekt krążącej jedynki tj ok 10 Hz. Zwróć uwagę, że rejestr reg [20:0] cnt w dzielniku clk_divider ma 21 bitów, co pozwala na zliczanie do wartości 2^21-1, czyli 2097151 max. Czy to wystarczy do wygenerowania 10 Hz z sygnału 100 MHz? Uwaga: Vivado jest mało inteligentny i wymaga wskazania modułu TOP. W przypadku symulacji modułem TOP jest ring_tb, który nie ma żadnych portów. Do implementacji modułem TOP jest ring_top(clk_100mhz, LED), który ma dwa porty. Przypominam o konieczności dołączenia i modyfikacji pliku XDC, tak by uwzględnić te porty. Licznik BCD Licznik binarny oferuje największą pojemność przy zadanej liczbie użytych przerzutników. Jeśli jednak chcemy wyświetlić liczbę zliczeń w postaci dziesiętnej na wyświetlaczu 7 segmentowym, to pojawia się problem; należy skonwertować liczbę binarną na postać dziesiętną. Problemu tego można uniknąć poprzez użycie licznika BCD (Binary-Coded Decimal). Kod BCD wykorzystuje 4 bitowy kod binarny do kodowania kolejnych cyfr dziesiętnych liczby. Przykładowo liczba dziesiętna 1234 ma reprezentacje: dziesiętnie: 1 2 3 4 BCD: 0001 0010 0011 0100 binarnie: 100 1101 0010 Jak widać, na ogół, zapis liczby w kodzie BCD wymaga więcej bitów niż zapis tej samej liczby w kodzie binarnym. Wynika to z faktu, że kolejne cztery bity zapisu BCD reprezentują liczbę w zakresie 0 do 9, podczas gdy w kodzie binarnym te same 4 bity reprezentują liczbę od 0 do 15. Dlatego kod BCD stosowany jest głównie w przypadku, gdy występuje konieczność wyświetlania wyniku zliczeń na wyświetlaczu 7 segmentowym. Z powyższego przykładu wynika, że 4-pozycyjny licznik BCD można zbudować łącząc kaskadowo cztery liczniki binarne, których zakres zliczania ograniczony jest do 9. Przykład takiego licznika (do 9) w języku Verilog pokazany jest poniżej. Zwróć uwagę, że wartość rejestru bcd zwiększa się o 1 (modulo 10) podczas narastającego zbocza zegara tylko gdy en = 1. Przepełnienie licznika sygnalizowane jest flagą ov. Zauważ, że licznik składa się z dwóch części: kombinatorycznej i sekwencyjnej. module bcd1(clk, en, bcd, ov); input en; output [3:0] bcd; output ov; reg [3:0] bcd_next, bcd = 0; reg ov; always @ (*) if(en==0) {ov, bcd_next} = {1'b0, bcd}; else begin

bcd_next = (bcd < 9)? bcd + 1 : 0; ov = (bcd < 9)? 0 : 1; bcd <= bcd_next; module bcd1_tb(); reg clk; wire [3:0] bcd; reg en; wire ov; bcd1 u(clk, en, bcd, ov); reg [7:0] i; initial begin $dumpfile("./cnt.vcd"); $dumpvars(0); en = 1; for(i=0; i < 12; i=i+1) begin #1 clk = 0; #1 clk = 1; $display("i=%d: ov=%b, bcd=%d", i, ov, bcd); 7-seg display 7-seg display Transkoder bin_7seg Transkoder bin_7seg D3 D2 D1 D0 OV D3 D2 D1 D0 OV Rys. Licznik BCD dwu pozycyjny z wyświetlaczem (transkoder na kod wskaźnika 7 seg). Zadanie: na podstawie powyższego przykładu zbuduj licznik BCD o dwóch pozycjach, tj. taki który zlicza w zakresie 0 do 99. Przeprowadź symulacje działania. Zadanie: zaimplementuj na układzie FPGA licznik BCD o dwóch pozycjach (zakres zliczania 0 do 99). Do taktowania licznika wykorzystaj sygnał zegarowy o częstotliwości ok 1 Hz uzyskany z

podzielnika tak jak to omówiono w przypadku licznika pierścieniowego. Sygnał c_in dla pierwszego licznika powinien pochodzić z przycisku sw[0], czyli licznik zlicza, gdy przycisk jest wciśnięty. Licznik uzupełnij o moduł sterowania wyświetlaczem 7-segmentowmy.