verilog hdl - instytut telekomunikacji - strona domowa itpwptomasze/docs/verilog_cz1.pdf · 2 dr...

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

Upload: buidieu

Post on 28-Feb-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

1dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Verilog HDL

Język Opisu Sprzętu

Hardware Description Language

Część I. Elementy języka

dr inż. Paweł Tomaszewicz

2dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Historia – krótko● Lata '80 – potrzeba stworzenia jednego języka do symulacji na

różnych poziomach opisu● Język Verilog stworzony przez Phila Moore'a w 1983-4 w

Gateway Design Automation – wykorzystuje elementy języków Modula, Stimula, C

● 1989 Gateway Design Automation (i prawa do Veriloga) przejęta przez Cadence – rok później język Verilog upubliczniony (public domain)

● 1992 rozpoczęcie prac nad standaryzowaniem● 12.1995 Verilog stał się międzynarodowym standardem IEEE

Std.1364-1995● 2001 rozszerzenie standardu IEEE Std. 1364-2001● Ostatnie lata – Verilog stał się językiem opisu sprzętu HDL

3dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Język Verilog● Opisuje układy cyfrowe (trwają prace nad opisem

układów analogowych)● Opis układu cyfrowego możliwy na poziomie:

– funkcjonalnym (behavioral), – strukturalnym (przesłań międzyrejestrowych

RTL, bramkowym - gate level), – DataFlow – równania boolowskie

4dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Język Verilog● Układ cyfrowy może być opisany za pomocą:

– współbieżnych sygnałów (concurrency)– struktury bloków (structure)– procedur i komend (procedural statements)– zdarzeń w czasie

5dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Identyfikatory● {[A-Z], [a-z], [0-9], _, $}● Nie może zaczynać się od $ lub cyfry [0-9]● Przykłady:Przykłady:

shiftreg_a 4funbusa_index $addresserror_conditionmerge_ab_bus3n$657

● Rozróżnia wielkość liter (Rozróżnia wielkość liter (case sensitivecase sensitive) ) myid Myid● Nazwy specjalne zaczynają się od znaku Nazwy specjalne zaczynają się od znaku \\● Przykłady:Przykłady: \busa+index \-clock \a*(b+c)

\***error-condition*** \net1/\net2 \{a,b}

6dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Komentarze● // komentarz do końca linii● /* komentarz

blokutekstu */

● /* Nie można /* zagnieżdżać komentarzy*/ blokowych*/

● Białe znaki są ignorowane (znak spacji, tabulacji, nowej linii)

7dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Liczby

[sign][size][’radix] value

[sign] – znak +|-[size] – liczba bitów zapisana liczbą dziesiętną['radix] – podstawa systemu liczbowego

b|B liczba dwójkowao|O liczba ósemkowad|D liczba dziesiętnah|H liczba szesnastkowa

value – znaki określające wartość 0..9 a..f A..F x|X z|Z|?

8dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Liczby (2)● Liczby bez określonej długości bitowej są

zapisywane na 32 bitach659 // liczba dziesiętna’h 837FF // liczba szesnastkowa’o7460 // liczba ósemkowa4af // błędny zapis – wymagane 'h dla liczby

szesnastkowej● Liczba bez określonej podstawy jest liczbą

dziesiętną● Nie może być znaku spacji między znakiem

apostrofu i podstawy

9dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Liczby (3)● Liczby o określonej długości bitowej

4’b1001 // 4-bitowa liczba dwójkowa5 ’D 3 // 5-bitowa liczba dziesiętna3’b01x // 3-bitowa liczba dwójkowa z dowolną

wartością na najmłodszym bicie12’hx // 12-bitowa liczba o dowolnej wartości16’hz // 16-bitowa liczba o wysokiej impedancji

10dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Liczby ze znakiem– Liczby ujemne są kodowane w U2– Liczby bez określonej długości i podstawy są

liczbami ze znakiem– Liczby o określonej podstawie poprzedzonej

literą s|S są liczbami ze znakiem– Liczby o określonej podstawie bez dodatkowego

znaku s|S są liczbami bez znaku– Znak s|S nie zmienia wartości liczby a jedynie

interpretację

Liczby (4)

11dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Przykłady liczb ze znakiem

8 ’d -6 // niedozwolone umieszczenie znaku minus-8 ’d 6 // 8-bitowa liczba -6 zapisana w kodzie U2 –

można też zapisać -(8’d 6)4 ’shf // 4-bitowa liczba 1111

2 w kodzie U2 o

wartości -1, można też zapisać -4’h 1-4 ’sd15 // inaczej zapisana liczba -(-4’d 1), lub

00012

Liczby (5)

12dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Automatyczne uzupełnianiereg [11:0] a, b, c, d;a = ’h x; // oznacza xxx – uzupełnienie xb = ’h 3x; // oznacza 03x – uzupełnienie zeramic = ’h z3; // oznacza zz3 – uzupełnienie zd = ’h 0z3; // oznacza 0z3

reg [84:0] e, f, g;e = 'h5; // oznacza {81{1'b0},4'b0101} –

