tag 标签: alm

相关博文
  • 热度 25
    2013-12-12 10:01
    2107 次阅读|
    2 个评论
    StratixII之EDA及学术开发功能描述 1.概述 同Stratix/Cyclone。 2.逻辑单元(Logic Cell)描述 在以前的架构中(比如Cyclone),单个LE包括一个组合逻辑和寄存器。对于Stratix II来说,组合逻辑和寄存器被单独分开到两个部分,原语创建的时候也不象Cyclone和Stratix那样,而是通过lcell_comb(组合逻辑部分)和lcell_ff(flip-flop/register)分别创建。这和CycloneII的情形有点类似。注意这里的flip-flop和register的意思可以互换。 图1显示了StratixII寄存器逻辑单元完整功能框图,它有八个输入,分别是datain、adatasdata、clk、ena、sload、sclr、aload和aclr,同时只有一个输出regout。 图1:Stratix II寄存器逻辑单元完整功能框图 图2显示了Stratixii组合逻辑单元完整的功能框图,它有八个输入端口,分别是dataa、datab、datac、datad、datae、dataf、sharein和cin,以及四个输出端口,分别是shareout、cout、sumout和combout。 图2:Stratix II组合逻辑单元完整功能框图 3.坐标系统和位置约束 图3:StratixII坐标系统 图3显示了Stratix II器件底层坐标系统,坐标标注和Stratix/Cyclone类似,这里不赘述。只是从CycloneII开始,根据上述LE的结构分析,可以直接单独给lcell_comb或者lcell_ff约束位置了。这在FPGA TDC设计中延时链锁定有一定好处,同时增加了具体的工作量,因为你必须分别约束组合逻辑阵列和寄存器阵列。 可以看到M-RAM占了很大一块,一个基本坐标单元是一个LAB的位置大小。那么一个M-RAM占据的位置相当于3x4=12个LAB的面积。每个LAB有(x,y)坐标,而其内部的lcell_comb和lcell_ff又有子坐标,比如lcell_comb_X2_Y5_N4。ALTERA的意思是不建议这样按数字从上到下约束组合逻辑单元或者寄存器单元的位置,因为这样常常给fitter来麻烦,最好的办法是仅仅约束LAB的位置。 4.布线延迟与布线距离以及布线规则的关系 略,同CII 5.Netlist Recommendations 略,同II。但是由于逻辑单元端口有差别,所以表1的内容和CII有区别。 表1: 6.综合概览和优化 6.1 ALM和LAB的相关描述 第二节描述了Stratix II器件使用的基本逻辑单元,Quartus II开发软件将这些逻辑单元打包进两种结构,即ALM和LAB。这两种结构除了单独逻辑单元自己的限制外还有一些额外的限制。后面我们将讨论这些限制规则。 一个ALM(Adaptive Logic Module)包括最多2个lcell_comb模块和2个lcell_ff模块,如图4所示。Note that not all positions in an ALM need necessarily be populated with a logic cell for theALM to be valid. 图4:一个ALM中的逻辑单元(Logic Cell) Stratix II的一个LAB中有8个ALM,所以一个LAB中有32个逻辑单元(Logic cell)(16个lcell_comb和16个lcell_ff)。如图5所示,32个单元组成了一个LAB,灰色的为lcell_comb,白色的为lcell_ff,每个虚线框表示一个ALM,如前所述,位置信息显示是ALM的可能位置信息,用户逻辑电路并不一定在fit后会使用到。 注意图5中灰色所示的所有lcell_comb位置标号都是偶数,而白色所示的lcell_ff位置标号都是奇数,这些信息用户在ChipPlanner或者资源属性编辑器中看得到。如果我们要约束lcell_comb和lcell_ff位置,那么如图3所示找到这些逻辑单元所在的LAB坐标,然后确定该逻辑单元的位置,比如将一个lcell_comb进行位置约束如lcell_comb_X4_Y6_N0,就是将其约束位于图5所示ALM#1中,将一个lcell_ff进行位置约束如lcell_ff_X4_Y6_N7,就是将其约束位于图5所示的ALM#2中的第二个寄存器。 图5:Stratix II器件中的LAB 6.2 测量综合面积质量 因为组合逻辑单元(lcell_comb)可以以不同的方式组合起来,形成ALM,所以测量综合面积不是单单象统计创建的逻辑单元那样简单。从面积角度来看,当fitter争取最大密度努力时,综合将创建最少的ALM和LAB。我们来看一个很简单例子,80个6输入lcell_comb单元可能要消耗80个ALM(因为一个ALM只有在满足LUT掩码要求的情况下才可能实现两个6输入函数),而100个4输入lcell_comb仅消耗50个ALM(因为一个ALM总是包含2个四输入函数)。从电路面积角度来说,消耗最小面积的综合效果是最好的。 在Altera提供的quartus.ini文件中,包含这样的信息“fit_pack_for_density=on”和“fit_report_lab_usage _stats=on”,这些都将允许精确的面积估算。当这些变量使用的时候,Quartus II软件将试图通过Packing逻辑单元(Logic Cell)进ALM和LAB来达到最小化面积,特别是同时可以接受Fmax有很小幅降低的时候。Quartus II软件同时会给用户打印以下信息: Info: Number of LABs at the end of packing: 100 Info: Number of LEs at the end of packing: 1600 来说明当它fit电路的时候,最小的ALM和LAB使用量。当然当综合算法中的最大电路速度被执行,那么Quratus II软件运行的时候不带上述变量。 最好的办法是在工程的qsf文件中添加以下的编译设置: set_global_assignment –name INI_VARS "fit_pack_for_density=on;fit_report_lab_usage_ stats=on” 注意上述约束行中的引号中不能包含任何空格。 6.3获得好的面积及性能建议 通常来说,最好是使用6输入函数来减少电路深度从而提高电路的性能。在那些不影响电路深度的情况最好是使用6输入函数,这些情况有,如果6输入函数能节约多于两个5或者更少输入函数,或者ALM的掩码支持2个6输入函数。 6.4获得好的Fitting结果建议 1. 使用lcell_ff的.sclr应当慎重,Cyclone II架构中一个LAB最多只有一个.sclr 。不恰当地使用这个端口,会大幅降低逻辑资源利用率、fitting通过的可能性以及电路速度。举个例子,过去常常在一个逻辑单元里使用.sclr 端口来产生一个5输入函数,如此在实现这个电路的时候可以减少逻辑单元的数量,因此从一个综合角度来看这也许是一个好主意。但是,一旦这个lcell_ff使用了.sclr,那么这个lcell_ff所在的LAB一般无法将其它寄存器逻辑单元打包(Pack)进来,除非这些寄存器逻辑单元都使用同样的.sclr值或者它们的synch_mode=off。这可能在最坏情况下导致逻辑密度大量减少,因为只有一个lcell_ff可以被放置在一个LAB中,而不是16个。所以无原则地使用.sclr会导致非常坏的fitter结果和电路速度,因为fitter在这种情况将lcell_ff组合进LAB的灵活性非常小。 .sclr应该只有在用户电路中实现同步清零的时候才被使用,因为在这种情况下同步清零信号一般产生非常大的扇出。因此,fitter一般不会过分约束同步清零信号。.sclr端口也可以审慎地用于实现其他中等扇出信号,用来减少逻辑单元的使用量。 2.         上述原则同样适用于.sload 端口。同步加载应当会产生高扇出。 3.         时钟使能(.ena)使用起来相对有点宽松,因为每个LAB允许有三个不同的.ena值,这比只有一个.ena值大大提高了fitter应对多.ena值情况的能力。不过,过多的时钟使能(.ena)使得获取高逻辑利用率非常困难。我们发现电路如果使用成千上万的时钟使能,APEX通常往往逻辑利用率只能达到90%。更谨慎地使用时钟使能,常常能达到99%的逻辑利用率。因此,注意限制不同.ena信号的数量(尤其是低扇出信号)还是值得的。Stratix II比之前器件多出一个时钟使能端口,所以相对要宽松。 4.         到LAB的总的布线信号是44个(不包括cin和LAB内逻辑单元生成的信号),所以为了更好的布通性,最好使用不超过38个不同的信号布线到同一个一个LAB(不包括clk和aclr,它们可以使用全局资源)。 5.         Fitter将会在需要的时候将lcell_comb单元和lcell_ff单元“打包”一起放入一个ALM中。如此,综合阶段没有必要将二者放在一起。然而,需要注意的是单元创建的时候不要对fitter打包lcell_comb和lcell_ff进同一个LE产生不利影响。 6.         如图4所示的ALM总共包括2个lcell_comb和2个lecll_ff,表2显示了除了逻辑单元自己的限制外的lcell_comb单元组合到一个ALM的一些限制。该表并没与显示出每一种可能的lcell_comb组合,详细的情况可以查看Stratix II的LCELL所见即所得相关文档。 表2:聚合lcell_comb进入ALM的限制情况 Lcell_comb类型选择没有意义,只有当使用6输入函数有明确的优势的时候可以采用,比如需要减少电路深度或者电路面积的时候可以选择使用6输入函数。如果没有严格限制一定要使用6输入函数,最好使用更小输入函数,因为如上表所示,输入端口越少,限制也越少。 7.逻辑单元(Logic Cell)规则 7.1 对单个寄存器逻辑单元(lcell_ff)进行约束 1.如果clk端口连接,那么regout端口必须连接 2.如果sclr端口连接,那么clk端口必须连接 3.如果sload端口连接,那么clk端口必须连接 4.如果ena端口连接,那么clk端口必须连接 7.2 对单个组合逻辑单元(lcell_comb)进行约束 1.Cin端口不连接,要连接必须连接到GND或者连接到另一个lcell_comb的cout端口。如果一个lcell_comb的cin连接到另一个lcell_comb的cout端口,那么该lcell_comb使用的时候其SUMOUT或COUT一定要受到cin端口的影响。 2.Cout端口必须根据上一条连接,或者保持不连接 3.Sharein端口可能被连接只有当cin被连接且该lecll_comb的参数shared_arith = on。 4.如果sharein连接,它可以连接到GND或者必须由驱动本本lcell_comb的cin端口的lcell_comb的shareout驱动 5.Shareout端口只有在cout端口连接的时候才能被连接 6.当shareout端口连接的时候,它必须驱动被本lcell_comb的cout驱动的同一个lcell_comb的sharein端口 7.如果cout/cin连接,但是sharein/shareout没有连接,那么只有dataa,datab,datac,datad和dataf输入端口可以使用。 8.如果参数shared_arith =  on(即sharein/shareout连接),那么只有dataa,datab,datac,datad和dataf输入端口可以使用,dataf端口只影响该lcell_comb的组合逻辑输出,即combout。 9.在一个lcell_comb中,如果一个输入连接有信号,但是该信号依据LUT掩码没有影响至少一个输出,那么这是违法的,作为规则,Quartus II软件将Disconnect这个输入。 10.LUT掩码依赖一个没有任何信号连接的输入端口也是不合法的。 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合法规则: 1.它们必须处于相同的共享算术模式(即两个进位单元要么sharein/shareout都连接,要么都不连接)。需要注意的是链中不同ALM的LUT可以毫无限制地配置成shared或者non-shared模式,只要同一个ALM中的LUT配置成相同的模式即可。 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”但是却未连接信号的寄存器端口。 1.所有lecll_ff上的.clk和.ena信号都成对地组成LE时钟,如图10所示。在任何LAB中,可以有不超过2个不同的时钟对。 l  同一个.clk信号和2个不同的.ena信号可认为是两个不同的寄存器时钟对 l  同一个.ena信号和2个不同的.clk信号可认为是两个不同的寄存器时钟对 图10:形成lcell_ff时钟的时钟和时钟使能组合 2.最多只有两个不同的时钟信号可以连接到clk端口 表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连接) 3. 最多2个不同的信号可能被连接到.aclr端口。(从表2,未连接的.aclr将会认为是连接到GND) 4. 最多只有一个不同的信号可以连接到aload端口 5. 如果任何LAB中的一个lcell_ff使用了alod端口,那么: l  该LAB中所有使用aload的lcell_ff必须使用和第一个lcell_ff相同的aclr l  该LAB中所有未使用aload的lcell_ff必须使用相同的aclr 6. 最多只有一个不同信号能被连接到.sload端口,最多只有一个不同信号能被连接到.sclr端口 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需要布线资源。 1.下面这些不同信号最大数目只能是6个 l  Clk(非全局) l  Ena l  Aload l  Sload l  Aclr(非全局) l  Sclr 2. 下面这些不同信号最大数目只能是5个 l  Ena l  Aload l  Sload l  Aclr(非全局) l  Sclr 3. 下列信号最多只能有3个不同:This is due to the fact that sload steals a non-global clk line. l  ena l  aload 4. 下列信号最多只能有2个不同:This is due to the fact that sload steals a non-global clk line. l  clk(非全局) l  sload 5. 下列信号不同组合最多不超过3,这是因为非时钟和非aclr全局信号必须通过普通LAB线布进LAB,同时连接全局走线和LAB线是有限制的。 l  Ena(global) l  aload(global) l  sload(global) l  sclr(global)
  • 热度 18
    2013-12-8 11:13
    1821 次阅读|
    1 个评论
            在FPGA TDC设计的时候遇到一个问题,即逻辑单元的输入端口似乎被取反了。根据前面博文对所见即所得的简单展示,使得我们了解到了ALTERA器件逻辑单元某些输入端口确实包含了这种自动可编程取反的硬件结构。这里我将给出一个具体实例来为大家展示这种特性。 图1:算术模式下DATAF进入ALM的路径         图1显示了当ALM被配置为算术模式时,输入信号从ALM的DATAF端口进入ALM的路径,如图中右边绿圈所示,同时图中中间红圈所示为组合逻辑输出。一般ALM配置为normal模式的时候只有这种组合逻辑输出,只是这里的combout等式为N/A,也即其没有fan out。   图2:ALM属性窗口         图1和图2都是我们可以在资源属性编辑器里看到的内容,图2显示了图1中ALUT的属性(即半个ALM)。         图2所示的属性栏中的F0和F2 LUT等式,居然同样为“!d”。而图1所示的F0 LUT的输出作为加法器一个输入,同时图中我们可以看到F0 LUT的输入只有DATAD有信号连接,所以其输出也只是与DATAD有关,对应Sumout和Carryout等式中的“D”项。同理,观察DATAF位于绿圈的路径,尽管其没有“直接输入”到F2 LUT,但是此时DATAF就是F2 LUT的唯一输入,并且F2 LUT的输出作为加法器的另一个输入,对应Sumout和Carryout等式中的“!F”项。        根据上述分析,DATAE和DATAF虽然没有作为F?LUT的直接输入,但是F2和F3 LUT和其后面的3输入模块构成了ALUT的下面的那个4输入LUT。          图1显示了一个非常简单加法器例子,DATAF和DATAD直接作为加法器的两个输入,尽管DATAF被取反了,图中黄圈模块就是取反。另外,信号在ALM端口处是不是首先被取反了?!如图1所示的F0 LUT的等式为!d,输入为DATAD,F0 LUT到加法器直接是直通,中间并没有额外的取反器,为何SUMOUT表现为“D”呢,所以推断信号在端口处已经被“取反”,从属性编辑器可以找到很多例子来印证上述猜测。    
  • 热度 25
    2013-4-8 12:10
    8383 次阅读|
    0 个评论
    ECO那些事之LE与ALM 王敏志 概述   这里继续《ECO那些事之属性编辑器》一文,描述下如何在属性编辑器里对LE以及ALM进行手动修改。重点比较一下LE与ALM在属性编辑器中的区别,通过这些比较就可以很容易地理解为何在ALTERA的高端FPGA中实现TDC功能的难度要比其低端器件高很多。 在《基于FPGA的TDC那些事之设计资源LAB》一文中对于ALTERA高低端器件组成LAB不同的单元LE和ALM进行了介绍,同时也作了比较。本文笔者希望站在ECO处理角度再次进行比较介绍LE和ALM。   LE在属性编辑器中概览   在《ECO那些事之属性编辑器》一文中,有一节详细描述了LE的属性,由于笔者主要使用ECO修改TDC设计,所以这里重点关注LE的算术模式。在算术模式下,LUT可以理解为两个三输入子LUT。第一个三输入子LUT产生相加“和”信号输出,第二个子LUT用于产生进位输出信号。当LE配置为算术模式时,用户不仅能更改SUM方程式,还可以修改CARRY进位方程式。如图1所示,右侧的SUM等式和Carry等式都是可修改的,当然也可以通过修改SUM和Carry LUT掩码来自动更新等式。 从图1可以看出,虽然LUT分成了两个子LUT但是求和输出(Sumout)只与LUT(注意与LE的区别)的输入有关,这个从图左侧的视图或者右侧的SUM等式都可以清楚看到。这点是LE与ALM最大的区别,后面详述。 图1:配置成算术模式LE属性编辑器概览 另外,注意图1右侧等式里的符号“#”和“$”,在《ECO那些事之属性编辑器》一文中已经对其所代表的涵义进行了推导,理解其含义对于利用ECO修改LE和ALM很重要。为了便于比较,图2给出的是当LE配置为Normal模式下时,其属性编辑器的概览。可以看到,左侧只有一个LUT,而右侧的Carry掩码以及Carry等式均为“N/A”状态。 图2:配置成Normal模式LE属性编辑器概览   ALM在属性编辑器中概览   ALTERA的宣传资料在介绍ALM的时候通常如《基于FPGA的TDC那些事之设计资源LAB》一文中图3那样进行简单介绍。ALM的工作模式比LE多出了几个,其实主要模式还是Normal和算术模式。图3所示为ALM的Normal模式。 图3:Normal模式下的ALM 如果只看图3,似乎和图2的LE没什么太大区别(多个LUT,及LUT的输入更多),其实除了图3表面的这些区别之外,如果深入到属性编辑器可以发现更多细节的不同处,如图4所示。 图4:配置在Normal模式下ALM属性编辑器概览 虽然Normal模式不是本文的重点,但是这里还是有必要比较并列举出图2和图4的主要差别点,有些差异在算术模式下一样。 l  ALM包含2个ALUT,所以属性栏分别包含TOP和BOTTOM两栏 l  ALM的属性编辑器里属性栏没有显示当前察看的ALM的工作模式 l  每个ALUT被分为3个子LUT,上面的分别为1个F0 LUT和2个F0 LUT,下面分别为1个F1 LUT和2个F3 LUT l  ALM内包含有2个加法器,不象图1中的LE需要LUT自己实现加法功能 l  多出端口DATAF、DATAE,以及这两个端口和其它端口在ALM内部路径是有区别的 l  端口DATAD也和LE有些许区别 上面列举的这些差异,都是造成ALTERA高端FPGA器件中实现TDC功能难度增大的原因。那么,逻辑实现TDC功能,还是需要利用逻辑单元的算术模式,其在属性编辑器中概览如图5所示。 图5:配置在算术模式下ALM属性编辑器概览 比较图4和图5,明显区别是ALM中的加法器以及寄存器都被利用起来了,而且右侧的属性栏里多了有关register的两项。 利用属性编辑器手动修改ALM 在《ECO那些事之属性编辑器》一文里也举了几个利用属性编辑器简单的修改ALM例子,特别是在推导符号“#”和“$”功能的时候。笔者这里首先给出的一个例子是对《ALTERA FPGA/CPLD设计 – 基础篇》中关于属性编辑器一段描述的存疑。在该书的第179页的表5-1中列出了LUT掩码真值表。图6给我们展示了实际输入DATAD和DATAC的真值,即分别为“FF00”和“F0F0”,那么DATAA和DATAB的真值也很容易知道,这和该书籍上的描述不一致,该书将ABCD正好弄反了。 图6:LUT输入真值 接下来,我们注意虽然ALM有8个输入,但是每个子LUT的方程式只能包含A、B、C和D,不能包含F0 、F1、E0和 E1,而Sumout方程式和Carryout方程式中可以包含,而我们知道这两个方程式不能直接进行修改。 图7:修改前ALM上半部分 图7是图6对应的ALM原理视图,三个子LUT的输入只有DATAC和DATAD,这和图6中的求和及进位方程式相符。如果我们要把DATAC移到DATAF,会发生什么呢?如图8所示,我们发现这时候QuartusII并没有自动更新LUT掩码以及方程式。这时候如果使用ECOs得到的结果是不对的,因为方程式中使用的DATAC根本没有任何连接。所以还需要手动修改LUT方程式,使得Sumout方程式由SUM((!D)+(!C))+(!VCC)变成SUM((!D)+(!F))+(!VCC),同样的Carryout方程式也会得到自动更新。注意这里的目的不是要改变逻辑功能,只是简单将DATAC上的信号移到DATAF(这点在以后的TDC设计中非常重要,因为我们不是要改变功能,而是要改变路径,即信号path)。 图8:只是将DATAC移动到DATAF 那么应该修改那个子LUT方程式呢,分析图8,应该是修改F2子LUT方程式,但是怎么修改呢,经过尝试,发现修改方程式到“!d”即可,如图9所示,修改F2子LUT方程式导致其他方程式及掩码得到了自动更新。至于为何是“!d”还未搞清楚,反正是跟DATAD有关系。 图9:修改子LUT方程式并自动更新求和及进位方程式 上面这个例子充分回答了之前笔者所说的上述ALM与LE的差异会如何导致实现TDC功能难度的增加,同时这个例子也揭示了我们应该如何在高端FPGA中正确的进行TDC设计。   分析及结论   本文在属性编辑器的角度进一步比较了LE和ALM的异同,给普通客户揭开了一个小缝隙,使其可以了解ALTERA的编译工具是如何对逻辑单元进行布局布线的。学习ECO修改设计,从而确保TDC在高端FPGA器件成功实现。
相关资源
  • 所需E币: 3
    时间: 2019-12-25 17:23
    大小: 403.01KB
    上传者: quw431979_163.com
    SelectableIOStandardsinArriaGXDevices……
  • 所需E币: 4
    时间: 2019-12-25 16:03
    大小: 1.73MB
    上传者: 2iot
    40-nmFPGAPowerManagementandAdvantagesWhitePaper40-nmFPGAPowerManagementandAdvantagesThe40-nmprocessoffersclearbenefitsoverpriornodes,includingthe65-nmnodeandthemorerecent45-nmnode.Oneofthemostattractivebenefitsishigherintegration,whichenablessemiconductormanufacturerstopackgreaterfunctionalityintolessphysicalspaceatlowercosts.Althoughincreaseddensityandperformancearevaluablebenefits,oneofthemostpressingdesignconsiderationsfortoday’ssystemdevelopersispowerconsumption.Toreducepowerconsumption,processingtechniquesgoonlysofar.Smallergeometriesprovidetheaddedbenefit……