一个关于quartus ii 中仿真的问题,功能仿真准确,为什么门级仿真就烂的一塌糊涂

2019-07-15 21:50发布

我是学了FPGA没多久,写了一个小程序,在信号DATA_IN高电平时就开始计数,低电平时就归零,50MHz的参考时钟,功能仿真准确,但是门级仿真就是一开始有一些数值而且不对,后面就全部都是xxxxxx,我看着代码也没有哪里不对啊。求论坛有大神的教教我,真的很郁闷啊,到底哪里弄错了,也可能是很低级的错误。请各位大侠指教附图
程序 程序
功能仿真 功能仿真
时序仿真 时序仿真
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
Secret_h
1楼-- · 2019-07-16 16:26
reallmy 发表于 2017-4-12 18:33
因为后仿意义不大啊,都是估算的触发器延时,真正到板子上的延时仿真器也不知道啊,所以功能仿真就行,那怎么保证加上触发器延时以后功能正常呢,这就是时序约束要干的事了,时序约束保证每个触发器的建立时间和保持时间都要满足,否则就会出现时序报红,报红的时序你就要优化代码了!!如果不报红就说明加上了触发器延时和 ...

这样啊 也就是后仿真没什么实际意义,关于时序约束我再去看看,可是你觉得我的代码还需要哪些优化呢,我实在看不出了。
被自己帅醒
2楼-- · 2019-07-16 18:35
always @(*) 就是所有敏感条件都进入判断,就是所以if语句中判断的还有等号右边的变量变化的时候都会进入判断,
你第一个always块里用cnt_n改变cnt 又在第二个块里用cnt改变cnt_n  当然会有问题了
Secret_h
3楼-- · 2019-07-16 21:17
被自己帅醒 发表于 2017-4-13 09:05
always @(*) 就是所有敏感条件都进入判断,就是所以if语句中判断的还有等号右边的变量变化的时候都会进入判断,
你第一个always块里用cnt_n改变cnt 又在第二个块里用cnt改变cnt_n  当然会有问题了

这种写法是我看教学视频时,视频里面的写法,因为功能仿真是正确的,所以这样写功能是对的,只是时序方面可能会有些问题,但是不是很清楚

一周热门 更多>