组合逻辑生成的时钟,在FPGA设计中应该避免,尤其是该时钟扇出很大或者时钟频率较高,即便是该时钟通过BUFG进入全局时钟网络。
组合逻辑生成时钟的典型特征是在网表中我们能够看到LUT(查找表)的输出直接连接或通过BUFG连接到时序逻辑单元比如触发器的时钟端口。最直接的危害是组合逻辑可能会产生毛刺(Glitch),从而导致电路功能错误。看个案例,如下图所示。由于毛刺的存在,计数器多计数了一次,导致错误。
从时序角度而言,组合逻辑生成的时钟会增加时钟线上的延迟,从而导致过大的Clock Skew,最终造成建立时间和保持时间违例。此外,如果有毛刺,毛刺通常很窄,很可能无法满足触发器的Pulse Width要求。还有的工程中尽管没有直接把LUT的输出当作时钟,而是将其通过一个触发器之后再用作时钟,这可以过滤掉毛刺,但同样会增加时钟线上的延迟,导致Clock Skew过大。因此,在FPGA设计中,要避免此类时钟。
拿到一个网表,如何判定设计中是否包含此类时钟呢?从上面的描述可以看到,这类时钟要么是LUT输出,要么是触发器输出,这是第一个特征。第二个特殊,既然是时钟,时钟网线的类型就是LOCAL_CLOCK,根据这两点就能找到时钟管脚,相应的Tcl脚本如下图所示。
代码第2行是找到所有的时钟网线,第3行对该时钟网线进行过滤筛选,凡是与网线相连的pin是输出端口且其REF_PIN_NAME是O(对应LUT输出)或Q(对应触发器输出)的,即为目标时钟端口。代码第4行则是将找到的对象以图形界面方式显示出来。
找到了这类时钟,如何优化呢?如果这类时钟是在MMCM或PLL可生成频率范围内,那么建议用MMCM或PLL生成,尤其是该时钟扇出比较大的时候。如果MMCM或PLL无法生成,且时钟频率很低,例如低于5MHz,而设计已经到了后期,不太可能大范围修改,那么尝试是否可能将该时钟驱动的逻辑都放在一个时钟区域内,同时保证时钟源也在该时钟区域内,这可通过手工布局的方式(画Pblock)实现。这样做对于降低Clock Skew会有些帮助。
Tcl之$$a 80%的概率......AI Engine到底是什么?ACAP不可不知的几个基本概念
嵌套的for循环,到底对哪个执行pipeline更好
HLS中循环的并行性(2)
HLS中循环的并行性(1)
HLS优化方法DATAFLOW你用了吗
HLS中如何控制流水程度
Vivado HLS学习资料有哪些
如何查看可综合C代码的中间结果
如何在C代码中插入移位寄存器
HLS IP Library? HLS Math Library:csim ?C/RTL co-sim(2)HLS Math Library:csim ?C/RTL co-sim(1) 加法树还是加法链?两个数相加,三个数相加有什么不同
加法运算很简单?AXI-4 Lite与AXI-4 Memory Mapped有什么区别?深入理解AXI-4 Memory Mapped 接口协议AXI是Interface还是Bus?如何阅读时序报告时序报告要看哪些指标如何使set_max_delay不被覆盖一些小巧的IPIP是用DCP还是XCI?如果使用第三方综合工具,Xilinx IP…IP生成文件知多少IP的约束需要处理吗?IP为什么被Locked?copy_ip你用过吗?IP是XCI还是XCIX 如何降低OSERDES/CLK和CLKDIV的Clock Skew如何获取Device DNA谈谈设计复用过约束到底怎么做时序收敛之Baseline什么情况下要用OOC综合方式异步跨时钟域电路该怎么约束如何复用关键路径的布局布线信息Vivado学习资料有哪些?异步跨时钟域电路怎么设计 ECO都有哪些应用FPGA中的CLOCK REGION和SLR是什么含义FPGA中的BEL, SITE, TILE是什么含义约束文件有哪些 如何高效复用Block的位置信息? 如何复用关键寄存器的位置信息 部分可重配置都生成哪些.bit文件VIO你用对了吗Device视图下能看到什么Schematic视图下能看到什么都是pin,有什么区别都是net,有什么区别 如何快速查找目标cell学习笔记:深度学习与INT8学习笔记:多层感知器学习笔记:单层感知器的局限性 学习笔记:单层感知器基础知识 学习笔记:神经网络学习算法学习笔记:神经网络模型 学习笔记:ReLU的各种变形函数学习笔记:神经元模型(2)学习笔记:神经元模型(1)学习笔记:深度学习之“深” 学习笔记:深度学习之“学习”学习笔记:人工智能、机器学习和深度学习2019文章汇总 文 | Lauren 图 | Lauren Copyright @ Lauren的FPGA 转载事宜请私信 | 获得授权后方可转载