1 Wstęp. 2 Operatory. 3 Blok always dla układów kombinacyjnych. 4 Instrukcja IF. 5 Instrukcja CASE. 6 Struktury konstrukcji warunkowych



Podobne dokumenty
1 Wstęp. 2 Proste przykłady. 3 Podstawowe elementy leksykalne i typy danych. 6 Opis strukturalny. 7 Moduł testowy (testbench)

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

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

Programowalne układy logiczne kod kursu: ETD Podstawy języka Verilog W

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Laboratorium Podstaw Techniki Cyfrowej

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

Programowalne układy logiczne kod kursu: ETD Układy kombinacyjne, przypisania, blokujące i nieblokujące cz.2 W

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Sposoby projektowania systemów w cyfrowych

PROGRAMOWANIE STRUKTUR CYFROWYCH. Konwencje dla asemblera KCPSM3. Simple IO. PicoBlaze - projekty. c Dr inż. Ignacy Pardyka. Rok akad.

Projekt prostego procesora

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Przykładowe pytania z części PSPICE. 1. Podaj zasady tworzenia pliku symulacyjnego. 2. Czy składnia PSPICE jest czuła na wielkość liter? 3.

Podstawy programowania w języku C i C++

Automatyka. Treść wykładów: Multiplekser. Układ kombinacyjny. Demultiplekser. Koder

1. ISE WebPack i VHDL Xilinx ISE Design Suite 10.1 VHDL Tworzenie projektu Project Navigator Xilinx ISE Design Suite 10.1 File

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Systemy wbudowane. Projektowanie systemów wbudowanych na bazie układów CPLD/FPGA Język opisu sprzętu Verilog cz.1

Literatura. adów w cyfrowych. Projektowanie układ. Technika cyfrowa. Technika cyfrowa. Bramki logiczne i przerzutniki.

Język AHDL. Synteza strukturalna. dr inŝ. Paweł Tomaszewicz Instytut Telekomunikacji Politechnika Warszawska H D L

Struktura i działanie jednostki centralnej

Technika cyfrowa projekt: Sumator 4 bitowy równoległy

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Programowalne układy logiczne

Sumatory H D L. dr inŝ. Paweł Tomaszewicz Instytut Telekomunikacji Politechnika Warszawska

Układy arytmetyczne. Joanna Ledzińska III rok EiT AGH 2011

Ćwiczenie 27 Temat: Układy komparatorów oraz układy sumujące i odejmujące i układy sumatorów połówkowych i pełnych. Cel ćwiczenia

Architektura systemów komputerowych Laboratorium 13 Symulator SMS32 Operacje na bitach

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Technika cyfrowa Synteza układów kombinacyjnych

Układy logiczne. Wstęp doinformatyki. Funkcje boolowskie (1854) Funkcje boolowskie. Operacje logiczne. Funkcja boolowska (przykład)

LABORATORIUM TECHNIKA CYFROWA LICZNIKI I REJESTRY. Rev.1.1

Kombinacyjne bloki funkcjonalne

SML3 październik

Układy kombinacyjne. cz.2

AHDL - Język opisu projektu. Podstawowe struktury języka. Komentarz rozpoczyna znak i kończy znak %. SUBDESIGN

Projektowanie Urządzeń Cyfrowych

LABORATORIUM ELEKTRONIKA Projektowanie koderów, transkoderów i dekoderów w języku VHDL

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Altera Quartus II. Opis niektórych komponentów dostarczanych razem ze środowiskiem. Opracował: mgr inż. Leszek Ciopiński

Tranzystor JFET i MOSFET zas. działania

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Synteza logiczna APSC

Projektowanie scalonych systemów wbudowanych VERILOG. VERLIOG - historia

Pojedyncze wartości zadeklarowanego typu Ustawiane przed rozpoczęciem symulacji bez moŝliwości

Modelowanie złożonych układów cyfrowych (1)

1. Operacje logiczne A B A OR B

Technika cyfrowa Synteza układów kombinacyjnych (I)

Układy logiczne układy cyfrowe

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Szkoła programisty PLC : sterowniki przemysłowe / Gilewski Tomasz. Gliwice, cop Spis treści

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

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Ćwiczenie 28. Przy odejmowaniu z uzupełnieniem do 2 jest wytwarzane przeniesienie w postaci liczby 1 Połówkowy układ

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

