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

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

3天内不再提示

关于MUX时序约束的两个例子

冬至子 来源:黑的路白的路 作者:黑的路白的路 2023-12-01 16:04 次阅读

在不同的资料上看到关于MUX 的时序约束的两个示例,分享一下

例子1

一、MUX前没有逻辑电路的时钟结构

时钟设计的一般原则是在靠近时钟源头的地方将各种所用频率时钟都产生,再引给内部逻辑使用,并且最好用一个模块单独处理,所以两个输入时钟一般来自端口输入或PLL输出,在经过MUX前不驱动任何数字逻辑;

图片

首先创建两个源时钟:

create_clock –name clk1 –period $clk_period $clk1_src_pinadd
create_clock –name clk2 –period $clk_period $clk2_src_pin –add

对于MUX后面的约束,分为同步异步两种情况分开讨论:

异步

如果MUX的两个输入时钟是MUX后都可以不创建生成时钟,工具基于两个时钟分别进行时序分析,只需用set_clock_groups设定一下两个时钟的异步关系:

set_clock_groups –asynchronous –name clk_async –group “clk_1” –goup “clk2”

同步

对于MUX的两个输入时钟同步的情况,可以抽象成如下的结构:

图片

由于时钟只能穿过时序逻辑,对于时序逻辑的输出,STA工具认为是数据,所以分频reg的Q端必须要创建分频时钟;

由于该时钟定义点是时序器件,此时不能加-comb选项:

create_generated_clock –name clk_div $clk_div_pin –divide_by N –master clk_src –source $clk_src_pin –add

对于MUX后面的约束,存在以下几种约束方法:

1.MUX后面不创建生成时钟

由于MUX任何时候只能让一路通过,MUX后可不创建时钟,此时将clk_scr和clk_div设置为logical_exclusive即可;

set_clock_groups –logical_exclusive –name clk_div_logi_async –group “clk_src” –goup “clk_div”

由于时钟树的Last common point在MUX后,PT(prime time)会自动进行CRPR补偿,即使不设逻辑互斥,根据PT的分析结果看,也不会引入悲观分析;

2.MUX后创建一个生成时钟

由于clk_src的频率更高,所以以clk_scr为master_clock

此时加与不加-comb的区别:

(a)加-comb选项

create_generated_clock –name clk_mux0_clk_scr $mux_y_pin –devide_by 1 –master clk_scr –source $clk_scr_pin –add –comb

此时工具在追clk_mux0_clk_scr的source时会强制走组合路径,即通过MUX/I0,PT计算clock latency的时候MUX只分析MUX/I0;

(b)不加-comb选项

对于clk_mux0_clk_src这个生成时钟,PT计算其时钟树延迟(clock latency)时,会分别计算MUX的两个输入路径,选择对时序结果更悲观的,会引入过度的悲观;

在进行setup检查时,对capture clock latency计算会采用ckl_src → MUX/I0这条路径;在进行hold检查时,对capture clock latency 计算会采用ckl_src → DIV_N → MUX/I1的路径;对于launch 时钟latency的计算也会出现上述情况;

3.MUX后创建两个生成时钟

MUX后创建两个生成时钟,并且设physical_exclusive,这是更常见的做法

create_generated_clock –name clk_mux0_clk_scr $mux_y_pin –devide_by 1 –master clk_scr –source $clk_scr_pin –add –comb
create_generated_clock –name clk_mux1_clk_div $mux_y_pin –devide_by N –master clk_div –source $clk_div_pin –add

set_clock_groups –pysical_exclusive –name clk_mux_phy_async –group “clk_mux0_clk_scr” –goup “clk_mux1_clk_div”

二、MUX前有逻辑电路的时钟结构

如下图:时钟源clk_src在MUX前已经驱动部分逻辑,又对此时钟进行分频和选择,后面逻辑reg1、reg2的时钟需要切换,而且reg0跟reg1、reg2之间有路径交互;

图片

1.上述第一种约束方法,即MUX后面不创建生成时钟

会存在将reg0和reg1设成异步的问题,导致部分同步路径没有进行时序检查;

当MUX/I1选通的时候,reg0的时钟为clk_src,reg1的时钟为clk_div,而这两个clk是logical_exclusive的;

2.上述第二种约束方法,即MUX后面只创建一个生成时钟

由于生成时钟的master_clock设为I0传来的clk_src,会将I1传来的clk_div时钟挡住,工具无法用clk_div时钟进行分析和优化;

