Forum: FPGA, VHDL & Co. werden Verzögerungen in der Synthese verwendet


von Fpgaboy I. (Firma: feldProduzent) (feldmann)


Lesenswert?

Hallo guten Tag,

werden wait, after, reject und intertial - Anweisungen bei der Synthese 
verwendet? Bzw. werden irgendwelche zeit-bezogenen Anweisungen 
verwendet? Manche Beschreibungen von VHDL geben darüber wenig Auskunft.

Hier nur ein zufälliger Beitrag:
https://www.eevblog.com/forum/microcontrollers/synthesizable-delay-in-vhdl/
"A delay is NOT possible to directly synthesize. You can do it in 
various ways (most of which involve counters) (...) "

https://www.nandland.com/articles/synthesizable-vs-non-synthesizable-code-fpga-asic.html

--
Hier steht, dass man waint untli verwenden soll:
Buch VHDL-Synthese: Entwurf digitaler Schaltungen und Systeme
S.30

"Prozesse ohne Empfindlichkeitsliste müssen, wenn sie synthesefähig sein 
sollen, (mindestens) eine wait until Anweisung enthalten , in der eine 
Taktflankenabfrage erfolgt. (...)"

wird auch hier angeführt
Beitrag "Prozess und Wait"

---
Vielen Dank
Vlt. hat jemand dazu eine Idee

: Bearbeitet durch User
von tja (Gast)


Lesenswert?

die Hardwarebeschreibungssprache ist eine Sache, wie ein FPGA aufgebaut 
ist und was möglich ist eine andere. Deswegen empfehle ich dir, auch mal 
das Innenleben eines FPGA genauer anzuschauen. Auch wie ein Synthese, 
Place&Route und Routing Prozess bei Erstellung der FW funktioniert. 
Danach dürfte vieles klarer sein.

Kurz zu deiner Frage: Nein, das ist nicht möglich, weil es im FPGA keine 
entsprechenden Ressourcen (hardwarebestandteile) gibt, um solche 
Sprachelemente abzubilden. Solche konstrukte können aber für gewisse 
Sachen sehr hilfreich bei der Simulation sein, um eine höhere 
Testabdeckung seiner Module zu erreichen.

btw.
1
process(clk)
2
begin
3
  if rising_edge(clk) then
4
5
  end if;
6
end process;

gefällt mir persönlich besser wie wait until. Beides kann für diesen 
Fall verwendet werden und ist gleichbedeutend.

von ... (Gast)


Lesenswert?

Laufzeitleitungen gibt/gab es u.a. in DIL-Bauform.
Typisch z.B. 8 x 5 ns in einem DIL16.

Die kannst du ja extern an deinen FPGA anknuspern.

Dann klappt das auch mit wait und after.
Das musst du dann "nur" noch dem Synthesizer deines
FPGA-Tools beibringen.

von Biermolch (Gast)


Lesenswert?

Latenzen werden durch Delta-Cycle berücksichtigt.

von Achim M. (minifloat)


Lesenswert?

tja schrieb:
> Kurz zu deiner Frage: Nein, das ist nicht möglich, weil es im FPGA keine
> entsprechenden Ressourcen (hardwarebestandteile) gibt, um solche
> Sprachelemente abzubilden.

Ich war vor Jahren mal bei einem Speicherhersteller zu Gast, die haben 
in ihre DDR5-Speicher einstellbare Verzögerungen eingebaut. Das 
Silicon-Compiler-Synthesetool von denen konnte es halt ;)

Eine Kette von Invertern, von dort auf einen MUX und von dort zum 
Feintuning der Verzögerung in einen "starving inverter". Dafür muss sich 
das Controller-Speicher-System mit Testpatterns erstmal selbst 
kalibrieren und regelmäßig nachkalibrieren, da der ganze Kram nicht 
temperaturstabil ist.

