0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

经过BUFGMUX的时钟该如何约束

傅里叶的猫 来源:傅里叶的猫 2023-12-19 12:56 次阅读

我们先看UG949中举的例子:

时序场景如下图所示,clk0和clk1两个时钟输入,经过BUFGMUX后,输出到后面的逻辑,但同时clk0和clk1还分别驱动了其他逻辑。

17734b18-9e24-11ee-8b88-92fbcf53809c.png

此时,如果路径A/B/C都不存在,其中A路径表示clk0与选择器输出的时钟之间的数据交互,B路径表示clk1与选择器输出的时钟之间的数据交互,C路径表示clk0和clk1之间的数据交互,那么使用下面的约束就可以了:

set_clock_groups-logically_exclusive-groupclk0-groupclk1

如果clk0和clk1之间有数据交互,则需要使用下面的约束:

create_generated_clock-nameclk0mux-divide_by1
-source[get_pinsmux/I0][get_pinsmux/O]
create_generated_clock-nameclk1mux-divide_by1
-add-master_clockclk1
-source[get_pinsmux/I1][get_pinsmux/O]
set_clock_groups-physically_exclusive-groupclk0mux-groupclk1mux

这里我们解释一下logically_exclusive和physically_exclusive的区别:

-logical_exclusive

logical_exclusiveisusedfortwoclocksthataredefinedondifferentsourceroots.
Logicallyexclusiveclocksdonothaveanyfunctionalpathsbetweenthem,butmighthavecouplinginteractionswitheachother.
Anexampleoflogicallyexclusiveclocksismultipleclocks,whichareselectedbyaMUXbutcanstillinteractthroughcouplingupstreamoftheMUXcell.
Whentherearephysicallyexistingbutlogicallyfalsepathsbetweenthetwoclocks,use"set_clock_groups-logical_exclusive".

-physical_exclusive

physical_exclusiveisusedfortwoclocksthataredefinedonthesamesourcerootby"create_clock-add".
Timingpathsbetweenthesetwoclocksdonotphysicallyexist.
Asaresultyouwillneedtouse"set_clock_groups-physical_exclusive"tosetthemasfalsepaths.

简而言之,logical_exclusive用于选择器的电路,两个时钟的source不一样;而physical_exclusive两个时钟的source是一样,比如在同一个时钟输入口,但可能会输入两个不同的时钟。

下面我们来看下为什么要这样约束。

我们先来复习一下set_clock_groups的用法,set_clock_groups后面可以加的参数有三个,除了logically_exclusive和physically_exclusive,还有我们最常用的-asynchronous,无论后面是哪个参数,set_clock_groups就是让工具不去分析我们后面约束的时钟组,只是这三个参数的应用场景略有不同。

在第一个场景中,clk0和clk1之间没有数据交互,因此工具不需要分析它们之间的路径,而且它们后面有时钟选择器,符合logical_exclusive的使用场景,因此约束是

set_clock_groups-logically_exclusive-groupclk0-groupclk1

在第二个场景中,clk0和clk1之间是有数据交互的,就不能直接把这个时钟设置clock group,但经过MUX之后的时钟,只会有一个存在,这两个时钟之间肯定是不存在交互的,所以这两个时钟需要设置clock group,而这两个时钟有same source root,因此使用的参数是physical_exclusive。

有同学可能会问,对于第一个场景,MUX之后的时钟也是只存在一个,为什么不需要再分别generate clock,然后设置physical_exclusive呢?

我个人理解,这就跟时钟传播有关系,什么情况下时钟不向后传播:

Thesourcelatencypathsdonotflowthroughsequentialelementclockpins,transparentlatchdatapins,orsourcepinsofothergeneratedclocks.

选择器既不是sequential element,也不是latch,因此只要我们后面没有create generated clock,那么时序路径就可以继续向后传播,我们已经设置了前面的两个时钟的logically_exclusive,因此后面的电路,只要时钟路径没有断,那就都存在logically_exclusive。

需要注意一点:create_clock或者create_generated_clock之后,原来在当前点传播的clk不在向后传播

因此,针对上面的电路,假设clk0和clk1之间有数据交互,我们还可以用下面的方法约束:

1795cbb6-9e24-11ee-8b88-92fbcf53809c.png

在pinI0和pinI1处,我们create一个generated_clock,这样clk0和clk1就不再向mux传播,但FD0和FD1仍然是clk0和clk1所在的时钟路径。(下面默认clk0和clk1已经create)

create_generated_clock-nameclk_I0
[get_pinsmux/I0]
-master_clockclk0
-divide_by1
-source[get_portspinclk0]
-add
create_generated_clock-nameclk_I1
[get_pinsmux/I1]
-master_clockclk1
-divide_by1
-source[get_portspinclk1]
-add

set_clock_groups-logically_exclusive-groupclk_I0-groupclk_I1

在网上还看到有个说法,而且已经经过了DC工具的验证:set_clock_groups的三个参数asynchronous、logically_exclusive和physically_exclusive的实际作用是一样的,都是设成异步,因此上面的约束中,这三个参数可以随便用。

