我做了一个简单的自动收报机模块,每当计数器达到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
。
以下是将其实例化为接收器模块时的模拟:
我无法弄清楚为什么这种行为发生了变化。 谢谢你的期待
答案 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
输入时的输入有关。