前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >create_clock你用对了吗

create_clock你用对了吗

作者头像
Lauren的FPGA
发布2019-11-06 11:52:14
8.1K0
发布2019-11-06 11:52:14
举报
文章被收录于专栏:Lauren的FPGALauren的FPGA
毋庸置疑,create_clock是最基本、最简单的时序约束命令,而且在FPGA设计中必然会用到。但看似简单的命令,却也常常被用错。这里我们就来回答一些常见的问题。

问题1:什么样的时钟需要用create_clock约束?

有三类时钟时钟需要用create_clock进行约束,分别是:

从全局时钟管脚进来的主时钟(Primary Clock)

7系列FPGA高速收发器输出时钟(RXOUTCLK/TXOUTCLK)

用于接口约束的虚拟时钟(Virtual Clock)

问题2:什么是虚拟时钟(VirtualClock)?

虚拟时钟,顾名思义,在实际设计中并不存在的时钟,主要用于输入、输出接口的约束。这里给出一个虚拟时钟案例,如下图所示。

问题3:如何约束高速收发器的输出时钟?

这里要分两种情况进行讨论。对于7系列FPGA,需要约束GT的RXOUTCLK和TXOUTCLK,具体约束如下图所示。事实上,只有在这种情形下create_clock命令才会和get_pins命令结合使用(通常是和get_ports一起使用)。

对于UltraScale系列FPGA,只用约束参考时钟即可。Vivado会自动推断GT的生成时钟约束。

问题4:如何约束差分时钟?

对于差分时钟,一定会用到IBUFGDS,只用约束P端。工具会据此自动将此约束传播到IBUFGDS的输出端口。如果既约束P端又约束N端,工具会认为这是两个独立的时钟,进而分析相应的内部路径,最终导致错误的时序需求(Requirement)。

问题5:create_clock的时钟定义在BUFG的输出端会有什么影响?

在Vivado中,这两条约束是不同的,因为它们定义了不同的零时刻起点。这个零时刻起点是用来计算Clock Latency和Uncertainty的,而这两个值又是用来计算Slack的。换言之,零时刻起点直接影响了Slack的计算。通常,Vivado会忽略零时刻起点上游所有时钟树的延迟。如果在BUFG的输出端定义主时钟,那就意味着只有部分Latency会被使用。如果该时钟与其他时钟有交互,那么它们之间的Clock Skew将不再准确,最终影响Slack的准确度。

结论:

对于从全局时钟管脚进来的时钟,create_clock会和get_ports结合使用;

对于7系列高速收发器的输出时钟,create_clock会和get_pins结合使用;

对于虚拟时钟,create_clock会单独使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lauren的FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档