PrimeTime读取sdf报错
我现在做的数字顶层包含许多个module,我在dc中用top-down的方法compile编译后,write sdf sdc和top.v, sdf sdc中都是只包含top,但是top.v却包含了许多module。在用PrimeTime做时序分析时read_sdf总是报找不到port、instance,应该怎样解决?
特别说明:我以前都是打散的,现在时钟频率高,不能打散,纠结了好几天,麻烦大家有空的时候帮我分析一下!谢谢!
脚本及网表都在公司服务器上,没有办法贴出来
SDC是flatten的,只要hierarchy name对得上,就好了
SDF要注意他的hierarchy 分隔符
还有,netlist如果有稀奇古怪的符号的话,麻烦会比较多
最近5年的DC,对输出的v/sdf/sdc的一致性处理得蛮好的,不应该出现对不上的问题
陈小编您好!
我用的design compile 和PrimeTime都是2011版的,为了分析问题,我做了一个简单的例子,如下述:
源代码:
module mult(clk,nrst,a,b,p);
input clk;
input nrst;
input [31:0] a;
input [31:0] b;
output [63:0] p;
reg [63:0] p;
always@(posedge clk or negedge nrst)
if(!nrst)
p <= 64'b0;
else
p <= a*b;
endmodule
我的sdc文件大致如下:
#mult.sdc
set_max_transition 0.5 [get_designs *]
set_max_capacitance 4[get_designs *]
set_max_fanout10 [all_inputs]
create_clock [get_ports {clk} ] -name clk -period 5 -waveform {0 2.5}
set_clock_uncertainty 0.2 [get_clocks clk]
se_clock_transition 0.2 [all_clocks]
set_input_delay -max 0.5 -clock clk [get_ports{a b}]
set_input_delay -min 0-clock clk [get_ports{a b}]
set_output_delay -max 0.5-clock clk [get_ports {p}]
set_output_delay -min 0-clock clk [get_ports {p}]
我的编译输出文件run如下:
#run
......
....
read_verilog ./scr/mult.v
current_designmult
check_design
source ./scripts/mult.sdc
uniquify
compile
...
..
change_names -rule verilog -hierarchy
write -f verilog -h -o ./outputs/mult.v
write_sdf ./outputs/mult.sdf
write_sdc ./outputs/mult.sdc
...
..
DC输出的网表大致如下:
#mult.v文件
module mult_DW_mult_uns_1( a, b, product );
...
....
...
..
endmoudle
module mult( clk, nrst, a, b, p );
....
..
...
...
endmodule
DC输出的网表大致如下:
#mult.v文件
module mult_DW_mult_uns_1( a, b, product );
...
....
...
..
endmoudle
module mult( clk, nrst, a, b, p );
....
..
mult_DW_mult_uns_1mult_12 ( ....);
...
endmodule
DC写出的sdf文件格式大致如下:
(DELAYFILE)
(SDFVERSION "OVI 2.1")
(DESIGN "mult" )
..
.
.
.
(CELL
(CELLTYPE "mult")
(INSTANCE)
(DELAY
(ABSOLUTE
.
.
.
.
(INTECONNECT mult_12/U2733/Z p_reg_52_/D(0.000:0.000:0.000))
(INTECONNECT clkp_reg_55_/clk(0.000:0.000:0.000))
(INTECONNECT nrstp_reg_55_/RD(0.000:0.000:0.000))
.
.
.
.
我的Primetime脚本的大致内容如下:
。
。
。
setslow_link_path {.....db}
set target_library $slow_link_path
setlink_library $target_library
read_verilog ./inputs/mult.v
link_design
list_designs
reports_cells
read ./inputs/mult.sdc
read ./inputs/mult.sdf
除了下面的2句,没看见什么问题
source ./inputs/mult.sdc
read_sdf ./inputs/mult.sdf
我的Primetime脚本的大致内容如下:
。
。
。
setslow_link_path {.....db}
set target_library $slow_link_path
setlink_library $target_library
read_verilog ./inputs/mult.v
link_design
list_designs
reports_cells
read ./inputs/mult.sdc
read ./inputs/mult.sdf
这时候link的是:
Linking Design mult_DW_uns_1....
..
Warning: Module 'mult' in file '.../mult_pt/inputs/mult.v' is not used in the current design
..
..
..
read_sdc时报错:
Warning: No port objects matched 'clk'(SEL-004)
Error: Nothing matched for clock_name
Error: Nothing matchedfor prot_list (SEL-005)
...
read_sdf时报错:
Warning: The SDF file contains delays for the design 'mult' which is different from the current design 'mult_DW_mult_uns_1'
....
..
Error: Cannot fin pin 'p_reg_54_/Q'
我如果把inputs/mult.v文件中的mult模块放在mult_DW_mult_uns_1模块的前面
这时候link的是:
Linking Design mult
报出警告
Warning:Unable to resolve reference to 'mult_DW_mult_uns_1' in 'mult'. (LNK-005)
Creating black box for 'mult_12/mult_DW_mult_uns_1'
Warning: Module 'mult' in file '.../mult_pt/inputs/mult.v' is not used in the current design
..
..
..
read_sdc 没有报错
...
read_sdf时报错:
Information: Merging of parallel arcs is disabled by read_sdf.(SDF-040)
Error: Cannot find pin 'mult_12/U2787/Z' in design 'mult' (DES-002)
Error: .....
Error: Cannot find instance 'mult_12/U5545'. All delays related to that instance are ignored.(SDF-011)
。
做了一个简单的例子,敲了半天,基本上把这个问题描述完了,我们公司现在做的设计顶层模块中包含了100多个module,我compile后写出的netlist中有除了顶层的module外、还有很多其他的module、而其都在顶层中被调用;写出的sdf文件却只有顶层的
感觉只要PT能够同时读进去所有module的netlist、然后再read_sdc、read_sdf就应没有问题了?
但是,我不知道该怎样才能读进去,我试着把网表分开成两个文件、然后分别读进去,再读sdc、sdf,任然报错!
麻烦大家有空给我指点一下!谢谢!
路过,飘过的,也可以留下自己的一些见解!
我的Primetime脚本的大致内容如下:
。
。
。
setslow_link_path {.....db}
set target_library $slow_link_path
setlink_library $target_library
read_verilog ./inputs/mult.v
link_design
list_designs
reports_cells
read _sdc ./inputs/mult.sdc
read_sdf./inputs/mult.sdf
我刚才看一下服务器上的是用的: read_sdc 和read_sdf
除了下面的2句,没看见什么问题
source ./inputs/mult.sdc
read_sdf ./inputs/mult.sdf
请教一下陈小编:这两句应该怎样改写?谢谢!
我把Primetime中的脚本修改了成了
source ./inputs/mult.sdc
read_sdf ./inputs/mult.sdf
还是报类似的错误
我使用link_desgin -keep_sub_designs mult命令link还是只能link一个module
报出警告
Warning:Unable to resolve reference to 'mult_DW_mult_uns_1' in 'mult'. (LNK-005)
Creating black box for 'mult_12/mult_DW_mult_uns_1'
Warning: Module 'mult' in file '.../mult_pt/inputs/mult.v' is not used in the current design
..
怎样才能同时link网表中的多个module?我刚才设置了search_path和link_path也不行,最后还是和刚开始报出的我问题一样找不到port、pins、instance?
各位大神,帮我看看要怎样设置环境才能解决类似的问题?小生这厢有礼了!
如果我在dc使用compile -ultra或者是compile -ungroupe_all,写出的网表中只有一个module,用此网表做PT分析没有问题。
但是对于包含多个module的顶层使用compile -ultra写出的网表仍然是有多个module,做pt分析也有类似的问题;compile -ungroupe_all,写出的网表中只有一个module,用此网表做PT分析没有问题,但是时序太差了。
希望各位大侠,指点迷津!谢谢哈!
如果我在dc使用compile -ultra或者是compile -ungroupe_all,写出的网表中只有一个module,用此网表做PT分析没有问题。
但是对于包含多个module的顶层使用compile -ultra写出的网表仍然是有多个module,做pt分析也有类似的问题;compile -ungroupe_all,写出的网表中只有一个module,用此网表做PT分析没有问题,但是时序太差了。
希望各位大侠,指点迷津!谢谢哈!
set search_path {"." .......}
我刚才设置了set search_path { "." . ./inputs/./inputs/mult.v ./inputs/mult_DW_mult_uns_1.v}还是报同样的错误。
在link第二个module时会自动把第一个module unlink掉
我感觉解决此问题有两种方法:1、dc compile时不set flatten 也不ungroup-all,但是要报所有的设计都写成一个module
2、要PrimeTime能够link多个design,但不要unlink已经link的design,哪怕是子模块
但是,我查阅user guide试了好几个方法都没有做出来,这是我的个人见解。
求大侠们指导,谢谢!
set search_path { . dir_of_all_other_read_in_file dir_of_db_file}
set link_library { * all_db_file_name}
set link_library { * all_db_file_name}
link_library时,要加一个*号,把所有当前工作目录所包含的子模块,同时作为library包含进去。
请问这个问题解决了吗?DC没问题,就是在PT里把module都设置成了black box,所以sdf里的东西也读不出来,时序path也减少了很多,都untested掉了。
set link_library { * all_db_file_name}用这个果然很有用,加一个*就行,受教了。
这个问题怎么解决的
顶贴赚点积分
折腾两个小时,原来是这个问题。需要加个*才能同时link所有的子模块。多谢小编!