uzupełnienie zerami, czyli 00...05f = 'hx; // oznacza {85{1'hx}} – uzupełnienie xg = 'hz; // oznacza {85{1'hz}} – uzupełnienie z

Liczby (6)

13dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Używanie znaku podkreślenia _ w formatowaniu liczby dla zwiększenia czytelności

27_195_00016’b0011_0101_0001_111132 ’h 12ab_f001

● Znak ? zastępuje liczbę o wysokiej impedancji

Liczby (7)

14dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● W urządzeniach cyfrowych typy danych reprezentują dane zapamiętane oraz przesyłane pomiędzy elementami

● Wartości sygnałów:0 wartość logiczna zero lub fałsz1 wartość logiczna jeden lub prawdax wartość logiczna nieznanaz wartość wysokiej impedancji

● Rozróżnia się dwa typy danych:– sieć (net)– zmienna (variable)

Typy danych

15dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Sieć (net) reprezentuje fizyczne połączenia pomiędzy elementami

● Nie jest elementem pamiętającym● Wartość jest ustalana na podstawie sygnałów

zasilających● Jeżeli nie ma połączenia zasilającego, to jest w stanie

wysokiej impedancji● Typy sieci:

– wire, tri – węzeł, węzeł trójstanowy– supply0, supply1 – stała wartość logiczna– wand, wor – iloczyn, suma na drucie (brak

implementacji w układach reprogramowalnych)

Sieć – net

16dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Wartość sygnału Y jest automatycznie wyznaczana jeżeli zmieni się wartość sygnału A lub B

Sieć – przykład

wire Y; assign Y = A & B;

wand Y; assign Y = A;assign Y = B;

wor Y; assign Y = A;assign Y = B;

tri Y;assign Y = (B) ? A : z;

// nie realizowane w kompilatorach fpga

// nie realizowane w kompilatorach fpga

17dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Zmienna jest abstrakcyjnym elementem pamiętającym wartość do czasu następnej zmiany

● W układzie cyfrowym zmienna realizowana jest jako przerzutnik

● Typy zmiennych: reg, integer (real – brak obsługi)● Zmienne inicjowane są wartością nieznaną x● Przykład: reg A, C; // deklaracja

// przypisania są wewnątrz procesuA = 1;C = A; // C ma wartość logiczną 1A = 0; // C ma wciąż 1C = 0; // C ma teraz wartość 0

Zmienna – variable

18dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Zmienna lub sieć bez zadeklarowanego zakresu jest skalarem – wektorem o długości jednego bitu

● Deklaracja szyny danychwire [3:0] busA;reg [1:4] busB; reg [1:0] busC;

● Liczba po lewej stronie zakresu określa najbardziej znaczący bit MSB

● Wektor traktowany jako wartość bez znaku● Ze znakiem, jeżeli zadeklarowany typu signed lub

dołączony do sygnału ze znakiem

Wektory

19dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

wire [3:0] busA;reg [1:4] busB; reg [1:0] busC;

busC = busA[2:1] ⇔ busC[1] = busA[2]; busC[0] = busA[1];

busB = busA; ⇔ busB[1] = busA[3]; busB[2] = busA[2]; busB[3] = busA[1]; busB[4] = busA[0];

Wektory – przykłady

20dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

wire w; // skalar net typu wiretri [15:0] busa; // 16-bitowa szyna trójstanowareg a; // skalar regreg [3:0] v; // 4-bitowy wektor reg gdzie najstarszym bitem jest v[3], a najmłodszym v[0]reg signed [3:0] signed_reg; // 4-bitowy wektor o zakresie od -8 do 7reg [-1:4] b; // 6-bitowy wektor regwire w1, w2; // dwa sygnały wirereg [4:0] x, y, z; // trzy 5-bitowe wektory reg

Wektory – przykłady

21dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Macierz może składać się z elementów sieci (net) lub zmiennych (variable) typu skalar lub wektor

