FPGA中推荐的HDL设计方法之时钟方案

      与组合逻辑一样,时钟方案对设计的性能和可靠性有很大影响。

      尽可能避免使用内部生成的时钟(PLL除外),因为它们可能导致设计中的功能和时序问题。 使用组合逻辑生成的时钟会引入产生功能问题的毛刺,并且组合逻辑中固有的延迟可能导致时序问题。

      提示:在Quartus II软件中指定所有时钟关系,以便在适配(Fit)期间实现最佳的时序驱动优化,并允许正确的时序分析。 在任何派生或内部时钟上使用时钟设置分配来指定它们与基准时钟的关系(Time quest中可以使用GUI来设置,且友好)。对所有内部生成的时钟使用全局器件范围的专用布线,而不是在常规布线线路上布线时钟。尽可能避免在不同时钟之间传输数据。 如果需要在不同时钟之间进行数据传输,请使用FIFO电路。 您可以使用Quartus II软件中的时钟不确定性功能(一种时序约束,同样可以通过Time quest来设置)来补偿时钟域之间的可变延迟。 考虑将时钟设置不确定性和时钟保持不确定性值设置为时钟延迟的10%到15%。以下部分提供了避免计时方案问题的具体示例和建议。

将组合的逻辑的输出寄存器一下

      如果将组合逻辑的输出用作时钟信号或异步复位信号,则可能会在设计中看到毛刺。 在同步设计中,寄存器的数据输入上的毛刺是没有后果的正常事件。 但是,寄存器的时钟输入(或异步输入)上的毛刺或尖峰会产生严重后果。 窄毛刺可能违反寄存器的最小脉冲宽度要求。 如果当毛刺到达时钟输入时寄存器的数据输入发生变化,则也可能违反建立和保持要求。即使设计没有违反时序要求,寄存器输出也会意外地改变值并在设计的其他地方引起功能危险。为避免这些问题,在将其用作时钟信号之前,应始终寄存一下组合逻辑的输出。

      寄存一下组合逻辑的输出可确保组合逻辑生成的毛刺在寄存器的数据输入处被阻止(阻挡毛刺继续后续的传播)。

避免异步时钟分频:

      设计通常需要通过主时钟来创建其他的时钟。 大多数Altera FPGA都提供用于时钟分频的专用锁相环(PLL)电路。 使用专用PLL电路可以帮助您避免异步时钟分频逻辑可能引入的许多问题。
必须使用逻辑来划分主时钟时,始终使用同步计数器或状态机。 此外,创建您的设计,使寄存器始终直接生成分频时钟信号,并在全局时钟资源上路由时钟。 为避免毛刺,请勿解码计数器或状态机的输出以生成时钟信号。

避免使用Ripple Counter

什么是Ripple Counter?

A good first thought for making counters that can count higher is to chain Divide-by-2 counters together. We can feed the Q out of one flop into the CLK of the next stage. The result looks something like this:

The ripple counter is easy to understand. Each stage acts as a Divide-by-2 counter on the previous stage's signal. The Q out of each stage acts as both an output bit, and as the clock signal for the next stage.

We can chain as many ripple counters together as we like. A three bit ripple counter will count 23=8 numbers, and an n-bit ripple counter will cound 2nnumbers.

The problem with ripple counters is that each new stage put on the counter adds a delay. This propagation delay is seen when we look at a less idealized timing diagram:

Now we can see that the propagation delay does not only slow down the counter, but it actually introduces errors into the system. These errors increase as we add additional stages to the ripple counter.

      为简化验证,请避免设计中的纹波计数器。过去,FPGA设计人员使用纹ripple counter将时钟分频为2,因为计数器易于设计,并且可能比同步计数器使用更少的门(资源)。ripple counter使用级联寄存器,其中一个寄存器的输出引脚在下一级输入寄存器的时钟引脚。这种级联可能会导致问题,因为计数器会在每个阶段产生ripple  clock。这些ripple  clock必须在时序分析期间正确处理,这可能很困难,可能需要您在综合和布局布线工具中进行复杂的时序分配(提高了设计难度,且工具难以进行一些时序分析)。
      您通常可以使用ripple counter来降低FPGA的逻辑的使用量。但是,在Quartus II软件支持的所有Altera器件中,使用纹波时钟结构来减少用于计数器的逻辑的使用量是不必要的,因为器件允许您使用每个计数器位一个逻辑元件构造一个计数器。你应该完全避免使用波纹计数器。

使用多路复用时钟:

使用时钟多路复用来操作具有不同时钟源的相同逻辑功能。 在这些设计中,多路复用选择时钟源。
例如,处理多个频率标准的电信应用通常使用多路复用时钟。

将多路复用逻辑添加到时钟信号可能会产      生上诉部分中解决的问题,但多路复用时钟的要求变化很大,具体取决于应用。 当时钟信号使用全局时钟路由资源并且满足以下条件时,时钟复用是可接受的:

