FPGA中有关Singal Tap仿真注意事项

对于仿真,大部分习惯用modelsim去仿真FPGA代码,但是注意到毕竟与真实环境有差异,用siganltap实物联合仿真,更有利于查到问题所在。但是在运用singaltap过程中,如果仅仅检测输入输出信号,可能不会出什么大问题,但是如何检测中间变量问题就来了。针对自己今天遇到相关问题,在这做个总结。

问题1:普通情况如何查找到所需要的信号。

大部分情况下,我们通常是采用如下操作选择想要的信号,如图1

                                                                                     图1 正常查找信号名称 

(1)首先我们点pin all 选项,找到所要管脚;

(2)然后点List,这个时候Nodes Found下方就会出现我们所需要的管脚;

(3)选中我们想要的管脚

(4)点>建添加过去。

 

问题2:  如果该信号不是输入输出管脚,而是中间变量,如何查询

往往很多时候要观察信号内部传输情况,此时选择pin类型将无法找到我们想要的信号,这时候就要更换类型,最好的一种方式,也是不管要搜索的是什么类型的变量,都可以适用的一种,如图2显示的all name选项。

                                                             图2 Design Entry(all name) 

如果选择这个选项后,再点击List按钮,则会出现原先没有出现的变量名。也就是该选项可以让所有任何一个你定义的变量,都显示出来。

问题3:工程过大,信号太多,如何快速定位

作为菜鸟的我来说,当选择了all name时,变量过多,工程文件过多,有时候几百个变量名中找那么一个,太麻烦。这个时候就要用到‘look in ’区域。如图3

                                                                                        图3 使用look in 所需寻找范围 

一般情况下,LOOK IN 的默认范围是从顶层文件开始往下覆盖,为了快速找到目标,我们可以在顶层文件范围下,再添加一个范围,从而缩小寻找范围。

问题4:为什么确定后的信号名字是红色的,或者运行时没有波形,数据一直是00h 

这个问题在一般情况下不会出现,很大可能出现的情况就是你要观察中间变量,如一个reg 一个wire变量上的数据,这个时候才会出现,意思是信息无效,最主要的原因是,singaltap在综合时,对该信号进行了优化,使得数值被忽略。下面提供解决方法(方法有很多,我这里就说一个,只是告诉自己以后就这么用了 反正效果一样,用一个就ok了):

如果你要观察一个wire型变量。那么你在定义这个变量后请如下操作:

 wire name/* synthesis keep */;

如果你要观察一个reg类型的变量,请如下操作:

(* preserve *)    reg    name;  //任意一个变量或者模块
 (* noprune *)    reg    name; //用于没有扇出的变量

我后来也去网上查了一下,有一个大佬总结了一个更完全的,在这我把他的链接附加上:

https://blog.csdn.net/weixin_30267785/article/details/96729139

 

总结

基本上,所以的问题都在这里了,如果后续还有别的问题发现了,继续更新。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值