您的位置:控制工程论坛网论坛 » 嵌入式系统 » FPGA 同步设计技术

runner

runner   |   当前状态:在线

总积分:114  2024年可用积分:0

注册时间: 2005-11-26

最后登录时间: 2018-05-11

空间 发短消息加为好友

FPGA 同步设计技术

runner  发表于 2005/12/28 13:23:40      4579 查看 5 回复  [上一主题]  [下一主题]

手机阅读

摘要: 本文介绍了FPGA 的同步设计技术, 结合一些设计实例总结了FPGA 同步设计的若干原则。 关键词: FPGA; 同步设计; 时钟   一、FPGA 同步设计   随着深亚微米VL S I 技术的迅速发展, FPGA,CPLD 等可编程逻辑器件的资源有了极大的发展,尤其是FPGA , 器件的集成度已达到上千万门, 系统工作频率达到几百MHz。FPGA 在开发阶段具有安全、方便、可随时修改设计等不可替代的优点, 在电子系统中采用FPGA 可以极大的提升硬件系统设计的灵活性, 可靠性, 以及提高硬件开发的速度和降低系统的成本。FPGA 的固有优点使其得到越来越广泛的应用, FPGA 设计技术也被越来越多的设计人员所掌握。实际中使用一种好的系统设计方法可以在很大程度上改善FPGA 应用中所出现的问题。   对于FPGA 设计, 同步设计将优于异步设计。对于静态同步设计, 当满足以下两个条件时, 我们说这个系统是同步的:   1. 每个边缘敏感部件的时钟输入是一次时钟输入的某个函数; 并且仍是像一次时钟那样的时钟信号。   2. 所有存储元件(包括计数器) 都是边缘敏感的, 在系统中没有电平敏感存储元件。   我们对FPGA 的同步设计理解为所有的状态改变都由一个主时钟触发, 而对具体的电路形式表现为所有的触发器的时钟端都接在同一个主时钟上。一个系统的功能模块在内部可以是局部异步的,但是在模块间必须是全局同步的。CPU 是一个同步设计的典型实例, 就是所有电路都与一个系统主时钟同步, 主时钟是系统的心脏,尽管在与慢速的外设传送数据时需要插入等待周期, 但它的输入输出理论上仍然是主时钟同步驱动的。 二、FPGA 同步设计的实现   相比异步设计来说同步设计有许多的优点, 但在FPGA 中实现电路的同步设计需要考虑多个方面的因素。   首先是选取主时钟。数字电路中, 时钟是整个电路最重要、最特殊的信号。首先, 系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错; 第二, 时钟信号通常是频率最高的信号; 第三, 时钟信号通常是负载最重的信号, 所以要合理分配负载。出于这样的考虑, 在FPGA 这类可编程器件内部一般都设有数量不等的专门用于系统时钟驱动的全局时钟网络。这类网络的特点是, 一是负载能力特别强, 任何一个全局时钟驱动线都可以驱动芯片内部的触发器; 二是时延差特别小; 三是时钟信号波形畸变小, 工作可靠性好。因此, 在FPGA 设计中最好的时钟方案是: 由专用的全局时钟输入引脚驱动单个主时钟去控制设计项目中的每一个触发器。同步设计时, 全局时钟输入一般都接在器件的时钟端, 否则会使其性能受到影响。对于需要多时钟的时序电路, 最好选用一个频率是它们的时钟频率公倍数的高频主时钟。   其次各个功能模块要使用统一的复位电路。在使用带时钟的触发器、计数器等有复位端的库器件时, 一般应尽量使用有同步复位的器件。注意复位时保证各个器件都能复位, 以避免某些寄存器的初始状态不确定而引起系统工作不可靠。   第三是尽量在一般的时序电路采用同步电路。尽可能使用同步计数器、并行进位加法器、同步移位寄存器等同步器件, 避免使用异步触发器和异步RS触发器; 尽量减少或不使用逻辑门控制时钟信号, 也不要用系统主时钟参与逻辑运算来产生控制信号,因为它会在时钟和数据之间产生较多的扭曲; 避免用触发器的输出作为另一触发器的时钟; 译码器的输出不能直接接在器件的时钟端和复位端; 不要将异步数据接在同一时钟触发的多个触发器上; 避免将异步数据接在同一时钟打入的寄存器上。在设计中电路的每一部工作时序都要留有足够的余量。 三、FPGA 同步设计实例   下面我们结合以上原则介绍一些实现同步设计的实例。首先我们介绍一下毛刺信号的产生。   1. 毛刺信号的产生   信号在FPGA 器件内部通过连线和逻辑单元时, 都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关, 同时还受器件的制作工艺、工作电压、温度等条件的影响。信号的高低电平转换也许要一定的过渡时间。由于以上因素的影响, 多路信号的电平变化时, 在信号变化的瞬间, 组合逻辑的输出状态不确定, 往往会出现一些不正确的尖峰信号, 这些尖峰信号被称为“毛刺”。许多逻辑电路产生的小 的寄生信号, 也能成为毛刺信号。这些无法预见的毛刺信号可通过设计来传播并产生不需要的时钟脉冲。应该明确的是, 任何组合电路都可能是潜在的毛刺信号发生器, 而时钟端口、清零和置位端口对毛刺信号十分敏感, 任何一点毛刺都可能会使系统出错。   图1 用于说明与门的输出变化依赖于路径的延时。假定图中信号A 0 总比B0 提前5n s 到达。   情况1: 信号A 1 的延时为10n s,B1 为20n s, 那么与门的输出一直为低电平。 情况2: 信号A 1 的延时为20n s,B1 为10n s, 那么与门的输出为5n s 的高电平, 其余为低电平。 情况3: 两路信号延时都很小, 那么与门的输出一直为低电平。 上述输出差异的重要性完全依赖于信号的用途。如果电路输出后面被触发器锁定, 情况2 中非期望的毛刺信号可能被忽略; 而如果毛刺信号在后续电路中被看作是有意义的信号, 那么情况1、3 中由于没有产生毛刺信号, 就会导致电路工作不正常。   2. 对于一般组合逻辑的同步设计   对于D 触发器来说, 只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间, 就不会对系统造成危害, 因此可以认为D 的输入端对毛刺信号不敏感。基于以上认识, 在输出信号的保持时间内, 用D 触发器来读取一般组合逻辑的输出信号就成为一种行之有效的方法。在实践中, 可用工作于高速时钟的D 触发器对组合逻辑的输出信号进行采样使其强行与时钟同步。这里要求系统时钟的频率相对很高, 一个时钟的采样时延不会引起系统的错误。图2 说明了这种方法。   另一种利用采样来消除毛刺实现同步的方法是用一定宽度的高电平脉冲与输出信号做逻辑与运算, 由此获取输出信号的电平值。图3 说明了这种方法。   还可以采用低通滤波的方法来去除FPGA 器件输出引脚上的毛刺。从原理上分析, 由于毛刺信号的持续时间很短, 因此在频域上, 毛刺信号同有用信号相比其能量分布在一个很宽的频带上。在对输出波形的边沿要求不是很高的情况下, 在FPGA 的输出引脚上串接一个RC 电路, 构成一个低通滤波器,就能够滤除毛刺信号的大部分能量。应该注意的是, 必须仔细选择电容和电阻的参数, 以避免使正常信号的畸变过于严重。图4 说明了这种方法。  3. 对于译码电路的同步设计   如图5 (a) 的直接译码容易产生毛刺, 用它的输出去驱动其他电路可能会造成严重错误。可以对该电路做一改进以解决这个问题。提前一个时钟译码,再用一个D 触发器对译码结果进行采样, 从而得到正确的且没有竞争的译码输出。实际上此类译码器都可以用此方法。  4. 对于二次时钟的同步设计   在用FPGA 同时处理多路不同速率信号时, 涉及到多个时钟的处理方法。这时候常常会采用高倍速率的外部时钟作为输入的工作主时钟, 用分频的方法产生一些较低频率的二次时钟, 如图6 所示。   虽然这样二次时钟产生器可以使用同步原理来设计。但这种方案有一严重缺点, 即二次时钟相对于系统主时钟可能存在过大的时钟歪斜。这意味着系统主时钟不能使用了。这种设计中的另一个问题是,任何有条件的操作都应通过一个D 触发器执行, 以消除毛刺和假信号, 并且用其他延迟后的时钟将条件时钟变成同步的。在芯片的输出端, 需要用另外的锁存器, 以使内部歪斜的数据变成同步的数据。这些问题在设计中有可能解决, 但结果将得出一种性能较差和结构不良的设计。  当系统中有两个或两个以上非同源时钟的时候, 数据的建立和保持时间很难得到保证, 最好的解决方法就是将所有的非同源时钟同步化。这时, 使用FPGA 内部的锁相环(PLL ) 就是一个效果很好的方法。由于并不是所有的FPGA 都带有PLL , 而且带有PLL 功能的芯片成本太高, 所以除非有特殊要求, 一般场合下不建议使用带PLL 的FPGA , 而是使用带使能端的D 触发器, 并通过引入一个高频时钟来实现信号的同步化。 对于上面的二次时钟产生电路, 我们可以用等效的同步式电路取代。如图7 所示。 5. 对于使能信号的合理使用   在FPGA 同步设计时, 合理使用使能信号可以得到很好的设计。对于不同源的多时钟输入处理问题, 通过合理选用使能信号, 我们可以将它转化为单时钟多路并 行处理的问题。例如在处理4 路一次群信号时, 输入是4 路带有帧定时信号的不同源的一次群信号, 时钟速率都是2. 048MHz。输入的每个一次群都包括数据、时钟和帧三个信号。由于输入的4 个一次群是不同源的, 存在着4 个时钟信号。   在用FPGA 处理时, 用一比输入时钟频率高数倍(32. 768MHz) 的本地时钟CLOCK 作为工作主时钟, 对输入时钟CL K0 通过如图8 所示的数字单稳电路进行采样, 产生使能信号CE0。 图8 使能信号产生电路   用AHDL 语言描述为: SUBDES IGN CE_ GEN ( CLOCK, CL K0: IN PU T; CE0: OU TPU T; ) VAR IABL E D1, D2 : DFF; BEGIN D1. (CL K, D) = (CLOCK, CL K0) ; D2. (CL K, D) = (CLOCK, D1. Q ) ; CE0= D1. Q & (! D2. Q ) ; END;   对输入时钟的每一个周期, 单稳电路输出一个在输入时钟上升沿附近的、宽度为一个本地时钟周期的使能脉冲CE0。在FPGA 芯片内, 所有的D 触发器都可以定义为有一个使能端, 同样, 由D 触发器构成的计数器和锁存器等时序电路单元也都有使能端。本地时钟在由该输入时钟产生的使能信号的控制下, 对该数据进行处理, 这样就可以实现用高速率的时钟在低速率的使能信号控制下, 对低速率的信号进行处理。在FPGA 内, 将输入的4 个一次群的时钟通过4 个数字单稳电路, 产生4 个使能信号,在同一本地时钟的驱动下, 按4 路并行输入数据来处理。   采用这种设计思路带来的好处主要是系统工作稳定, 布线转换成功率高, 设备调试周期短。其不足之处是系统工作频率增高, 资源使用较多, 电路设计更复杂。但对FPGA 实现来说, 工作频率可以工作在较高的频率上; 资源使用虽然较多, 但采用统一全局时钟驱动后, 系统的资源利用率也可以提高, 代价并不大。而且, 由于使用了高倍时钟作为工作主时钟, 可以对一些模块进行时分复用。我们在WCD2MA 移动台接收的FPGA 实现过程中, 采用这种思想设计实现了一种时分数字匹配滤波器, 它可以对匹配滤波器进行时分复用, 同时完成对多个信道的匹配相关运算, 大大节省了硬件资源。实际上这种方法代价最大的是设计复杂性的增加, 对于设计人员来讲, 要非常清楚各个功能模块的控制时序关系, 需要一定的设计技巧。   由此可见, 在进行FPGA 同步设计时, 用逻辑门产生使能信号来控制数据而不是用时钟来控制是一种较好的设计。   从上面的一些实例可以看出, 在FPGA 设计过程中, 如何合理的使用时钟是需要最优先考虑的, 许多设计中出现的问题都与使用时钟不合理有关。当然复位等其他全局信号的使用也很重要, 另外在电路每一步工作时序上都要留有足够的余量。 四、结束语   目前, FPGA 的应用越来越广泛, 已经渗透到各个应用领域, FPGA 设计市场也呈逐年递增的趋势。FPGA 从实现粘附逻辑, 到实现系统模块, 已发展到作为设计平台, FPGA 设计技术也为越来越多的设计人员所掌握。在FPGA 设计中, 同步设计要优于异步设计, 本文结合一些设计实例总结了FPGA 同步设计的若干原则。
1楼 0 0 回复
  • quester

    quester   |   当前状态:在线

    总积分:88  2024年可用积分:0

    注册时间: 2005-11-26

    最后登录时间: 2018-05-11

    空间 发短消息加为好友

    quester   发表于 2005/11/26 17:47:53

    safa
    2楼 回复本楼

    引用 quester 2005/11/26 17:47:53 发表于2楼的内容

  • sandra

    sandra   |   当前状态:离线

    总积分:90  2024年可用积分:0

    注册时间: 2005-12-02

    最后登录时间: 2018-05-11

    空间 发短消息加为好友

    sandra   发表于 2005/12/14 9:27:53

    re
    3楼 回复本楼

    引用 sandra 2005/12/14 9:27:53 发表于3楼的内容

  • tester

    tester   |   当前状态:离线

    总积分:40  2024年可用积分:0

    注册时间: 2005-12-14

    最后登录时间: 2018-05-11

    空间 发短消息加为好友

    tester   发表于 2005/12/27 11:18:39

    4楼 回复本楼

    引用 tester 2005/12/27 11:18:39 发表于4楼的内容

  • 小木人

    小木人   |   当前状态:在线

    总积分:234  2024年可用积分:0

    注册时间: 2005-12-23

    最后登录时间: 2012-04-10

    空间 发短消息加为好友

    小木人   发表于 2005/12/27 11:52:01

    希望这样的文章能多发表!!,我们能学到很多东西呢。
    5楼 回复本楼

    引用 小木人 2005/12/27 11:52:01 发表于5楼的内容

  • subjob

    subjob   |   当前状态:离线

    总积分:69  2024年可用积分:0

    注册时间: 2005-11-27

    最后登录时间: 2018-05-11

    空间 发短消息加为好友

    subjob   发表于 2005/12/28 13:23:40

    6楼 回复本楼

    引用 subjob 2005/12/28 13:23:40 发表于6楼的内容

总共 , 当前 /