1 / 38

VHDL

VHDL. Today, Verilog HDL is an accepted IEEE standard. In 1995, the original standard IEEE 1364-1995 was approved. IEEE 1364-2001 is the latest Verilog HDL standard that made significant improvements to the original standard. VHDL, Verilog. VHDL – bardziej podobny do ADA, Pascal

alan-joseph
Download Presentation

VHDL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VHDL • Today, Verilog HDL is an accepted IEEE standard. In 1995, the original standard IEEE 1364-1995 was approved. IEEE 1364-2001 is the latest Verilog HDL standard that made significant improvements to the original standard

  2. VHDL, Verilog • VHDL – bardziej podobny do ADA, Pascal • Verilog – 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. Cztery poziomy abstrakcji opisu • Behawioralny (algorytmiczny) • Ścieżka danych • (Strukturalny) Poziom bramek (Gate Level) • Poziom przełącznikowy – zależny od technologii programowalnego układu

  4. 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

  5. Przykład

  6. 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

  7. 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

  8. Przykład module D_FF(q, d, clk, reset); output q; input d, clk, reset; reg q; always @(posedge reset or negedge clk) if (reset) q <= 1'b0; else q <= d; endmodule

  9. Test bench

  10. 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

  11. Notacja • Zapis liczby z rozmiarem: <rozmiar> '<format bazy> <liczba> • Przykłady:4'b1111 12'habc 16'd255

  12. Notacja • Liczby bez rozmiaru: 23456 // domyślnie – 32 bity 'hc3 'o21

  13. Operatory • a = ~ b; // jednoargumentowe • a = b && c; // dwuargumentowe • a = b ? c : d; // trójargumentowe

  14. Operatory • arytmetyczne: + - * / % (mod) • relacyjne: > >= < <= == != • logiczne: && (and) || (or) • bitowe: & (and) | (or) ^ (xor) ^~ (not-xor) • przesunięcia bitowe: << (shl) >> (shr)

  15. 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} }

  16. Wartości logiczne • Wartości: 0, 1, x, z • Przykład: strong1, weak0

  17. Wire, reg • W VHDL – signal • W Verilog: • 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;

  18. 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;

  19. Selekcja fragmentu wektora busA[7] • bus[2:0]

  20. Selekcja fragmentu wektora

  21. Selekcja fragmentu wektora • Normalna: • busA[7] • bus[2:0] • Ze zmienną: [<bit_pocz>{+|-}:<szer>] : • data2[31-:8]; //start=31, szer=8 => data[24:31] • data2[24+:8]; //start=24, szer=8 => data[24:31]

  22. Selekcja fragmentu wektora • Bit 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))

  23. Typy danych • Typy proste: • Integer, • Real, • Time • Tablice: integer count[0:7]; reg bool[31:0]; time chk_point[1:100][0:255];

  24. Stałe • parameter port_id = 5; • parameter cache_line_width = 256;

  25. 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

  26. Moduł Verilog • Definicja bloku, odpowiada parze entity/architecture • Lista wejść/wyjść – jak deklaracja port w entity • Pozostałe instrukcje – jak wnętrze architekture

  27. Moduł Verilog • Jednak moduł jest jedynie szablonem bloku • Musi nastąpić deklaracja instancji • Musi więc ostatecznie wystąpić strukturalny poziom specyfikacji

  28. Moduł – deklaracja portów • Poza 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

  29. Opis strukturalny

  30. Opis strukturalny • Lista połączeń: • Wg kolejności: • Z nazwami:

  31. 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;

  32. Opis behawioralny • Odpowiednik procesu: struktury always, initial • Przykład: module clock_gen (output reg clock); initial clock = 1'b0; always #10 clock = ~clock; initial #1000 $finish; endmodule

  33. Lista czułości always @( reset, clock, d) begin if (reset) q = 1'b0; else if(clock) q = d; end

  34. Wyrażenie warunkowe

  35. Instrukcja wyboru

  36. Pętle

  37. Egzekucja sekwencyjna i równoległa • Przetwarzanie sekwencyjne: begin .. end • Przetwarzanie równoległe: fork .. join

More Related