VHDL高级设计技术何宾2008.09第5章VHDL高级设计技术-本章概要本章首先介绍基于Xilinx芯片的HDL高级设计技术。在高级设计技术中主要对提高HDL性能的一些设计方法进行了比较详细的介绍,其中包括逻辑复制和复用技术、并行和流水技术、系统同步和异步单元、逻辑结构的设计方法和模块的划分原则。本章也对IP核技术进行了比较详细的说明和介绍,其中包括IP核分类、IP核优化、IP核生成和IP应用技术。这部分虽然在本书中的篇幅不是很多,但是内容非常重要,读者在学习该部分内容时要仔细的领会。第5章VHDL高级设计技术-VHDL代码风格VHDL代码风格是指两个方面的内容:一方面是VHDL语言描述规范,即在使用VHDL语言描述逻辑行为时必须遵守VHDL语言的词法和句法规范,该描述风格不依赖于EDA软件工具和可编程逻辑器件PLD类型,仅仅是从VHDL语言出发的代码风格;另一方面则是VHDL语言对于一特定逻辑单元的描述,即用VHDL语言的哪一种描述风格进行逻辑行为描述,才能使电路描述得更准确,布局布线后产生的电路设计最优,该描述风格不仅需要关注EDA软件在语法细节上的差异,还要紧密依赖于固有的硬件结构。第5章VHDL高级设计技术-VHDL代码风格从本质上讲,使用哪种描述风格描述电路的逻辑行为,主要取决于两个关键问题:1、速度和面积问题;2、功耗问题;第5章VHDL高级设计技术-VHDL代码风格首先,先说明速度和面积问题。这里的“面积”主要是指设计所占用的FPGA逻辑资源数目,即所消耗的触发器和查找表数目。“速度”是指在芯片上稳定运行时所能够达到的最高频率。面积和速度这两个指标始终贯穿着PLD的设计,是评价设计性能的最主要标准。第5章VHDL高级设计技术-VHDL代码风格面积和速度呈反比关系。如果要提高速度,就需要消耗更多的资源,即需要更大的面积;如果减少了面积,就会使系统的处理速度降低。所以在设计中不可能同时实现既显著提高PLD工作频率,又显著减少所占用PLD的逻辑资源的数目。第5章VHDL高级设计技术-VHDL代码风格在实际设计时,需要在速度和面积之间进行权衡,使得设计达到面积和速度的最佳结合点。本章介绍通过采用逻辑复制和复用技术、并行和流水线技术、同步和异步电路处理技术、逻辑结构处理技术等方法,在速度和面积之间进行权衡,达到最佳的性能和资源要求。第5章VHDL高级设计技术-VHDL代码风格其次,说明功耗问题。随着PLD工作频率的显著提高,功耗成为一个引起EDA设计人员密切关注的问题。由于PLD工作频率的提高,逻辑单元的切换频率也相应提高,相应的会引起PLD功耗增大。这样就存在着频率和功耗之间的矛盾,因此必须在逻辑单元的切换速度和功耗之间进行权衡,通过合理的设计,减少逻辑单元不必要的切换,这样可以在一定程度上降低功耗。第5章VHDL高级设计技术-扇出扇出是指某一器件的输出驱动与之相连的后续器件的能力。众所周知,一个器件的扇出数是有限制的。扇出数目越多,所要求的驱动能力越高。在PLD芯片内,如果一个逻辑单元的扇出数过多的话,会降低其工作速度,并且会对布线造成困难。因此,在PLD逻辑资源允许的情况下,要尽量降低扇出数。第5章VHDL高级设计技术-逻辑复制逻辑复制是通过增加面积而改善设计时序的优化方法,经常用于调整信号的扇出。如果信号具有高的扇出,则要添加缓存器来增强驱动能力,但这会增大信号的时延。通过逻辑复制,使用多个相同的信号来分担驱动任务。这样,每路信号的扇出就会变低,就不需要额外的缓冲器来增强驱动,即可减少信号的路径延迟。第5章VHDL高级设计技术-逻辑复制通过逻辑单元的复制,减少扇出数,可以解决下面两个方面的问题:减少网络延迟;多个器件分布在不同的区域,这样可以大大降低布线阻塞情况的发生。在使用增加器件减少扇出数目的时候,必须要注意的是,如果是异步单元的话,必须对该单元进行同步处理。第5章VHDL高级设计技术-逻辑复制DQfn1DQfn1DQfn1第5章VHDL高级设计技术-逻辑复用技术逻辑复用是指在完成相同的功能下,尽量减少所使用的逻辑单元的数目。这样在不影响设计性能的情况下,可以降低资源的使用。下面通过一个乘法器的例子来说明这个问题。第5章VHDL高级设计技术-逻辑复用技术BA1BXXA0SELA1BXA0SEL先乘后选择的结构先选择后相乘的结构第5章VHDL高级设计技术-逻辑复用技术先选择后乘法的结构,在实现这样一个功能时需要使用两个乘法器和一个选择器,对该结构进行观察可以发现,在该设计中被乘数都是B,只有乘数是不一样的,那么可以在不影响该设计实现的功能的前提下,可以考虑将系统改为先选择后相乘的结构采用该结构,在实现相同功能的前提下,所使用的乘法器数目由2个减少为1个。从该设计可以看出,在进行设计时,如果对设计进行优化,很多的功能都可以通过逻辑复用技术,提高设计效率和减少逻辑资源消耗量。第5章VHDL高级设计技术-并行处理技术串行设计是最常见的一种设计。当一个功能模块对输入的处理是分步骤进行的,而且后一步骤只依赖于前一步骤的结果时,功能模块的设计就需要采用串行设计的思想。并行处理就是采用几个处理流程同时处理到达的负载,提高处理的效率。并行处理要求这些处理任务之间是不相关的,彼此之间是不互相依赖的,如果存在相互依赖就很难用并行处理的方法。第5章VHDL高级设计技术-并行处理技术模块1模块2模块3模块4模块1模块1模块1模块1第5章VHDL高级设计技术-并行处理技术下面以一个复杂的乘法运算为例,说明并行处理技术的使用。首先给出该运算的数学表达式,下图给出了实现该功能的并行结构(该结构由XST综合工具给出。通过使用多个乘法器,使得四个乘法运算可以同时进行,但是需要注意的,这种速度的提高是以面积为代价的。11111100babababay第5章VHDL高级设计技术-并行处理技术XXXX+++a0b0a1b1a2b2a3b3第5章VHDL高级设计技术-并行乘法加法的HDL描述[例5-2]乘法加法运算的实现则用VHDL语言描述如下:Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Useieee.std_logic_arith.all;Entitymult_addisPort(clk:instd_logic;a0,a1,a2,a3:instd_logic_vector(7downto0);b0,b1,b2,b3:instd_logic_vector(7downto0);y:outstd_logic_vector(15downto0));endmultadd;第5章VHDL高级设计技术-并行乘法加法的HDL描述architecturebehavofmult_addisbeginprocess(clk)beginifrising_edge(clk)theny=((a0*b0)+(a1*b1)+(a2*b2)+(a3*b3));endif;endprocess;endbehav;第5章VHDL高级设计技术-流水线设计技术的使用采用这样的流水线设计从宏观上来看平均每一个事件的处理时间为一个单位时间。流水线的设计要求事件所分成的这n个步骤的处理时间是相同的,以保证流水线不会因为处理时间的不同而发生阻塞,见图5.2.2.3。第5章VHDL高级设计技术-流水线设计技术的使用采用流水线设计的好处实在不提高系统运行频率的情况下,能够获得更好的处理效率。受制造工艺的影响,提高系统频率将会增加后端制造的难度。同时由于需要使用更先进的制造工艺,以及产品频率的下降,将会带来产品成本的提高。第5章VHDL高级设计技术-流水线设计技术的使用如果假设在串行设计中系统处理效能正比于系统运行的频率,那么对于流水线设计,在不提高系统运行频率的情况下,n级流水线的处理效能可以用下面公式来描述:处理效能=系统运行频率×流水线级数第5章VHDL高级设计技术-流水线设计技术的使用由此可见,在不提高系统运行频率的情况下,提高流水线的级数将成倍地提高系统处理的效能。但是流水线的设计也是有一定的限制的:(1)只有对那些能分成n个步骤完成,并且对每个步骤都需要固定相同处理时间的操作来说才能采用流水线设计;第5章VHDL高级设计技术-流水线设计技术的使用(约束)(2)受硬件资源的限制,流水线的级数是有限制的;(3)对于存在处理分支预测流水线的设计(广泛应用于微处理器的设计中),流水线的处理效能还要取决于分支预测算法的设计。第5章VHDL高级设计技术-流水线设计技术的使用流水线能动态地提升器件性能,它的基本思想是对经过多级逻辑的长数据通路进行重新构造,把原来必须在一个时钟周期内完成的操作分成在多个周期内完成。第5章VHDL高级设计技术-流水线设计技术的使用这种方法允许更高的工作频率,因而提高了数据吞吐量。因为PLD的寄存器资源非常丰富,所以对PLD设计而言,流水线是一种先进的而又不耗费过多器件资源的结构。但是采用流水线后,数据通道将会变成多时钟周期,所以要特别考虑设计的其余部分,解决增加通路带来的延迟。第5章VHDL高级设计技术-流水线设计技术的使用(特点)流水线的基本结构是将适当划分的N个操作步骤串连起来。流水线操作的最大特点是数据流在各个步骤的处理,从时间上看是连续的;其操作的关键在于时序设计的合理安排、前后级接口间数据的匹配。如果前级操作的时间等于后级操作的时间,直接输入即可;如果前级操作时间小于后级操作时间,则需要对前级数据进行缓存,才能输入到后级;如果前级操作时间大于后者,则需要串并转换等方法进行数据分流,然后再输入到下一级。第5章VHDL高级设计技术-流水线乘法器的VHDL描述首先给出流水线乘法器的结构图。从图中可以看出,该流水线乘法器,在每个时钟节拍下,均可以得到一个乘法结果的输出,乘法器的效率大大增加。AB×Mult第5章VHDL高级设计技术-流水线乘法器的VHDL描述libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;entitymultipliers_2isgeneric(A_port_size:integer:=18;B_port_size:integer:=18);port(clk:instd_logic;A:inunsigned(A_port_size-1downto0);B:inunsigned(B_port_size-1downto0);MULT:outunsigned((A_port_size+B_port_size-1)downto0));•attributemult_style:string;•attributemult_styleofmultipliers_2:entityispipe_lut;•endmultipliers_2;第5章VHDL高级设计技术-流水线乘法器的VHDL描述•architecturebehofmultipliers_2is•signala_in,b_in:unsigned(A_port_size-1downto0);•signalmult_res:unsigned((A_port_size+B_port_size-1)downto0);•signalpipe_1,pipe_2,pipe_3:unsigned((A_port_size+B_port_size-1)downto0);•begin•mult_res=a_in*b_in;第5章VHDL高级设计技术-流水线乘法器的VHDL描述•process(clk)•begin•if(clk'eventandclk='1')then•a_in=A;•b_in=B;•pipe_1=mult_res;•pipe_2=pipe_1;•pipe_3=pipe_2;•MULT=pipe_3;•endif;•endprocess;•endbeh;第5章VHDL高级设计技术-系统同步单元PLD