Hardware 模块单独生成正确的输出,但在实例化时不生成
我做了一个简单的股票代码模块,每次计数器达到163时都会产生一个rick。下面是它的代码:Hardware 模块单独生成正确的输出,但在实例化时不生成,hardware,verilog,fpga,hdl,Hardware,Verilog,Fpga,Hdl,我做了一个简单的股票代码模块,每次计数器达到163时都会产生一个rick。下面是它的代码: module baud_gen( input clock, input reset, output tick ); reg [7:0] count; always @ (posedge clock) begin if(reset || (count == 163)) count <= 0; else coun
module baud_gen(
input clock,
input reset,
output tick
);
reg [7:0] count;
always @ (posedge clock)
begin
if(reset || (count == 163))
count <= 0;
else
count <= count + 1;
end
assign tick = (count == 163) ? 1:0;
endmodule
现在,当我运行接收器模块的模拟时。自动售票机工作不正常。这里不是在count==163处生成1,而是生成x
以下是将其实例化到接收器模块时的模拟:
我不明白为什么会有这种行为改变。
感谢您的关注最好的猜测是在设计中的某个地方有第二个驱动程序。简单的方法是将baud_gen中的刻度分配更改为: 探测两个信号。当勾号为X时,概率为1
驱动程序冲突的原因可能与s_tick被列为接收器的输入,而它本应是一个输出有关。谢谢。s_tick应该是这个模块的一个输入,这个tick由bau_gen生成。我必须将输出tick连接到s_tick。我不熟悉实例化。我不能将一个模块的输出实例化为另一个模块的输入吗?@FarazKhan子模块的输出不能将输入驱动到包含实例化层。输入只能从上面的级别驱动,否则它们不是输入。@FarazKhan,Morgan是100%正确的。我正要写同样的东西。如果需要合并这两条导线,则始终可以创建另一条导线,例如导线合并_tick=s_tick | | tick;。你可以用三州驾驶人切换到inout,但我不鼓励这样做。如果不实现属性,三个状态很容易有冲突的驱动程序,并且调试起来比较困难。一些FPGA往往也有有限的三态支持。
module receiver(
input clock,
input reset,
input s_tick,
input rx,
output reg done,
output [7:0] word_out
);
localparam [1:0]
idle = 00,
start = 01,
data = 10,
stop = 11;
baud_gen ticker (.clock(clock), .reset(reset), .tick(s_tick));
.
.
.
.
wire pre_buf_tick = (count == 163) ? 1:0;
assign tick = pre_buf_tick;