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

时间:2013-11-22 01:04:33

标签: 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
        count <= count + 1;
end

assign tick = (count == 163) ? 1:0;

endmodule

它可以正常工作,在模拟中,当计数器达到163时,tick被指定为高,否则为0。

现在我将其实例化为我的UART接收器。以下是代码段:

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));
   .
   .
   .
   .

现在我运行receiver模块的模拟。自动收报机无法正常工作。这里不是在1生成count==163,而是生成x

以下是将其实例化为接收器模块时的模拟:

enter image description here

我无法弄清楚为什么这种行为发生了变化。 谢谢你的期待

1 个答案:

答案 0 :(得分:4)

最好猜测设计中的tick处有第二个驱动程序。找出答案的简便方法是将tick中的baud_gen作业更改为:

wire pre_buf_tick = (count == 163) ? 1:0;
assign tick = pre_buf_tick;

探测两个信号。 pre_buf_tick为X时,赔率tick为1。

驱动程序冲突的原因可能与s_tick被列为receiver输入时的输入有关。