2

我是通过 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

有时,当我使用第二种方式时,它会产生错误。两种风格有什么区别?


第二个问题,当将输出声明为regs 时,第一种样式可以正常工作,即

module mealy(
  in,
  out
 );

  output out;
  input  in;
  reg    out;
endmodule

使用第二种样式时,它会生成一个错误,指出您不能声明两次。

module mealy(
  input  in,
  output out
);
  reg out;
endmodule

什么事?我只是初学者我不知道为什么我必须声明'reg'。

4

1 回答 1

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类型。

Wires 由端口或分配语句驱动。regs 在内部alwaysinitial块中分配。reg并不意味着触发器。

于 2013-09-29T15:34:52.687 回答