HDL (Hardware description Language) est le type de langage utilisé, Verilog / VHDL par rapport à un javascript non HDL.
RTL (Register-transfer level) est un niveau d'abstraction dans lequel vous écrivez. Les trois niveaux auxquels je fais référence sont Behavioral, RTL, Gate-level.
Le comportement comporte la couche d'abstraction la plus élevée qui décrit le comportement global et n'est souvent pas synthétisable, mais est utile pour la vérification.
RTL décrit le matériel que vous souhaitez en impliquant la logique. définir les bascules, les verrous et comment les données sont transférées entre eux. Ceci est synthétisable, la synthèse peut altérer / optimiser la logique utilisée mais pas le comportement. Commutation des multiplexeurs pour les portes, etc. inversant parfois les signaux pour mieux optimiser la conception.
Verilog RTL impliquant une bascule:
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
Opérateurs binaires combinatoires:
logic [1:0] n;
logic [1:0] m;
logic [1:0] result;
assign result = n & m ;
Le niveau de porte est une conception utilisant les portes logiques de base (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Il n'a pas besoin d'être synthétisé ou est la sortie de la synthèse. Cela a le niveau d'abstraction le plus bas. ce sont les portes logiques que vous utiliserez sur la puce, mais il manque des informations de position.
Verilog au niveau de la porte (même fonction que ci-dessus):
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
);
Combinatoire
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] )
);