Hardware 模块单独生成正确的输出,但在实例化时不生成

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

我做了一个简单的股票代码模块,每次计数器达到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
        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;