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

[复制链接]
2849|14
 楼主| ok407371195 发表于 2017-1-3 09:58 | 显示全部楼层 |阅读模式


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
feihufuture 发表于 2017-1-3 10:09 | 显示全部楼层
分开设计、结构更加清晰些
 楼主| ok407371195 发表于 2017-1-3 10:22 | 显示全部楼层
feihufuture 发表于 2017-1-3 10:09
分开设计、结构更加清晰些

那我现在要怎么解决呢? 在同一个begin end 里面 一个执行 一个不执行 是什么情况?
feihufuture 发表于 2017-1-3 10:27 | 显示全部楼层
ok407371195 发表于 2017-1-3 10:22
那我现在要怎么解决呢? 在同一个begin end 里面 一个执行 一个不执行 是什么情况? ...

拆成2个,你这么写不规范
 楼主| ok407371195 发表于 2017-1-3 10:30 | 显示全部楼层
feihufuture 发表于 2017-1-3 10:27
拆成2个,你这么写不规范

不好意思,我是新手 能不能讲的详细一点? 为什么这样写不规范呢?
jyq007 发表于 2017-1-3 10:39 | 显示全部楼层
本帖最后由 jyq007 于 2017-1-3 10:41 编辑

楼主一看就是写C的,你的逻辑 后面那一段是全部不会去执行的。verolig是硬件,不是软件代码。不能按顺序去理解。
 楼主| ok407371195 发表于 2017-1-3 10:46 | 显示全部楼层
jyq007 发表于 2017-1-3 10:39
楼主一看就是写C的,你的逻辑 后面那一段是全部不会去执行的。verolig是硬件,不是软件代码。不能按顺序去 ...

begin end 不就可以是 在这个范围内 的全部都要执行吗?
jyq007 发表于 2017-1-3 12:22 | 显示全部楼层
ok407371195 发表于 2017-1-3 10:46
begin end 不就可以是 在这个范围内 的全部都要执行吗?

cent16 放到一个if  else的逻辑链路里面。 不要才开成两个。
zxq6 发表于 2017-1-3 12:33 来自手机 | 显示全部楼层
看来我是经常犯这种错误?
thinkabout4451 发表于 2017-1-3 13:35 | 显示全部楼层
本帖最后由 thinkabout4451 于 2017-1-3 13:36 编辑

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

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

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

因为cn16就是一个硬件的寄存器,没法接两个输入,不然可能会短路,
现在编译器比较强,一般会发现这种情况,可能会自动的帮你编译成互斥的条件,但结果就会和你估计的不一样了。
xmar 发表于 2017-1-3 15:07 | 显示全部楼层
前面已经有 if(cnt16==4),后面 if(cnt16>=4)重复cnt16=4,改为:if(cnt16 > 4).
zxq6 发表于 2017-1-3 20:18 来自手机 | 显示全部楼层
看了楼上的,明白了。
ticomi 发表于 2017-1-4 08:26 | 显示全部楼层
确实是语法错误,习惯性写C了。
00750 发表于 2017-1-4 09:57 | 显示全部楼层
你这个的问题在于当cnt16的值等于8时,cnt16不再++,锁死在这里了。
littbi 发表于 2017-12-10 22:35 | 显示全部楼层
你仿真看得到cnt16加得到8 以上吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

27

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部