我是初学者,通过xilinx编写verilog。
我已经了解到端口声明必须如下所示
module mealy(
nReset,
clk,
in,
out
);
input nReset;
input clk;
input in;
output out;
endmodule
当我使用xilinx时,它有默认选项来设置变量,它看起来像这样:
module mealy(
input nReset,
input clk,
input in,
output out
);
endmodule
有时,当我使用第二种方式时,会产生错误。两种款式有什么区别?
第二个问题,当将输出声明为reg
时,第一种样式正常工作即
module mealy(
in,
out
);
output out;
input in;
reg out;
endmodule
使用第二种样式时,它会生成一个错误,指出您不能声明两次。
module mealy(
input in,
output out
);
reg out;
endmodule
怎么回事?我只是初学者我不知道为什么我必须宣布'reg'。
答案 0 :(得分:3)
Verilog 1995经常被称为verilog-95(IEEE 1364-1995),用于将端口声明与方向分开并再次与reg类型分开。
自Verilog 2001(IEEE 1364-2001)以来,可以使用更紧凑的版本。
如果您的工具仅符合95标准,那么对于2001年或更晚的代码,它们将会出错。
当使用新的端口声明时,包括方向,如果不是连线,你也应该声明类型。
module mealy(
input in, // Inputs are implicitly wires (reg would not make sense)
output [1:0] out_x, // 2 bit wire type as output
output reg [1:0] out_y // 2 Bit reg type as output
);
endmodule
应该查看reg和wire类型之间的区别,基本上它是模拟优化。如果使用SystemVerilog,则可以用logic
类型替换它们。
Wire
由端口驱动,或者分配语句。在reg
或always
块内分配initial
个。 reg
NOT 暗示触发器。