Forum: FPGA, VHDL & Co. Benötige Hilfe für Gate-Level-Simulation mit SDF files


von Alexx (Gast)


Lesenswert?

Hallo, ich versuche mich im Rahmen meiner Diplomarbeit am Digital ASIC 
design. Auf diesem Institut werden sonst nur analog ASICs designed 
weshalb kein know-how vorhanden ist was digitales design angeht.
In vieles konnte ich mich bereits einarbeiten, post synthesis simulation 
ohne timings bekomme ich zum laufen, jedoch schaffe ich es nicht die SDF 
files miteinzubeziehen. Bislang habe ich mit Cadence NCSIM gearbeitet. 
Als library files um die Technology spezifische Netlist überhaupt 
benutzen zu können habe ich mit verilog conditional libraries gearbeitet 
(hier gibt es: conditional, non-conditional und functional).
In dier Verilog library sidn jedoch alle delays bei 0.1, hier ein 
ausschnitt:
1
module AND2_X1 (A1, A2, Q);
2
  input A1;
3
  input A2;
4
  output Q;
5
6
  and(Q, A1, A2);
7
8
  specify
9
    (A1 => Q) = (0.1, 0.1);
10
    (A2 => Q) = (0.1, 0.1);
11
  endspecify
12
13
endmodule

Die Flip Flops sind natürlich deutlich komplizierterter, jedoch sind die 
delays allesamt bei 0.1ns. Sollten diese delays durch die Daten des SDF 
Files überschrieben werden? Mit NCSim bei der elaboration bekomme ich 
folgenden output: SDF statistics: No. of Pathdelays = 1208 Annotated 
100% -- No. of Tchecks = 350 Annotated 0%

In der Simmulation haben meine ausgangssignale ein delay von genau 0.1ns 
so wie in dem Verilog lib file. Diese delays kommen nur vom diesem 
library file, egal ob ich den sdf annotate befehl dabei habe!

Meine Gedanken:
-Ich benutze die falsche library: in den Techfiles der foundry stehen 
folgende Formate zur verfügung db, gds, lef, liberty (die hab ich für 
die synthese benutzt), milkyway, spice und verilog.
-mit den anderen verilog libs (non-cond und functional) bekomme ich das 
warning Unable to annotate to non-existant path (einige hundert mal), 
also schneine ich sonst nicht alles falsch zu machen.

