xilinx中声明变量的位置差异是什么?

时间:2013-09-29 08:09:52

标签: verilog xilinx hdl

我是初学者,通过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'。

1 个答案:

答案 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由端口驱动,或者分配语句。在regalways块内分配initial个。 reg NOT 暗示触发器。