寄存器声明中的变量名表示什么(Verilog)
我刚刚开始学习verilog,有些事情我遇到了麻烦。我已经找到了一些资源来提供帮助,但是有些东西还不清楚,我需要指定。下面是D触发器的代码。我也理解进进出出的声明是如何起作用的。我拿不到的是收银机 当它说out是与之相关联的变量时,这个关联是否意味着out是寄存器和输出?或者它是否意味着out也是寄存器的输出寄存器声明中的变量名表示什么(Verilog),verilog,Verilog,我刚刚开始学习verilog,有些事情我遇到了麻烦。我已经找到了一些资源来提供帮助,但是有些东西还不清楚,我需要指定。下面是D触发器的代码。我也理解进进出出的声明是如何起作用的。我拿不到的是收银机 当它说out是与之相关联的变量时,这个关联是否意味着out是寄存器和输出?或者它是否意味着out也是寄存器的输出 module DFF(quarter, in, out) ; parameter n = 1; // width input quarter ; input [n-1
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中有网络和变量。到目前为止,最常见的一种网络是电线,你可能很熟悉它。您可以使用var
声明变量,但大多数人都会说reg
,因为这一直都是这样做的
(在Verilog中,但不在SystemVerilog中),电线必须由
语句assign
- 实例化模块的输出
和初始
块始终
out
由始终
块驱动,因此必须是一个变量。线路
reg [n-1:0] out ;
将输出out
声明为变量(而不是导线)
事实上,您正在使用一种老式的方式来指定输入和输出。自2001年以来,其方法如下:
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
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
这就是所谓的ANSI形式,我想你会同意,它更合理。我建议你用这个表格,而不是你现在用的那种老式表格
顺便说一句,你的代码有点奇怪。我不完全确定它应该做什么,但如果您希望在季度为1时由产出驱动,我会这样做:
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
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)进行行为类型操作并通过
网络连接它们的语言。因此,reg
是一个变量,应该在操作之间保持其值,net
只是一个连接,没有与之关联的状态,即wire
reg
值可以在程序
块中计算,即始终
块,导线
只能连接(使用连续赋值,赋值
语句(始终块外))
有不同的规则用于reg
s和wire
s,以及它们在模拟中的不同行为,特别是在多个驱动程序周围。更多信息请参见Matthew的回复