Hier ist meine "minimalistische" Verilog Testbench, arbeite sonst mit 
VHDL, vorerst geht es mir darum die Simulation zum laufen zu bringen:
1
//-------------------------------------------------
2
// Purpose: Verilog Simulation Example
3
//          Test Bench
4
//-----------------------------------------------------------
5
`timescale 1 ps /  1 ps
6
module z_Sync_Counter_sdf_tb ();
7
  //---------------------------------------------------------
8
  // inputs to the DUT are reg type
9
     reg myCLK;
10
     reg myCLK_SR;
11
     reg myRST, myUnD, myEN, mySnL;
12
  //--------------------------------------------------------
13
  // outputs from the DUT are wire type
14
     wire  oDATA;
15
     wire  [24:0]  oVALUE;
16
  //---------------------------------------------------------
17
  // instantiate the Device Under Test (DUT)
18
  // using named instantiation
19
  Sync_Counter DUT ( .iCLK(myCLK),
20
                  .iUP_nDOWN(myUnD),
21
                  .oVALUE(oVALUE),
22
                  .iRESET(myRST),
23
            .iCLKen(myEN),
24
            .iSHIFT_nLOAD(mySnL),
25
            .iCLK_SR(myCLK_SR),
26
            .oDATA(oDATA)
27
           );
28
  //----------------------------------------------------------
29
  // create a 500Mhz clock
30
  always
31
    #1000
32
    myCLK = ~myCLK;
33
  //always
34
     //   #1000
35
    //myCLK_SR = ~myCLK_SR;
36
  //-----------------------------------------------------------
37
  // initial blocks are sequential and start at time 0
38
  initial
39
  begin
40
    $display($time, " << Starting the Simulation >>");
41
    $sdf_annotate("myDesign.sdf",DUT);
42
    myCLK = 0;
43
    myCLK_SR = 0;
44
// at time 0
45
    myRST = 1; // reset is active
46
    myEN = 0;
47
    myUnD = 1;
48
    mySnL = 0;
49
50
    #2000 myRST = 0;
51
    #2000 myEN = 1;
52
    #100000 myEN = 0;
53
    #2000 mySnL = 1;
54
    #50000
55
56
57
    $display($time, " << Simulation Complete >>");
58
    //$stop;
59
  end
60
endmodule

Bislang habe ich mit Cadence NCSim gearbeitet, habe heute Vormittag 
versucht das ganze mit der Modelsim student edition zum laufen zu 
bekommen, aber das Programmkonzept ist für mich nicht greifbar und ich 
finde mich nicht wirklich zurecht.

Danke für eure Hilfe!

von Duke Scarring (Gast)


Lesenswert?

Alexx schrieb:
> Bislang habe ich mit Cadence NCSim gearbeitet, habe heute Vormittag
> versucht das ganze mit der Modelsim student edition zum laufen zu
> bekommen, aber das Programmkonzept ist für mich nicht greifbar und ich
> finde mich nicht wirklich zurecht.
Bei NCsim und analog design, kann ich Dir nicht wirklich helfen.
Aber bei Modelsim:

1. Schritt: alles kompilieren
Die Reihenfolge ist wichtig: erst die Bibliotheken, dann das Design und 
zum Schluß die Testbench.
1
vcom -work <bibliotheksname> <designfile.vhd>
2
vlog -work <bibliotheksname> <designfile.v>

2. Schritt: Simulation laden
1
vsim work.top_design

3. Schritt: interessierte Signale in den Waveviewer ziehen

4. Schritt: Simulation starten
Dafür am TCL-Prompt z.B. folgendes eingeben:
1
run for 10 ms

Wo hängt es denn bei Dir?

Duke

von Erik (Gast)


Lesenswert?

bei NCSIM kann ich helfen:

Du musst in jedem Falle das verilog benutzen.

Schau nach, ob es defines in deiner Technologie gibt, die die specify 
und $setuphold erst einschalten.


sdf file kompilieren:
ncsdfc -MESSAGES digital.sdf

sdf command file erzeugen mit folgendem Inhalt:
COMPILED_SDF_FILE=digital.sdf.X,SCOPE=work.asic_tb.asic_inst.digital_ins 
t,MTM_CONTROL=TOOL_CONTROL;

ncelab aufrufen mit:
-SDF_CMD_FILE ncelab.sdf_cmd -SDF_VERBOSE

Rest wie immer.

von Erik (Gast)


Lesenswert?

Alexx schrieb:
> versuche mich im Rahmen meiner Diplomarbeit am Digital ASIC
> design

Dumme Frage, womit machst du das Layout? Encounter?

Der ganze Rest Clock Tree Synthese, Floorplan, Placement, Routing, etc 
ist dir klar?

von Alexx (Gast)


Lesenswert?

Modelsim jetzt zum laufen bekommen, beim SDF file bekomme ich folgende 
fehler:
1
# Loading instances from C:/Modeltech_pe_edu_10.4ab/examples/myWork/v/myDesign.sdf
2
# Loading work.seq_DFS_X1
3
# Loading work.ng_xbuf
4
# Loading work.seq_DF_X1
5
# Loading work.seq_DFCS_X4
6
# Loading work.seq_DFC_X2
7
# Loading work.seq_DFC_X4
8
# Loading work.seq_DFC_X1
9
# Loading timing data from C:/Modeltech_pe_edu_10.4ab/examples/myWork/v/myDesign.sdf
10
# ** Warning: (vsim-SDF-3924) C:/Modeltech_pe_edu_10.4ab/examples/myWork/v/myDesign.sdf: Out of 2279 SDF statements, 2279 had null values.
11
# 
12
# ** Note: (vsim-3587) SDF Backannotation Successfully Completed.
Durch die null values bekomme ich natürlich keine anderen Zeiten außer 
die 0,1ns aus den verilog libraries.

Hier ein ausschnitt aus dem sdf:
1
(DELAYFILE
2
  (SDFVERSION  "OVI 3.0")
3
  (DESIGN      "Sync_Counter")
4
  (DATE        "Wed Mar 28 13:34:09 CEST 2018")
5
  (VENDOR      "Cadence, Inc.")
6
  (PROGRAM     "Genus(TM) Synthesis Solution")
7
  (VERSION     "17.11-s014_1")
8
  (DIVIDER     .)
9
  (VOLTAGE     ::1.8)
10
  (PROCESS     "::1.0")
11
  (TEMPERATURE ::25.0)
12
  (TIMESCALE   1ps)
13
  (CELL
14
     (CELLTYPE "INV_X0d5")
15
     (INSTANCE g1644)
16
     (DELAY
17
        (ABSOLUTE
18
          (PORT A (::0.0))
19
          (IOPATH A Q (::17) (::9))
20
        )
21
     )
22
  )
23
  (CELL
24
     (CELLTYPE "DFS_X1")
25
     (INSTANCE sig_shift_reg_reg\[0\])
26
     (DELAY
27
        (ABSOLUTE
28
          (PORT CP (::0.0))
29
          (PORT D (::0.0))
30
          (PORT SI (::0.0))
31
          (PORT SE (::0.0))
32
          (IOPATH CP Q (::153) (::191))
33
          (IOPATH CP QN (::246) (::213))
34
        )
35
     )
36
     (TIMINGCHECK
37
        (SETUPHOLD (negedge D) (posedge CP) (::130) (::-98))
38
        (SETUPHOLD (posedge D) (posedge CP) (::86) (::-75))
39
        (SETUPHOLD (negedge SI) (posedge CP) (::272) (::-207))
40
        (SETUPHOLD (posedge SI) (posedge CP) (::96) (::-85))
41
        (SETUPHOLD (negedge SE) (posedge CP) (::104) (::-70))
42
        (SETUPHOLD (posedge SE) (posedge CP) (::80) (::-68))
43
        (WIDTH (posedge CP) (::82.59))
44
        (WIDTH (negedge CP) (::146.27))
45
     )
46
  )


Ja ich musste einige defines aktivieren, davor hatt mir aber der 
elaborator schon Fehler angezeigt!

Layout will ich mit Innovus machen (sollte der nachfolger von encounter 
sein). Ein bisschen hab ich mich schon rumgespielt, bis zu clock tree 
synthese ist alles klar, diese wurde jedoch bei innovus massiv geändert. 
Der userguide ist aber vorhanden und das sollte schaffbar sein.
Floorplaning und RnR schaut vorerst ganz gut aus.


Vielen Dank!

von Erik (Gast)


Lesenswert?

Das mit den Nullvalues ist leicht, das ist ein reines max sdf.

Du hast es mit Modelsim mit -sdfmax eingelesen?

von Alexx (Gast)


Lesenswert?

Erik schrieb:
> Das mit den Nullvalues ist leicht, das ist ein reines max sdf.
>
> Du hast es mit Modelsim mit -sdfmax eingelesen?

Nein, hab den Simulation Button benutzt und dann die Datei ausgewählt! 
Aber der Tipp wird es sein vielen Dank!

von Alexx (Gast)


Lesenswert?

Erik schrieb:
> Das mit den Nullvalues ist leicht, das ist ein reines max sdf.
>
> Du hast es mit Modelsim mit -sdfmax eingelesen?

So war es, jetzt funktioniert es! An was hast du das erkannt? an dem 
(::127)
min:typical:max?

Vielen Dank für die Hilfe!
LG Alex

von Erik (Gast)


Lesenswert?

Alexx schrieb:
> An was hast du das erkannt? an dem
> (::127)
> min:typical:max?

Ja daran in Kombination mit "Out of 2279 SDF statements, 2279 had null 
values"

Das ist ja ein wirklich kleines Design ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.