werden Verzögerungen in der Synthese verwendet

OP (Firma: feldProduzent) #6800456
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
Gast #6800472
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.
Gast #6800584
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.
#6800597
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
(Firma: Schweigstill IT) Persönliche Seite #6800601
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.
Gast #6800608
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.
#6800614
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.
#6800629
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
(Firma: www.elpra.de) Persönliche Seite #6800635
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.
Moderator (Firma: Titel) Persönliche Seite #6800678
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
Gast #6800812
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.
(Firma: www.elpra.de) Persönliche Seite #6801001
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.
Gast #6801552
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.
#6801688
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!
Gast #6801744
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
Gast #6801820
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren