美文网首页IC数字后端知识角STA知识点复习
Multicycle Path怎么设?看这篇就够了

Multicycle Path怎么设?看这篇就够了

作者: 飞奔的大虎 | 来源:发表于2022-07-15 14:17 被阅读0次

今天咱们不聊电路设计,聊聊STA上的知识点multicycle path(多周期路径),这算是STA约束中比较有技巧的部分,在写约束的时候一定要对电路和约束command了解得非常清楚,否则约束设不对,很可能造成timing出问题导致芯片无法正常工作。

我们先来说说什么是multicycle path。通常情况下,在同一个时钟驱动下的寄存器之间信号的传输都是单周期的。如下图所示

图1,single cycle示意图

也就是说,当0时刻时钟上升沿来临后,FF1的Q变化,再经过中间的组合逻辑电路,我们期望这个值是在10时刻的时钟沿被FF2采到。

但是在有的电路设计中,要么是有意为之,要么是单周期无法close timing,我们会遇到下面的电路

图2 multicycle 示意图

其中FF4的Q变化要经过2个周期才能被FF5的D采样到,这个时候我们就要告诉STA工具,这个path不是单周期的,需要2个周期。在Prime Time中,这个command 是set\_multicycle\_path。

我们先看set\_multicycle\_path有哪些主要参数(具体全部参数请参阅STA工具的command line reference)

set_multicycle_path path_multiplier [-setup|-hold]

                    [-start|-end]

                    -from <StartPoint>

                    -through <ThroughPoint>

                    -to <EndPoint>

其中这个path\_multiplier就是我们接下来重点要看的。

首先我们先说default值,也就是说什么都不设,这个path\_multiplier对于setup来说是1,hold是0,也就是我们上面单周期的约束情况。我们在设计multicycle的时候,重点就是调整这个path\_multiplier。

-setup和-hold是让你分别来指定setup和hold的多周期值,注意,如果你只设了setup的值而没有设hold的值,那么hold的值也会相应的进行改变,这个我们在下面的例子里会讲到。

-start和-end只在不同频率的clock分析中会用到,即launch path的clock和capture path的clock是不同频率时才能用,对于launch path和capture path的寄存器都是同一个clock的电路,-start和-end不需要指定,因为没有意义。这里你可能会问,不同频率的时钟那不是异步电路了吗,是不是要跨时钟域做CDC,还能做STA吗?答案是不一定,不同频率依然可以是同步电路,即时钟沿是对齐的(回看面试题分析 -- 时钟分频电路)。另一方面,同一个频率的两个clock也可能是异步电路,关键是看时钟沿对齐没有。

-from/through/to就是大家熟悉的指定timing path的起始,经过和终止路径,一般在约束特定路径的时候有用。

好,我们先看简单情况,即同一个clock的multicycle path设置。

图3, setup 1, hold 0

这种情况下其实就是默认的,你可以什么都不设,对应的其实就是

set_multicycle_path 1 -setup  -from CLK1 -to CLK2

set_multicycle_path 0 -hold  -from CLK1 -to CLK2

那我们看下面的情况,也就是setup需要5个周期

图4,setup 5, hold 0

set_multicycle_path -setup 5 -from CLK1 -to CLK2

注意,如果你不设置-hold,那么会自动调整为setup的沿的前一个沿。也就是说,其实如果只设了上面这这一条,hold的timing不是CLK1的0时刻对应的时钟沿,而是4时刻对应的时钟沿。

那么相应的,如果你要下面这种情况呢?你就必须得写hold 的set\_multicycle\_path了

图5, setup 5, hold 4

set_multicycle_path 5 -setup  -from CLK1 -to CLK2

set_multicycle_path 4 -hold  -from CLK1 -to CLK2

注意hold的cycle是相对于setup path的沿往前算的,也就是说CLK2的setup capture edge为1,前一个沿为0,也就是默认的值,而如果你要继续往前面的沿来设就要调整multiplier的值,上面这个图老李把cycle值标在CLK2的下面了,便于大家理解。

-

好,这就是同一个clock或者同频率同步clock的设法。我们下面来看不同频率的clock的设法。先来看从慢时钟到快时钟,假设慢时钟是快时钟的3分频。

默认情况下,如果不设multicycle path,setup/hold是这么分析的

图6, setup 1(-end), hold 0(-start)

这也好理解,setup就是下一个沿,hold就是对齐的那个沿。如果要用multicycle path写出来,就是

set_multicycle_path 1 -setup  -end  -from CLK1 -to CLK2

set_multicycle_path 0 -hold  -start -from CLK1 -to CLK2

这里要注意-end和-start的用法,-end是指capture flop的clock,-start是指launch flop的clock。默认的,-setup是对-end,也就是上面CLK2的1个周期之后,而-hold是对-start,也就是CLK1的0时刻的上升沿。在调整周期数的时候,一定要分清是针对哪一个CLK来调整。

