verilog hdl - instytut telekomunikacji - strona domowa itpwptomasze/docs/verilog_cz1.pdf · 2 dr...
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: ?:
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)