我正在学习Verilog,所以请理解我缺乏知识。我有一个输入模块如下:
reg [31:0] counter;
always @(posedge CLK) begin counter <= counter + 1; end
assign "something to drive FIRE_IN" = counter[10];
我想把这个输入驱动为高低。例如,
{{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
重要提示:保持反馈同步(在时钟边缘更新)。异步反馈推断出对电平敏感的锁存器,这些锁存器容易出现导致故障和意外行为的定时问题。保持反馈同步可以降低这种风险。