刚刚看了一位师兄的关于SignalTap的日志,解决了以前的一些困惑,怕忘记在此记下来。曾经遇到过一个工程中加入SignalTap和去掉SignalTap编译后结果不相同,一直无法解释具体的原因,师兄的文章如下:
FPGA的资源是有限的。 riple
设计已经占用了可观的资源(%的LE,%的MB),signaltap还要和设计抢占资源。“抢占”在这里是很贴切的,既包括抢占LE、MB,还包括布局资源和布线资源。我把“抢占”造成的影响叫做“测不准原理”。这一原理是贯穿signaltap调试始终的一条基本原理。一句话来说,就是“对信号的观察会引入对信号的影响”。 riple
这些影响绝大部分表现不出来,或者是我没有刻意去观察;但是表现出来的影响是原有的设计功能发生了变化。有的变化是原有的bug不出现了(这应该看作是坏的变化),有的变化是新的bug出现了。 riple
据我分析,造成这些影响的可能原因有以下几个: riple
我解决上述矛盾的方法是尽可能少地添加被观察信号。我常用的几个方法是: riple
另外,采样时钟的选择对系统的整体时序影响也很大。选取的原则是: riple
第二个问题是关于增量编译的问题,师兄的解释如下:
增量编译是建立在Design Partition技术的基础之上的。Design Partition的目标是:源代码和约束没有变化的Partition是不需要重新编译和布局布线的。SignalTapII作为一个 Partition,由于其要观察的信号数量发生了变化,其重新编译和布局布线是不可避免的;但是设计的其他部分,作为被观察对象,是不需要重新编译和布局布线的,这样就有效地缩短了编译时间,并保持了原有设计的时序特性。SignalTapII的观察对象,可以有综合前、综合后、布局布线后三种基本网表,每一种网表由于其优化力度不同,其可被观察的信号数量和信号名称都是不同的。在包含SignalTapII的增量编译过程中,对布局布线后的网表中包含的信号进行观察是不需要对被观察的设计部分进行重新编译的,只有这样才能最大地发挥增量编译的效果;如果对其他两种网表进行观察,由于某些信号在布局布线过程中被优化掉了,要观察它们,势必要对被观察部分的设计重新进行布局布线并在布局布线过程中对这些原本被优化掉的信号加以保留,这样一来,增量编译就退化成了全编译,失去了增量编译的优势。
用户377235 2013-9-10 08:46