此时所有时钟树的Last common point在MUX前,工具无法进行 CRPR 补偿;

此时加与不加-comb的区别:

(a)加-comb选项

对于从reg0到reg1这条timing path的capture clock latecy,工具只会去分析经过MUX/I0的情况;

当MUX切换到I1时,由于经过寄存器DIV_N分频的路径一般比MUX/I0的路径延时要长,reg1的时钟树可能变长,这就可能导致setup不满足时序要求;

(b)不加-comb选项

同样对于reg0到reg1这条timing path,工具按照悲观原则去分析;

3.上述第三种约束方法,即MUX后面创建两个个生成时钟

虽然麻烦,但是最准确;

4.方法四

除了上述三种方法外,还有一种方法;如下图所示,在MUX/I0这一路插入一个buffer,在buffer后面创建一个生成时钟,然后和clk_div设置logical exclusive即可,MUX后面不需要再创建时钟;

图片

create_generated_clock –name clk_buffer $buffer_pin –devide_by 1 –master clk_src –source $clk_src_pin –add

set_clock_groups –logical_exclusive –name clk_buffer_div_logi_async –group “clk_buffer” –goup “clk_div

5.更复杂的情况

如果是比上述更复杂的情况,例如下图,DIV_N还有一路单独驱动reg3;对于这种结构,上述方法(4)就不适用了,因为当MUX选择I0的时候,存在reg2和reg3为异步的问题;

图片

总结

正确的约束,能让工具看到正确的路径;

但是当clk_src到MUX的两个输入延时几乎一致的时候,工具无论选择走哪路,差别都很小,也就几乎不会影响时序检查的结果了;所以电路真正实现还是要靠将两路做等长;

因此,尽量将时钟产生逻辑放在一个模块里面,且尽量放在功能逻辑之前;

例子2

如下图这个例子:

图片

约束1

create_clock -period 10 CLK

create_generated_clock -name CLKdiv2 -divide_by 2 UMUX/Y -source FFdiv2/CK –master CLK –add
create_generated_clock -name CLKdiv4 -divide_by 4 UMUX/Y -source FFdiv4/CK -master CLK –add

set_clock_groups -physically_exclusive -group {CLK} -group {CLKdiv2} –group {CLKdiv4}

这样约束会有几个问题:

(a)timing report中缺少master clock的group

这是因为每个create_generated_clock约束都会覆盖该点存在的任何其他时钟,除非它们也在该点创建了生成时钟并使用 -add 选项;

(b)Clock Source Latency Path问题

例如一条从FF1到FF2的setup timing path:launch path经过UMUX/C,capture path经过UMUX/A,如示例一中所述,悲观分析了;

这是因为create_generated_clock的-source选项指定的pin/port处,工具会查找上面存在的所有Clock以及它的相位关系,然后来确定哪个是master clock以及它的相位和generatedclock是否满足定义的相位关系(同相或反相),但它不会控制source latency path;

尽管我们为CLKdiv2_mux指定了“ -source FFdiv2/CK”,但它不会强制source latency path通过该引脚。相反,PT观察到在引脚FFdiv2/CK处存在与generated clock同相位的时钟CLK。然后,工具将搜索所有可能的同相路径,使其返回时钟源CLK,时钟源是名为CLK的输入端口;

由于这些是setup路径,因此返回输入端口CLK的最慢同相路径是通过FFdiv4的路径,最快的同相路径是通过未分频的路径;

图片

约束2

引导生成时钟的source latency路径的最佳方法是直接在分频reg的Q创建生成时钟;

create_clock -period 10 CLK

create_generated_clock -name CLKdiv2 -divide_by 2 FFdiv2/Q -source FFdiv2/CK
create_generated_clock -name CLKdiv4 -divide_by 4 FFdiv4/Q -source FFdiv4/CK

set_clock_groups -physically_exclusive -group {CLK} -group {CLKdiv2} –group {CLKdiv4}

约束3(crosstalk问题)

在上面的约束中,CLKdiv2和CLKdiv4不会同时出现,因此PT也不会分析他们之间的SI(物理互斥不会计算SI);然而在这两个时钟在MUX前是可以同时出现的;

图片

修改约束如下:

create_clock -period 10 CLK

create_generated_clock -name CLKdiv2 -divide_by 2 FFdiv2/Q -source FFdiv2/CK
create_generated_clock -name CLKdiv4 -divide_by 4 FFdiv4/Q -source FFdiv4/CK

