前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FPGA时序约束实战篇之衍生时钟约束

FPGA时序约束实战篇之衍生时钟约束

作者头像
猫叔Rex
发布2020-06-30 12:23:31
9660
发布2020-06-30 12:23:31
举报
文章被收录于专栏:科学计算

约束衍生时钟

  系统中有4个衍生时钟,但其中有两个是MMCM输出的,不需要我们手动约束,因此我们只需要对clk_sampspi_clk进行约束即可。约束如下:

代码语言:javascript
复制
create_generated_clock -name clk_samp -source [get_pins clk_gen_i0/clk_core_i0/clk_tx] -divide_by 32 [get_pins clk_gen_i0/BUFHCE_clk_samp_i0/O]
create_generated_clock -name spi_clk -source [get_pins dac_spi_i0/out_ddr_flop_spi_clk_i0/ODDR_inst/C] -divide_by 1 -invert [get_ports spi_clk_pin]

这里需要注意的是,如果该约束中使用get_pins(即产生的时钟并非输出到管脚),那么无论是source的时钟还是我们衍生的时钟,在get_pins后面的一定是这个时钟最初的产生位置。在视频中我们会具体展示)。

  我们再运行report_clocks,显示如下:

我们在理论篇的“create_generated_clock”一节中讲到,我们可以重新设置Vivado自动生成的衍生时钟的名字,这样可以更方便我们后续的使用。按照前文所讲,只需设置namesource参数即可,其中这个source可以直接从report_clocks中得到,因此我们的约束如下:

代码语言:javascript
复制
create_generated_clock -name clk_tx -source [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKIN1] [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT1]
create_generated_clock -name clk_rx -source [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKIN1] [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT0]

  大家可以对比下report_clocks的内容和约束指令,很容易就能看出它们之间的关系。

把上述的约束指令在tcl中运行后,我们再运行一遍report_clocks,显示如下:

在时序树的分析中,我们看到,clk_sampclk2两个异步时钟之间存在数据交互,因此要进行约束,如下:

代码语言:javascript
复制
set_clock_groups -asynchronous -group [get_clocks clk_samp] -group [get_clocks clk2]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 傅里叶的猫 微信公众号,前往查看

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

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

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