● Przykłady deklaracji:reg x[11:0]; // macierz 12 skalarów typu regwire [0:7] y[5:0]; // macierz 6 wektorów 8-bitowych

typu wirereg [31:0] x [127:0]; // macierz 128 wektorów 32-

bitowych typu regreg [7:0] x [127:0], y [63:0]; // dwie macierze

wektorów 8-bitowych typu reg

Macierze

22dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Jednowymiarowa macierz z elementami typu reg →

pamięć (ROM, RAM)● Można przypisać wartość dowolnemu n-bitowemu

elementowi macierzy (słowu)● Nie można przypisać wartości całej lub części pamięci

Macierze

23dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

reg [7:0] mema[0:255]; // pamięć 256 słów 8-bitowychreg arrayb[7:0][0:255]; // dwuwymiarowa macierz 1-bitowych

rejestrówwire w_array[7:0][5:0]; // macierz węzłów sieciinteger inta[1:64]; // macierz 64 elementów typu integer

● Przykłady przypisańPrzykłady przypisańmema = 0; // Nie można nadać wartości elementom całej macierzyarrayb[1] = 0; // Próba przypisania wartości elementom części

macierzy [1][0]..[1][255]arrayb[1][12:31] = 0; // Próba pisania do elementów [1][12]..[1][31]mema[1] = 0; // Wpisanie 0 do drugiego elementu macierzyarrayb[1][0] = 0; // Ustawienie 0 dla bitu o adresie [1][0]inta[4] = 33559; // Wpisanie wartości dla elementu o adresie [4]

Macierze - przykład

24dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Pamięć Pamięć nn 1-bitowych rejestrów a 1-bitowych rejestrów a nn-bitowy wektor -bitowy wektor

reg [1:n] rega; // n-bitowy rejestr// ... to nie to samo co ...reg mema [1:n]; // pamięć n 1-bitowych rejestrów

Macierze - różnice

25dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Operatory● Jednoargumentowe (unary)

– arytmetyczne: +, -– redukcji: &, ~&, |, ~|, ^, ~^ (^~)– negacja logiczna: !– negacja bitowa: ~

● Dwuargumentowe (binary)– arytmetyczne: +, - , *, /, %– relacyjne: <, >, <=, >=, ==, !=, ===, !===– logiczne: &&, ||– bitowe: &, |, ^, ~^

● Trójargumentowe (ternary)– Warunkowy: ?:

26dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Operatory

27dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

+ - * / ...% reszta z dzielenia** potęgowanie

● Dla operacji / i % jeżeli drugi argument jest równy zero to wynikiem jest x

● Dla operacji % znak wyniku jest brany z pierwszego argumentu

● Jeżeli jeden z argumentów jest x lub z to wynikiem jest x● Operatory + - są także operatorami jedno

argumentowymi

Operatory arytmetyczne

28dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Liczby typu integer w operacjach arytmetycznych:● bez długości i bez podstawy, 12● bez długości i z podstawą, 'd12 'sd12● z długością i z podstawą, 16'd12 16'sd12

● Negacja wartości integer bez podstawy jest traktowana jako liczba ze znakiem U2

● Negacja wartości integer z podstawą bez znaku jest traktowana jako liczba bez znaku

Operatory arytmetyczne

29dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Przykład: dzielenie -12 przez 3// liczby -12 i -'d12 są zapisane w U2, ale -'d12 w

operacji dzielenia gubi zapis o znakuinteger IntA;IntA = -12 / 3; // wynikiem jest -4IntA = -’d 12 / 3; // wynikiem jest 1431655761IntA = -’sd 12 / 3; // wynikiem jest -4IntA = -4'sd 12 / 3; // -4'sd12 jest negacją 4-bitowej

liczby 1100, która ma wartość -4. Czyli -(-4) = 4 a wynikiem jest 1

Operatory arytmetyczne

30dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Przykłady operacji % (a modulo b):Operacja Wynik10 % 3 1 11 % 3 2 12 % 3 0 // nie ma reszty z dzielenia-10 % 3 -1 // znak minus z pierwszego argumentu11 % -3 2 // znak minus z pierwszego argumentu-4 'd12 % 3 1 // -4 'd12 jest brana jako duża dodatnia

liczba, która daje wynik = 1 reszty dzielenia przez 3

Operatory arytmetyczne

31dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

● Liczby typu reg bez znaku są liczbami bez znaku● Liczby typu reg ze znakiem są liczbami ze znakiem w U2integer intA; reg [15:0] regA; reg signed [15:0] regS;intA = -4’d12;regA = intA / 3; // wynikiem operacji jest -4, regA = 65532regA = -4’d12; // regA = 65524intA = regA / 3; // wynikiem jest 21841intA = -4’d12 / 3; // wynikiem jest 1431655761, bo -4’d12

