verilog中减法相关问题

2019-07-15 20:56发布

我设置一个初值为0的计数器counter[23:0],一个输入信号B[23:0]。设置一个初始值为0的falg寄存器。
verilog代码如下:

if(counter==B-1)
begin
          counter<=0;
          flag<=1;
end
else begin
        counter<=counter+1;
        flag<=0;
       end


当B=0时,我的仿真结果中发现,flag信号并没有置位。我想问一下,在FPGA中,当B=0时,B-1是24'hFFFFFF吗?如果是的话,当counter计数到24'hFFFFFF时条件已经满足了,为什么我的flag信号没有置位呢?还是说verilog在计算时,可以判断正负?
希望哪位大神可以帮忙解决问题,谢谢。





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
geyuer
1楼-- · 2019-07-16 02:11
我后面设置了一个wire型的M【23:0】,
且assign M=B-1;
然后将代码变成:

if(counter==M)
begin
          counter<=0;
          flag<=1;
end
else begin
        counter<=counter+1;
        flag<=0;
       end
B=0的情况下,得出的仿真结果中,M=24‘HFFFFFF;
而flag信号在counter计数到24‘hFFFFFF时正确置位了。


geyuer
2楼-- · 2019-07-16 05:46
我自己找到问题了,我发现判断B-1时,由于没有给1设置位宽,它自己当成32bit做减法了,改成B-1‘b1就好了。’
davidle
3楼-- · 2019-07-16 08:58
自问自答66666,加油

一周热门 更多>