verilog - 为什么输出网络也需要重新声明为 'wire' 或 'reg' ?

标签 verilog

为什么我们必须采用与输出相同的变量名并连接来获取值?例如:

 module TEST(INP1,INP2,CIN,COUT,SUM);
 input [31:0] INP1;
 input [31:0] INP2;
 output [31:0] SUM;
 input CIN;
 output COUT;

 wire [31:0] SUM;// Again redefined 
 wire COUT; // Again Redefined
 assign {COUT,SUM} = INP1 + INP2 + CIN ;

获取两个数字的进位输出和和以及进位输入作为输入的示例。

最佳答案

Verilog 1995确实要求在后面列出端口方向。输出连线类型是隐式的,并且可以将 regs 声明为与方向内联。

module TEST(A,B,C,D);
  input  [31:0] A;
  input  [31:0] B;
  output [31:0] C;
  output        D;

  reg D;

可以写成:

module TEST(A,B,C,D);
  input      [31:0] A;
  input      [31:0] B;
  output     [31:0] C;
  output reg        D; //Only declared twice

Verilog 2001 起,不再需要额外的定义,并且可以将它们声明为内联(ANSI 样式)。

module TEST(
  input      [31:0] A,
  input      [31:0] B,
  output     [31:0] C,
  output reg        D  // Declared Once
);

SystemVerilog (2009)开始,我们有了逻辑类型,您不再需要在reg和wire类型之间切换。唯一的要求是,如果您需要三态,请使用电线或三态。

module TEST(
  input        [31:0] A,
  input        [31:0] B,
  output logic [31:0] C,
  output logic        D
);

我对reg和wire类型的最初要求的理解是为了模拟速度或模拟器设计的简易性。导线的值在每个模拟增量周期进行评估,而寄存器仅在被敏感度列表触发时评估。

关于verilog - 为什么输出网络也需要重新声明为 'wire' 或 'reg' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229477/

相关文章:

image - 将图像从 PC 读取到 FPGA 并返回

Verilog 连续仿真

vhdl - 如何防止 Xilinx XST 从我的设计中合并网络?

verilog - Always block 中的 For 循环

Verilog 在不改变内部状态的情况下对模块输出施加力

verilog modelsim fpga

verilog - Verilog 指令是否是强制性的,例如时间尺度?

c++ - 创建 C++ 测试台以​​驱动 Verilog DUT

verilog - 如何每 n 个时钟周期切换一个采样时钟?

module - verilog 看不到我的功能