create_generated_clock -name CLK_mux -combinational UMUX/A -source UMUX/A
create_generated_clock -name CLKdiv2_mux -combinational UMUX/B -source UMUX/B
create_generated_clock -name CLKdiv4_mux -combinational UMUX/C -source UMUX/C

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

    关注

    0

    文章

    37

    浏览量

    23223
  • SRC
    SRC
    +关注

    关注

    0

    文章

    60

    浏览量

    17801
  • 时序约束
    +关注

    关注

    1

    文章

    113

    浏览量

    13353
  • CLK
    CLK
    +关注

    关注

    0

    文章

    122

    浏览量

    16912
  • PLL电路
    +关注

    关注

    0

    文章

    91

    浏览量

    6281
收藏 人收藏

    评论

    相关推荐

    FPGA的IO口时序约束分析

      在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束时序例外
    发表于 09-27 09:56 1457次阅读

    FPGA时序约束之伪路径和多周期路径

    前面几篇FPGA时序约束进阶篇,介绍了常用主时钟约束、衍生时钟约束、时钟分组约束的设置,接下来介绍一下常用的另外
    发表于 06-12 17:33 995次阅读

    FPGA I/O口时序约束讲解

    前面讲解了时序约束的理论知识FPGA时序约束理论篇,本章讲解时序约束实际使用。
    发表于 08-14 18:22 925次阅读
    FPGA I/O口<b class='flag-5'>时序</b><b class='flag-5'>约束</b>讲解

    请教时序约束的方法

    我是一个FPGA初学者,关于时序约束一直不是很明白,时序约束有什么用呢?我只会全局时钟的时序
    发表于 07-04 09:45

    学习时序约束 遇到的问题,求助

    刚刚开始学习Altera FPGA的时序约束,照着特权同学的一个例子做的 但是出现了下面的问题工程代码:modulequest_test(clk,rst, led);input clk,rst
    发表于 03-20 12:51

    关于时序约束的文件

    关于静态分析和时序约束的文章
    发表于 07-17 12:12

    分享一个关于源同步接口时序分析与相移计算的例子

    PLL、DLL之类),可以产生两个33.33MHz的时钟,通常可以设置他们同频不同相,即相位可调,那么要达到图示的时序关系也显得比较容易。不过有时候愚夫即便有米也不一定有“炊”,还要看时序约束
    发表于 12-26 16:36

    关于时序约束

    时可以引用这个标识符,大大方便了派生时钟的定义。  一种特殊情况的周期约束是相关时钟。前面提到周期约束不会覆盖异步路径,如图1所示的D路径。但是如果两个时钟是“相关”的,则实现工具和时序
    发表于 02-03 14:13

    时序约束关于设置FALSE PATH

    时钟域的路径。 下面举例说明: 先看图1,MUX_1和MUX_2是两个多路选择器,MUX_1的使能端C接到时钟clk,MUX_2的使能端C接
    发表于 06-27 06:34

    关于 DDR时序约束常见的ERROR问题

    DDR时序约束常见的ERROR 时钟约束,在约束的模块中未找到定义的变量,这个一般是在IP核例化中出现,需要把原始文件加入到工程中。 ERROR:ConstraintSystem:59
    发表于 09-21 10:48

    时序约束时序分析 ppt教程

    时序约束时序分析 ppt教程 本章概要:时序约束时序分析基础常用
    发表于 05-17 16:08 0次下载

    时序约束用户指南

    时序约束用户指南包含以下章节: ?第一章“时序约束用户指南引言” ?第2章“时序约束的方法” ?
    发表于 11-02 10:20 0次下载

    FPGA中的时序约束设计

    一个好的FPGA设计一定是包含两个层面:良好的代码风格和合理的约束时序约束作为FPGA设计中不可或缺的一部分,已发挥着越来越重要的作用。毋庸置疑,
    发表于 11-17 07:54 2357次阅读
    FPGA中的<b class='flag-5'>时序</b><b class='flag-5'>约束</b>设计

    FPGA设计之时序约束

    上一篇《FPGA时序约束分享01_约束四大步骤》一文中,介绍了时序约束的四大步骤。
    发表于 03-18 10:29 1361次阅读
    FPGA设计之<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    浅谈时序设计和时序约束

      本文主要介绍了时序设计和时序约束
    的头像 发表于 07-04 14:43 790次阅读