•初始配置后,时钟多路复用逻辑不会改变
•该设计使用多路复用逻辑来选择用于测试目的的时钟
•时钟切换时,寄存器始终复位
•时钟切换后暂时不正确的响应没有负面影响

      如果设计在没有复位信号的情况下实时切换时钟,并且您的设计无法容忍暂时不正确的响应,则必须使用同步设计,以便寄存器不会出现时序违规,时钟信号没有毛刺,也没有竞争条件 或其他逻辑问题。 默认情况下,Quartus II软件优化并分析通过多路复用器以及可能来自多路复用器的两个内部时钟之间的所有可能路径。 如果多路复用器总是选择一个特定时钟,这可能导致比所需更严格的分析。 如果您不需要更完整的分析,可以在Quartus II软件中将多路复用器的输出分配为基本时钟,以便使用该时钟分析所有寄存器到寄存器的路径。提示:使用专用硬件在可用时执行时钟多路复用,而不是使用多路复用逻辑。

使用门控时钟:

      门控时钟使用控制门控电路的使能信号打开和关闭时钟信号。 当时钟关闭时,相应的时钟域将关闭并在功能上处于非活动状态。

      您可以使用门控时钟来关有效地关闭部分暂不使用的部分数字电路来降低某些器件架构的功耗。当时钟被门控时,时钟网络和由其驱动的寄存器都停止翻转,从而消除了它们对功耗的贡献。但是,门控时钟不是同步方案的一部分,因此可以显著增加设计实施和验证所需的工作量。门控时钟会导致时钟偏移并使器件迁移变得困难。这些时钟也对毛刺敏感,这可能导致设计失败。
      使用专用硬件执行时钟门控而不是AND或OR门。例如,您可以在较新的Altera器件中使用时钟控制模块来关闭整个时钟网络。专用硬件模块可确保您使用低偏斜(skew)的全局布线,并避免由于时钟线上的逻辑延迟而导致器件出现任何可能的保持时间问题。
       从功能的角度来看,您可以使用同步时钟使能信号以纯同步方式关闭时钟域。但是,当使用同步时钟使能方案时,时钟网络继续切换。这种做法不会像在源头上对时钟进行门控那样降低功耗。在大多数情况下,请使用同步方案。

使用同步时钟使能:

要以同步方式关闭时钟域,请使用同步时钟使能信号。 FPGA有效地支持时钟使能信号,因为所有器件寄存器都有专用的时钟使能信号。由于时钟网络保持切换,该方案不会像在源处选通时钟那样降低功耗,并且通过禁用一组寄存器来执行与门控时钟相同的功能。 在每个寄存器的数据输入前插入一个多路复用器,以加载新数据,或复制寄存器的输出。

推荐的时钟门控方法:

仅当目标应用程序需要降低功耗并且门控时钟所带来的功耗降低满足要求时才使用门控时钟。
如果必须使用逻辑门控时钟,请使用健壮的时钟门控技术实现这些时钟,并确保门控时钟信号使用专用的全局时钟路由。
您可以在时钟网络源,每个寄存器或其间的某个位置对时钟信号进行门控。由于时钟网络有助于切换功耗,因此只要有可能就在时钟源处对时钟进行门控,这样就可以关闭整个时钟网络,而不是在寄存器的时钟网络上进一步对其进行门控。

推荐的时钟门控技术如下图所示

寄存器产生使能信号以确保信号没有毛刺和尖峰。 产生使能信号的寄存器在要门控的时钟的无效边沿(下降沿)触发。 如果门控上升沿有效,那么使用门控时钟下降沿产生时钟使能(如上图所示)。 使用这种技术,一次只能打开和关闭时钟的门只有一个输入(Enable信号)。 这可以防止输出上的毛刺或尖峰。 使用AND门来门控上升沿有效的时钟。 对于在下降沿有效的时钟,使用OR门控时钟并使用正边沿触发寄存器注册使能命令。

使用此技术时,请密切注意时钟的占空比和产生使能信号的逻辑的延迟,因为必须在半个时钟周期内产生使能命令。如果生成使能命令的逻辑特别复杂,或者时钟的占空比严重不平衡,则这种情况可能会导致问题。然而,与由其他门控时钟方法产生的问题相比,仔细管理占空比和逻辑延迟可能是可接受的解决方案。确保将时钟设置应用于TimeQuest分析器中的门控时钟。将时钟设置应用于AND门的输出。否则,时序分析器可能使用通过寄存器的时钟路径作为最长时钟路径来分析电路,并且跳过寄存器的路径作为最短时钟路径,从而导致人工时钟偏移。在某些情况下,将门控时钟转换为时钟使能可以帮助减少毛刺和时钟偏差,并最终产生更准确的时序分析。您可以通过打开自动门控时钟转换选项,将Quartus II软件设置为自动将门控时钟转换为时钟使能(Auto Gated Clock Conversion)。该转换适用于两种类型的门控时钟方案:单门控时钟和级联门控时钟。

https://wenku.baidu.com/view/d77c2d723d1ec5da50e2524de518964bcf84d2cb.html (时钟抖动,及时钟偏斜解析)

猜你喜欢

转载自blog.csdn.net/taidaohualang/article/details/81138068
今日推荐