打印
[verilog]

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

[复制链接]
2155|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
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个,你这么写不规范

使用特权

评论回复
5
ok407371195|  楼主 | 2017-1-3 10:30 | 只看该作者
feihufuture 发表于 2017-1-3 10:27
拆成2个,你这么写不规范

不好意思,我是新手 能不能讲的详细一点? 为什么这样写不规范呢?

使用特权

评论回复
6
jyq007| | 2017-1-3 10:39 | 只看该作者
本帖最后由 jyq007 于 2017-1-3 10:41 编辑

楼主一看就是写C的,你的逻辑 后面那一段是全部不会去执行的。verolig是硬件,不是软件代码。不能按顺序去理解。

使用特权

评论回复
7
ok407371195|  楼主 | 2017-1-3 10:46 | 只看该作者
jyq007 发表于 2017-1-3 10:39
楼主一看就是写C的,你的逻辑 后面那一段是全部不会去执行的。verolig是硬件,不是软件代码。不能按顺序去 ...

begin end 不就可以是 在这个范围内 的全部都要执行吗?

使用特权

评论回复
8
jyq007| | 2017-1-3 12:22 | 只看该作者
ok407371195 发表于 2017-1-3 10:46
begin end 不就可以是 在这个范围内 的全部都要执行吗?

cent16 放到一个if  else的逻辑链路里面。 不要才开成两个。

使用特权

评论回复
9
zxq6| | 2017-1-3 12:33 | 只看该作者
看来我是经常犯这种错误?

使用特权

评论回复
10
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就是一个硬件的寄存器,没法接两个输入,不然可能会短路,
现在编译器比较强,一般会发现这种情况,可能会自动的帮你编译成互斥的条件,但结果就会和你估计的不一样了。

使用特权

评论回复
11
xmar| | 2017-1-3 15:07 | 只看该作者
前面已经有 if(cnt16==4),后面 if(cnt16>=4)重复cnt16=4,改为:if(cnt16 > 4).

使用特权

评论回复
12
zxq6| | 2017-1-3 20:18 | 只看该作者
看了楼上的,明白了。

使用特权

评论回复
13
ticomi| | 2017-1-4 08:26 | 只看该作者
确实是语法错误,习惯性写C了。

使用特权

评论回复
14
00750| | 2017-1-4 09:57 | 只看该作者
你这个的问题在于当cnt16的值等于8时,cnt16不再++,锁死在这里了。

使用特权

评论回复
15
littbi| | 2017-12-10 22:35 | 只看该作者
你仿真看得到cnt16加得到8 以上吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

27

帖子

1

粉丝