Specyfika projektowania Mariusz Rawski

Podstawy programowania w języku C

Architektura typu Single-Cycle

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Architektura systemów komputerowych. Poziom układów logicznych. Układy mnoŝące i dzielące

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Sterowniki Programowalne (SP)

Ćwiczenie 01 - Strona nr 1 ĆWICZENIE 01

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Plan wykładu. Architektura systemów komputerowych. MnoŜenie realizacja sprzętowa (wersja 1) Układy mnoŝące liczby całkowite.

Funkcja Boolowska a kombinacyjny blok funkcjonalny

Język VERILOG w praktyce

Technika cyfrowa i mikroprocesorowa. Zaliczenie na ocenę. Zaliczenie na ocenę

Python wstęp do programowania dla użytkowników WCSS

Architektura komputerów

Mikrokontroler ATmega32. Język symboliczny

Układy reprogramowalne i SoC Język VHDL (część 4)

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Przykładowe pytania DSP 1

Języki opisu sprzętu VHDL Mariusz Rawski

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Laboratorium przedmiotu Technika Cyfrowa

Języki i paradygmaty programowania

Wykład 4. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Programowalne Układy Logiczne. Wykład I dr inż. Paweł Russek

Układy sekwencyjne. Wstęp doinformatyki. Zegary. Układy sekwencyjne. Automaty sekwencyjne. Element pamięciowy. Układy logiczne komputerów

Projektowanie hierarchiczne Mariusz Rawski

Mikrooperacje. Mikrooperacje arytmetyczne

System operacyjny Linux

Arytmetyka liczb binarnych

Verilog HDL. Język Opisu Sprzętu Hardware Description Language Część I. Elementy języka. dr inż. Paweł Tomaszewicz H D L

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Lista zadań nr 1. Zagadnienia stosowanie sieci Petriego (ang. Petri net) jako narzędzia do modelowania algorytmów sterowania procesami

Instrukcje sekwencyjne

Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft );

Algorytmika i Programowanie VBA 1 - podstawy