mfg mf

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Achim M. schrieb:
> Ich war vor Jahren mal bei einem Speicherhersteller zu Gast, die haben
> in ihre DDR5-Speicher einstellbare Verzögerungen eingebaut. Das
> Silicon-Compiler-Synthesetool von denen konnte es halt ;)

So etwas ist auch in den "dickeren" FPGAs in den Transceivern und 
teilweise auch normalen I/O-Blöcken enthalten. Allerdings konfiguriert 
man das nicht durch irgendwelche after-Anweisungen.

von tja (Gast)


Lesenswert?

Andreas S. schrieb:
> So etwas ist auch in den "dickeren" FPGAs in den Transceivern und
> teilweise auch normalen I/O-Blöcken enthalten. Allerdings konfiguriert
> man das nicht durch irgendwelche after-Anweisungen.

sehr richtig. Bei Xilinx heißen die IDELAY/ODELAY und sind halt 
Blackboxen.

Achim M. schrieb:
> Ich war vor Jahren mal bei einem Speicherhersteller zu Gast, die haben
> in ihre DDR5-Speicher einstellbare Verzögerungen eingebaut. Das
> Silicon-Compiler-Synthesetool von denen konnte es halt ;)

sehr unwahrscheinlich, dass sie das für jede einzelne Leitung im Chip 
machen. Das ist nur für die IOs gedacht.

von Gustl B. (-gb-)


Lesenswert?

tja schrieb:
> sehr unwahrscheinlich, dass sie das für jede einzelne Leitung im Chip
> machen. Das ist nur für die IOs gedacht.

Vermutlich. Aber wäre sehr cool. Ich stelle mir das so vor:

Ein FPGA bekommt genauso wie andere Blöcke (BRAM, DSP, ...) auch noch 
Verzögerungsblöcke die jeweils zwischen z. B. 0.1 und 100 ns verzögern 
können.
Der Router kann dann beliebige Signale durch so einen Block routen. Geht 
aber auch jetzt mit den IDELAY/ODELAY aber eben nicht automagisch.

von Achim M. (minifloat)


Lesenswert?

tja schrieb:
> Andreas S. schrieb:
>
>> So etwas ist auch in den "dickeren" FPGAs in den Transceivern und
>> teilweise auch normalen I/O-Blöcken enthalten. Allerdings konfiguriert
>> man das nicht durch irgendwelche after-Anweisungen.
>
> sehr richtig. Bei Xilinx heißen die IDELAY/ODELAY und sind halt
> Blackboxen

Dann muss man halt ein paar Pins extern Brücken 😀 und hat sein Delay.

mfg mf

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Ein FPGA bekommt genauso wie andere Blöcke (BRAM, DSP, ...) auch noch
> Verzögerungsblöcke die jeweils zwischen z. B. 0.1 und 100 ns verzögern
> können.
> Der Router kann dann beliebige Signale durch so einen Block routen. Geht
> aber auch jetzt mit den IDELAY/ODELAY aber eben nicht automagisch.

Und was genau gewinnst du damit? Entweder du benoetigst Delays in 
vielfachen von ganzen Clock zyklen, z.B. fuer Pipelining, das loest du 
in Logik oder zum Einhalten der S&H Zeiten, darum kuemmert sich dein P&R 
Tool mittels STA.

von Gustl B. (gustl_b)


Lesenswert?

Stimmt. Da ist kein Bedarf.

von Fpgaboy I. (Firma: feldProduzent) (feldmann)


Lesenswert?

ok das heißt wait until ist synthetisierbar
--
vielen Dank!

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Achim M. schrieb:
> Dann muss man halt ein paar Pins extern Brücken 😀 und hat sein Delay.

Das habe ich tatsächlich schon einmal gemacht, um eine etwas längere 
Verzögerungsleitung in einem Coolrunner II zu realisieren.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fpgaboy I. schrieb:
> ok das heißt wait until ist synthetisierbar
Nein, ein beliebiges "wait until" ist nicht synthetisierbar.

