请选择 进入手机版 | 继续访问电脑版

明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 180787|回复: 0

06_测试文件答疑【汇总贴】

[复制链接]
发表于 2020-8-18 16:30:32 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

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

x
温馨提示:明德扬2023推出了全新课程——逻辑设计基本功修炼课,降低学习FPGA门槛的同时,增加了学习的趣味性,并组织了考试赢积分活动
(点击→了解课程详情)http://www.mdy-edu.com/ffkc/415.html感兴趣请联系易老师:13112063618(微信同步)


【问题1】在测试文件中,初始化语句initial begin后面跟着的“#a”表示什么意思?
答:表示延时的时间,#3就表示延时3个时间单位,具体每个时间单位是多少,要看测试文件中的时间标尺的定义。

【问题2】这是出了什么问题?din输入的值出问题了?
1.jpg
答:这种情况的错误提示,如果是三态门(inout)管脚例化时,请按如下方法进行:如果是初级入门,可以看测试文件编写、和测试文件模板视频;
2、如果要提高,可以看测试文件训练等资料,里面包括随机数等产生方法;
3、如果更高级的,可以看高级测试技巧的公开课,该课程讲述了高级的测试文件,其主要是自动对比仿真的技巧。

【问题4】如何在测试文件中,读取TXT文档的数据?
答:integer r_file;
initial  begin
r_file = $fopen("../din_sim.txt", "r");
end
always@(posedge clk) begin
$fscanf(r_file, "%d", din);
end
上面就实现了将din_sim.txt里面的数据给到din的功能

【问题5】点拨教程的测试文件编号练习2中,提供的设计文件在哪里下载?
答:请看如下练习:03 测试文件的编写
http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=459
请看以太网测试文件部分,其中的baowen.v就是了
【问题6】 MDY测试文件里,很多信号开始时会有“#1”的延时,为什么?
答:这是为了避免时钟上升沿和信号上升沿同时出现,同时出现的话,在时钟上升沿就这个信号是0还是1(这种情况,实质的硬件电路是不会出现的)。

【问题7】在看波形时,部分信号只有“半个时钟周期”,是怎么回事?
答:仿真的时候,我们关注的是在上升沿的时候是0还是1,不关心测试信号是不是半个周期。
具体可看:时序逻辑影响计数器精度
http://www.fpgabbs.cn/forum.php? ... =707&fromuid=100782

【问题8】 1.jpg 2.jpg
答:情况1:该问题经常出现在仿真时添加了其他模块辅助仿真。
      例如:对于串口接收,我们在编写testbench仿真接收模块时,使用了串口发送模块来产生测试数据,而串口发送模块并不包含在Quartus 的RTL逻辑中,因此不会自动参与编译,无法得到仿真数据库;按键消抖时,设计了一个按键模型,该模型仅用作仿真,也不会被Quartus自动交付给Modelsim编译。
      解决方案:需要在设置NativeLink的时候手动添加该文件。如下图可以看到,我们设置时不仅添加了tb文件,还添加了key_model文件,这样Moselsim才会根据该设置去编译key_model文件。
3.jpg
       情况2:在做前仿真正常,在做后仿真的时候会遇到这个问题,这种情况主要考虑当前的工程中是否包含了该模块。
       例如一个二选一多路器的实验,因为误把testbench文件设置为了工程顶层文件,导致在后仿真时候因为没有对二选一多路器的逻辑内容进行全编译,导致找不到库,此种情况也出现在对IP核进行仿真测试的时候,例如FIFO、PLL、RAM等。
       解决方案:记得一定要将被测试的逻辑设置为quartus的工程顶层文件才能进行全编译得到时序网表文件,才能进行正常的后仿真。
【问题9】 testbench中,时钟延迟,比如#20后面加分号与不加分号,有什么区别呢?
答:效果是一样的。
      #20 a=1;表示延时20个单位后,a为1。
      
     #20;
      a=1;  表示延时20个单位。a为1。(注意中间标点符号不同。)



【问题10】repeat(40) clk=~clk就是产生40个周期的时钟信号吗?

答:每隔40个时间就取反一次,所以周期是80。

【问题11】仿真时如何通过参数例化缩短仿真的时间?
答:假设设计文件中有一参数TIME_1S=50000000,在仿真时,可以在测试文件中模块例化部分来修改这个参数,如下图所示
qq.png


top_mdyOneLed模块中的参数TIME_1S在仿真的时候,就会变成100


【问题12】
Modelsim仿真产生随机数

reg data;

data = $random % a; //产生从-a+1 ~ a-1 的随机数
data = {$random} % a; //产生从0到a-1的随机数


【问题13】当不符合“波形图规则”,或者对着代码,明明符合条件但就是没有执行的情况。
答:这由于信号的变化沿和时钟上升沿同时有效了。软件有时候会误认为是数据先变化然后时钟才变化,这是不符合实质情况的。
解决方法,在测试文件中,产生信号的那个initial里,先加1个单位的延时。如下图(目标是让en和clk的变化沿有差异):
微信图片_20201105132832.png
















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

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-3-29 16:42 , Processed in 0.051944 second(s), 23 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

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