Verilog处理输入线

时间:2017-12-15 16:47:25

标签: verilog

我正在学习Verilog,所以请理解我缺乏知识。我有一个输入模块如下:

reg [31:0] counter;

always @(posedge CLK) begin counter <= counter + 1; end

assign "something to drive FIRE_IN" = counter[10];

我想把这个输入驱动为高低。例如,

{{1}}

我正在寻找一种通过软件将输出引脚连接到输入引脚的方法。

1 个答案:

答案 0 :(得分:0)

如果某些内容被视为本地范围内的输入,则无法分配。

对于数字逻辑,在任何给定时间网络上必须有不超过一个活动驱动程序。当信号被标记为输入时,意味着它的驱动程序在当前范围外部。如果信号是输出,则意味着它的驱动器在电流范围内(相同级别或子模块)。如果信号是inout,则必须存在一个协议,以确保在任何给定时间只有一个驱动器处于活动状态。

如果在同一网络上有两个或多个具有相反值的活动驱动程序,则会发生冲突。在模拟中,这将导致X作为信号值。在FPGA / ASIC上,这将在电源和地之间产生短路(可能会损坏器件)。

您需要确定合并counter[10]FIRE_IN的表达式所需的范围。创建输出以使值counter[10]达到该级别。在此级别创建中间逻辑。然后将此新逻辑连接到使用FIRE_IN的位置。这创建了一个反馈系统。

示例:

module MODULENAME( output CNT10, /* ... */ );
  /* ... */
  assign CNT10 = counter[10];
  /* ... */
endmodule

module TOPMODULE( /* ... */ );
  /* ... */
  assign some_logic = func(FIRE_IN, CNT10, /* ... */ );
  MODULENAME instname( .CNT10_OUT(CNT10), .FIRE_IN(some_logic),  /* ... */ );
  /* ... */
endmodule

重要提示:保持反馈同步(在时钟边缘更新)。异步反馈推断出对电平敏感的锁存器,这些锁存器容易出现导致故障和意外行为的定时问题。保持反馈同步可以降低这种风险。