高级时钟约束

时序的零起点

用create_clock定义的主时钟的起点即时序的“零起点”,在这以前的上游路径都会被工具自动忽略。所以主时钟在哪个“点”很重要,以下图所示结构来举例,分别于FPGA输入端口和BUFG输出端口创建一个主时钟,在时序报告中体现出的路径延时完全不同,很明显sysclk_bad的报告中缺少了之前的一段的延时,时序报告不可信。

时钟定义的先后顺序

在同一个点上,由用户定义的时钟会覆盖工具自动推导的时钟,且后定义的时钟胡覆盖先定义的时钟。若要二者并存,必须使用-add选项。

Create_clock -name sysclk -period 10 [get_ports sys_clk]

Create_generated_clock -name clkbufg -source [get_ports sys_clk] -divide_by 1\

[get_pins clk_infra_i/clkfsm_buf/o]

Create_generated_clock -name clkbufr -source [get_ports sys_clk] -divide_by 1\

[get_pins clk_infra_i/clkfsm_buf/o] -add -master_clock sysclk

上述例子中的BUFG的输出端由用户自定义了一个衍生时钟clkbufg,这个衍生时钟会覆盖此处原有的sysclk。此外,图示BUFR工作在bypass模式,其输出不会自动创建衍生时钟,但在BUFR的输出端定义一个衍生时钟clkbufr,并使用-add和-master_clock选项后,这一点上会存在sysclk和clkbufg两个重叠的时钟。

同步时钟和异步时钟

不同于UCF约束,在XDC中,所有的时钟都会被缺省认为是相关的,也就是说,网表中所有存在的时序路径会被VIVADO分析。这也就意味着FPGA设人员必须通过约束告诉工具,哪些路径是无需分析的,哪些时钟域之间是异步的。

如上图所示,两个主时钟ssclkin和sysclk由不同的端口进入FPGA,在经过不同的时钟网络传递,要将它们设成异步时钟,可以使用下面的约束:

set_clock_groups -name sys_ss_async -asynchronous -group\

[get_clocks -include_generated_clocks sysclk] -group \

[get_clocks -include_generated_clocks ssclkin]

其中,-include_generated_clocks表示所有衍生时钟自动跟主时钟一组,从而与其他组的时钟时间为异步关系。不加这个选项则仅仅将时钟关系的约束应用在主时钟层面。

重置(单点多个)时钟

重置时钟是指多个时钟共享完全相同的时钟传输网络,例如两个时钟经过一个MUX选择后输出的时钟。

如下图所示,clk125个clk250是clkcore_buf的两个输入时钟,不约束时钟关系的情况下,VIVADO会对图示路径做跨时钟域分析。这样的时序报告即便没有违例,也是不可信的。因为clk125个clk250不可能同时驱动这条路径上的时序原件。这么做也会增加运行时间,并影响最终的实现结果。

如果clk125和clk250除了通过clkcore_buf后一模一样的删除外没有驱动其他时序元件,则只需要补齐时钟关系的约束。

set_clock_groups -physically_exclusive -group [get_clocks clk125]\

-group [get_clocks clk250]

在很多情况下,除了共同的扇出,其中一个时钟域或两个都还驱动其他的时序元件,此时建议的做法是在clkcore_clk的输出端建立两个重叠的衍生时钟,并将其时钟关系约束为-physically_exclusive表示不可能同时通过。这样做可以最大化约束覆盖率,也是ISE和UCF无法做到的。

create_generated_clock -name clk125_bufgctrl\
-divide_by 1 [get_pins bufgctrl_i/o]\
-source [get_ports bufgctrl_i/I0]
create_generated_clock -name clk250_bufgctrl
-divide_by 1 [get_pins bufgctrl_i/o]\
-source [get_ports bufgctrl_i/I1]\
-add -master_clock clk250
set_clock_groups -physically_exclusive \
-group clk125_bufgctrl\
 -group clk250_bufgctrl

原文发布于微信公众号 - 瓜大三哥(xiguazai_tortoise)

原文发表时间:2017-01-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Timhbw博客

《Pro Git》学习笔记连载(一.起因)

2016-11-1619:39:45 发表评论 299℃热度 《Pro Git》这本书可谓是学习进阶Git的最好材料了,之所以阅读这本书,是因为虽然用Git,...

31211
来自专栏韩伟的专栏

帧同步游戏开发基础指南

最近一个月休了个假,体验了一下类似欧洲的田园生活。所以更新几乎荒废了,但是总结和积累是一直持续着的。根据前一阶段对于实时对战游戏的开发思考,写了这一篇入门级的文...

7607
来自专栏王清培的专栏

.NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(一)

阅读目录: 1.开篇介绍 2.Model与View的使用关系(数据上下文DataContext与View呈现) 3.Metadata元数据驱动设计(如何使用中间...

2136
来自专栏软件成本造价评估

软件项目造价评估时的数据类别有哪些?

软件项目造价评估时的数据类别都有哪些分类呢?通常,在进行软件造价时的数据类别可分为3类:业务数据、引用数据、编码数据。 业务数据:也称为用户的核心数据...

1540
来自专栏Java架构师进阶

阿里优酷面试经历——学无止境

最近几周与阿里的面试官聊了聊,趁着我还有记忆先写下来。本人近5年工作的JAVA程序员,技术不精。大伙不必太过吐槽。哈哈。我曾两次时间投过简历。

1435
来自专栏喔家ArchiSelf

探索嵌入式应用框架(EAF)

EAF是Embedded Application Framework 的缩写,即嵌入式应用框架。嵌入式应用框架是 Application framework的一...

1613
来自专栏北京马哥教育

“全民K歌”有什么秘密?网站数据分析之数据的获取

最近看到身边好几个朋友都在用“全民K歌”这款软件在手机上K歌,使用频率还是很高,于是就想来看看全民K歌平台的用户究竟是一群什么样的用户?他们有什么样的特征。然后...

3806
来自专栏Java架构

Java程序员从阿里、京东面试回来,这些面试题你会吗?

最近有很多朋友去目前主流的大型互联网公司面试(阿里巴巴、京东-美团),面试回来之后会发给我一些面试题。有些朋友轻松过关拿到offer,但是有一些是来询问我答案的...

1272
来自专栏腾讯移动品质中心TMQ的专栏

测试分析?就这么简单!

什么是测试分析? 在软件测试过程中,以最小的成本将软件质量风险降至最低,这就是精准测试。宏观上,测试分析是响应精准测试的实践,贯穿整个测试过程,并对整个测试过程...

2919
来自专栏小程序解决方案的专栏

Wafer1 和 Wafer2 有什么不同?

2017 年初,随着微信小程序横空出世,腾讯云微信小程序解决方案也一同上线,鉴于初期微信只允许企业和机构注册小程序账号,所以我们与微信团队合作,为企业和机构定制...

8.2K4

扫码关注云+社区

领取腾讯云代金券