jest brane jako 32-bitowa liczba 11....100112

regA = -12 / 3; // wynikiem jest -4, regA = 65532regS = -12 / 3; // wynikiem jest -4, regS = -4 signed regregS = -4’sd12 / 3; // wynikiem jest 1. -4’sd12 = 4, stąd

4/3=1

Operatory arytmetyczne

32dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

<< >> przesunięcie logiczne<<< >>> przesunięcie arytmetyczneW operacji przesunięcia logicznego i arytmetycznego w

lewo (<<, <<<) bity uzupełnione są zerami● W operacji przesunięcia logicznego w prawo (>>) bity

uzupełnione są zerami● W operacji przesunięcia arytmetycznego w prawo (>>>)

bity uzupełnione są bitem znakureg [3:0] start, result; reg signed [3:0] start, result;start = 1; start = 4’b1000;result = (start << 2); result = (start >>> 2);//start=0001, result=0100 //start=1000, result=1110

Operatory przesunięcia

33dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

> większy niż< mniejszy niż>= większy lub równy<= mniejszy lub równy● Wynikiem operacji jest skalar● Jeżeli w jednym z operatorów jest x lub z to wynikiem jest

1-bitowy skalar x● Przykład:

1 > 0 // wynikiem jest 1’b1x1 <= 0 // wynikiem jest x10 < z // wynikiem jest x

Operatory relacji

34dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

== równość logiczna wynikiem jest 0, 1 lub x!= nierówność logiczna=== równość stanów bitów wynikiem jest 0 lub 1!== nierówność stanów bitów● Wynikiem operacji jest skalar● W porównaniu logicznym jeżeli występuje x lub z to

wynikiem jest 1-bitowy skalar x● Przykład:

4’b 1z0x == 4’b 1z0x // wynikiem jest x4’b 1z0x != 4’b 1z0x // wynikiem jest x4’b 1z0x === 4’b 1z0x // wynikiem jest 14’b 1z0x !== 4’b 1z0x // wynikiem jest 0

Operatory porównania

35dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

& AND| OR^ XOR^~ ~^ XNOR~ NOT● Jeżeli jeden z operatorów jest krótszy to jest on

uzupełniony zerami na najstarszych pozycjach● Przykład:

a = 4'b1010 d = ~a // 0101b = 4'b1100 e = a & b // 1000c = 2'b11 f = b ^ c // 1100 XOR 0011 = 0011

Operatory bitowe

36dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

& AND ~& NAND| OR ~| NOR^ XOR ^~ ~^ XNOR● Wynikiem operacji na wektorze jest jeden bit● Przykład:

a = 4'b1100; b = &a; // b = 0 c = |a; // c = 1

Operatory redukcji

37dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

&& logiczny AND|| logiczny OR! logiczna negacja● Przykład 1: alfa = 237, beta = 0

regA = alpha && beta; // (true AND false) regA jest 0regB = alpha || beta; // (true OR false) regB jest 1

● Przykład 2: Użycie nawiasów dla lepszej czytelnościa < size-1 && b != c && index != lastone(a < size-1) && (b != c) && (index != lastone)

● Przykład 3: Użycie operatora !if (!inword) // częściej używane ...if (inword == 0)

Operatory logiczne

38dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

Operator warunkowycond_expr ? true_expr : false_expr

● Przykład mux 4-1:o = (s == 2'b00) ? I0 :

((s == 2'b01) ? I1 : (s == 2'b10) ? I2 : I3 );

● Przykład ALU:d = (f==add) ? (a+b) : ((f==substract) ? (a-b) :

((f==compl) ? ~a : ~b));

39dr inż.Paweł TomaszewiczInstytut TelekomunikacjiPolitechnika Warszawska

H DL

{ } Łączy dwa lub więcej wektorów● Każdy z wektorów musi mieć określoną długość● Przykład:

{a, b[3:0], w, 3’b101} // odpowiada kolejnej linii{a, b[3], b[2], b[1], b[0], w, 1’b1, 1’b0, 1’b1}{a, 1} // Liczba 1 nie ma określonej długości

● Przykład powielania:{4{w}} // odpowiada {w, w, w, w}

{b, {3{a, b}}} // odpowiada {b, a, b, a, b, a, b}

nie może być zerem, x lub z

Operatory łączenia (concatenation, replication)