lib库的问题
lu_table_template(Table1) {
variable_1 : total_output_net_capacitance ;
index_1("1.0, 2.0") ;
}
lu_table_template(Table2) {
variable_1 : total_output_net_capacitance ;
variable_2 : input_net_transition ;
index_1("0.010000, 0.100000, 0.300000, 0.500000, 1.000000") ;
index_2("0.010000, 1.000000, 3.000000, 5.000000") ;
}
lu_table_template(Table3) {
variable_1 : total_output_net_capacitance ;
variable_2 : input_net_transition ;
index_1("0.010000, 0.100000, 0.500000, 1.000000, 2.000000") ;
index_2("0.010000, 1.000000, 3.000000, 5.000000") ;
}
lu_table_template(Table4) {
variable_1 : total_output_net_capacitance ;
variable_2 : input_net_transition ;
index_1("0.010000, 0.100000, 0.500000, 1.500000, 4.000000") ;
index_2("0.010000, 1.000000, 3.000000, 5.000000") ;
}
lu_table_template(Table5) {
variable_1 : total_output_net_capacitance ;
variable_2 : input_net_transition ;
index_1("0.010000, 0.300000, 1.000000, 3.000000, 8.000000") ;
index_2("0.010000, 1.000000, 3.000000,5.000000") ;
}
lu_table_template(Table6) {
variable_1 : total_output_net_capacitance ;
variable_2 : input_net_transition ;
index_1("0.010000, 0.050000, 0.100000, 0.200000, 0.500000") ;
index_2("0.010000, 1.000000, 3.000000, 5.000000") ;
}
lu_table_template(Const1) {
variable_1 : constrained_pin_transition ;
variable_2 : related_pin_transition ;
index_1("0.010000, 1.000000, 3.000000, 5.000000") ;
index_2("0.010000, 1.000000, 3.000000, 5.000000") ;
}
...........
/* V1.0 L612NQ produced by synopsys */
/*
date : Tue Jan 16 11:52:10 JST1996
*/
cell(L612NQ) {
area : 316.2816;
ff(QN01, QBZ1
){
next_state : "H01" ;
clocked_on : "H02" ;
clear : "H03" ;
}
pin(N01) {
direction : output ;
function : "QN01" ;
max_capacitance : 0.228991 ;
timing() {
related_pin : "H02" ;
timing_type : rising_edge ;
cell_rise(Table2) {
values(\
"0.527071, 0.659148,0.751193, 0.785045",\
"0.783656, 0.915962,1.007917, 1.041308",\
"1.343339, 1.475892,1.567883, 1.601686",\
"1.902271, 2.034784,2.128148, 2.161550",\
"3.302488, 3.435398, 3.529699,3.562897"\
);
}
rise_transition(Table1) {
values("8.066196, 16.056603") ;
}
确实不合理,你对照lib的manual确认下
这个cell的delay不是已经说明套用table 2 表格模板了吗?
cell_rise(Table2) {
values(\
然后上面也给出了table2的index信息了:
lu_table_template(Table2) {
variable_1 : total_output_net_capacitance ;
variable_2 : input_net_transition ;
index_1("0.010000, 0.100000, 0.300000, 0.500000, 1.000000") ;
index_2("0.010000, 1.000000, 3.000000, 5.000000") ;
}
但是一般的库单元是在每个单元定义时有index信息,如会在上面的cell(L612NQ)定义时存在(红色字体),而我根据它这样说的到table2中搜索,查出的在电容值为0.16pf,转换时间为3.58ns时,该单元的上升延时应该为1.008~1.60中的一个值,不可能会是0啊,而从时序报告中来看单元延时都是为0的,这让我很费解,如果是这样,我的保持时间违例根本没办法修复,请求回答,谢谢
cell(L612NQ) {
area : 316.2816;
ff(QN01, QBZ1
){
next_state : "H01" ;
clocked_on : "H02" ;
clear : "H03" ;
}
pin(N01) {
direction : output ;
function : "QN01" ;
max_capacitance : 0.228991 ;
timing() {
related_pin : "H02" ;
timing_type : rising_edge ;
cell_rise(Table2) {
index_1 ("........");
index_2 ("........");
values(\
"0.527071, 0.659148,0.751193, 0.785045",\
"0.783656, 0.915962,1.007917, 1.041308",\
"1.343339, 1.475892,1.567883, 1.601686",\
"1.902271, 2.034784,2.128148, 2.161550",\
"3.302488, 3.435398, 3.529699,3.562897"\
);
}
那能不能手动修改一下lib文件,把这个cell的两个index加进去,再报一下timing,看看这个cell的delay是不是还是0 ?
是不是你的单位不对,你看看lib中capacitive_load_unit大小是pf 还是nf。
看看capacitive_load_unit 单位是不是nf,还有,还有是不是你只定义了cell_rise,而实际中却是fall?没有对应的表。
capacitance_load_unit的单位是pf,没有问题,lib里面有fall_rise的内容,只是我没有粘贴上来,我把报告时序的精度设高一点,还是有值,只是很小为0.00xxxns或0.000xxxns,按照库中说的不应该这么小的,lib里的值至少都是0.xxxns
不会是时间单位不一样吧,看看其他库和这个库和ICC report_units命令的时间单位。
还有lib中slew_derate_from_library的值
应该是你的运行脚本不对,导致软件调用hspice时出错,所以lut中的值全是0建议仔细查看修改脚本