slide1
Download
Skip this Video
Download Presentation
VHDL

Loading in 2 Seconds...

play fullscreen
1 / 38

VHDL - PowerPoint PPT Presentation


  • 168 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' VHDL' - alan-joseph


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1
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, 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
cztery poziomy abstrakcji opisu
Cztery poziomy abstrakcji opisu
  • Behawioralny (algorytmiczny)
  • Ścieżka danych
  • (Strukturalny) Poziom bramek (Gate Level)
  • Poziom przełącznikowy – zależny od technologii programowalnego układu
rtl synteza
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
przyk ad1
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

przyk ad2
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

przyk ad3
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

test bench1
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

notacja
Notacja
  • Zapis liczby z rozmiarem: <rozmiar> \'<format bazy> <liczba>
  • Przykłady:4\'b1111 12\'habc 16\'d255
notacja1
Notacja
  • Liczby bez rozmiaru:

23456 // domyślnie – 32 bity

\'hc3

\'o21

operatory
Operatory
  • a = ~ b; // jednoargumentowe
  • a = b && c; // dwuargumentowe
  • a = b ? c : d; // trójargumentowe
operatory1
Operatory
  • arytmetyczne: + - * / % (mod)
  • relacyjne: > >= < <= == !=
  • logiczne: && (and) || (or)
  • bitowe: & (and) | (or) ^ (xor) ^~ (not-xor)
  • przesunięcia bitowe: << (shl) >> (shr)
operatory2
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} }
warto ci logiczne
Wartości logiczne
  • Wartości: 0, 1, x, z
  • Przykład: strong1, weak0
wire reg
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;
wektory
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;
selekcja fragmentu wektora2
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]
selekcja fragmentu wektora3
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))

typy danych
Typy danych
  • Typy proste:
    • Integer,
    • Real,
    • Time
  • Tablice:

integer count[0:7];

reg bool[31:0];

time chk_point[1:100][0:255];

sta e
Stałe
  • parameter port_id = 5;
  • parameter cache_line_width = 256;
sta e1
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
modu verilog
Moduł Verilog
  • Definicja bloku, odpowiada parze entity/architecture
  • Lista wejść/wyjść – jak deklaracja port w entity
  • Pozostałe instrukcje – jak wnętrze architekture
modu verilog1
Moduł Verilog
  • Jednak moduł jest jedynie szablonem bloku
  • Musi nastąpić deklaracja instancji
  • Musi więc ostatecznie wystąpić strukturalny poziom specyfikacji
modu deklaracja port w
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

opis strukturalny1
Opis strukturalny
  • Lista połączeń:
    • Wg kolejności:
    • Z nazwami:
opis cie k danych
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;
opis behawioralny
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

lista czu o ci
Lista czułości

always @( reset, clock, d)

begin

if (reset)

q = 1\'b0;

else if(clock)

q = d;

end

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