Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałAdelajda Drożdżyński Został zmieniony 11 lat temu
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, 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
4
Cztery poziomy abstrakcji opisu
Behawioralny (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: <rozmiar> '<format bazy> <liczba> Przykłady: 4'b 'habc 16'd255
13
Notacja Liczby bez rozmiaru: // domyślnie – 32 bity 'hc3 'o21
14
Operatory a = ~ b; // jednoargumentowe a = b && c; // dwuargumentowe
a = 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 wektora
busA[7] bus[2:0]
21
Selekcja fragmentu wektora
22
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]
23
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))
24
Typy danych Typy proste: Tablice: Integer, Real, Time
integer 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/architecture
Lista wejść/wyjść – jak deklaracja port w entity Pozostałe instrukcje – jak wnętrze architekture
28
Moduł Verilog Jednak moduł jest jedynie szablonem bloku
Musi nastąpić deklaracja instancji Musi więc ostatecznie wystąpić strukturalny poziom specyfikacji
29
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
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, initial
Przykł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ła
Przetwarzanie sekwencyjne: begin .. end Przetwarzanie równoległe: fork .. join
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.