zb8521
Newbie level 4
Hi,
I tried to run post-P&R simulation in ModelSim with SDF back annotation but it failed due to some syntax error in the SDF file.
The Place & Route is done by Encounter and then saved as the Verilog netlist. In Encounter, I used both the delay calculation in the Timing menu and the command "write_sdf" in the command line, and generated both 2.1 and 3.0 version of SDF, but all result in the following error in ModelSim when starting simulation:
Error: /(some path)/postPR.sdf(1343): near "&&": Syntax error
Fatal: (sdfcomp-SDF-3445) Failed to parse SDF file "/(some path)/postPR.sdf"
And around line 1343 of the SDF file is
1339: (CELL
1340: (CELLTYPE "SDFFR_X2")
1341: (INSTANCE present_reg\[1\])
1342: (TIMINGCHECK
1343: (SETUP (COND (D==1'b0)&&(RN==1'b1)&&(SE==1'b1) (posedge SI)) (COND (D==1'b0)&&(RN==1'b1)&&(SE==1'b1) (posedge CK)) (0.1173:0.1173:0.1173))
1344: (SETUP (COND (D==1'b0)&&(RN==1'b1)&&(SE==1'b1) (negedge SI)) (COND (D==1'b0)&&(RN==1'b1)&&(SE==1'b1) (posedge CK)) (0.103:0.103:0.103))
Then I found that the COND obviously came from the following definition in the .lib file of the standard cell library:
timing () {
related_pin : "A";
when : "!B & !C1 & !C2";
sdf_cond : "(B == 1'b0) && (C1 == 1'b0) && (C2 == 1'b0)"; <- here
timing_sense : negative_unate;
......
I was using the Nangate 45nm open cell library. I then tried the same flow (from synthesis to Place & Route) with the OSU 45nm library on the same design. Then the back annotation works fine. In the .lib file of the OSU library it says:
timing() {
related_pin : "CLK";
timing_type : hold_rising;
when : "S&R";
sdf_cond : "S_EQ_1_AN_R_EQ_1 == 1'b1"; <- here
So I think this condition expression may be the key. Does anyone have any clue about what exactly is the error and how do fix that? Thanks.
I tried to run post-P&R simulation in ModelSim with SDF back annotation but it failed due to some syntax error in the SDF file.
The Place & Route is done by Encounter and then saved as the Verilog netlist. In Encounter, I used both the delay calculation in the Timing menu and the command "write_sdf" in the command line, and generated both 2.1 and 3.0 version of SDF, but all result in the following error in ModelSim when starting simulation:
Error: /(some path)/postPR.sdf(1343): near "&&": Syntax error
Fatal: (sdfcomp-SDF-3445) Failed to parse SDF file "/(some path)/postPR.sdf"
And around line 1343 of the SDF file is
1339: (CELL
1340: (CELLTYPE "SDFFR_X2")
1341: (INSTANCE present_reg\[1\])
1342: (TIMINGCHECK
1343: (SETUP (COND (D==1'b0)&&(RN==1'b1)&&(SE==1'b1) (posedge SI)) (COND (D==1'b0)&&(RN==1'b1)&&(SE==1'b1) (posedge CK)) (0.1173:0.1173:0.1173))
1344: (SETUP (COND (D==1'b0)&&(RN==1'b1)&&(SE==1'b1) (negedge SI)) (COND (D==1'b0)&&(RN==1'b1)&&(SE==1'b1) (posedge CK)) (0.103:0.103:0.103))
Then I found that the COND obviously came from the following definition in the .lib file of the standard cell library:
timing () {
related_pin : "A";
when : "!B & !C1 & !C2";
sdf_cond : "(B == 1'b0) && (C1 == 1'b0) && (C2 == 1'b0)"; <- here
timing_sense : negative_unate;
......
I was using the Nangate 45nm open cell library. I then tried the same flow (from synthesis to Place & Route) with the OSU 45nm library on the same design. Then the back annotation works fine. In the .lib file of the OSU library it says:
timing() {
related_pin : "CLK";
timing_type : hold_rising;
when : "S&R";
sdf_cond : "S_EQ_1_AN_R_EQ_1 == 1'b1"; <- here
So I think this condition expression may be the key. Does anyone have any clue about what exactly is the error and how do fix that? Thanks.