微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 一个关于quartus ii 中仿真的问题,功能仿真准确,为什么门级仿真就烂的一塌糊涂

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

时间:10-02 整理:3721RD 点击:
我是学了fpga没多久,写了一个小程序,在信号DATA_IN高电平时就开始计数,低电平时就归零,50MHz的参考时钟,功能仿真准确,但是门级仿真就是一开始有一些数值而且不对,后面就全部都是xxxxxx,我看着代码也没有哪里不对啊。求论坛有大神的教教我,真的很郁闷啊,到底哪里弄错了,也可能是很低级的错误。请各位大侠指教附图
程序


功能仿真


时序仿真


第一,门级仿真就是功能仿真,没有区别;
第二,你把第二个always@(*),改成always@(posedge  CLK or negedge RST_N)再试试。

哦哦,那就是时序仿真和门级仿真,试了一下你说的,结果还是一样错的,


一般都是功能仿真加时序约束,不用后仿!

为什么不用后仿真,后仿真如果都不成功,那直接调试肯定出不来啊,看了一些关于TimeQuest的时序约束,还是不知道该怎么去用,怎么加时序约束才是好的

因为后仿意义不大啊,都是估算的触发器延时,真正到板子上的延时仿真器也不知道啊,所以功能仿真就行,那怎么保证加上触发器延时以后功能正常呢,这就是时序约束要干的事了,时序约束保证每个触发器的建立时间和保持时间都要满足,否则就会出现时序报红,报红的时序你就要优化代码了!如果不报红就说明加上了触发器延时和你功能仿真时一样的了!

第二个always块,中if(data_in==1),cnt_d_n<=cnt_d_n+1;而不是cnt_d_n<=cnt_d+1;

这样啊 也就是后仿真没什么实际意义,关于时序约束我再去看看,可是你觉得我的代码还需要哪些优化呢,我实在看不出了。

always @(*) 就是所有敏感条件都进入判断,就是所以if语句中判断的还有等号右边的变量变化的时候都会进入判断,
你第一个always块里用cnt_n改变cnt 又在第二个块里用cnt改变cnt_n  当然会有问题了

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top