verilog 写的串口 在一个状态机里面,有一个寄存器无法执...

2020-02-02 11:12发布

QQ图片20170103093012.png

图中红线部分 cnt8始终无法加1是为什么呢?,而cnt16就可以清零

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
15条回答
thinkabout4451
2020-02-03 20:41
本帖最后由 thinkabout4451 于 2017-1-3 13:36 编辑

电路是并行的,所以下面的没有执行,另外代码风格有问题,如下。

cnt16无法两次被赋值,除非在互斥的判断里。
就是不要写成:
if()
  cnt16 <= 1;
if()
  cnt16 <= 2;

需要写成:
if()
  cnt16 <= 1;
else if()
  cnt16 <= 2;

因为cn16就是一个硬件的寄存器,没法接两个输入,不然可能会短路,
现在编译器比较强,一般会发现这种情况,可能会自动的帮你编译成互斥的条件,但结果就会和你估计的不一样了。

一周热门 更多>