原创 DC 概论六之multicycle_path

2009-3-29 19:20 5866 6 6 分类: 工程师职场

在讲多周期路径之前,先看下单频率路径的建立关系和保持关系

『Design Compiler calculates the default setup and hold relations and derives single-cycle timing, based on active edges.』


1.对于startpoint,active edge是寄存器的open edge。
2.对于endpoint,active edge是寄存器的close edge。
3.对于上升沿触发的寄存器,上升沿既是open edge也是close edge。
4.对于高电平出发的锁存器,上升沿是open edge,下降沿是close edge。

点击看大图

点击看大图

看一个例子:
点击看大图

 下面进入多频率路径建立和保持

建立关系检查:
对于多频率设计,在两个时钟之间可能存在多个建立关系,对于目的时钟的的每一个锁存边沿,找到捕获边沿最近的发送边沿。发送边沿和捕获边沿的最小关系决定了这个路径上的最大延迟。

保持关系检查:
简单说就是,数据从startpoint发出之后,在被endpoint的active edge 锁存之前,不能被捕获。这个时序的最大值决定了,这个路径的最小延迟。

如下图所示:
点击看大图

Setup要求:5-0=5
Hold要求:30-30=0

Exp2:
点击看大图

Setup要求=10-0=10
Hold要求=0-0=0

Exp3
点击看大图

Setup要求:4-3=1
Hold要求:7-7=0
 

 

下面进入单频率的多周期:
先介绍命令set_multicycle_path
常用格式:
set_multicycle_path
              path_multiplier
              [-rise | -fall]
              [-setup | -hold]
              [-start | -end]
              [-from from_list]
              [-to to_list]
              [-through through_list]
Rise和fall用来说明多周期路径是用在上升沿还是下降沿
Setup和hold说明多周期路径是用在建立时间检查还是用在保持时间检查。
Stard和end说明多周期路径依赖于start clock还是依赖于end clock
例子:

 点击看大图

