1.12k likes | 1.25k Views
EDA 原理及应用. 何宾 2008.09. E - mail: hebin@mail.buct.edu.cn. 第 5 章. 第五章. VHDL高级设计技术 - 主要内容. 本章首先介绍基于 Xilinx 芯片的 HDL 高级设计技术。在高级设计技术中主要对提高 HDL 性能的一些设计方法进行了比较详细的介绍,其中包括逻辑复制和复用技术、并行和流水技术、系统同步和异步单元、逻辑结构的设计方法和模块的划分原则。 本章也对 IP 核技术进行了比较详细的说明和介绍,其中包括 IP 核分类、 IP 核优化、 IP 核生成和 IP 应用技术。
E N D
EDA原理及应用 何宾 2008.09 E - mail: hebin@mail.buct.edu.cn
第5章 第五章 VHDL高级设计技术-主要内容 本章首先介绍基于Xilinx芯片的HDL高级设计技术。在高级设计技术中主要对提高HDL性能的一些设计方法进行了比较详细的介绍,其中包括逻辑复制和复用技术、并行和流水技术、系统同步和异步单元、逻辑结构的设计方法和模块的划分原则。 本章也对IP核技术进行了比较详细的说明和介绍,其中包括IP核分类、IP核优化、IP核生成和IP应用技术。 这部分虽然在本书中的篇幅不是很多,但是内容非常重要,读者在学习该部分内容时要仔细的领会。
第五章 VHDL高级设计技术-VHDL代码风格 ● ●VHDL代码风格是指两个方面的内容: 一方面是VHDL语言描述规范,即在使用VHDL语言描 述逻辑行为时必须遵守VHDL语言的词法和句法规范,该 描述风格不依赖于EDA软件工具和可编程逻辑器件PLD类 型,仅仅是从VHDL语言出发的代码风格; 另一方面则是VHDL语言对于一特定逻辑单元的描述, 即用VHDL语言的哪一种描述风格进行逻辑行为描述,才 能使电路描述得更准确,布局布线后产生的电路设计最 优,该描述风格不仅需要关注EDA软件在语法细节上的差 异,还要紧密依赖于固有的硬件结构。
第五章 ● VHDL高级设计技术-VHDL代码风格 从本质上讲,使用哪种描述风格描述电路的逻辑行 为,主要取决于两个关键问题: 1、速度和面积问题; 2、功耗问题;
第五章 ● VHDL高级设计技术-VHDL代码风格 • 首先,先说明速度和面积问题。 • 这里的“面积”主要是指设计所占用的FPGA逻辑资源数 目,即所消耗的触发器和查找表数目。 • “速度”是指在芯片上稳定运行时所能够达到的最高频 率。 • 面积和速度这两个指标始终贯穿着PLD的设计,是评 价设计性能的最主要标准。
第五章 ● VHDL高级设计技术-VHDL代码风格 • 面积和速度呈反比关系。 • 如果要提高速度,就需要消耗更多的资源,即需要更大的面积; • 如果减少了面积,就会使系统的处理速度降低。 • 所以在设计中不可能同时实现既显著提高PLD工作频率,又显著减少所占用PLD的逻辑资源的数目。
第五章 ● VHDL高级设计技术-VHDL代码风格 • 在实际设计时,需要在速度和面积之间进行权衡,使得设计达到面积和速度的最佳结合点。 • 本章介绍通过采用逻辑复制和复用技术、并行和流水线技术、同步和异步电路处理技术、逻辑结构处理技术等方法,在速度和面积之间进行权衡,达到最佳的性能和资源要求。
第五章 ● VHDL高级设计技术-VHDL代码风格 • 其次,说明功耗问题。 • 随着PLD工作频率的显著提高,功耗成为一个引起 EDA设计人员密切关注的问题。 • 由于PLD工作频率的提高,逻辑单元的切换频率也相应提高,相应的会引起PLD功耗增大。 • 这样就存在着频率和功耗之间的矛盾,因此必须在逻辑单元的切换速度和功耗之间进行权衡,通过合理的设计,减少逻辑单元不必要的切换,这样可以在一定程度上降低功耗。
第五章 ● VHDL高级设计技术-扇出 • 扇出是指某一器件的输出驱动与之相连的后续器件的能力。众所周知,一个器件的扇出数是有限制的。扇出数目越多,所要求的驱动能力越高。在PLD芯片内,如果一个逻辑单元的扇出数过多的话,会降低其工作速度,并且会对布线造成困难。因此,在PLD逻辑资源允许的情况下,要尽量降低扇出数。
第五章 ● VHDL高级设计技术-逻辑复制 逻辑复制是通过增加面积而改善设计时序的优化方法,经常用于调整信号的扇出。如果信号具有高的扇出,则要添加缓存器来增强驱动能力,但这会增大信号的时延。 通过逻辑复制,使用多个相同的信号来分担驱动任务。这样,每路信号的扇出就会变低,就不需要额外的缓冲器来增强驱动,即可减少信号的路径延迟。
第五章 ● VHDL高级设计技术-逻辑复制 通过逻辑单元的复制,减少扇出数,可以解决下面两 个方面的问题:减少网络延迟;多个器件分布在不同的区 域,这样可以大大降低布线阻塞情况的发生。 在使用增加器件减少扇出数目的时候,必须要注意的 是,如果是异步单元的话,必须对该单元进行同步处理。
第五章 fn1 D Q fn1 D Q fn1 D Q ● VHDL高级设计技术-逻辑复制
第五章 ● VHDL高级设计技术-逻辑复用技术 逻辑复用是指在完成相同的功能下,尽量减少所使用的逻辑单元的数目。这样在不影响设计性能的情况下,可以降低资源的使用。下面通过一个乘法器的例子来说明这个问题。
第五章 A0 A0 X B A1 A1 X SEL X B B SEL 先乘后选择的结构 先选择后相乘的结构 ● VHDL高级设计技术-逻辑复用技术
第五章 ● VHDL高级设计技术-逻辑复用技术 先选择后乘法的结构,在实现这样一个功能时需要使 用两个乘法器和一个选择器,对该结构进行观察可以发 现,在该设计中被乘数都是B,只有乘数是不一样的,那 么可以在不影响该设计实现的功能的前提下,可以考虑将 系统改为先选择后相乘的结构采用该结构,在实现相同功 能的前提下,所使用的乘法器数目由2个减少为1个。 从该设计可以看出,在进行设计时,如果对设计进行 优化,很多的功能都可以通过逻辑复用技术,提高设计效 率和减少逻辑资源消耗量。
第五章 ● VHDL高级设计技术-并行处理技术 串行设计是最常见的一种设计。当一个功能模块对输入的处理是分步骤进行的,而且后一步骤只依赖于前一步骤的结果时,功能模块的设计就需要采用串行设计的思想。 并行处理就是采用几个处理流程同时处理到达的负载,提高处理的效率。并行处理要求这些处理任务之间是不相关的,彼此之间是不互相依赖的,如果存在相互依赖就很难用并行处理的方法。
第五章 模块3 模块4 模块1 模块2 模块1 模块1 模块1 模块1 ● VHDL高级设计技术-并行处理技术
第五章 ● VHDL高级设计技术-并行处理技术 下面以一个复杂的乘法运算为例,说明并行处理技术的使用。 首先给出该运算的数学表达式 , 下图给出了实现该功能的并行结构(该结构由XST综合工具给出。通过使用多个乘法器,使得四个乘法运算可以同时进行,但是需要注意的,这种速度的提高是以面积为代价的。
第五章 a0 b0 + a1 b1 + a2 b2 + a3 X X X X b3 ● VHDL高级设计技术-并行处理技术
第五章 ● VHDL高级设计技术- 并行乘法加法的HDL描述 [例5-2]乘法加法运算的实现则用VHDL语言描述如下: Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Use ieee.std_logic_arith.all; Entity mult_add is Port( clk : in std_logic; a0,a1,a2,a3 : in std_logic_vector(7 downto 0); b0,b1,b2,b3 : in std_logic_vector(7 downto 0); y : out std_logic_vector(15 downto 0)); end multadd;
第五章 ● VHDL高级设计技术- 并行乘法加法的HDL描述 architecture behav of mult_add is begin process(clk) begin if rising_edge(clk) then y<=((a0*b0)+(a1*b1)+(a2*b2)+(a3*b3)); end if; end process; end behav;
第五章 ● VHDL高级设计技术-流水线设计技术的使用 采用这样的流水线设计从宏观上来看平均每一个事件的处理时间为一个单位时间。流水线的设计要求事件所分成的这n个步骤的处理时间是相同的,以保证流水线不会因为处理时间的不同而发生阻塞,见图5.2.2.3。
第五章 ● VHDL高级设计技术-流水线设计技术的使用 采用流水线设计的好处实在不提高系统运行频率的情况下,能够获得更好的处理效率。受制造工艺的影响,提高系统频率将会增加后端制造的难度。同时由于需要使用更先进的制造工艺,以及产品频率的下降,将会带来产品成本的提高。
第五章 ● VHDL高级设计技术-流水线设计技术的使用 如果假设在串行设计中系统处理效能正比于系统运行的频率,那么对于流水线设计,在不提高系统运行频率的情况下,n级流水线的处理效能可以用下面公式来描述: 处理效能=系统运行频率×流水线级数
第五章 ● VHDL高级设计技术-流水线设计技术的使用 由此可见,在不提高系统运行频率的情况下,提高流 水线的级数将成倍地提高系统处理的效能。但是流水线的 设计也是有一定的限制的: (1)只有对那些能分成n个步骤完成,并且对每个步骤 都需要固定相同处理时间的操作来说才能采用流水线设 计;
第五章 ● VHDL高级设计技术-流水线设计技术的使用(约束) (2)受硬件资源的限制,流水线的级数是有限制的; (3)对于存在处理分支预测流水线的设计(广泛应用于微处理器的设计中),流水线的处理效能还要取决于分支预测算法的设计。
第五章 ● VHDL高级设计技术-流水线设计技术的使用 流水线能动态地提升器件性能,它的基本思想是对经过多级逻辑的长数据通路进行重新构造,把原来必须在一个时钟周期内完成的操作分成在多个周期内完成。
第五章 ● VHDL高级设计技术-流水线设计技术的使用 这种方法允许更高的工作频率,因而提高了数据吞吐量。 因为PLD的寄存器资源非常丰富,所以对PLD设计而言,流水线是一种先进的而又不耗费过多器件资源的结构。 但是采用流水线后,数据通道将会变成多时钟周期,所以要特别考虑设计的其余部分,解决增加通路带来的延迟。
第五章 ● VHDL高级设计技术-流水线设计技术的使用(特点) 流水线的基本结构是将适当划分的N个操作步骤串连起来。流水线操作的最大特点是数据流在各个步骤的处理,从时间上看是连续的; 其操作的关键在于时序设计的合理安排、前后级接口间数据的匹配。如果前级操作的时间等于后级操作的时间,直接输入即可; 如果前级操作时间小于后级操作时间,则需要对前级数据进行缓存,才能输入到后级;如果前级操作时间大于后者,则需要串并转换等方法进行数据分流,然后再输入到下一级。
第五章 A × Mult B ● VHDL高级设计技术-流水线乘法器的VHDL描述 首先给出流水线乘法器的结构图。从图中可以看出,该流水线乘法器,在每个时钟节拍下,均可以得到一个乘法结果的输出,乘法器的效率大大增加。
第五章 ● VHDL高级设计技术-流水线乘法器的VHDL描述 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity multipliers_2 is generic(A_port_size : integer := 18; B_port_size : integer := 18); port(clk : in std_logic; A : in unsigned (A_port_size-1 downto 0); B : in unsigned (B_port_size-1 downto 0); MULT : out unsigned ( (A_port_size+B_port_size-1) downto 0)); attribute mult_style: string; attribute mult_style of multipliers_2: entity is "pipe_lut"; end multipliers_2;
第五章 ● VHDL高级设计技术-流水线乘法器的VHDL描述 architecture beh of multipliers_2 is signal a_in, b_in : unsigned (A_port_size-1 downto 0); signal mult_res : unsigned ( (A_port_size+B_port_size-1) downto 0); signal pipe_1,pipe_2,pipe_3 : unsigned ((A_port_size+B_port_size-1) downto 0); begin mult_res <= a_in * b_in;
第五章 ● VHDL高级设计技术-流水线乘法器的VHDL描述 process (clk) begin if (clk'event and clk='1') then a_in <= A; b_in <= B; pipe_1 <= mult_res; pipe_2 <= pipe_1; pipe_3 <= pipe_2; MULT <= pipe_3; end if; end process; end beh;
第五章 ● VHDL高级设计技术-系统同步单元 PLD内部由大量的电路单元组成,但是这些单元通常都 是由有限的几种不同的逻辑单元或是逻辑门构成的。每一 种逻辑单元包含输入信号以及输出信号,输出信号又作为 其他逻辑单元的输入信号。 从逻辑层面的抽象来看,一个PLD器件看成数量众多的 逻辑门构成的网络,这些逻辑门的输入和输出通过金属导 线相连构成了完成特定逻辑功能或是算法的网络。在PLD 芯片内部,成百上千万的逻辑门之间的信号传递决定了逻 辑门的时延以及系统最后的运行速度。
第五章 ● VHDL高级设计技术-系统同步单元 集成电路系统中有些信号的传递可以同时进行,但是有的信号的传递必须遵循严格的先后关系,这样才能保证系统运行结果的正确性(也就是说系统运行的结果是可以被重复的,系统在确定条件下运行的结果是确定的,而不是随机的)。这就需要同步(Synchronization)来保证电路的各个部分的逻辑处理按照特定的顺序进行。
第五章 ● VHDL高级设计技术-系统同步单元 同步电路和异步电路的区别在于电路触发是否与驱动时钟同步,从行为上讲,就是所有电路是否在同一时钟沿的触发下同步地处理数据。 常用于区分二者的典型电路就是同步复位和异步复位电路。同步复位的代码中只有时钟沿一个触发条件,但是异步复位代码中语句有复位和时钟沿两个触发条件。
第五章 ● VHDL高级设计技术-系统同步单元 通常情况下,同步电路采用的都是全同步,图5.1.1(a)就是一个全同步的例子, 第一部分是由逻辑门组成的组合逻辑部分; 第二部分称为时钟驱动存储单元;简单的说就是寄存器,用于存储组合逻辑的输出结果; 第三部分是时钟分配网络,这一部分特殊的电路不参与实际的运算,而是产生并分配参考时钟,这一部分电路关心的是如何产生控制整个同步电路的时钟并将时钟正确地分配到每一个寄存器。
第五章 ● VHDL高级设计技术-系统同步单元 同样以图5.1.1(a)为例,同步系统中包括由组合逻辑部分完成的逻辑运算以及由存储单元对于逻辑运算结果的存储: 实际的存储过程由时钟信号控制,并发生在信号从逻辑门的输出端输出稳定后。该模型中在每个时钟周期的开始时,输入信号以及存储单元存储的数据输入组合逻辑,经过一定逻辑门以及传输的时延后,组合逻辑产生结果输出并保持稳定,在这个时钟周期的末尾将输出组合逻辑的结果并存入存储单元,并在下一个时钟周期重新参加组合逻辑的操作。
第五章 计算单元 • 时钟周期开始时信号有效 输出数据端 输入数据端 组合逻辑 Ri 数 据 Rf 数 据 组合逻辑 时钟驱动存储单元 时钟信号 • 时钟周期结束时信号有效 同步单元 时钟信号 时钟信号 时钟分配网络 (a)同步系统的状态机模型 (b)本地数据通路 ● VHDL高级设计技术-系统同步单元
第五章 ● VHDL高级设计技术-系统同步单元 因此,数字系统可以看成是由一系列同时执行的由组合逻辑构成的计算单元组成的。如图5.1.1(b)所示的本地数据通路就是对这种概念的抽象。从图中可以看出,组合逻辑的时延被限制在一个时钟周期内。在此本地数据通路起始端,寄存器Ri是存储单元,用于在时钟周期开始的时候给组合逻辑提供部分或是全部的输入信号,同时在本地数据通路的末端,组合逻辑的结果在时钟周期的末尾被正确地锁存于寄存器Rf中。在本地数据通路中,每一个寄存器既是组合逻辑的输入端—数据的提供源,也是组合逻辑的输出端—输出数据的接收者,这取决于系统处于运行的哪个阶段。
第五章 ● VHDL高级设计技术-系统同步单元 同步系统具有很好的可控性,这是因为系统时钟提供了一种时间窗的机制保证可有足够的时间让信号在逻辑门以及逻辑门之间的连线上传播,并最后成功锁存于寄存器。 在设计系统和选择正确的时钟周期时,要满足以下这两个矛盾的需求: 1、希望系统的时钟周期尽可能短,这样在固定的时间内运算逻辑电路可以进行更多次的运算; 2、需要保证时钟定义的时间窗足够长以保证组合逻辑的输出信号都能在当前时钟周期结束前以及下一个时钟周期开始前到达目标寄存器。
第五章 ● VHDL高级设计技术-系统同步单元 同步系统具有以下的优点使得它成为数字集成电路系统的首选: (1)同步系统易于理解,并且同步系统中的各个参数以及变量都十分的明确,例如对于不同运算单元的执行的先后顺序是确定的; (2)同步系统可以减少非确定因素诸如组合逻辑的时延(受系统运行的环境、负载以及输入信号的向量组合等的影响)对系统的影响,这就保证了系统按照确定的行为运行,并且保证系统正确执行了设计的算法;
第五章 ● VHDL高级设计技术-系统同步单元 (3)同步系统中不需要关心组合逻辑的输出毛刺,因为寄存器只有在时钟的有效沿上才对组合逻辑的输出进行采样,而同步系统可以确保这时组合逻辑的输出已经没有毛刺。 (4)同步系统的状态完全由存储单元中所存储的数据所决定,这大大简化了系统的设计、调试以及测试。
第五章 ● VHDL高级设计技术-系统同步单元 当然,同步系统也存在着下面一些缺点使得今天的同步大规模集成电路设计变得更加富有挑战性: (1)同步系统要求系统中的所有电路通路以其中最慢的一条寄存器到寄存器通路的标准来工作(这也就是说,同步系统中系统工作的速度取决于这些通路上具有最大时延的组合逻辑,包含这样组合逻辑的通路称为最坏情况下的关键路径。
第五章 ● VHDL高级设计技术-系统同步单元 在通常的大规模集成电路系统中,大多数的路径都具有更小的时延,也就是可以采用更小的时钟周期。但是那些具有最大时延的路径限制了系统时钟周期的长短,同时也引入了对于整个系统速度的限制。有时候这种通路上时延的非对称性是如此的富有戏剧性,以致于整个系统的速度仅仅取决于少数几条速度非常慢的路径)。
第五章 ● VHDL高级设计技术-系统同步单元 (2)同步系统中,时钟信号需要被分配到数以万计的分布于系统各个地方的存储寄存器中,因此系统中很大一部分的面积以及耗散的电能都被用于时钟分配网络—并不参与实际的计算功能的电路。 (3)同步系统的可靠性依赖于对于系统时延要求(包括组合逻辑以及由电路互联线产生)的正确估计,如果系统不能满足时延要求,将造成系统的不稳定甚至是不可用。
第五章 ● VHDL高级设计技术-系统同步单元 综上所述,因此同步电路的设计应遵循以下准则: 1)尽量在设计中使用单时钟,且走全局时钟网络。 在单时钟设计中,很容易就将整个设计同步于驱动时钟,使设计得到简化。全局时钟网络的时钟是性能最优,最便于预测的时钟,具有最强的驱动能力,不仅能保证驱动每个寄存器,且时钟漂移可以忽略。在多时钟应用中,要做到局部时钟同步。
第五章 ● VHDL高级设计技术-系统同步单元 在实际工程中,应将时钟信号和复位信号通过FPGA芯片的专用全局时钟引脚送入,以获得更高质量的时钟信号。2)尽量避免使用混合时钟沿来采样数据或驱动电路。 使用混合时钟沿将会使静态时序分析复杂,并导致电路工作频率降低。
第五章 ● VHDL高级设计技术-系统同步单元 3)避免使用门控时钟。如果一个时钟节点由组合逻辑驱动,那么就形成了门控时钟,门控时钟常用来减少功耗,但其相关的逻辑不是同步电路,即可能带有毛刺,而任何的一点点小毛刺都可以造成D触发器误翻转;此外,门控逻辑会污染时钟质量,产生毛刺,并恶化偏移和抖动等指标。所以门控时钟对设计可靠性有很大影响,应尽可能避免。 4)尽量不要在模块内部使用计数器分频产生所需时钟。
第五章 ● VHDL高级设计技术-异步单元 但是在实际的设计过程中,不可避免的要接触到异步单元,比如在设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免。 异步时序单元指的是在设计中有两个或两个以上的时钟,且时钟之间是不同频率或同频不同相的关系。而异步时序设计的关键就是把数据或控制信号正确地进行跨时钟域传输。 每一个触发器都有其规定的建立(setup)和保持(hold)时间参数。在这个时间参数内,输入信号在时钟的上升沿是不允许发生变化的。如果信号的建立时间中对其进行采样,得到的结果将是不可预知的,即亚稳态。