0
\$\begingroup\$

I have a gate netlist for an 8 bit adder.

module my_add ( clk , rst , a , b , sum ) ;
input  clk ;
input  rst ;
input  [7:0] a ;
input  [7:0] b ;
output [7:0] sum ;

FF1Q_X10_R \temp_sum_reg[5] ( .D ( N2 ) , .TI ( 1'b0 ) , 
    .TE ( 1'b0 ) , .CP ( clk ) , .R ( rst ) , .Q ( sum[5] ) ) ;
FF1Q_X10_R \temp_sum_reg[4] ( .D ( N3 ) , .TI ( 1'b0 ) , 
    .TE ( 1'b0 ) , .CP ( clk ) , .R ( rst ) , .Q ( sum[4] ) ) ;
FF1Q_X10_R \temp_sum_reg[3] ( .D ( N4 ) , .TI ( 1'b0 ) , 
    .TE ( 1'b0 ) , .CP ( clk ) , .R ( rst ) , .Q ( sum[3] ) ) ;
FF1Q_X10_R \temp_sum_reg[2] ( .D ( N5 ) , .TI ( 1'b0 ) , 
    .TE ( 1'b0 ) , .CP ( clk ) , .R ( rst ) , .Q ( sum[2] ) ) ;
FF1Q_X10_R \temp_sum_reg[1] ( .D ( N6 ) , .TI ( 1'b0 ) , 
    .TE ( 1'b0 ) , .CP ( clk ) , .R ( rst ) , .Q ( sum[1] ) ) ;
FF1Q_X10_R \temp_sum_reg[0] ( .D ( N7 ) , .TI ( 1'b0 ) , 
    .TE ( 1'b0 ) , .CP ( clk ) , .R ( rst ) , .Q ( sum[0] ) ) ;
HA1_X5_R \add_15/U_0 ( .A0 ( a[0] ) , .B0 ( b[0] ) , 
    .CO ( \add_15/N_17 ) , .S0 ( N7 ) ) ;
FF1Q_X10_R \temp_sum_reg[6] ( .D ( N1 ) , .TI ( 1'b0 ) , 
    .TE ( 1'b0 ) , .CP ( clk ) , .R ( rst ) , .Q ( sum[6] ) ) ;
FF1Q_X10_R \temp_sum_reg[7] ( .D ( N0 ) , .TI ( 1'b0 ) , 
    .TE ( 1'b0 ) , .CP ( clk ) , .R ( rst ) , .Q ( sum[7] ) ) ;
FA1_X5_R \add_15/U_3 ( .A0 ( a[1] ) , .B0 ( b[1] ) , 
    .CI ( \add_15/N_17 ) , .CO ( \add_15/N_21 ) , .S0 ( N6 ) ) ;
XOR3_X10_R \add_15/ctmi_12 ( .A ( a[7] ) , .B ( \add_15/N_38 ) , 
    .C ( b[7] ) , .Z ( N0 ) ) ;
FA1_X5_R \add_15/U_5 ( .A0 ( a[2] ) , .B0 ( b[2] ) , 
    .CI ( \add_15/N_21 ) , .CO ( \add_15/N_24 ) , .S0 ( N5 ) ) ;
FA1_X5_R \add_15/U_8 ( .A0 ( a[3] ) , .B0 ( b[3] ) , 
    .CI ( \add_15/N_24 ) , .CO ( \add_15/N_28 ) , .S0 ( N4 ) ) ;
FA1_X5_R \add_15/U_10 ( .A0 ( a[4] ) , .B0 ( b[4] ) , 
    .CI ( \add_15/N_28 ) , .CO ( \add_15/N_31 ) , .S0 ( N3 ) ) ;
FA1_X10_R \add_15/U_13 ( .A0 ( a[5] ) , .B0 ( b[5] ) , 
    .CI ( \add_15/N_31 ) , .CO ( \add_15/N_35 ) , .S0 ( N2 ) ) ;
FA1_X5_R \add_15/U_15 ( .A0 ( a[6] ) , .B0 ( b[6] ) , 
    .CI ( \add_15/N_35 ) , .CO ( \add_15/N_38 ) , .S0 ( N1 ) ) ;
endmodule

I also have an SDF file with cell delays, for example

(CELL
  (CELLTYPE "FA1_X5_R")
  (INSTANCE add_15/U_15 )
  (DELAY
    (ABSOLUTE
    (COND !B0 && CI (IOPATH A0 CO (0.12::0.12)(0.13::0.13)))
    (COND B0 && !CI (IOPATH A0 CO (0.13::0.13)(0.14::0.14)))
    (COND !A0 && CI (IOPATH B0 CO (0.11::0.11)(0.11::0.11)))
    (COND A0 && !CI (IOPATH B0 CO (0.11::0.11)(0.12::0.12)))
    (COND !A0 && B0 (IOPATH CI CO (0.10::0.10)(0.11::0.11)))
    (COND A0 && !B0 (IOPATH CI CO (0.09::0.09)(0.11::0.11)))
    (COND !B0 && !CI (IOPATH A0 S0 (0.10::0.10)(0.13::0.13)))
    (COND !B0 && CI (IOPATH A0 S0 (0.18::0.18)(0.16::0.16)))
    (COND B0 && !CI (IOPATH A0 S0 (0.19::0.19)(0.17::0.17)))
    (COND B0 && CI (IOPATH A0 S0 (0.12::0.12)(0.10::0.10)))
    (COND !A0 && !CI (IOPATH B0 S0 (0.10::0.10)(0.13::0.13)))
    (COND !A0 && CI (IOPATH B0 S0 (0.16::0.16)(0.15::0.15)))
    (COND A0 && !CI (IOPATH B0 S0 (0.17::0.17)(0.15::0.15)))
    (COND A0 && CI (IOPATH B0 S0 (0.11::0.11)(0.10::0.10)))
    (COND !A0 && !B0 (IOPATH CI S0 (0.08::0.08)(0.12::0.12)))
    (COND !A0 && B0 (IOPATH CI S0 (0.16::0.16)(0.13::0.14)))
    (COND A0 && !B0 (IOPATH CI S0 (0.15::0.16)(0.14::0.14)))
    (COND A0 && B0 (IOPATH CI S0 (0.11::0.11)(0.09::0.09)))
    )
  )
)

I would like to do a back-annotated gate level simulation, so I added the following instruction to my testbench.

// Stimulus process
initial begin
   $sdf_annotate("../rtl_synth/gate_netlist.sdf", uut, ,"simu.log");
   ...

However when I elaborate my simulation I get two warnings and the following SDF statistics.

xmelab: *W,SDFINF: Instance add_15 not found at scope level <top-level> <../rtl_synth/gate_netlist.sdf, line 305>.
xmelab: *W,SDFINF: Instance add_15 not found at scope level <top-level> <../rtl_synth/gate_netlist.sdf, line 367>.
        Annotation completed with 0 Errors and 2 Warnings
        SDF statistics: 
                 No. of Pathdelays = 185         No. of Disabled Pathdelays = 0        Annotated = 4.32% (8/185) 
                 No. of Tchecks    = 96          No. of Disabled Tchecks    = 0        Annotated = 0.00% (0/96) 

I would like to understand how setting my uut as the scope gives such poor annotation coverage.

\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

Since delays are same for identical cells, we can simplify .sdf file by keeping only one entry per CELLTYPE and using the wildcard character * as INSTANCE.

This seems to solve most of the PathDelays. However, there does not seem to be a way to circumnavigate this problem when dealing with INTERCONNECT delays where instances need to be precisely identified.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.