1.02k likes | 1.29k Views
VHDL 高级设计技术. 何宾 2011.09. VHDL 高级设计技术 - 本章概要. 本章首先介绍基于 Xilinx 芯片的 HDL 高级设计技术。在 高级设计技术中主要对提高 HDL 性能的一些设计方法进 行了比较详细的介绍,其中包括逻辑复制和复用技术、 并行和流水技术、系统同步和异步单元、逻辑结构的设 计方法和模块的划分原则。 本章也对 IP 核技术进行了比较详细的说明和介绍,其 中包括 IP 核分类、 IP 核优化、 IP 核生成和 IP 应用技术。 这部分虽然在本书中的篇幅不是很多,但是内容非常重 要,读者在学习该部分内容时要仔细的领会。.
E N D
VHDL高级设计技术 何宾 2011.09
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高级设计技术-逻辑复用技术 • 逻辑复用是指在完成相同的功能下,尽量减少所使用的 • 逻辑单元的数目。这样在不影响设计性能的情况下,可以 • 降低资源的使用。下面通过一个共享加法器的例子来说明 • 这个问题。
VHDL高级设计技术-逻辑复用技术 • 如图5.3所示的先加法后选择的结构,在实现这样一 • 个功能时需要使用两个加法器和一个选择器. • 对该结构进行优化设计,如图5.3所示,A1和C1加数通过一个选择器送到加法器的一个输入端,B1和D1被加数通过另一个选择器送到加法器的另一个输入端,然后进行加法运算,这样设计可以节省一个加法器资源,在FPGA内选择器的资源远远多于加法器资源。
VHDL高级设计技术-逻辑复用技术 • 共享加法器资源的VHDL描述 • library IEEE; • use IEEE.std_logic_1164.all; • use IEEE.std_logic_unsigned.all; • use IEEE.std_logic_arith.all; • entity res_sharing is • port ( • A1,B1,C1,D1 : in STD_LOGIC_VECTOR (7 downto 0); • COND_1 : in STD_LOGIC; • Z1 : out STD_LOGIC_VECTOR (7 downto 0)); • end res_sharing; architecture BEHAV of res_sharing is begin P1: process (A1,B1,C1,D1,COND_1) begin if (COND_1=’1’) then Z1 <= A1 + B1; else Z1 <= C1 + D1; end if; end process; -- end P1 end BEHAV;
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高级设计技术- 并行乘法加法描述 • [例]乘法加法运算的实现则用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; 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高级设计技术-流水线乘法器 • 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; • 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高级设计技术-流水线乘法器 • 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)时间参数。在这个时间参数内,输入信号在时钟 • 的上升沿是不允许发生变化的。如果信号的建立时间中对 • 其进行采样,得到的结果将是不可预知的,即亚稳态。