7.逻辑单元(Logic Cell)规则
7.1 对单个寄存器逻辑单元(lcell_ff)进行约束
7.2 对单个组合逻辑单元(lcell_comb)进行约束
8.ALM和LAB规则
本节讨论一下综合器应当遵守的规则,依据这些规则产生的逻辑单元才具有电气特性,逻辑单元组合进LE和LAB的时候才能形成合法的LAB可布通性。
8.1约束LABs的进位链
进位链概念省略。如图3所示的连续相连的灰色(偶数)lcell_comb可以组成进位链。长进位链跨多个LAB的时候必须从上一个LAB直接跨入紧邻的下一个LAB,只能从上到下连接。需要注意的是StratixII中的进位链连接时,sharein和shareout的是否连接是可选的。相对比较以前器件结构,在StratixII架构中创建一个非法的进位链是不可能的,因为lcell_comb和lcell_ff无法合并进同一个LE中。
进位链的起始位置总是固定在一些特定位置的carryin/sharein,fitter可以分配一个进位链从一个LAB的子坐标(sub-location)0或者16开始(因为只有这些子坐标位置才有进位链输入的tie-off。笔者注:什么是“tie-off”)。如果这对于某个特殊设计是一个很大的限制,那么fitter可以插入一个lecll_comb单元来为进位链创建一个固定的carryin/sharein作为该链的起始。这个增加的lcell_comb的所有其他输入端口都未连接(或者都连接到VCC或GND),而只连接carryout端口(shareout端口也可能连接)到另一个lcell_comb的carryin端口。使用这种技术,fitter可以将一个进位链放置在任何LAB子坐标。
长进位链跨多个LAB的时候必须从上一个LAB直接跨入紧邻的下一个LAB,只能从上到下连接。
Stratix II的ALM可以实现8输入的算术功能,如果某个使用了整个LAB中8个ALM的链很可能使得这个LAB没有足够的输入端口来实现该链。在这些情况下,fitter会自动将这个链分成小链,并将这些小链只fit进半个LAB。这些小链将使用下面介绍到的“early exit”和“late entry”模块完成LAB之间的连接。
被放置在LAB子坐标0、4、8、和12位置的链使得其可以从这个LAB的中间离开并从下一个LAB起始的子坐标0继续。这就是所谓的“early exit”模式。链从一个LAB末尾(即子坐标30)离开,使得其有可能从下一个LAB的中间(即子坐标16)进入。这就是所谓的“late entry”模式。Stratix II器件的LAB列只能交替地支持上述模式中的一种,即某个LAB支持哪种模式取决于该LAB的列位置。图6显示了上述内容。
fitter除了使用上述early exit和late entry模式来打开进位链以外,还会使用通用布线资源(即不使用专用的carryin和carryout连接)在LAB之间连接链。如果fitter这样做了,软件会给出一个相关警告信息。
图6:early exit和late entry跨LAB的进位链
8.2约束进位链到ALM
进位链意味着一组相邻的ALM被打包在一起,这样就需要满意的ALM设置。比如,进位链的第一个和第二个lcell_comb必须位于同一个ALM中,第三个和第四个必须位于下一个ALM中,等等。图7显示了ALM中的这些进位单元。
图7:聚合进位链进ALM
图7所示的进位链相邻进位单元必须遵守下列ALM合法规则:
2. 连接到lcell_comb端口dataa、datab和两个lcell_comb的datac的不同信号数目不能多于4个。这是因为这三个端口中的两个必须由这两个lcell_comb共享。个人觉得应该是dataa和datab在一个ALM中是由其中的两个组合逻辑单元共享,而datac应该上下有不同的datac端口。
图8显示了一个遵守规则2和一个不遵守的例子。合法的ALM有信号s1、s2、s3和s6连接到ALM的两个lcell_comb的端口dataa、datab和datac上,而非法的ALM有s1、s2、s3、s6、s7和s8六个信号连接到ALM的两个lcell_comb的端口dataa、datab和datac上。
图8:规则2合法和非法实例
8.3约束LAB-wide信号
好多连接到逻辑单元的信号叫做“LAB-wide”信号,这些信号单独为LAB产生并可以由LAB内的逻辑共享。因此,在一个LAB布置的逻辑单元如果需要过多的LAB-wide信号将是非法的。
上一节讨论的进位链,虽然进位自己不会有错,当进位链中每个逻辑单元要驱动寄存器单元的时候,这些进位链结构常常会导致比较差的fit结果。我们最好来看这样一个例子,假如一个长度为6的进位链(横跨3个ALM),进位链每个逻辑单元驱动一个寄存器,同时每个寄存器的使用不一样的时钟信号,那么进位链所在的这个LAB最多只能放入这些寄存器中的两个,因为每个LAB最多只支持两个不同的时钟信号。因此,这只会带来比较次优的布局结构,如图9所示。
在Stratix II器件中,连接到lcell_ff的clk,ena,aclr,aload,sclr和sload端口的信号都属于LAB-wide信号。一个lcell_ff端口连接到一个正常信号都消耗一个LAB-wide信号,同一个信号被取反后在LAB中使用也额外消耗一个LAB-wide信号。所以如果LAB中的一个lcell_ff使用clock,而!clock被另一个lcell_ff使用,那么将消耗两个LAB-wide信号。逻辑单元上连接到VCC和GND的端口也需要LAB-wide线。还有一种情况是逻辑单元某些端口处于悬空状态,这种unconnect情况可能需要LAB-wide线,也可能不需要,这取决于端口以及LE的配置。表3显示了lecll_ff中悬空端口的处理情况。
图9:过多LAB-wide被使用的时候地布局影响
表3:端口未连接时是否被认为“used”
下列都是表3定义的重要的规则,用于统计被认为“used”但是却未连接信号的寄存器端口。
l 同一个.clk信号和2个不同的.ena信号可认为是两个不同的寄存器时钟对
l 同一个.ena信号和2个不同的.clk信号可认为是两个不同的寄存器时钟对
图10:形成lcell_ff时钟的时钟和时钟使能组合
表4显示了一个时钟加时钟使能如何创建时钟对的例子。该例显示了三个的寄存器使用的三组时钟和三组时钟使能,clk(#1)和ena(#1)属于register Cell(#1),clk(#2)和ena(#2)属于register Cell(#2)。没有连接的.ena端口被配置为VCC,如表3指定那样。A,B,C、D,E和F对应信号网络。
表4:时钟和时钟使能如何组成lcell_ff时钟的例子(所有单元的.regout连接)
l 该LAB中所有使用aload的lcell_ff必须使用和第一个lcell_ff相同的aclr
l 该LAB中所有未使用aload的lcell_ff必须使用相同的aclr
l 一个lcell_ff使用sload和(或)sclr只能被放置在一个使用相同sload和(或)sclr或者不使用sload和(或)sclr的LAB中。
表4显示了sload和sclr组合是否被认为“used”的情况,表5则显示了sload和sclr组合被合法布局到一个LAB的例子。两个表中的A和B都是指非GND和非VCC的信号网络。
表5:当sload和sclr被认为“used”的例子
表6:lcell_ff使用sload和sclr的合法和非法组合
注:表5和表6中A和B均为非VCC和非GND的信号网络。
8.3LAB控制信号可布通性约束
这里有一些规则可以确保LAB内所有必需的控制信号能被布局进这个LAB。任何连接到逻辑单元端口的信号网络(非VCC和非GND),如果其未使用全局布线资源,那么它布进LAB,需要占用LAB-wide输入端口。一个信号如果在LAB内正和负都被用到,那么该信号必须被布线两次。如果一个逻辑单元的一个端口连接(或者说可以如表3那样认为连接)到VCC或者GND信号,那么它可能需要也可能不需要占用LAB-wide输入端口,这取决于这个端口是否存在LAB-wide tie-off。表7显示了lcell_ff的哪些端口连接到一个信号或者连接(或者说可以如表3那样认为连接)到VCC或者GND时需要LAB-wide输入端口的情况。
表7:VCC/GND需要布线进LAB的情况(*为不同于Stratix)
以下是一些重要规则,依据表7定义VCC/GND需要布线资源。
文章评论(0条评论)
登录后参与讨论