请教DC综合对输出时序约束问题
在RTL设计中,同一个PAD,有两条路径输出,一路为时钟上升沿驱动,一路为反向后的时钟上升沿驱动(即时钟下降沿)
RTL代码示意如下:
module sample ( input rst_n , input clk , input sel, input a , output b);
reg b_rise,b_fall ;
wire clk_inv ;
always @(posedge clk or negedge rst_n)
if(!rst_n) b_rise <= 0 ;
elseb_rise <= a ;
assign clk_inv = ~clk ;
always @(posedge clk_inv or negedge rst_n)
if(!rst_n) b_fall <= 0 ;
elseb_fall <= ~a ;
assign b = sel ? b_rise : b_fall
endmodule
综合时约束
create_clock -name clk -period 10 [find pin "clk"]
set_output_delay -max 8 -rise -clock clk [find pin [list b]]
set_output_delay -max 3 -fall -clock clk -add_delay [find pin [list b]]
希望对两条路径都进行约束,但实际在检查时发现从b_fall出来的路径也被认作了rise,并报不满足。
请教有何对策!
试试
set_output_delay -max 3 -fall -clock clk -clock_fall -add_delay [find pin [list b]]
谢谢小编回复!
问题还没有解决!
在DC中报report_timing -to [find pin [list b]]时,出现
pointIncrPath
--------------------------------------------------------------------------
clock clk' (rise edge)5.0005.000
clock network delay (ideal)0.6005.600
U_sample/b_fall_reg/CK0.0005.600r
U_sample/b_fall_reg/Q0.402 *6.002r
U_sample/U2/O (MUX2)0.308 *6.310r
U_PAD_b/ (ZMA2GSD)2.491 *8.801r
b(output)0.0008.801r
data arrival time8.801
clock clk (rise edge )10.00010.000
clock network delay (ideal)0.60010.600
clock uncertainty-0.30010.300
output external delay-8.0002.300
data required time2.300
--------------------------------------------------------------------------
data required time2.300
data arrival time-8.801
--------------------------------------------------------------------------
slack (VIOLATED)-6.501
问题在于为什么b_fall寄存器被认成了rise,按我的理解是时钟下降沿!
我试过了,小编提出的 -clock_fall参数是用来指明在计算“data required time”时,用下降沿计算时间,
不是我期望的!
不过,还是非常感谢!
clk'就是clk的反相了
在clk的inv上,定义一个generated_clock,
set_output_delay -max 3 -fall -clock clk_inv -add_delay [find pin [list b]]
可能还要set_false_path -from clk -to clk_inv, set_false_path -from clk_inv -to clk
set_max_delay 8 -to [find pin [list b]]
多谢 dahai !刚试过了,用report_timing命令报告了一下,对两个时钟的寄存器输出到PAD都能够约束!
理解了一下小编的意思,应该是可行的,但是因为实际项目中有多出这样的时钟反向,设置起来比较复杂。刚按照小编前面提出的相同的思路试了一下,具体如下:
set_output_delay -max 3 -rise -clock clk [find pin [list b]]
set_output_delay -max 3 -fall -clock clk -clock_fall -add_delay [find pin [list b]]
也可以对两条路径都设置上。
因为:
set_output_delay -max 3 -rise -clock clk [find pin [list b]]
命令主要约束b_fall到 b 端口的上升沿输出,对b_rise约束较宽松。
而
set_output_delay -max 3 -fall -clock clk -clock_fall -add_delay [find pin [list b]]
命令主要约束b_rise到 b 端口的下降沿输出,对b_fall约束较宽松。
以前我也遇到过同样的问题
对IO的设置比较难掌控
学习了一下!
第二条路径,也就是b_fall路径,在做capture clock edge时,报告给的是用上升沿,但是应该用clk的下降沿做capture edge 可能更为合理。
赚点钱好下载
