在待观察的wire信号旁边加上/*synthesis keep*/;
wire [31:0] readdata /* synthesis keep = 1 */;
对于没有output的reg信号,Quartus在综合时也采用了最佳方式,因此,在SIgnalTap II中不能观察该信号。
解决方法:
对于reg信号则加/*synthesis noprune*/ 或者 /* synthesis preserve */
两者的不同之处在于:
/*synthesis noprune*/避免Quartus II优化掉没output的reg。
/*synthesis preserve*/避免Quartus II将reg优化为常数,或者合并重复的reg。
若是想观察整个模块中的reg信号,则在module之后添加/*synthesis noprune*/
module test(clk,rst,data)/*synthesis noprune*/ ;
0. 简介
在FPGA程序调试时,我们除了仿真还经常的会用到SignalTap进行板级调试,其可以真实有效的反应某些变量的变化,方便我们理解内在跳转,方便Debug的运行。SignalTap需要制定时钟,根据需求进行选择,其采样遵循奈奎斯特因采样定律。
我们在Debug中有时会经常遇到这样的情况,在SignalTap中并不能观察到所有的变量值。有些变量添加进入面板后会变红,这就表示SignalTap抓取不到此数值。出现这一现象的原因是,综合器在综合时对一些变量进行了优化,所以就显示不出来了。下文将针对两种变量类型,wire和reg来分别讲述如何让其正常的显示出来。这一部分的知识其实很简单就是,基本思想就是使用综合属性Synthesis Attribute来控制综合时的一些优化。

在FPGA程序调试中,SignalTap是常用的板级调试工具,但有时变量无法在SignalTap中显示,原因是综合器进行了优化。本文介绍了如何通过添加/*synthesiskeep*/、/*synthesisnoprune*/和/*synthesispreserve*/等综合属性,防止wire型和reg型变量在Quartus综合时被优化,确保它们在SignalTap中可见。这两种类型的变量有不同的处理方式,例如wire型使用(*keep*)或/*synthesiskeep*/,而reg型则使用(*noprune*)或(*preserve*),确保调试过程中能有效观察变量变化。
最低0.47元/天 解锁文章
515

被折叠的 条评论
为什么被折叠?



