HDL (język opisu sprzętu) to rodzaj używanego języka, Verilog / VHDL w porównaniu z javascript innym niż HDL.
RTL (poziom transferu rejestru) to poziom abstrakcji, w którym piszesz. Trzy poziomy, o których mówię, to behawioralny, RTL, poziom bramkowy.
Behawioralna ma najwyższą warstwę abstrakcji, która opisuje ogólne zachowanie i często nie jest możliwa do syntezy, ale jest przydatna do weryfikacji.
RTL opisuje pożądany sprzęt, sugerując logikę. definiowanie przerzutników, zatrzasków i sposób przesyłania danych między nimi. Można to syntetyzować, synteza może zmienić / zoptymalizować zastosowaną logikę, ale nie zachowanie. Przełączanie multiplekserów dla bram itp. Czasami odwraca sygnały, aby lepiej zoptymalizować projekt.
Verilog RTL sugeruje flip-flop:
logic a; //logic is SystemVerilog, could be a 'reg'
logic k; // Driven by RTL not shown
always @(posedge clk or negede rst_n) begin
if (~rst_n) begin
a <= 'b0 ;
end
else begin
a <= k ;
end
end
Kombinatoryjne operatory bitowe:
logic [1:0] n;
logic [1:0] m;
logic [1:0] result;
assign result = n & m ;
Poziom bramy bramki to projekt wykorzystujący podstawowe bramki logiczne (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Nie wymaga syntezy lub jest wynikiem syntezy. To ma najniższy poziom abstrakcji. to bramki logiczne, których użyjesz na chipie, ale brakuje mu informacji o położeniu.
Poziom bramy Verilog (taka sama funkcja jak powyżej):
wire a;
wire k;
DFFRX1 dffrx1_i0 (
.Q (a), //Output
.QN( ), //Inverted output not used
.D (k), //Input
.CK(clk), //Clk
.RN(rst_n)// Active Low Async Reset
);
Kombinatoryczny
wire [1:0] n;
wire [1:0] m;
wire [1:0] result;
AND2X1 and2x1_i0 (
.Y( result[0]),
.A( n[0] ),
.B( m[0] )
);
AND2X1 and2x1_i1 (
.Y( result[1]),
.A( n[1] ),
.B( m[1] )
);