我正在努力全面理解Verilog的抽象级别之间的差异,我知道每个级别的描述是什么,但我仍然无法在实践中理解。
针对这种情况,我将粘贴一些Verilog代码以及我的想法:
以下代码处于行为级别。
always @ (a or b or sel)
begin
y = 0;
if (sel == 0) begin
y = a;
end else begin
y = b;
end
end
这里只是一个例子,处于门级别
module test(clk, ready, next, Q);
input clk, enable, next;
output Q;
\**SEQGEN** reg_1 (.clear(1'b0), .next_state(next), .clocked_on(clk), .Q(Q), .synch_enable(enable) );
endmodule
我不知道这段代码是RTL还是门级电路(我预计always关键字会使其成为RTL而不是门级电路)
module dff_from_nand();
wire Q,Q_BAR;
reg D,CLK;
nand U1 (X,D,CLK) ;
nand U2 (Y,X,CLK) ;
nand U3 (Q,Q_BAR,X);
nand U4 (Q_BAR,Q,Y);
// Testbench of above code
initial begin
$monitor("CLK = %b D = %b Q = %b Q_BAR = %b",CLK, D, Q, Q_BAR);
CLK = 0;
D = 0;
#3 D = 1;
#3 D = 0;
#3 $finish;
end
always #2 CLK = ~CLK;
endmodule
我已经知道initial begin和end不能综合,并且只用于测试。现在我有两个问题:
第二和第三段代码是RTL还是门级电路?能否给出一个好的RTL代码示例?我找到了这个RTL Code Example,但那真的是RTL吗?对我来说它看起来像行为级别。
什么是Verilog网表?它与门级电路相同,还是具有上下文基础的定义?
我很困惑,因为在一些网站上我不知道他们是在说“这是使用逻辑门的Verilog代码”还是“这是门级别的Verilog代码”。
如果有人愿意详细解释这个话题,我会非常高兴 :)