时钟结构设计
现在已经清楚地说明时钟决策的主要考虑因素,下面将介绍如何为设计提供需要的时钟。
推断
无需用户干预,
Vivado
综合工具就可以自动为所有时钟结构设定全局缓存
(BUFG)
,直到架构允许的最大数量(除非用
综合工具另行设定或加以控制)。如前文所述,
BUFG
能够提供满足大多数时钟需求的、受控良好的低偏差网络。除非
器件上的
BUFG
数量或功能无法满足设计的时钟要求,无需另行干预。
但是如果对时钟结构施加额外控制,在抖动、偏差、布局、功耗、性能或其它方面可能会获得更优异的特性。
综合约束和属性
控制时钟资源的简单方法是使用
CLOCK_BUFFER_TYPE
综合约束或属性。综合约束可以用于:
•
防止
BUFG
推断。
•
用替代性时钟结构取代
BUFG
。
•
设定某种以其它方式无法实现的时钟缓存。
使用综合约束,无需对代码进行任何修改,就可以实现此类控制。
属性可布局在任意下列位置之一:
•
直接布局在
HDL
代码中,这样属性就可以一直存在于代码中
•
作为
XDC
文件中的约束,这样无需修改源
HDL
代码就能实现此类控制。
IP
的使用
某些
IP
对创建时钟结构有帮助。
Clocking Wizard
和
I/O Wizard
专用于协助时钟资源和结构的选择和创建,包括:
• BUFG
• BUFGCE
• BUFGCE_DIV (UltraScale
器件
)
• BUFGCTRL
• BUFIO (7
系列器件
)
• BUFR (7
系列器件
)
•
时钟修改块,如:
°
混合模式时钟管理器
(MMCM)
°
锁相环
(PLL)
组件
存储器接口生成器
(MIG)
、
PCIe
或收发器向导等更复杂的
IP
也可囊括时钟结构,当作总体
IP
的一部分。如果适当加以
考虑,这也可以提供额外的时钟资源。但如果不加考虑,可能会限制设计其余部分的某些时钟选项。
赛灵思强烈建议对任何实例化的
IP
均应良好掌握其时钟的要求、功能和资源,并尽量在设计中的其余部分加以运用。
如需了解更多信息,请参阅
“
充分利用
IP
核
”
。
实例化
最低级也是最直接的控制时钟结构的方法是将所需的时钟资源实例化到
HDL
设计中。这样就可以使用器件的全部功能
并对它们施加绝对的控制。在使用
BUFGCE
、
BUFGMUX
、
BUFHCE
或其它需要额外逻辑和控制的时钟结构时,实例化
通常是不二之选。但是即便是对简单的缓存而言,有时候取得所需结果最迅捷的方法还是直截了当地把它实例化于设
计中。
一种有效管理时钟资源的方法 (特别是在实例化时)是将时钟资源限定在单独实体或模块中,在代码顶层或顶层附近
实例化。通过将时钟资源置于代码顶层,就可将代码更方便地分配给设计中的多个模块。
应该注意可以共享且应该共享时钟资源的地方。创建冗余时钟资源不仅是资源浪费,而且通常会造成更多能耗,带来
更多潜在冲突和布局决策,导致执行工具运行时间延长,以及更加复杂的时序状况。这也是为什么把时钟资源置于顶
层模块附近的又一重要原因。