Set_multicycle_path –setup 60 –to [get_pins “C_reg

  • /D”]
    用来说明多周期路径的建立时间检查。
    换句话说就是数据从launch到capture的时间是6个周期的时间。
    那么缺省的保持时间检查时什么呢?看下面

    点击看大图

     根据dc综合原理:
    对hold的检查之一就是:在capture active edge之前不能被捕获。所以缺省的hold检查实在第6个周期。而我们希望的是在0时刻进行hold check。
    所以要如下设置

    点击看大图

     

    但是这种写法很晦涩。我们可以通过set_min_dealy来设置hold check:
    set_min_dealy –to C_reg[0]/D

    下面进入多频率的多周期:
    点击看大图
    这个例子和上面例子差不多,只是频率不同。

     例子:以下仅为例子,实际设计中不会存在
    module m(clka, clkb, ain, bin ,cout, dout);
    input clka,clkb;
    input [3:0] ain,bin;

    output [7:0] cout,dout;
    reg [7:0] cout, dout;

    reg [3:0] ain_reg ,bin_reg;
    wire [7:0] mul;

    assign mul = ain_reg * bin_reg;

    always@(posedge clka)
    begin
     ain_reg <= ain;
     cout <=  mul;
    end

    always@(posedge clkb)
    begin
     bin_reg <= bin;
     dout <= mul;
    end
    endmodule
    dc脚本
    set lib $env(DC_LIB)
    set target_library "slow.db fast.db"
    set link_library "* $target_library"
    set search_path ". ../src ../scripts $lib"
    analyze -format verilog m.v
    elaborate m
    compile
    create_clock  -period 10 [get_ports clka]
    create_clock  -period 30 [get_ports clkb]

    set_multicycle_path 2 -to cout_reg

  • /D
    set_multicycle_path 3 -to dout_reg
  • /D
    set_min_delay 0 -to dout_reg[3]/D
    set_min_delay 0 -to cout_reg[3]/D
    compile
    结构图
    点击看大图

    Path1:
    Setup:
    report_timing -from ain_reg_reg

  • /CK -to cout_reg[4]/D
    点击看大图

     因为设置了多周期路径为2倍,从report可以看出建立时间的检查类似下面:

     Hold:
    report_timing -from ain_reg_reg

  • /CK -to cout_reg[4]/D -delay min
    点击看大图

    因为使用了默认的hold检查,可以看出hold check不是希望的0,而是10,如下
     

    看下特例:
    (set_min_delay 0 -to cout_reg[3]/D)
    report_timing -from ain_reg_reg

  • /CK -to cout_reg[3]/D -delay min

     点击看大图

    Path3:
    setup:

    点击看大图

     

     因为set_multicycle_path 2 -to cout_reg

  • /D。
    所以时序关系如下;

     Hold:
    report_timing -from bin_reg_reg

  • /CK -to cout_reg[4]/D -delay min
    点击看大图

    因为使用了,默认的hold chek,所以时序图:

    特例:
    (set_min_delay 0 -to cout_reg[3]/D)
    report_timing -from bin_reg_reg

  • /CK -to cout_reg[3]/D -delay min
    点击看大图

     Hold check时序图:


    点击看大图

     

    原来以为路径path4path1path2path3上的建立时间和保持时间检查的分析方法一项。所以上篇的timing
    report
    仅仅分析了一下path1path2。后来觉得有些疑问,然后分析了下path4(慢时钟采集快数据),发现dc一个很微妙的分析方法,后来在dc的文档中发现的。后来想了下,这种建立关系和保持关系的检查其实在dc的文档中还是说明了的。先看分析,再总结:



    综合脚本:



    set lib $env(DC_LIB)



    set target_library "slow.db fast.db"



    set link_library "*
    $target_library"



    set search_path ". ../src ../scripts
    $lib"



    analyze -format verilog m.v



    elaborate m



    compile



    create_clock  -period 5 [get_ports clka]



    create_clock  -period 30 [get_ports clkb]



     



    set_multicycle_path 3 -to cout_reg

  • /D



    set_multicycle_path 4 -to dout_reg

  • /D



    set_min_delay 0 -to dout_reg[3]/D



    set_min_delay 0 -to cout_reg[3]/D



    compile



     



    path4分析:



    Setup



     



    report_timing -from ain_reg_reg

  • /CK -to
    dout_reg[4]/D

    点击看大图

     

    可以看出来慢时钟采集快数据的多周期路径分析,不是像快时钟采集慢数据的多周期分析一样(下图):



    希望的慢周期采集快数据的多周期分析

    点击看大图

     

    根据timing
    report
    可以知道实际的分析是:



    点击看大图

     

     

    再看下保持时间的分析



    report_timing -from ain_reg_reg

  • /CK -to
    dout_reg[4]/D -delay min



    点击看大图

    快时钟采慢数据的缺省hold
    chek
    如下,也是我们希望的:



    点击看大图


    而实际上,dc的分析师如下的:



    点击看大图


    所以对于慢时钟采集快数据的setuphold check的分析,可以由上面的分析总结为:



    对于setup分析:



    对于每一个capture
    active edge
    找到最靠近它的launch
    active edge
    ,然后这个launch
    active edge
    到多周期的capture
    active edge
    的路径就是setup
    check
    的路径。



    对于hold分析:



    对于每一个capture
    active edge
    找到它的launch active edge的下一个launch
    active edge
    ,然后这个launch
    active edge
    到多周期的capture
    active edge
    的路径就是hold
    check
    路径。



    更简单的说,慢时钟采集快数据,是先分析慢时钟的单周期setup relationhold relation,然后再扩展到多周期路径上。

    其实就是将单周期的capture active edge,换成多周期后的capture active edge(多周期的相当于周期很大)



     



    对于hold分析的理解,可以将综合脚本改成下面的,然后再分析下,就会很明白了。



    set lib $env(DC_LIB)



    set target_library "slow.db
    fast.db"



    set link_library "* $target_library"



    set search_path ". ../src ../scripts
    $lib"



    analyze -format verilog m.v



    elaborate m



    compile



    create_clock  -period 5 [get_ports clka]



    create_clock  -period 31 [get_ports clkb]



     



    set_multicycle_path 3 -to cout_reg

  • /D



    set_multicycle_path 4 -to dout_reg

  • /D



    set_min_delay 0 -to dout_reg[3]/D



    set_min_delay 0 -to cout_reg[3]/D



    compile



     



    path4



    setup分析:



    report_timing -from ain_reg_reg

  • /CK -to
    dout_reg[4]/D



    点击看大图


    示意图如下:



    点击看大图


    Hold分析:



    report_timing -from ain_reg_reg

  • /CK -to
    dout_reg[4]/D -delay min



    点击看大图


    示意图:



    点击看大图


  • PARTNER CONTENT

    文章评论0条评论)

    登录后参与讨论
    EE直播间
    更多
    我要评论
    0
    6
    关闭 站长推荐上一条 /3 下一条