Stratix和Cyclone架构EDA及学术开发功能描述
1.概述
本文是Stratix和Cyclone器件架构中各种所见即所得原语用户手册的部分内容。本文为设计者可以或者更详细的细节,确保在设计布线的时候能够更容易让设计布通。使得设计者更好、更合法地使用LAB、DSP等底层硬件模块。
2.坐标系统和位置约束
图1:Stratix坐标系统
图1是Stratix和Cyclone器件架构的坐标系统,只是注意图中有些模块中Cyclone系统中是没有的,比如M512 RAMs,M-RAM和DSP)。
将图1看成一个X-Y坐标系,那么左下方就是坐标原点,我们看到最小的格子都有一个(x,y)坐标表示,而有些大的格子可能横跨多个小格子,那么就由其左下方左边表示其位置信息。根据坐标,设计者可以为一个逻辑设计模块分配一个逻辑区域,一般都是矩形区域。
3.布线延迟与布线距离以及布线规则的关系
在Stratix和Cyclone器件中,没有严格的布线层次结构,所以布线延迟会随着“曼哈顿”距离而线性地增加。对于Stratix和Cyclone来说,走线速度由快到慢的顺序排列如下:
Stratix器件的水平布线资源大概是垂直布线资源的两倍,所以设计的时候可以考虑使用布局规划多使用大部分设计布线使用水平布线资源。而Cyclone的水平和垂直布线数量是一样的。
4.Netlist Recommendations
多数WYSIWYG原语的输入端口硬件上都有可编程取反(Programmable inversion)结构。(笔者注:此特性在笔者研究FPGA TDC设计时使用ECO修改设计中得到验证)。为了利用这种取反特性,如果电路设计需要可以直接在网表中将信号的补码链接到输入端口。例如,如果电路需要在下降沿触发寄存输入到一个LE,那么网表可以连接!clock到stratx_lcell的.clk端口。这种情况下,LE中的可编程取反硬件将会将时钟取反。如果不这么做,那么一个新的信号,nclock,将会产生,fitter会将这个新产生的时钟信号连接到LE的时钟端口.clk,来使用负沿触发寄存器。这种网表会导致额外的一个LE被消耗,从而导致资源的大量浪费,并带来更差的时钟偏斜(Skew)。下面三个Stratix Lcell使用实例,从好到差进行展示。
stratix_lcell good_cell {
.clk(!clock), // good way to make an inverted clock
...
stratix_lcell unneeded_inverter {
.dataa(clock),
.combout(nclock) // half of bad way to make an inverted clock
}
stratix_lcell bad_cell {
.clk(nclock), // bad way to make an inverted clock
...
当然也有一些WYSISYG原语输入端口没有可编程取反硬件(可参考Stratix LE所见即所得描述文档中的详细列表),所以这些端口无法直接使用输入信号补码连接到端口,所以必须额外使用一个LE来产生信号的取反逻辑。
大部分WYSISYG原语输入端口可以直接接GND或VCC。对于这样的端口,这样是最好的接法,而不是另外创建一个LE,使其输出为0或者1后再接到这些端口。当然有些端口不能直接接VCC和/或者GND,所以必须为这些端口额外创建一个LE来产生逻辑0或1输出到这些端口。
stratix_lcell make_preset_using_aload {
.aload(aloadsig),
.datac(VCC), // OK, but can’t connect .datac to GND directly
...
5.LE和LAB的Fitting规则
这一节主要列出了综合工具应该遵守的一些规则,如此才能确保一是所有逻辑单元都符合电路有效性,二是当所有逻辑单元能够被合法地综合进LAB,并保证其布通性。
5.1 单个LE规则
5.2 从链(Chain)到LAB
Altera器件的逻辑单元中含有丰富的链,这些链主要是以一个LE的cout驱动下一个LE的cin这样的进位链(Carry Chain),以及一个LE的regout驱动下一个LE的regcascin而形成的寄存器级联链(Register Cascade Chain)。
Stratix和Cyclone的LE基本架构是一样的,一个LAB都是由10个LE组成。而所谓的链的中LE都是一个紧邻一个。比如一个进位链的第一个LE位于一个LAB的第一个LE,那么进位链的第二个LE应该位于该LAB的第二个LE,那么进位链的第11个LE就必须布局到刚才那个LAB的下一个LAB的第一个LE,如图2所示。
图2:进位链连接
我们可以看到一个很明显的现象,进位链的这个特点使得链中的10个相邻LE,如果第一个LE被布局到一个LAB的第一个LE位置,那么链中所有10个LE就必须被布局到这个LAB中。需要注意的是,LAB之间没有寄存器级联连接,所以寄存器级联链的最大长度只能是10,否则将会导致一个不确定性no-fit。
还请注意的是,任何使用inverta信号并且依赖该信号(cin位置)的lutmask的进位链必须从某个LAB的第一个LE开始。因此这里就有了一个办法可以将一个进位链前10个LE分派到一个LAB,下10个LE分派到另一个LAB,依次类推。
5.3 LAB-wide信号限制
许多连接到LE的信号其实是所谓的“LAB-wide”信号,这些信号单独为LAB产生并可以由LAB内的逻辑共享。因此,在一个LAB布置的逻辑单元如果需要过多的LAB-wide信号将是非法的。由于链布局约束要求,必须将一组10个相邻LE放在同一个LAB中,所以综合工具在产生链的时候必须格外小心,确保链能放在合法的LAB之中。如果链无法被fit进一个LAB,那么Quartus会通过插入“feedthrough”逻辑单元,直到它能被fit进合法的LAB,然后插入feedthroug逻辑单元的这个方法,会降低电路速度同时增加电路的面积。所以最好的办法还是避免让综合器去处理这样非法的链。一个非常保守但却非常简单的可以用于综合器的规则是,假设一个链中的所有逻辑单元一起总共使用的LAB-wide信号数量不能超过一个合**AB所能提供的数量。如此确保了fitter将可能分派一个链进入合法的LAB而不用插入feedthroughs。
如果一个布局是由第三方布局工具通过位置约束得到并发送到Quartus,并且这个布局里的逻辑违反了LAB-wide信号限制,Quartus将会报告出一个no-fit(即Quartus将不会试图修复这个布局)。如果这个布局导入的时候通过“preferred location”方式,那么Quartus将会试图修复这个非法的布局。
在Stratix和Cyclone架构中,连接到LE端口.clk,.ena,.aclr,.aload,.sclr,.sload和.inverta的信号都属于是LAB-wide信号。
所以关键的是,了解一个给定类型的一组LE在一个LAB中到底需要多少个LAB-wide信号。一个LE的端口连接到一个“regular”信号一般消耗一个LAB-wide信号。同一个信号的取反,算作消耗一个独立的LAB-wide信号。所以,如果LAB中一个LE使用了clock,而另一个LE使用了!clock,那么就需要两个LAB-wide线来连接时钟。LE上连接到VCC和GND的端口也需要LAB-wide线。还有一种情况是LE某些端口处于悬空状态,这种unconnect情况可能需要LAB-wide线,也可能不需要,这取决于端口以及LE的配置。表1显示了LE中悬空端口的处理情况。
表1:LE悬空端口处理
下列所以规则都是表1定义的,重要的是统计被认为“used”但是却未连接信号的LE端口。
图3:时钟和时钟使能组合成LE时钟对
表2显示了一个时钟加时钟使能如何创建LE时钟对的例子。该例显示了两个LE的寄存器使用的两组时钟和两组时钟使能,clk(#1)和ena(#1)属于Logic Cell(#1),clk(#2)和ena(#2)属于Logic Cell(#2)。没有连接的.ena端口被配置为VCC,如表1指定那样。A,B,C和D对应信号网络。
表2:逻辑单元的时钟和时钟使能如何组成LE时钟的例子(.regout未连接)
表3:同步加载和同步清零端口使用情况举例
表4:合**AB布局和两个非法组合单元使用同步清零和同步加载举例
5.4 LAB控制信号可布通性约束
这里有一些规则可以确保LAB内所有必需的控制信号能被布局进这个LAB。任何连接到LE端口的信号网络(非VCC和非GND),如果其未使用全局布线资源,那么它布进LAB,需要占用LAB-wide输入端口。一个信号如果在LAB内正和负都被用到,那么该信号必须被布线两次。如果一个LE的一个端口连接(或者说可以如表1那样认为连接)到VCC或者GND信号,那么它可能需要也可能不需要占用LAB-wide输入端口,这取决于这个端口是否存在LAB-wide配合。最后,如果连接到.clk和.aclr端口的信号使用了全局布线资源,那么它们不需要LAB-wide输入端口,因为,在这种情况下,它们有一个专用端口进入LAB。表5显示了当一个LE的端口连接到一个信号或者连接(或者说可以如表1那样认为连接)到VCC或者GND时需要LAB-wide输入端口的情况。
表5:需要LAB-wide输入端口的情况
下面还列举的这些规则,是适用于根据表5需要LAB-wide输入端口信号的实例。例如,一个全局.aclr信号不应该计算在内,当评估下述原则的时候。
5.5 获得好的Fitting结果建议
图4:寄存器和查找表组合进LE选项
至于决定到底选择哪种方式来打包寄存器和LUT,应该基于出现的连接哪些是关键时序走线,以及考虑走线的布通性。请注意以下几点:
6.DSP Block
6.1 实例化一个DSP模块
6.2 估算DSP模块用量
6.3输入移位寄存器(Scan Chain)
6.4使用DSP Block和使用LE的比较
6.5Inferring DSP Block
6.6DSP WYSISYG规则
6.7 使用DSP Megafucntion的建议
6.4例子
文章评论(0条评论)
登录后参与讨论