-2

我正在尝试制作一个取决于信号的计数器。信号在两个周期内为高电平,在接下来的两个周期内为低电平,并且一​​直持续到结束。在高脉冲期间,计数应从 0、1 开始。当脉冲为低电平时,计数为'x,从下一个高电平开始,它从 2、3 开始,然后再次为 'x 两个周期(仅在脉冲为高电平时向上计数),然后再次为 4、5。我是 Verilog 的新手,这是一个任务。

当我编写以下代码时,我总是得到计数 1 2 x 1 2 x。有什么帮助吗?

always@(posedge clk or posedge rst)
If(rst)
Count <= 0;
else 
Count <= signal; 

assign signal  = pulse ? Count + 1: 'x; 

我得到 1 2 x x1 2 xx 而不是。1 2 xx 3 4 xx 5 6 xx 等。任何帮助表示赞赏。

4

2 回答 2

0

当您将信号分配给 x 时,计数将在下一个时钟周期获取该值。然后,当脉冲变高并且信号变为已知时,它将假设 x 表示零并将其加一,因此输出将为一。然后,下一个周期,输出将是两个。您需要做的是保留状态而不是重置它。尝试添加if (pulse)之前count <= signal

于 2018-09-02T15:35:13.603 回答
0

您只需要使计数寄存器更宽。现在,它只有一点,所以一旦你到达 (1 + 1 = ) 2,它就会翻转。如果你把它变宽,它将能够存储状态。

于 2018-09-02T15:10:33.037 回答