1 VHDL Today, Verilog HDL is an accepted IEEE standard. In 1995, the original standard IEEE was approved. IEEE is the latest Verilog HDL standard that made significant improvements to the original standard
2 VHDL, Verilog VHDL – bardziej podobny do ADA, PascalVerilog – bardziej podobny do C Większość firm US używa Verilog Większość firm europejskich + Intel + Texas Instruments używa VHDL VHDL jest lepiej wyposażony do tworzenia złożonych, zmieniających się projektów
3
4 Cztery poziomy abstrakcji opisuBehawioralny (algorytmiczny) Ścieżka danych (Strukturalny) Poziom bramek (Gate Level) Poziom przełącznikowy – zależny od technologii programowalnego układu
5 RTL, Synteza Mieszanka stylu behawioralnego i ścieżki danych, to tzw. RTL – Register Transfer Level W trakcie syntezy następuje Przejście z RTL na Gate Level – poziom bramek Im wyższy poziom abstrakcji, tym bardziej niezależny od implementacji i elastyczny projekt
6 Przykład
7 Przykład module ripple_carry_counter(q, clk, reset); output [3:0] q;input clk, reset; T_FF tff0(q[0],clk, reset); T_FF tff1(q[1],q[0], reset); T_FF tff2(q[2],q[1], reset); T_FF tff3(q[3],q[2], reset); endmodule
8 Przykład module T_FF(q, clk, reset); output q; input clk, reset;wire d; D_FF dff0(q, d, clk, reset); not n1(d, q); endmodule
9 Przykład module D_FF(q, d, clk, reset); output q; input d, clk, reset;reg q; reset or negedge clk) if (reset) q <= 1'b0; else q <= d; endmodule
10 Test bench
11 Test bench module stimulus; reg clk; reg reset; wire[3:0] q;ripple_carry_counter r1(q, clk, reset); initial clk = 1'b0; always #5 clk = ~clk; initial begin reset = 1'b1; #15 reset = 1'b0; #180 reset = 1'b1; #10 reset = 1'b0; #20 $finish; end initial $monitor($time, " Output q = %d", q); endmodule
12 Notacja Zapis liczby z rozmiarem:
13 Notacja Liczby bez rozmiaru: // domyślnie – 32 bity 'hc3 'o21
14 Operatory a = ~ b; // jednoargumentowe a = b && c; // dwuargumentowea = b ? c : d; // trójargumentowe
15 Operatory arytmetyczne: + - * / % (mod)relacyjne: > >= < <= == != logiczne: && (and) || (or) bitowe: & (and) | (or) ^ (xor) ^~ (not-xor) przesunięcia bitowe: << (shl) >> (shr)
16 Operatory Warunkowy A ? B : C (jeśli warunek A spełniony, to wartość B, w przeciwnym wypadku – wartość C) Sklejenie: { A, B, C } Powtórzenie N razy: { N{A} }
17 Wartości logiczne Wartości: 0, 1, x, z Przykład: strong1, weak0
18 Wire, reg W VHDL – signal W Verilog: Deklaracje: np.wire – połączenie między blokami w opisie strukturalnym reg – zmienna (alokacja pamięci do przechowywania jakiejś wartości) Deklaracje: np. reg reset; wire a;
19 Wektory W VHDL – tablice bitów W Verilog – wektory: wire a;wire [7:0] bus; wire [31:0] busA,busB,busC; reg [0:40] virtual_addr;
20 Selekcja fragmentu wektorabusA[7] bus[2:0]
21 Selekcja fragmentu wektora
22 Selekcja fragmentu wektoraNormalna: busA[7] bus[2:0] Ze zmienną: [
23 Selekcja fragmentu wektoraBit startowy może być zmienną: for (j=0; j<=31; j=j+1) byte = data1[(j*8)+:8]; data1[(byteNum*8)+:8] = 8'b0; Oczywiście możliwe w VHDL: pamiec(conv_integer(addr))
24 Typy danych Typy proste: Tablice: Integer, Real, Timeinteger count[0:7]; reg bool[31:0]; time chk_point[1:100][0:255];
25 Stałe parameter port_id = 5; parameter cache_line_width = 256;
26 Stałe Deklaracja w module:parameter port_id = 5; parameter cache_line_width = 256; Nadanie wartości w instancji modułu: defparam (jak generic map w VHDL) Parametr, który nie podlega defparam: localparam
27 Moduł Verilog Definicja bloku, odpowiada parze entity/architectureLista wejść/wyjść – jak deklaracja port w entity Pozostałe instrukcje – jak wnętrze architekture
28 Moduł Verilog Jednak moduł jest jedynie szablonem blokuMusi nastąpić deklaracja instancji Musi więc ostatecznie wystąpić strukturalny poziom specyfikacji
29 Moduł – deklaracja portówPoza wyliczeniem portów w nagłówku, deklaracja kierunków: module SR_latch(Q, Qbar, Sbar, Rbar); output Q, Qbar; input Sbar, Rbar; //inout xx; nand n1(Q, Sbar, Qbar); nand n2(Qbar, Rbar, Q); endmodule
30 Opis strukturalny
31 Opis strukturalny Lista połączeń: Wg kolejności: Z nazwami:
32 Opis ścieżką danych Składnia:przypisanie ::= assign [siła] [opóźn] lista_przypisań ; lista_przypisań ::= elem_przyp { , elem_przyp } elem_przyp ::= l_strona = wyrażenie Przykłady: assign addr[15:0] = addr1_bits[15:0] ^ addr2_bits[15:0]; assign {c_out, sum[3:0]} = a[3:0] + b[3:0] + c_in; wire #10 out = in1 & in2;
33 Opis behawioralny Odpowiednik procesu: struktury always, initialPrzykład: module clock_gen (output reg clock); initial clock = 1'b0; always #10 clock = ~clock; initial #1000 $finish; endmodule
34 Lista czułości always @( reset, clock, d) begin if (reset) q = 1'b0;else if(clock) q = d; end
35 Wyrażenie warunkowe
36 Instrukcja wyboru
37 Pętle
38 Egzekucja sekwencyjna i równoległaPrzetwarzanie sekwencyjne: begin .. end Przetwarzanie równoległe: fork .. join