Lista zadań nr 5. Ścieżka projektowa Realizacja każdego z zadań odbywać się będzie zgodnie z poniższą ścieżką projektową (rys.

Transkrypt:

Wstęp PROGRAMOWANIE STRUTUR CYFROWYCH Układy kombinacyjne poziomu RT c Dr inż. Ignacy Pardyka UNIWERSYTET JANA OCHANOWSIEGO w ielcach 1 Rok akad. 2013/2014 2 1 Instytut Fizyki, Zakład Informatyki, e-mail: ignacy.pardyka@ujk.edu.pl c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 1 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 2 / 50 Wstęp Układy kombinacyjne poziomu RT Układy kombinacyjne poziomu RT (przesłań międzyrejestrowych) układy złożone z elementów strukturalnych, takich jak sumatory, komparatory, multipleksery Projektowanie z zastosowaniem operatorów Verilog: arytmetycznych (aritmetic) przesunięć (shift) relacji (relational) równości (equality) bitowych (bitwise) redukcji (reduction) logicznych (logical) konkatenacji (concatenation) warunkowych (conditional) 2 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 3 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 4 / 50

c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 5 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 6 / 50 arytmetyczne Sześć operatorów arytmetycznych: +, -, *, /, %, ** reprezentują kolejno: dodawanie, odejmowanie, mnożenie, dzielenie, modulo, potęgowanie W rezultacie syntezy, operatory + i generują sumator i układ odejmujący - implementowane w FPGA na poziomie podstawowych funktorów logicznych Synteza operacji mnożenia zależy od narzędzia syntezy i od technologii docelowej /, %, ** zwykle nie podlegają automatycznej syntezie. c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 7 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 8 / 50

przesunięcia relacji i równości Cztery operatory przesunięcia: >>, <<, >>>, <<< pierwsze dwa, to logiczne przesunięcie w prawo i w lewo, a kolejne dwa, to przesunięcie arytmetyczne w prawo i w lewo Jeśli oba operandy są sygnałami, jak w a << b, to narzędzie syntezy utworzy przesuwnik krążący (barrel shifter) Przykłady: Operacje przesuwania można opisać również za pomocą operatora konkatenacji. Cztery operatory relacji: >, <, <=, >= porównują dwa operandy i zwracają 1-bitową wartość logiczną: 0 gdy fałsz, 1 gdy prawda Cztery operatory równości: ==,!=, ===,!== zwracają 1-bitową wartość 0 gdy fałsz, 1 gdy prawda operatory ===,!== uwzględniają bity o wartościach x oraz z, nie podlegają syntezie. relacji oraz operatory ==,!= są syntezowane jako komparatory. c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 9 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 10 / 50 bitowe, redukcji i logiczne bitowe, redukcji i logiczne bitowe (bitwise) Cztery podstawowe operatory bitowe: & (and), (or), ^ (xor), ~ (not) Przykład: sygnały 4-bitowe a, b, c wire [3:0] a, b, c; instrukcja assign c = a b; jest równoważna instrukcjom assign c[3] = a[3] b[3]; assign c[2] = a[2] b[2]; assign c[1] = a[1] b[1]; assign c[0] = a[0] b[0]; redukcji operatory &,, ^ mogą mieć tylko jeden operand, i wtedy działają jako operatory redukcji operacja jest wykonywana na wszystkich bitach i zwracana jest 1-bitowa wartość 0 albo 1 Przykład: mamy 4-bitowy sygnał a oraz 1-bitowy sygnał y: wire [3:0] a; wire y; instrukcja assign y = a; jest równoważna instrukcji assign y = a[3] a[2] a[1] a[0]; c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 11 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 12 / 50

bitowe, redukcji i logiczne logiczne operatory &&,,! operandy operatorów logicznych mogą mieć wartości logiczne: fałsz (false) gdy wszystkie bity operandu są zerowe, albo prawda (true) gdy przynajmniej jeden z bitów reprezentacji operandu ma wartość 1 rezultatem operacji jest zawsze 1-bitowa wartość logiczna Z zasady używamy operatorów logicznych w wyrażeniach boolowskich, a operatorów bitowych do bitowych operacji na sygnałach Przykłady: c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 13 / 50 konkatenacji i replikacji Operator konkatenacji, { }, łączy części elementów i tablice tworząc tablice o większych rozmiarach wire al; wire [3:0] a4; wire [7:0] b8, c8, d8;... assign b8 = {a4, a4}; assign c8 = {al, al, a4, 2 b00}; assign d8 = {b8[3:0], c8[3:0]}; Operator konkatenacji można zastosować do realizacji operacji przesuwania (shift) i rotacji (rotate) o zadaną liczbę pozycji wire [7:0] a; wire [7:0] rot, shl, sha;... assign rot = {a[2:0], a[7:3]}; // rotate right 3 bits assign shl = {3 b000, a[7:3]}; // logical shift assign sha = {3{a[7]}, a[7:3]}; // arithmetic shift c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 14 / 50 warunkowe Operator? :, wymaga trzech operandów [signal] = [boolean-exp]? [true-exp] : [false-exp]; Przykład 1: większa z wartości a, b: assign max = (a>b)? a : b; Przykład 2: największa z wartości a, b, c: assign max = (a>b)? ((a>c)? a : c) : ((b>c)? b : c ); W rezultacie syntezy tworzony jest multiplekser 2x1. c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 15 / 50 Ustalanie liczby bitów wartości wyrażenia Wyznaczana jest liczba bitów najdłuższego z operandów z kontekstu obejmującego wyrażenie z prawej strony i sygnału z lewej Reprezentację każdego z sygnałów występujących w wyrażeniu prawostronnym rozszerza się do reprezentacji na maksymalnej liczbie bitów, a następnie oblicza się wartość wyrażenia Rezultat przypisuje się do sygnału z lewej strony instrukcji przypisania. Jeśli liczba bitów reprezentacji sygnału jest mniejsza od liczby bitów reprezentacji rezultatu, to obcinane są starsze bity. Przykład: wire [7:0] a, b; wire [7:0] sum8; wire [8:0] sum9; assign sum8 = a + b; assign sum9 = a + b; w pierwszym przypadku, ewentualny bit przeniesienia (carry-out) zostanie zgubiony. c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 16 / 50

Blok always dla układów kombinacyjnych Synteza układu z wartościami z Wartości z implikują syntezę układu z buforem 3-stanowym assign y = (oe)? a_in : 1 bz; 2 Typowe zastosowanie bufora 3-stanowego to implementacja portu dwukierunkowego (inout) c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 17 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 18 / 50 Blok always dla układów kombinacyjnych Blok always dla układów kombinacyjnych Blok always można traktować jako czarną skrzynkę, której działanie jest opisane przez instrukcje proceduralne nie wszystkie instrukcje proceduralne są syntezowalne w pojedyncze, typowe układy Synteza układów kombinacyjnych: przypisanie proceduralne blokujące instrukcja if instrukcja case c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 19 / 50 Blok always dla układów kombinacyjnych Składnia i działanie Uproszczona składnia bloku always z listą wrażliwości: always @([sensitivity_list]) begin [optional name] [optional local variable declaration]; [procedural statement]; [procedural statement]; Term [sensitivity_list] to lista sygnałów i zdarzeń, na które blok always ma odpowiadać (jest wrażliwy na ) wszystkie sygnały wejściowe układu kombinacyjnego muszą występować na liście wrażliwości jeśli którykolwiek z sygnałów listy wrażliwości zmieni wartość lub zajdzie zdarzenie, to blok jest aktywowany i wykonywane są instrukcje zawarte w bloku always po wykonaniu instrukcji w bloku always, proces jest usypiany (zawieszany). c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 20 / 50

Blok always dla układów kombinacyjnych Przypisanie proceduralne Blok always dla układów kombinacyjnych Przykład: komparator 1-bitowy Przypisanie proceduralne może być użyte jedynie w bloku always lub w bloku initial Są dwa rodzaje przypisań proceduralnych: blokujące i nieblokujące [variable_name] = [expression] ; // blocking assignment [variable_name] <= [expression] ; // nonblocking assignment przypisanie blokujące: wyrażenie jest obliczane i jego wartość jest natychmiast przypisywana do zmiennej, tzn. przed wykonaniem następnej instrukcji przypisanie nieblokujące: wyrażenie jest obliczane, jednak przypisanie jest odkładane w czasie aż do końca bloku always (przypisanie nie blokuje więc następnych instrukcji zawartych w always) Przypisania blokujące należy stosować do opisu układów kombinacyjnych, a nieblokujące do opisu układów sekwencyjnych. module eq1_always (input wire i0, i1, output reg eq ); // eq declared as reg // p0 and p1 declared as reg reg p0, p1; always @(i0, i1) // i0 an i1 must be in sensitivity list begin // the order of statements is important p0 = ~i0 & ~i1; p1 = i0 & i1; eq = p0 p1; Verilog-2001 wprowadza notację always @* implikującą umieszczenie na liście wrażliwości wszystkich sygnałów wejściowych. c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 21 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 22 / 50 Instrukcja IF Instrukcja IF Instrukcja IF 2 Uproszczona składnia instrukcji if: if [boolean_expr] begin [procedural statement]; [procedural statement]; else begin [procedural statement]; [procedural statement]; c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 23 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 24 / 50

Instrukcja IF Przykład: dekoder binarny za pomocą instrukcji if Instrukcja CASE module decoder_2_4_if (input wire [1:0] a, input wire en, output reg [3:0] y); always @* if (en==1 b0) y = 4 b0000; else if (a==2 b00) y = 4 b0001; else if (a==2 b01) y = 4 b0010; else if (a==2 b10) y = 4 b0100; else y = 4 b1000; // can be written as (~en) 2 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 25 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 26 / 50 Instrukcja CASE Składnia instrukcji CASE Instrukcja CASE Przykład: dekoder binarny za pomocą instrukcji case Uproszczona składnia instrukcji case: case [case_expr] [item]: begin procedural statement]; procedural statement]; [item]: begin procedural statement]; default: begin procedural statement]; case c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 27 / 50 module decoder_2_4_case ( input wire [1:0] a, input wire en, output reg [3:0] y ); always @* case({en,a}) 3 b000, 3 b001, 3 b010, 3 b011: y = 4 b0000; 3 b100: y = 4 b0001; 3 b101: y = 4 b0010; 3 b110: y = 4 b0100; 3 b111: y = 4 b1000; // default can also be used case c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 28 / 50

Instrukcja CASE Struktury konstrukcji warunkowych Instrukcje CASEZ i CASEX Instrukcja casez: wartość z na pozycji znaku? jest traktowana jako nieistotna (don t-care) odpowiednie bity nie są brane pod uwagę przy dopasowaniu Instrukcja casex: wartości z i x na pozycji znaku? są nieistotne oder priorytetowy za pomocą instrukcji casez: module prio_encoder_casez (input wire [4:1] r, output reg [2:0] y); always @* casez(r) 4 b1???: y = 3 b100; 4 b01??: y = 3 b011; 4 b001?: y = 3 b010; 4 b0001: y = 3 b001; 4 b0000: y = 3 b000; // default can also be used case 2 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 29 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 30 / 50 Struktury konstrukcji warunkowych Struktury konstrukcji warunkowych Struktury konstrukcji warunkowych Implementacja instrukcji if (rutowanie priorytetowe) Ewaluacja wszystkich wyrażeń zachodzi współbieżnie, a pożądany rezultat jest doprowadzany do wyjścia (rutowany) Dwa sposoby rutowania: rutowanie priorytetowe multipleksowanie Rutowanie priorytetowe: if (m==n) r = a + b + c; else if (m > n) r = a - b; else r = c + 1; c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 31 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 32 / 50

Struktury konstrukcji warunkowych Implementacja równoległa instrukcji case multipleksowanie Przykład: wire [1:0] sel; case (sel) 2 b00: r = a + b + c; 2 b10: r = a - b; default: r = c + 1; // 2 b01, 2 b1l case Schemat: Zasady konstruowania kodu w bloku always 2 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 33 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 34 / 50 Zasady konstruowania kodu w bloku always Zasady konstruowania kodu w bloku always Modelowanie układów kombinacyjnych: przypisywanie wartości do danej zmiennej - tylko w jednym z bloków always stosować instrukcje blokujące stosować konstrukcję @* umieszczającą wszystkie wejścia układu na liście wrażliwości w opisie uwzględniać wszystkie rozgałęzienia instrukcji if i case w każdym rozgałęzieniu przypisywać rezultat do wyjść domyślne wartości wyjść nadawać na początku bloku always w opisie kodu z zastosowaniem always nie stosować dyrektyw ani atrybutów mieć świadomość sposobu rutowania w implementacji różnych konstrukcji sterujących Myśleć sprzętowo, a nie programowo (przecież nie piszemy tu programu w języku C). 2 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 35 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 36 / 50

Dobra zasada: wszystkie stałe literały zastąpić stałymi symbolami stałe deklarować jako localparam ( parametr lokalny ): localparam DATA_WIDTH = 8, DATA_RANGE = 2**DATA_WIDTH - 1; localparam UART_PORT = 4 b0001; wyrażenia w deklaracji, jak np. 2**DATA_WIDTH-1, są ewaluowane przez preprocesor, więc nie generują układu fizycznego Przykład: module adder_carry_local_par (input wire [3:0] a, b, output wire [3:0] sum, output wire cout); localparam N = 4, N1 = N-1; wire [N:0] sum_ext; assign sum_ext = {1 b0, a} + {1 b0, b}; assign sum = sum_ext[n1:0]; assign cout = sum_ext[n]; Verilog pozwala parametryzować moduły, czyli przekazywać parametr zewnętrzny do wnętrza modułu uproszczona składnia: module [module_name] #(parameter [parameter_name] = [default_value], [parameter_name] = [default_value]) ( // I/O port declaration ); Dzięki parametryzacji kod jest skalowalny, szerokość układu można dostosować do potrzeb (układ n-bitowy) Definiując parametr można określić jego typ i zakres (więcej w opisie standardu IEEE 1364-2001). c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 37 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 38 / 50 Przykład deklarowania sumatora Sumator z parametrem: module adder_carry_para #(parameter N=4) ( input wire [N-1:0] a, b, output wire [N-1:0] sum, output wire cout // carry-out ); localparam N1 = N-1; wire [N:0] sum_ext; assign sum_ext = {1 b0, a} + {1 b0, b}; assign sum = sum_ext[n1:0]; assign cout= sum_ext[n]; Aktualną wartość parametru przekazujemy do podzespołu podczas jego deklaracji (component instantiation). Nadawanie wartości parametrowi przypomina przypisywanie sygnałów do portów - przez nazwę, albo przez listę. c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 39 / 50 module adder_insta ( input wire [3:0] a4, b4, output wire [3:0] sum4, output wire c4, input wire [7:0] a8, b8, output wire [7:0] sum8, output wire c8 ); // instantiate 8-bit adder adder_carry_para #(.N(8)) unit1 (.a(a8),.b(b8),.sum(sum8),.cout(c8)); // instantiate 4-bit adder adder_carry_para unit2 (.a(a4),.b(b4),.sum(sum4),.cout(c4)); c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 40 / 50

2 wskaźnik 7-segmentowy a b c d e f g dp common anode c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 41 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 42 / 50 4-cyfrowy wyświetlacz na płycie Nexys2 Sterowanie wyświetlaczem 4-cyfrowym c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 43 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 44 / 50

4 cyfry wyświetlacza Transkoder kodu szesnastkowego do 7-seg A3 A2 A1 A0 a b c d e f g dp c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 45 / 50 +V module hex_to_sseg ( input wire [3:0] hex, input wire dp, output reg [7:0] sseg ); // output active low always @* begin case(hex) 4 h0: sseg[6:0] = 7 b0000001; 4 h1: sseg[6:0] = 7 b1001111; 4 h2: sseg[6:0] = 7 b0010010; 4 h3: sseg[6:0] = 7 b0000110; 4 h4: sseg[6:0] = 7 b1001100; 4 h5: sseg[6:0] = 7 b0100100; 4 h6: sseg[6:0] = 7 b0100000; 4 h7: sseg[6:0] = 7 b0001111; 4 h8: sseg[6:0] = 7 b0000000; 4 h9: sseg[6:0] = 7 b0000100; 4 ha: sseg[6:0] = 7 b0001000; 4 hb: sseg[6:0] = 7 b1100000; 4 hc: sseg[6:0] = 7 b0110001; 4 hd: sseg[6:0] = 7 b1000010; 4 he: sseg[6:0] = 7 b0110000; default: sseg[6:0] = 7 b0111000; case sseg[7] = dp; //4 hf c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 46 / 50 Układ testujący Struktura układu testujacego Na płycie prototypowej wyświetlacz złożony z 4 cyfr 7-segmentowych Aby zredukować liczbę wyjść z układu FPGA stosuje się multipleksowanie (time-multiplexing) układ realizujący multipleksowanie: disp_mux: wejścia in0, inl, in2, in3 przekazują cztery 8-bitowe kody sterujące wskaźnikami 7-segmentowymi (z układu hex_to_sseg) wyjście an to 4-bitowy sygnal wybierający jedną z 4 cyfr wyjście sseg to 8-bitowy sygnal sterujący wskaźnikiem 7-segmentowym na razie traktujmy ten układ jako czarną skrzynkę i zadeklarujmy w module hex_to_sseg_test (zakładając, że opis stosownego modułu jest dostępny). c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 47 / 50 c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 48 / 50

Opis układu testującego Literatura Literatura module hex_to_sseg_test ( input wire clk, input wire [7:0] sw, output wire [3:0] an, output wire [7:0] sseg ); wire [7:0] inc; wire [7:0] led0, led1, led2, led3; assign inc = sw + 1; // to increment input // instantiate four instances of hex decoders hex_to_sseg sseg_unit_0 (.hex(sw[3:0]),.dp(1 b0),.sseg(led0)); hex_to_sseg sseg_unit_1 (.hex(sw[7:4]),.dp(1 b0),.sseg(led1)); // instance for 4 LSBs of incremented value hex_to_sseg sseg_unit_2 (.hex(inc[3:0]),.dp(1 b1),.sseg(led2)); // instance for 4 MSBs of incremented value hex_to_sseg sseg_unit_3 (.hex(inc[7:4]),.dp(1 b1),.sseg(led3)); // instantiate 7-seg LED display time-multiplexing module disp_mux disp_unit (.clk(clk),.reset(1 b0),.in0(led0),.in1(led1),.in2(led2),.in3(led3),.an(an),.sseg(sseg)); c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 49 / 50 D.M. Harris, S.L. Harris, Digital Design and Computer Architecture, Elsevier, 2013. Z. Hajduk, Wprowadzenie do języka Verilog, BTC, 2009. M. Pawłowski, A. Skorupski, Projektowanie złożonych układów cyfrowych, WiŁ, 2010. P. Pong. Chu, FPGA Prototyping by Verilog examples, Wiley, 2008. IEEE Standard Verilog R Hardware Description Language, IEEE, 2001. Xilinx ISE WebPack: http://www.xilinx.com. Digilent Nexys2: http://www.digilentinc.com. OpenCores: http://www.opencores.org. c Dr inż. Ignacy Pardyka (Inf U J ) programowanie struktur cyfrowych Rok akad. 2013/2014 50 / 50