Lediglich ein "wait until rising_edge();" oder "wait until 
falling_edge();" oder eben deren mit 'event ausformulierte Varianten 
packt die Synthese und setzt sie in Flipflops um.

Fpgaboy I. schrieb:
> werden wait, after, reject und intertial - Anweisungen bei der Synthese
> verwendet?
Welche 5% (bestenfalls!) vom VHDL-Sprachumfang und speziell welche 
Attribute der Synthesizer in Hardware umsetzen kann, das steht im 
jeweiligen "Synthesizers Users Guide".

EDIT: einen hab ich noch... ;-)
http://www.lothar-miller.de/s9y/archives/47-wait-im-Prozess.html

: Bearbeitet durch Moderator
von Blechbieger (Gast)


Lesenswert?

tja schrieb:
> Andreas S. schrieb:
>> So etwas ist auch in den "dickeren" FPGAs in den Transceivern und
>> teilweise auch normalen I/O-Blöcken enthalten. Allerdings konfiguriert
>> man das nicht durch irgendwelche after-Anweisungen.
>
> sehr richtig. Bei Xilinx heißen die IDELAY/ODELAY und sind halt
> Blackboxen.

Die konfiguriert man indirekt über entsprechende timing constraints 
(set_input_delay / set_output_delay) der externen Signale.

von Duke Scarring (Gast)


Lesenswert?

Andreas S. schrieb:
> Allerdings konfiguriert
> man das nicht durch irgendwelche after-Anweisungen.
noch nicht :-)

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Blechbieger schrieb:
> Die konfiguriert man indirekt über entsprechende timing constraints
> (set_input_delay / set_output_delay) der externen Signale.

Nope, die kann man sogar on-the-fly konfigurieren um die Timings auf 
schnellen Datenbussen anzupassen und in der Mitte des Datenaugens zu 
bleiben, wenn dieses z.B. wegen Temperaturschwankungen wegdriftet. Da 
nuetzt dir eine statische Timing Analyse herzlich wenig.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Andreas S. schrieb:
> Allerdings konfiguriert
> man das nicht durch irgendwelche after-Anweisungen.

... und auch nicht durch Anweisungen wie "add delay ..." in den 
XDC-file, wie mancher meint.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Blechbieger schrieb:
> Die konfiguriert man indirekt über entsprechende timing constraints
> (set_input_delay / set_output_delay) der externen Signale.

Auch das nicht!!! Die input delay SPECs dienen dazu, dem timing checker 
mitzuteilen, welches budget die Signale jeweils haben, damit er prüfen 
kann, ob es in Verbindung mit den internen Laufzeiten noch mit dem 
Einhalten des Taktfensters klappt.

Die IODELAY (in den Zellen) müssen explizit konfigutiert werden.

von Gustl B. (-gb-)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #6801542:
> ... und auch nicht durch Anweisungen wie "add delay ..." in den
> XDC-file, wie mancher meint.

Dazu habe ich eine recht allgemeine Frage:

Wenn man so Constraints setzt, was wird dann genau bewirkt?

Klar, man teilt dem Tool mit was man möchte oder wie das Timing der 
Signale aussieht. Aber versucht das Tool dann auch das Timing 
einzuhalten? Ich vermute schon. Führt das dazu, dass dann wirklich 
Verzögerungen eingebaut werden weil man in den Constraints z. B. eine 
lange Verzögerung zwischen Taktflanke und Daten beschrieben hat?
Und werden da auch irgendwie automagisch die IDELAY/ODELAY verwendet 
oder wird das nur durch Routing erzeugt?

