Forum: FPGA, VHDL & Co. Lattice Diamond: asynchrone Taktübergänge constrainen


von Rick D. (rickdangerus)


Lesenswert?

Ich habe hier ein Design für einen MachXO2, wo im 'Timing Analysis View' 
Fehler angezeigt werden:
1
Error: The following path exceeds requirements by 7.116ns
2
 
3
 Logical Details:  Cell type  Pin type       Cell/ASIC name  (clock net +/-)
4
5
   Source:         FF         Q              gpio_i0/receive_data_23__I_0_153_i3  (from gpio_i0/data_out_23__N_372 +)
6
   Destination:    FF         Data in        mylogic_i0/stamper_i0/r.stage_2_state__i4  (to clk_fast +)
7
8
   Delay:               4.297ns  (30.6% logic, 69.4% route), 3 logic levels.
9
10
 Constraint Details:
11
12
      4.297ns physical path delay SLICE_92 to mylogic_i0/stamper_i0/SLICE_312 exceeds
13
      8.351ns delay constraint less
14
      9.371ns skew and
15
      1.649ns feedback compensation and
16
      0.150ns DIN_SET requirement (totaling -2.819ns) by 7.116ns

Der Fehler rührt m.E. daher, daß P&R der Meinung ist, er müßte da ein 
'normales' Signal über die primären Taktleitungen führen:
1
The following 6 signals are selected to use the primary clock routing resources:
2
    clk_ext  (driver: dcma_i0, clk load #: 1)
3
    clk_fast (driver: pll_i0/PLLInst_0, clk load #: 162)
4
    clk_slow (driver: pll_i0/PLLInst_0, clk load #: 285)
5
    clk_spi  (driver: extern_SPI_CLK, clk load #: 146)
6
    clk_osch (driver: osch_i0, clk load #: 25)
7
    gpio_i0/data_out_23__N_372 (driver: SLICE_736, clk load #: 10)
Für das letzte Signal in der Liste werden sich dann zusätzliche 
Constraints ausgedacht, die nicht erfüllt werden (können).
Auch an anderer Stelle gibt es timing-Fehler.

Ich habe jetzt schon mehrere Varianten ausprobiert:
- im ldc: set_false_path
- im ldc: create clock_groups -asynchronous "..."
- im lpf: PROHIBIT PRIMARY NET "..."

Mit keiner Methode bekomme ich meinen Post-P&R-Timing-Report sauber.

Die Frequenzen (bzw. Periodendauern) der externen Takte sind angegeben. 
Für die Takte aus der PLL (clk_fast + clk_slow) werden automatisch die 
richtigen Constraints erstellt.

Es gibt mehrere Taktdomänen (und verschiedene Taktquellen, inkl. 
umschalten), so daß die Signalübergänge asynchron sind. Ich bekomme es 
dem Tool aber nicht so recht verklickert.

Hat da jemand eine Idee?

: Bearbeitet durch User
von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> Der Fehler rührt m.E. daher, daß P&R der Meinung ist, er müßte da ein
> 'normales' Signal über die primären Taktleitungen führen:

"Müße" oder "muss" ?!
Manchmal ist der Code halt so geschrieben, das für das Synthesetool das 
Ganze ein Takt ist (wenn beispielsweise in VHDL mit dem Attribut 'event 
oder äähnlichem gearbeitet wird. Also möglicherweise liegt das Problem 
nicht in den constraints sondern im "Logik-code."

Set_false_path ist bei CDC eigentlich immer die Standardmethode. Und ja 
manchmal bekommt man das log nie warningsfrei.

in dem report oben scheint mir der skew zu hoch, vielleicht ungünstig 
gelgenen Eingangpins benutzt und die nicht gleich am Pad abgetaktet?
Vielleicht ist auch der Baustein tatsächlich zu langsam für das Design.

> Es gibt mehrere Taktdomänen (und verschiedene Taktquellen, inkl.
umschalten),

"Takt umschalten" galt/gilt als inherent "unsauber". Xilinx hat extra 
glitchfreie Taktumshalter (BUFGMUX o.ä.) fur sowas eingeführt. Ansonsten 
heisst es eben mit wenigen takten und dafür mit CE arbeiten.
Da könnte was hilfreiches stehen:
https://www.mikrocontroller.net/attachment/314042/MachXO2sysCLOCKPLLDesignandUsageGuide.pdf

von Martin S. (strubi)


Lesenswert?

Wenn ich mich dunkel erinnere, habe ich solche Probleme mit 'BLOCK 
PATH'-Anweisungen im *.lpf ausgemerzt.
Genauer: https://www.latticesemi.com/support/answerdatabase/1/9/6/1964

Kann aber sein, dass man da noch explizite Clock-Gruppen fuer die 
betreffenden Pins definieren musste.

von Rick D. (rickdangerus)


Angehängte Dateien:

Lesenswert?

Bradward B. schrieb:
> "Takt umschalten" galt/gilt als inherent "unsauber". Xilinx hat extra
> glitchfreie Taktumshalter (BUFGMUX o.ä.) fur sowas eingeführt.
Bei Lattice gibt es dafür den Dynamic Clock Mux (DCMA).

Die Taktumschaltung funktioniert (es wird geprüft, ob der externe Takt 
'im Rahmen' ist und wenn ja, schalte ich um, sonst auf 'Reservetakt'). 
Nur wie Lattice da mit den Constrainerei umgeht, sehe ich nicht.


> Also möglicherweise liegt das Problem
> nicht in den constraints sondern im "Logik-code."
Ja, gut möglich. An der Stelle ist ein Latch, wo auf der steigenden 
Flanke vom externen SPI chip-select die Daten (data_out) für's restliche 
Design validiert werden. Die Enable-Signale sind einsynchronisiert, weil 
der SPI-Master für mich asynchron ist.

Wo und wann welches Constraint (sdc/ldc/lpf) verwendet oder ignoriert 
wird, ist (für mich) immer noch recht undurchsichtig.


Auch die aktuellen Zahlen aus dem Report sind ungewöhnlich.
Erst ist der NBR router der Meinung alles ist ok:
1
NBR Summary
2
-----------
3
  Number of unrouted connections : 0 (0.00%)
4
  Number of connections with timing violations : 0 (0.00%)
5
  Estimated worst slack<setup> : 0.305ns
6
  Timing score<setup> : 0
7
-----------
8
Notes: The timing info is calculated for SETUP only and all PAR_ADJs are ignored.
Aber nur für die Setup-Zeiten.

Der timing score passt auch, nur die hold-Zeiten (noch) nicht:
1
Completely routed.
2
End of route.  5844 routed (100.00%); 0 unrouted.
3
4
Hold time timing score: 16, hold timing errors: 9
5
6
Timing score: 0 
7
8
Dumping design to file design.ncd.
9
10
PAR_SUMMARY::Run status = Completed
11
PAR_SUMMARY::Number of unrouted conns = 0
12
PAR_SUMMARY::Worst  slack<setup/<ns>> = 0.305
13
PAR_SUMMARY::Timing score<setup/<ns>> = 0.000
14
PAR_SUMMARY::Worst  slack<hold /<ns>> = -2.982
15
PAR_SUMMARY::Timing score<hold /<ns>> = 16.021
16
PAR_SUMMARY::Number of errors = 0
17
18
Total CPU  time to completion: 13 mins 42 secs 
19
Total REAL time to completion: 13 mins 46 secs 
20
21
par done!
...

Martin S. schrieb:
> Genauer: https://www.latticesemi.com/support/answerdatabase/1/9/6/1964
Danke! Das werde ich noch ausprobieren.

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.