静态时序分析-Multicycle约束

文章讨论了前端设计中为解决关键路径上的时序违例,采用双Cycle驱动和采样策略,并通过STA约束来放松时序检查。介绍了如何设置Multicycle路径以适应不同采样和驱动时钟周期的情况,包括慢时钟到快时钟和快时钟到慢时钟的同步设计案例。
摘要由CSDN通过智能技术生成

        有时,前端在一些关键路径上的设计,可能会出现两个时钟周期驱动和采样一拍数据,来放松关键路径上的时序,这样的设计在STA约束过程中,如果不放松,会导致Timing违例过大,无法收敛,此时的Timing由前端逻辑实现保证,STA约束即可释放,以达到STA出口。

双Cycle驱动采样典型电路

       双Cycle的驱动和采样电路,常见的为Lunch Reg和Capture Reg在D端会带有使能所存逻辑,如图3.2.1.1所示。

图3.2.1.1 典型双cycle采样电路结构

       Lunch寄存器在使能信号EN为1时,时钟有效沿到来后,将数据采样到Q,当EN信号为0时,Q端锁存。Capture寄存器同理,在EN信号为1时,采样Lunch寄存器驱动的信号,EN为0时,锁存Q端信号。如果要做到双周期采样,EN信号的翻转应为时钟周期的二分频。该电路的时序如图3.2.1.2所示。

图3.2.1.2 双cycle电路设计时序图

       MultiCycle的设置为对部分时钟有效沿不做setup或者hold检查,帮助清理Timing Violation,针对上述两拍出一个数据的设计,STA设置如下:

set_multicycle_path 2 -setup -from lunch_reg.clk to capture_reg.d

       此时设置从lunch reg的时钟端到capture reg的数据D端为multicycle,放松setup检查一拍,如图3.2.1.3所示。

图3.2.1.3 multicycle检查点

       按照上式设定STA约束后,Setup检查会放过一个cycle做路径的setup检查,如图3.2.1.3所示,红色线为capture沿的setup检查,而对于该路径,前一个沿放过Setup检查。如果不设置hold检查,当沿的hold会在capture沿提前一个cycle做,因此如图3.2.1.3所示蓝色线为hold检查沿,此时可以发现,multicycle路径下,capture沿的前一个有效沿可放过setup/hold检查。因此需要新增hold的约束设定。

set_multicycle_path 2 -setup -from lunch_reg.clk to capture_reg.d

set_multicycle_path 1 -hold -from lunch_reg.clk to capture_reg.d

       增加设定后,对hold的检查沿如图3.2.1.4所示。

图3.2.1.4 正确的multicycle检查设定

       针对上述典型事例设定的multicycle,双沿打拍场景下,中间的沿不做timing检查,lunch沿后两个周期作为capture沿检测setup,capture沿前两个周期检测hold。

3.2.2 单Cycle采样双Cycle驱动典型电路

       在有的设计下,存在lunch沿后一个周期进行capture,此时可通过multicycle的设定放松hold检查,单cycle采样双cycle驱动电路如图3.2.2.1所示。

图3.2.2.1 单Cycle采样双Cycle驱动典型电路

       该电路下的采样驱动时序如图3.2.2.2所示。

图3.2.2.2 单Cycle采样双Cycle驱动典型电路时序

       此时multicycle应当做如下设定:

set_multicycle_path 1 -setup -from lunch_reg.clk to capture_reg.d

set_multicycle_path 1 -hold -from lunch_reg.clk to capture_reg.d

       Setup检查为lunch沿的后一个Capture Cycle,而hold检查为Capture的前两个Cycle,如图3.2.2.3所示

这种电路的设计,有助于放松hold,因为跨过一个cycle不检查hold,因此对hold会放松。

       Multicycle约束最常见的场景其实是同步时钟分频的lunch和采样问题,这类问题一般分为两类,一类是慢时钟lunch,快时钟capture,另一类是快时钟lunch,慢时钟capture。下面具体对两种场景进行multicycle分析。

慢时钟lunch快时钟capture

       举一个例子,RTL设计在慢时钟域驱动数据,在快时钟域采样数据,慢时钟是快时钟的4分频,为同步设计,此时对于快时钟,可以设置multicycle如下:

set_multicycle_path 4 -setup -end -from clk_slow to clk_fast

相关时序分析和setup/hold检查沿如图3.2.3.1所示。

图3.2.3.1 同步分频时钟setup/hold约束

       此时hold检查为capture的前一个沿,因此要该类设计还要放松hold,约束设置如下:

set_multicycle_path 4 -setup -end -from clk_slow to clk_fast

set_multicycle_path 3 -hold -end -from clk_slow to clk_fast

相关时序分析和setup检查沿如图3.2.3.2所示。

图3.2.3.2 同步分频时钟setup/hold约束

       同理,对于setup的multicycle设定以及hold的multicycle设定,放松的具体cycle可以映射到时序图检查沿上,举例如下约束:

set_multicycle_path 2 -setup -end -from clk_slow to clk_fast

set_multicycle_path 3 -hold -end -from clk_slow to clk_fast

       该约束对应的时序有效沿检查如图3.2.3.3。

图3.2.3.3 同步分频时钟setup/hold约束

3.2.4 快时钟lunch慢时钟capture

举另外一个例子,RTL设计在快时钟域驱动数据,在慢时钟域采样数据,慢时钟是快时钟的4分频,为同步设计,此时逻辑应保证信号在快时钟展宽,确保慢时钟能够采样到有效信号,此时也可以设置multicycle:

set_multicycle_path 4 -setup -start -from clk_fast to clk_slow

set_multicycle_path 3 -hold -start -from clk_fast to clk_slow

相关时序分析和setup/hold检查沿如图3.2.4.1所示。

图3.2.4.1 同步分频时钟setup/hold约束

       前端RTL设计为在慢时钟下降沿采样数据,则multicycle约束要设定为:

set_multicycle_path 2 -setup -start -from clk_fast to clk_slow

set_multicycle_path 3 -hold -start -from clk_fast to clk_slow

相关时序分析和setup检查沿如图3.2.4.2所示。

图3.2.4.2 同步分频时钟setup/hold约束

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值