FPGA 使用门控时钟
使用门控时钟
赛灵思器件内置专用时钟网络,可提供高扇出低偏差时钟资源。如果在
HDL
代码中包括精细粒度时钟门控技术,则会
干扰此功能及防止专用时钟资源的有效使用。因此,在将
HDL
写入器件时,赛灵思不建议把时钟门控结构编码在时钟
路径上。与此相反,出于功能或功耗考虑而停止设计的某些部分,应使用通过编码推断时钟使能的方法来控制时钟。
将时钟门控转换为时钟使能
如果编码中已经含有时钟门控结构,或是另有技术要求这样编码,赛灵思建议使用综合工具把已经布局在时钟路径上
的门控重新映射到数据路径上的时钟使能。这样做可以更理想地映射到时钟资源,并简化与进
/
出门控时钟域的数据有
关的电路时序分析。例如,利用
-gated_clock_conversion auto
选项与
Vivado
综合使用,以尝试自动转换为寄
存器时钟使能逻辑。对于复杂的门控时钟结构,使用
RTL
代码中的
GATED_CLOCK
属性来指导
Vivado
综合。
门控时钟缓存
当时钟网络的较大部分可以关闭一段时间时,您可以使用
BUFGCE
或
BUFGCTRL
启用或禁用时钟网络。此外,在定向
UltraScale
器件时,可以门控
BUFGCE_DIV
和
BUFG_GT
。对于
7
系列器件,还可以使用
BUFHCE
、
BUFR
和
BUFMRCE
来门控时钟。
当时钟可以在一段时间内减慢时,您也可以使用这些缓存和附加逻辑来周期性地使能时钟网络。用户也可以使用
BUFGMUX
或
BUFGCTRL
将时钟源从速度较快的时钟信号切换为速度较慢的时钟信号。
这些技巧中的任何一项都可以有效降低动态功耗。但是根据要求和时钟拓扑结构,某种技巧可能比另一种更加行之有
效。例如,在
7
系列器件中:
•
如果
BUFR
是外部生成的时钟 (低于
450 MHz
),则只需要提供三个时钟区域,
BUFR
便可能以最佳状态运行。
•
对于
Virtex-7
器件,也可能需要对多个时钟区域 (但最多只能有三个垂直相邻的区域)使用
BUFMRCE
技术。
• BUFHCE
更适合能够包含在单个时钟区域中的高速时钟。虽然
BUFGCE
可以跨越器件,并且是最灵活的方法,但
是它或许并不是最节能的选择。
控制和同步器件启动
FPGA
器件完成配置后,器件需要经历一系列事件才能退出配置状态,进入一般工作状态。在大多数配置序列中,最后
步骤之一是全局置位复位
(GSR)
解除,然后是全局使能
(GWE)
信号解除。这个步骤完成之后设计进入已知的初始状态,
然后释放进入工作状态。
如果上述释放点未同步到给时序钟域,或如果时钟的运行速度快于
GWE
安全释放的速度,部分设计就会进入未知状
态。对于一些设计,这没有关系。在其他设计中,这可能导致设计变得不稳定或不正确地处理初始数据集。
如果设计必须在已知状态下启动,赛灵思建议您使用以下任何方法来控制启动同步过程:
•
使用具有时钟使能能力的示例化时钟缓存组件。在使能设计时钟之前,将复位释放延迟所需的多个周期。以下示
例显示了在
UltraScale
器件中复位后,如何延迟第一个设计时钟边沿。通过在同步寄存器上设置
ASYNC_REG=TRUE
,可以讲所有寄存器都放在单个
SLICE
中,因此不需要由全局时钟资源驱动。要防止在同步器
时钟上插入时钟缓存,请在输入时钟端口上使用
CLOCK_BUFFER_TYPE=NONE
属性。

•
使用
MMCM
时,可以从时钟向导中选择
“Safe Clock Startup”
选项,以确保只有在设计时钟稳定可靠之后才能使能
设计时钟。以下示例显示了连接到
BUFGCE
的
CE
引脚的
UltraScale
器件
MMCM LOCKE D
信号的同步阶段,该引
脚驱动用户逻辑。第二个
BUFGCE
并行连接到高扇出
BUFGCE
(用户时钟),专用于控制
BUFGCE/CE
引脚的逻
辑。此拓扑结构通过最小化同步器和
BUFGCE
引脚之间的时钟偏移,有助于
UltraScale
器件中的
BUFGCE/CE
时序
收敛。

提示:
如果
MMCM
或
PLL
补偿模式设置为
ZHOLD
或
BUF_IN
,则来自
CLKOUT0
的所有时钟都与反馈时钟分组,并使
用相同的
CLOCK_ROOT
。如果这在
BUFGCE/CE
上引入了时序违规,则仅在高扇出时钟和反馈时钟之间创建
CLOCK_DELAY_GROUP
约束。或者,您还可以将低扇出时钟网络上的
USER_CLOCK_ROOT
约束设置为与
MMCM
相同
的时钟区域。对于
7
系列器件,由于不同的时钟架构,通常不需要第二个时钟缓存来帮助时序收敛。
•
在设计的关键部分 (例如状态机)上使用时钟使能,本地复位 (同步)或两者,以确保设计的这些部分的启动受
控和已知。