看下面的setup的多周期例子

图7, setup2(-end), hold 0(-start)

可以看到,setup要变成CLK2的2个周期,所以约束要写成

set_multicycle_path 2 -setup  -end   -from CLK1 -to CLK2

如果你不写hold的约束,那么hold会自动根据setup调整。

那你如果想做下面图8的check

图8, setup 2(-end), hold 1(-end)

你是不是以为把hold的周期数调整了就好了呢?

set_multicycle_path 1 -hold -from CLK1 -to CLK2

错!这里要注意,前面说过,hold默认的是start clock,如果你按照上面第一句来写,那么实际上是相对CLK1移了一个周期

那么实际check就变成了

图9, setup 2(-end), hold 1(-start)

那么要怎么正确设置图8的约束呢,这个时候我们要调整的是hold,要依据CLK2的周期来调整,要加-end选项。

set_multicycle_path 2 -setup  -end  -from CLK1 -to CLK2

set_multicycle_path 1 -hold  -end  -from CLK1 -to CLK2

-

好,我们再来看从快时钟到慢时钟的写法,还是以3分频为例。

先看默认的check是什么

图10, setup 1(-end), hold 0(-start)

那如果只调整setup的周期数,注意这里的多周期是对CLK1而言的

set_multicycle_path 2 -setup  -start  -from CLK1 -to CLK2

会check什么呢?

hold会相应调整,而且是以CLK1的变化调整。

图11, setup 2(-start), hold 0(-start)

要想把hold的沿对齐,那就要用下面的约束

图12, setup 2(-start), hold 1(-start)

set_multicycle_path 2 -setup  -start  -from CLK1 -to CLK2

set_multicycle_path 1 -hold  -start  -from CLK1 -to CLK2

总结一下

对于同频率的多周期电路约束,不需要用-start和-end。先设置setup的周期数,假设setup周期数是X,那么如果要想check最worst的hold情况,就要把hold的周期数设为X-1。即

set_multicycle_path X  -setup  -from CLK1 -to CLK2

set_multicycle_path X-1 -hold  -from CLK1 -to CLK2

对于慢时钟到快时钟,如果多周期是针对快时钟的,对于setup 可以加-end也可以不加,假设setup周期数是X, 而对于hold如果想check沿对齐的情况,必须加-end选项,周期数为X-1。

set_multicycle_path X  -setup  -end  -from CLK1 -to CLK2

set_multicycle_path X-1 -hold  -end  -from CLK1 -to CLK2

对于从快时钟到慢时钟,如果多周期是针对快时钟的,对于hold可以加-start也可以不加,但是对于setup周期数一定要加-start

set_multicycle_path X  -setup  -start  -from CLK1 -to CLK2

set_multicycle_path X-1 -hold  -start  -from CLK1 -to CLK2

原文链接:https://aijishu.com/a/1060000000206169

相关文章

  • Multicycle Path怎么设?看这篇就够了

    今天咱们不聊电路设计,聊聊STA上的知识点multicycle path(多周期路径),这算是STA约束中比较有技...

  • set_multicycle_path

    一、set_multicycle_path命令 命令格式如下: set_multicycle_path path_...

  • linux设置环境变量

    在当前终端设置临时变量(退出后再进入就没有了)export PATH=/home/me/vault:$PATH 设...

  • Python Web 怎么学,看这篇就够了!

    1. 憋了3天了,今天放个web好了,相信很多读者都有关注web开发,那我们今天就来聊聊web怎么学,学什么。2....

  • Python Web怎么学,看这篇就够了!

    Python目前应用领域实在太多,这也是他这么火的原因吧。我认为目前Python作为应用领域来说几个方向是值得肯定...

  • 电脑配置怎么选,看这篇就够了

    电脑作为我们日常生活中必不可少的生产力工具,但是我们很多人对于电脑的各项配置并不是那么的熟悉,这篇文章就是告诉你如...

  • 前端,看这篇就够了

    转载说明 结合个人经历总结的前端入门方法,总结从零基础到具备前端基本技能的道路、学习方法、资料。由于能力有限,不能...

  • JVM看这篇就够了

    概念 虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实...

  • 板材?看这篇就够了

    写了不少关于木作方面的文章,总有人对板材辨别感到头晕脑涨。我向别人介绍的时候通常要费好大劲,才能把所讲的板材知识讲...

  • JavaGC,看这篇就够了

    1. 什么是JavaGC Java GC(Garbage Collection,垃圾回收)机制,顾名思义,就是Ja...

网友评论

    本文标题:Multicycle Path怎么设?看这篇就够了

    本文链接:https://www.haomeiwen.com/subject/gljrbrtx.html