Danke!

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Manche Tools können die Delays einstellen, wenn z.B. der CoreGen das 
iniziiert. Generell aber sind solche Konstrukte wie "add delay" und "add 
clock" in den constraint file so zu lesen wie: "Addiere zu deiner Liste 
der Vorschriften eine weitere Zeile". Das ist etwas ungeschickt und 
wurde von mir in Richtung VHDL Gremien seinerzeit mehrfach moniert, aber 
da sich das von Synopsis her so etabliert hatte, bleibt es wohl so.

Delay ins den IOs sollte man generell selber instanziieren, so wie 
DDR-Zellen, SERDES, PLL und Clock-IOs. Alles auf die oberste Ebene, die 
sich um das konkrete FPGA kümmert.

Den Rest darunter ins Logigdesign. Physikalische Instanziierung wie 
Block-RAMs und andere immer als Wrapper in Form eines Leafs an die 
unterste Ebene in der Hierarchie. Das schafft die einfachste 
Möglichkeit, constraints zu setzen und FPGAs zu tauschen. So sieht das 
dann aus:

TAKT
- CCIO
--  PLL
--- Takt 1
--- Takt 2
--- SERDES PLL-Takte
--- GBT - Takte
- ODDR (Takt inversion)
- OUTDELAY ( <-> Taktverschiebung)
- INDELAY ( <-> Datenverschiebung)

---------------- Schnittstelle zur Physik ------------------
----- (Synthetisierbares / Simulierbares) Logikdesign -----
(nur logische Take mit rising edge, idealen Übergängen)
- Toplevel
-- Hierarchie 1
--- Hierarchie 2
---------------- Schnittstelle zur Physik ------------------
---- unterste Hierarchie
----- BRAM-Wrapper / BRAM-Modell
----- SERDES-Wrapper / SERDES-Modell
----- DDR-WRAPPER / DDR-Modell
----- GBT-WRAPPER / GBT-Modell
------------------------------------------------------------

Für physikalische Simulation von mehreren FPGAs oder FPGAs mit anderen 
Chips:
PIN-DRIVER-DELAY - Modelle
Leitungs-Delay - Modelle
Pull-UP-Widerständs - Modelle
Chip-Modelle mit Timing

von Fpgakuechle K. (Gast)


Lesenswert?

Gustl B. schrieb:

> Klar, man teilt dem Tool mit was man möchte oder wie das Timing der
> Signale aussieht. Aber versucht das Tool dann auch das Timing
> einzuhalten?

Es gibt nicht ein tool, es gibt mehrere. Hier wäre es (a) der timing 
analyzer fürs STA und b) das timing driven place and route.

a) constraints sind erstrangig für STA gedacht. diese Analyse verändet 
überhaupt kein Design, sondern rechnet nur nach ob die Laufzeiten so in 
das durch die constraints gegeben Korsett passe,.

timing driven place and route macht da aber auch nicht viel anders, nur 
das es, wenn es beim adhoc-Nachrechnen nicht passt, gleich die benutzte 
Verdrahtung/Platzierung verwirft und eine andere 'auswürfelt' und mit 
der neuen weitermacht.

Die Theorie dahinter nennt sich 'Optimierung', kennt man vielleicht aus 
der Mathematik aus dem Umfeld des Simplexalgoritmus, also der Lösung 
eines unterbestimmten Gleichungssystems  unter Berücktsichtigung von 
Randbedingungen (engl. constraints). Wobei beim Place&Route eher das 
'Simulated Anealing" eingesetzt wird.
https://www.uni-saarland.de/fileadmin/user_upload/Professoren/FreyG/Lehre/SC/Vorlesungen/WiSe_1718/Deutsch/11.Stochastische_Optmierung_Simulated_Anealing.pdf

von Fpgaboy I. (Firma: feldProduzent) (feldmann)


Lesenswert?

> Welche 5% (bestenfalls!) vom VHDL-Sprachumfang und speziell welche
> Attribute der Synthesizer in Hardware umsetzen kann, das steht im
> jeweiligen "Synthesizers Users Guide".

:) danke ist wichtig wusste das nicht - macht aber Sinn :P

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.