首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Stratix和Cyclone架构EDA及学术开发功能描述

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来说,走线速度由快到慢的顺序排列如下:
  • 走线起始和终点位于同一个LAB
    • 从一个逻辑单元(LE)的组合逻辑输出到这个LE下方相邻位于同一LAB之中的LE的DATAD输入的布线是最快的(extra-fast)。所以从LE#0的.combout到LE#1的.datad的走线是一条超级快速的路径,fitter总是试图自动采用这种超快走线。
  • 走线终点位于起点紧挨的右侧或者左侧的LAB中。这种走线可以由一个LE直接驱动它邻近LAB的LAB line实现。
  • 延迟会随着曼哈顿(Manhattan)距离的增加而增加。对于曼哈顿距离一样的布线,布线的起点和终点位于同一行或者同一列那么会得到更小的布线延迟,因为这种走线没有从垂直到水平或相反的走线切换。Stratix中长距离走线延迟会比Cyclone增加的要慢一些,这是因为Cyclone只有R4和C4,而Stratix有R8、V8、R24以及C16。
Stratix器件的水平布线资源大概是垂直布线资源的两倍,所以设计的时候可以考虑使用布局规划多使用大部分设计布线使用水平布线资源。而Cyclone的水平和垂直布线数量是一样的。
4Netlist 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

...


5LELABFitting规则
         这一节主要列出了综合工具应该遵守的一些规则,如此才能确保一是所有逻辑单元都符合电路有效性,二是当所有逻辑单元能够被合法地综合进LAB,并保证其布通性。
5.1 单个LE规则
  • 当clk端口连接时,regout端口必须被连接或者sum_lutc_input=qfbk。(什么是QFBK,似乎是一种工作模式)
  • 当regout端口连接时,clk端口必须连接
  • 当aclr端口连接时,clk端口必须连接
  • 当sclr端口连接时,clk端口必须连接
  • 当sload端口连接时,clk端口必须连接
  • 当aload端口连接时,clk端口必须连接
  • 当sum_lutc_input=qfbk时,clk端口必须连接
  • 当sload连接时,datac端口必须连接
  • 当aload端口连接时,datac端口必须连接
  • Datac端口不能被取反,当它用于同步数据加载或者异步数据加载的时候。
  • Datac端口被直接设置为GND
  • 当ena端口连接时,clk端口必须连接
  • 关于cin端口
    • 只能被连接到另一个逻辑单元的cout端口
    • 不能被设置为VCC或者GND
    • 不能被连接到一个被取反的信号(比如!my_carry)
  • Cout端口要么被连接到另一个LE的cin端口,要么就什么也不接
  • 关于regcasin端口
    • 只能在register_cascade_mode=on的时候连接
    • 只能连接到另一个逻辑单元的regout端口的信号源上
    • 不能被设置为VCC或者GND
    • 不能连接到一个取反的信号
  • Cout端口只能在逻辑单元的operation_mode=arithmetic的时候才能被连接,而且是在operation_mode=arithmetic时候必须被连接。
  • Sload端口只能是在逻辑单元的synch_mode=on的时候才能被连接
  • Sclr端口只能是在逻辑单元的synch_mode=on的时候才能被连接
  • Inverta端口只能是在逻辑单元的cin和cout中的一个或两个被连接的时候才能被连接。这是Quartus II的一个软件限制,是为了防止极端不易fitting的情况发生。
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,依次类推。
返回列表