What does the variable name in the register declaration indicate (Verilog)
我刚刚开始学习 verilog ,我在一些事情上遇到了麻烦。我找到了一些可以提供帮助的资源,但有些事情不清楚,我需要指定。我在下面有一个 D 触发器的代码。而且我了解进出声明是如何工作的。我没有得到的是寄存器。
当它说out是与之关联的变量。这个关联是否意味着,out是寄存器和输出?还是说 out 也是寄存器的输出?
1 2 3 4 5 6 7 8 9 | module DFF(quarter, in, out) ; parameter n = 1; // width input quarter ; input [n-1:0] in ; output [n-1:0] out ; reg [n-1:0] out ; always @(quarter=1) out = in ; endmodule |
在 Verilog 中有网络,也有变量。到目前为止,最常见的网是您可能熟悉的电线。您可以使用
(在 Verilog 中,但不是在 SystemVerilog 中),电线必须由
驱动
-
assign 语句 - 实例化模块的输出
并且变量必须从
驱动
-
initial 和always 块。
您的输出
1 | reg [n-1:0] out ; |
将输出
事实上,您正在使用一种老式的方式来指定输入和输出。从 2001 年开始,方法是这样的:
1 2 3 4 5 6 7 8 9 | module DFF #(parameter n = 1) (input wire quarter, input wire [n-1:0] in, output reg [n-1:0] out); always @(quarter=1) out = in ; endmodule |
这就是所谓的 ANSI 格式,我想你会同意,它更合理。我建议使用此表格,而不是您使用的老式表格。
顺便说一句,你的代码有点奇怪。我不完全确定它应该做什么,但是如果您期望在季度为 1 时驱动输出,我会这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | module DFF // #(parameter n = 1) // you're not using parameter n (input wire quarter, input wire [n-1:0] in, output reg [n-1:0] out); always @(*) if (quarter == 1'b1) out = in ; else // IMPORTANT ! : what is out when quarter != 1 ? // your current code would synthesise to a latch // is that what you wanted? (And if so, are you // sure that's what you wanted) endmodule |
最初,verilog 是一种对状态变量(寄存器、reg)进行行为类型操作并通过