Verilog HDL - Instytut Telekomunikacji

Transkrypt

Verilog HDL - Instytut Telekomunikacji
Verilog HDL
Język Opisu Sprzętu
Hardware Description Language
Część I. Elementy języka
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
dr inż. Paweł Tomaszewicz
1
Historia – krótko
●
●
●
●
●
H
D
L
●
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 2
dr inż.Paweł Tomaszewicz
●Instytut Telekomunikacji
Politechnika Warszawska
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
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
3
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
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
4
Identyfikatory
●
●
●
●
●
H
D
L
●
{[A-Z], [a-z], [0-9], _, $}
Nie może zaczynać się od $ lub cyfry [0-9]
Przykłady:
shiftreg_a
4fun
busa_index
$address
error_condition
merge_ab
_bus3
n$657
Rozróżnia wielkość liter (case sensitive) myid Myid
Nazwy specjalne zaczynają się od znaku \
Przykłady: \busa+index
\-clock \a*(b+c)
\***error-condition***
\net1/\net2
\{a,b}
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
5
Komentarze
●
●
●
●
// komentarz do końca linii
/* komentarz
bloku
tekstu */
/* Nie można /* zagnieżdżać komentarzy*/
blokowych*/
Białe znaki są ignorowane (znak spacji, tabulacji,
nowej linii)
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
6
Liczby
[sign][size][’radix] value
H
D
L
[sign] – znak +|[size] – liczba bitów zapisana liczbą dziesiętną
['radix] – podstawa systemu liczbowego
b|B liczba dwójkowa
o|O liczba ósemkowa
d|D liczba dziesiętna
h|H liczba szesnastkowa
value – znaki określające wartość 0..9 a..f A..F x|X z|Z|?
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
7
Liczby (2)
●
●
H
D
L
●
Liczby bez określonej długości bitowej są
zapisywane na 32 bitach
659 // liczba dziesiętna
’h 837FF // liczba szesnastkowa
’o7460 // liczba ósemkowa
4af // 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
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
8
Liczby (3)
●
Liczby o określonej długości bitowej
4’b1001 // 4-bitowa liczba dwójkowa
5 ’D 3 // 5-bitowa liczba dziesiętna
3’b01x // 3-bitowa liczba dwójkowa z dowolną
wartością na najmłodszym bicie
12’hx // 12-bitowa liczba o dowolnej wartości
16’hz // 16-bitowa liczba o wysokiej impedancji
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
9
Liczby (4)
●
H
D
L
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ę
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
10
Liczby (5)
●
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 11112 w kodzie U2 o
wartości -1, można też zapisać -4’h 1
-4 ’sd15 // inaczej zapisana liczba -(-4’d 1), lub
00012
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
11
Liczby (6)
●
H
D
L
Automatyczne uzupełnianie
reg [11:0] a, b, c, d;
a = ’h x; // oznacza xxx – uzupełnienie x
b = ’h 3x; // oznacza 03x – uzupełnienie zerami
c = ’h z3; // oznacza zz3 – uzupełnienie z
d = ’h 0z3; // oznacza 0z3
reg [84:0] e, f, g;
e = 'h5; // oznacza {81{1'b0},4'b0101} –
uzupełnienie zerami, czyli 00...05
f = 'hx; // oznacza {85{1'hx}} – uzupełnienie x
g = 'hz; // oznacza {85{1'hz}} – uzupełnienie z
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
12
Liczby (7)
●
Używanie znaku podkreślenia _ w formatowaniu
liczby dla zwiększenia czytelności
27_195_000
16’b0011_0101_0001_1111
32 ’h 12ab_f001
●
Znak ? zastępuje liczbę o wysokiej impedancji
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
13
Typy danych
●
●
●
H
D
L
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łsz
1 wartość logiczna jeden lub prawda
x wartość logiczna nieznana
z wartość wysokiej impedancji
Rozróżnia się dwa typy danych:
– sieć (net)
– zmienna (variable)
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
14
Sieć – net
●
●
●
●
●
H
D
L
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) 15
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
Sieć – przykład
●
Wartość sygnału Y jest automatycznie wyznaczana
jeżeli zmieni się wartość sygnału A lub B
wire Y;
assign Y = A & B;
wand Y;
assign Y = A;
assign Y = B;
// nie realizowane
w kompilatorach fpga
wor Y;
assign Y = A;
assign Y = B;
// nie realizowane
w kompilatorach fpga
tri Y;
assign Y = (B) ? A : z;
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
16
Zmienna – variable
●
●
●
●
●
H
D
L
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 procesu
A = 1;
C = A; // C ma wartość logiczną 1
A = 0; // C ma wciąż 1
C = 0; // C ma teraz wartość 0
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
17
Wektory
●
●
●
●
H
D
L
●
Zmienna lub sieć bez zadeklarowanego zakresu jest
skalarem – wektorem o długości jednego bitu
Deklaracja szyny danych
wire [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
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
18
Wektory – przykłady
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];
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
19
Wektory – przykłady
H
D
L
wire w; // skalar net typu wire
tri [15:0] busa; // 16-bitowa szyna trójstanowa
reg a; // skalar reg
reg [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 7
reg [-1:4] b; // 6-bitowy wektor reg
wire w1, w2; // dwa sygnały wire
reg [4:0] x, y, z; // trzy 5-bitowe wektory reg
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
20
Macierze
●
●
H
D
L
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 reg
wire [0:7] y[5:0]; // macierz 6 wektorów 8-bitowych
typu wire
reg [31:0] x [127:0]; // macierz 128 wektorów 32bitowych typu reg
reg [7:0] x [127:0], y [63:0]; // dwie macierze
wektorów 8-bitowych typu reg
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
21
Macierze
●
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
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
22
Macierze - przykład
reg [7:0] mema[0:255]; // pamięć 256 słów 8-bitowych
reg arrayb[7:0][0:255]; // dwuwymiarowa macierz 1-bitowych
rejestrów
wire w_array[7:0][5:0]; // macierz węzłów sieci
integer inta[1:64]; // macierz 64 elementów typu integer
●
H
D
L
Przykłady przypisań
mema = 0; // Nie można nadać wartości elementom całej macierzy
arrayb[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 macierzy
arrayb[1][0] = 0; // Ustawienie 0 dla bitu o adresie [1][0]
inta[4] = 33559; // Wpisanie wartości dla elementu o adresie [4]
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
23
Macierze - różnice
●
Pamięć n 1-bitowych rejestrów a n-bitowy wektor
reg [1:n] rega; // n-bitowy rejestr
// ... to nie to samo co ...
reg mema [1:n]; // pamięć n 1-bitowych rejestrów
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
24
Operatory
●
Jednoargumentowe (unary)
–
–
–
–
●
Dwuargumentowe (binary)
–
–
–
–
●
H
D
L
arytmetyczne: +, redukcji: &, ~&, |, ~|, ^, ~^ (^~)
negacja logiczna: !
negacja bitowa: ~
arytmetyczne: +, - , *, /, %
relacyjne: <, >, <=, >=, ==, !=, ===, !===
logiczne: &&, ||
bitowe: &, |, ^, ~^
Trójargumentowe (ternary)
–
Warunkowy: ?:
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
25
Operatory
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
26
Operatory arytmetyczne
+ - * / ...
% reszta z dzielenia
** potęgowanie
●
●
●
●
H
D
L
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
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
27
Operatory arytmetyczne
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
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
28
Operatory arytmetyczne
Przykład: dzielenie -12 przez 3
// liczby -12 i -'d12 są zapisane w U2, ale -'d12 w
operacji dzielenia gubi zapis o znaku
integer IntA;
IntA = -12 / 3; // wynikiem jest -4
IntA = -’d 12 / 3; // wynikiem jest 1431655761
IntA = -’sd 12 / 3; // wynikiem jest -4
IntA = -4'sd 12 / 3; // -4'sd12 jest negacją 4-bitowej
liczby 1100, która ma wartość -4. Czyli -(-4) = 4 a
wynikiem jest 1
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
29
Operatory arytmetyczne
●
Przykłady operacji % (a modulo b):
Operacja
Wynik
10 % 3
1
11 % 3
2
12 % 3
0 // nie ma reszty z dzielenia
-10 % 3
-1 // znak minus z pierwszego argumentu
11 % -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
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
30
Operatory arytmetyczne
Liczby typu reg bez znaku są liczbami bez znaku
● Liczby typu reg ze znakiem są liczbami ze znakiem w U2
integer intA; reg [15:0] regA; reg signed [15:0] regS;
intA = -4’d12;
regA = intA / 3; // wynikiem operacji jest -4, regA = 65532
regA = -4’d12; // regA = 65524
intA = regA / 3; // wynikiem jest 21841
intA = -4’d12 / 3; // wynikiem jest 1431655761, bo -4’d12
jest brane jako 32-bitowa liczba 11....100112
regA = -12 / 3; // wynikiem jest -4, regA = 65532
regS = -12 / 3; // wynikiem jest -4, regS = -4 signed reg
regS = -4’sd12 / 3; // wynikiem jest 1. -4’sd12 = 4, stąd
4/3=1
31
●
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
Operatory przesunięcia
H
D
L
<< >>
przesunięcie logiczne
<<< >>>
przesunięcie arytmetyczne
W 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 znaku
reg [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=111032
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
Operatory relacji
H
D
L
>
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 x
10 < z // wynikiem jest x
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
33
Operatory porównania
H
D
L
== 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 x
4’b 1z0x != 4’b 1z0x // wynikiem jest x
4’b 1z0x === 4’b 1z0x // wynikiem jest 1
34
4’b 1z0x !== 4’b 1z0x // wynikiem jest 0
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
Operatory bitowe
H
D
L
&
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 // 0101
b = 4'b1100
e = a & b // 1000
c = 2'b11
f = b ^ c // 1100 XOR 0011 = 0011
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
35
Operatory redukcji
&
|
^
●
●
H
D
L
AND
~& NAND
OR
~|
NOR
XOR
^~ ~^ XNOR
Wynikiem operacji na wektorze jest jeden bit
Przykład:
a = 4'b1100;
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
b = &a; // b = 0
c = |a; // c = 1
36
Operatory logiczne
H
D
L
&&
logiczny AND
||
logiczny OR
!
logiczna negacja
● Przykład 1: alfa = 237, beta = 0
regA = alpha && beta; // (true AND false) regA jest 0
regB = alpha || beta; // (true OR false) regB jest 1
● Przykład 2: Użycie nawiasów dla lepszej czytelności
a < 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)
37
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
Operator warunkowy
cond_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));
H
D
L
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
38
Operatory łączenia
(concatenation, replication)
{ } Łą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}
H
D
L
nie może być zerem, x lub z
dr inż.Paweł Tomaszewicz
Instytut Telekomunikacji
Politechnika Warszawska
39