但是既然工具给出了三种参数的使用场景,那我们就应该按照场景来使用这三个参数。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 时钟
    +关注

    关注

    10

    文章

    1716

    浏览量

    131302
  • 约束
    +关注

    关注

    0

    文章

    82

    浏览量

    12708
  • 选择器
    +关注

    关注

    0

    文章

    106

    浏览量

    14511

原文标题:经过BUFGMUX的时钟该如何约束(更新)

文章出处:【微信号:傅里叶的猫,微信公众号:傅里叶的猫】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA时序案例分析之时钟周期约束

    时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个约束是我们用的最多的约束了,也是最重要
    的头像 发表于 11-19 11:44 5607次阅读
    FPGA时序案例分析之<b class='flag-5'>时钟</b>周期<b class='flag-5'>约束</b>

    FPGA时序约束之衍生时钟约束时钟分组约束

    在FPGA设计中,时序约束对于电路性能和可靠性非常重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的主时钟约束
    发表于 06-12 17:29 2578次阅读

    FPGA时钟周期约束讲解

    时钟周期约束是用于对时钟周期的约束,属于时序约束中最重要的约束之一。
    发表于 08-14 18:25 830次阅读

    FPGA altera 时钟约束和IO约束说明

    在设计以太网中继器时,因为没有配置时钟约束,导致中继器工作不正常。后面根据手册配置时钟约束解决了此问题。
    发表于 10-07 18:51

    FPGA时钟约束问题

    FPGA的DCM模块,40MHz时钟输入,得到clkout1 40MHz,clkout2 60MHz,clkout1 120MHz。对40MHz时钟添加了约束,系统不是会自动对三个输出时钟
    发表于 05-25 15:06

    BUFGMUX出现错误:地点:1108帮助/原因?

    ,clk_data_1 / 2/3 / 4_in仅连接到移位寄存器的时钟端口,即26位的移位寄存器(定制接口)。设计还使用位于X0Y0的GTP的单通道PCIe链路。 PCIe信号都被正确约束,并且与先前工作的设计保持
    发表于 10-17 12:00

    BUFGMUX定时时钟偏差太大

    。这一切都很好。现在我必须执行以下操作:根据某些控制逻辑,BRAM的portA和portB必须仅由C2提供时钟。所以我所做的就是把BUFGMUX放在portA前面输入到BRAM的前面。当控制逻辑为0
    发表于 06-18 09:30

    为什么使用并发赋值语句而不是BUFGMUX原语?

    原语是否有任何缺点,为什么语句有效,而BUFGMUX没有?谢谢!地点:1108 - 已发现时钟IOB / BUFGMUX时钟组件对未放置在最佳时钟
    发表于 07-31 10:10

    DCM输出时钟约束的示例

    您好,我正在分析使用Xilinx ISE 9.2 Service Pack 4为Spartan 3 FPGAT合成的现有设计的时序约束设计具有20 MHz的单时钟输入(sys_clk),用于
    发表于 05-01 15:08

    时钟约束的概念

    文章目录1、时钟约束的概念2、 DC中的时序约束参考文章时间又拖拖拖,随着追寻DFT的进度,DC的进度在经历了.dynopsys_dc.setup后,就停滞不前了,接下来本文就来介绍DC的约束
    发表于 11-17 06:56

    FPGA案例之衍生时钟约束

    约束衍生时钟 系统中有4个衍生时钟,但其中有两个是MMCM输出的,不需要我们手动约束,因此我们只需要对clk_samp和spi_clk进行约束
    的头像 发表于 11-17 16:28 2291次阅读
    FPGA案例之衍生<b class='flag-5'>时钟</b><b class='flag-5'>约束</b>

    时钟周期约束详细介绍

    时钟周期约束: 时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个
    的头像 发表于 08-05 12:50 3687次阅读

    详解数字设计中的时钟约束

    数字设计中的时钟约束 本文作者 IClearner 在此特别鸣谢 最近做完了synopsys的DC workshop,涉及到时钟的建模/约束,这里就来聊聊数字中的
    的头像 发表于 01-28 07:53 2847次阅读
    详解数字设计中的<b class='flag-5'>时钟</b>与<b class='flag-5'>约束</b>

    时序约束---多时钟介绍

    当设计存在多个时钟时,根据时钟的相位和频率关系,分为同步时钟和异步时钟,这两类要分别讨论其约束
    的头像 发表于 04-06 14:34 1163次阅读
    时序<b class='flag-5'>约束</b>---多<b class='flag-5'>时钟</b>介绍

    经过BUFGMUX时钟如何约束呢?

    时序场景如下图所示,clk0和clk1两个时钟输入,经过BUFGMUX后,输出到后面的逻辑,但同时clk0和clk1还分别驱动了其他逻辑。
    的头像 发表于 12-11 13:55 517次阅读
    <b class='flag-5'>经过</b><b class='flag-5'>BUFGMUX</b>的<b class='flag-5'>时钟</b><b class='flag-5'>该</b>如何<b class='flag-5'>约束</b>呢?