OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8788|回复: 11

[ALTERA] 关于入门FPGA的仿真的几个问题

[复制链接]

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
发表于 2021-8-19 21:23:54 | 显示全部楼层 |阅读模式
5金钱
先看代码和仿真图
1、为啥复位后,LED0亮的时间不是200ns而是190ns?
2、为啥.vt文件写的是#1000 $stop;但它执行到1000ns后又执行了一会?
3、.v文件里面led是reg类型,到.vt文件里led怎么为wire类型了?

还想问:
1、.vt文件在Quartus里写好后,怎么在Quartus里面编译它语法是否语法错误?
2、我还想看counter的波形,如何修改.vt文件呢?(我是直接在.sys_rst_n(sys_rst_n),后面添加.counter(counter)),好像错误了。

.vt文件

.vt文件

波形图

波形图

.v文件

.v文件

最佳答案

查看完整内容[请看2#楼]

自己解决问题: 2、为啥.vt文件写的是#1000 $stop;但它执行到1000ns后又执行了一会? .vt代码中 initial begin …… end 是顺序执行的,类似C语言代码,刚开始以为是并行执行的, 所以先会有延时100ns后执行的sys_rst_n = 1; 执行完这条语句后才真正开始计时1000ns 再stop, 所以总仿真时间100ns + 1000ns
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-19 21:23:55 | 显示全部楼层
自己解决问题:
2、为啥.vt文件写的是#1000 $stop;但它执行到1000ns后又执行了一会?
.vt代码中
initial begin
    ……
end
是顺序执行的,类似C语言代码,刚开始以为是并行执行的,
所以先会有延时100ns后执行的sys_rst_n = 1;
执行完这条语句后才真正开始计时1000ns 再stop,
所以总仿真时间100ns + 1000ns
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-19 21:49:22 | 显示全部楼层
本帖最后由 1289251272 于 2021-8-19 21:56 编辑

还有.v代码中的第23行
led[3:0] <= {led[2:0], led[3]};

这个我不理解是啥意思........
现在又理解了:
led的第3-0位 <= led的第2-0位+led的第3位
起到了将led最高位移动到最后面再重新赋值的作用!从而实现流水灯
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2021-8-21 01:37:08 | 显示全部楼层
1289251272 发表于 2021-8-20 14:39
自己解决问题:
2、为啥.vt文件写的是#1000 $stop;但它执行到1000ns后又执行了一会?
.vt代码中

谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-21 17:48:42 | 显示全部楼层
自己解决问题:
1、为啥复位后,LED0亮的时间不是200ns而是190ns?
看波形图左二红线:
是sys_clk的下降沿和sys_rst_n的上升沿,所以不会执行(posedge sys_clk or negedge sys_rst_n)模块里面的语句
再看波形图左一红线:
是sys_clk的上升沿,执行always模块里面的语句,让灯亮200ns。

之前没能理解的原因:
总以为一复位了就一定是以复位这个时刻开始计算起,其实不是的。
要注意你模块执行的条件:negedge sys_rst_n,复位下降沿才执行,
而显然波形左二红线指的是复位上升沿
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-21 17:58:29 | 显示全部楼层

RE: 关于入门FPGA的仿真的几个问题

问题:使用自动仿真发现时钟sys_clk只执行了一个周期后就一直为高电平。
补充:我是用Quartus ,Processing - Start - Start Template Testbench Write 自动生成的文件。
解决:删去生成文件末尾的@eachvec,估计是这个卡住了 #(T/2) sys_clk <= ~sys_clk的执行
1629539607(1).jpg
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-21 19:28:15 | 显示全部楼层
本帖最后由 1289251272 于 2021-8-21 20:33 编辑

问题:使用自动仿真发现时钟sys_clk只执行了一个周期后就一直为高电平。
补充:我是用Quartus ,Processing - Start - Start Test Bench Template Writer自动生成的文件
解决:删掉自动生成文件 末尾的 @eachvec; 估计是这个原因卡住了时钟。

再补充:激励文件中initial语句最后面不能再添加延时了,编译会报错,好像添加了也没有意义把?
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-21 20:40:29 | 显示全部楼层
问题:为什么我按照原子视频一步步来,Modelsim波形没有counter这个波形?

解决:看图就明了了!!!!!!右键Add wave就可以了!
有counter.jpg
无counter.jpg
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-22 23:36:58 | 显示全部楼层
使用ModelSim仿真,End Simulation后,若对文件有改动,需要重新编译再仿真。
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-24 00:25:05 | 显示全部楼层
ModelSim打开已建立过的工程
File -> Open

在弹出的窗口中,文件类型选.mpf

然后路径指到工程所在文件夹,选择建立的.mpf文件即可
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-24 16:04:16 | 显示全部楼层
1、.vt文件在Quartus里写好后,怎么在Quartus里面编译它语法是否语法错误?
自己解决:
Proiect Navigator - File 添加进去要编译的文件即可。
回复

使用道具 举报

14

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2020-12-19
在线时间
18 小时
 楼主| 发表于 2021-8-24 16:09:02 | 显示全部楼层
修改tb.v内容时需要先End Simulation,否则出现以下无限个这个提示:
1629792452(1).jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 20:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表