Forum: FPGA, VHDL & Co. INOUT Synchronization?


von Cihan K. (lazoboy61)


Lesenswert?

Hallo,

habe mal ne kleine Frage. Es wird häufig bei RAMs oder FLASHs bedingt 
der I/O Ports für Daten- und Adress-Leitungen ein INOUT Port in VHDL 
benutzt. Weiterhin muss dafür dann ein IOBUF verwendet werden, wie z.B. 
so:
1
gen_cf_dat_IOBUF: FOR X IN 0 TO 15 GENERATE
2
  cf_dat_IOBUF : IOBUF
3
    PORT MAP (
4
      I                 => datout_buf(x),
5
      T                 => dat_en,
6
      IO                => cf_dat(x),
7
      O                 => i_cf_dat(x)
8
      );
9
END GENERATE;

So kann man dann zum Flash Daten senden oder vom Flash Daten empfangen. 
Beim Empfangen landen die Daten dann bei "i_cf_dat(15 DOWNTO 0)". Muss 
man diesen Vektor nun nochmal über 2 Pipelines einsynchronisieren oder 
kann man es so direkt verwenden, da man ja durch die Ansteuerung des 
Flash (durch das Timing) automatisch die Setup- / Hold-Zeiten 
eingehalten hat?

Würde mich über eine Antwort sehr freuen.

Dankend und MfG
Cihan

von Schlumpf (Gast)


Lesenswert?

Hallo,

Wenn du in deinem Design sicherstellen kannst, dass du die Daten erst 
dann übernimmst, wenn sie stabil anliegen, dann musst du nicht extra 
synchronisieren

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


Lesenswert?

Cihan Kalayci schrieb:
> Weiterhin muss dafür dann ein IOBUF verwendet werden, wie z.B. so:
Man braucht solche manuellen Instantiierungen von simplen Komponenten 
nicht, wenn man sich an die Synthese-Giudelines der Toolchain hält. Ich 
würde genau diesen Tristate-Buffer wesentlich kompakter und generischer 
so beschreiben:
1
   cf_dat   <= datout_buf when dat_en='1' else (others=>'Z');
2
   i_cf_dat <= cf_dat;

Cihan Kalayci schrieb:
> Muss man diesen Vektor nun nochmal über 2 Pipelines einsynchronisieren
Nein. Es bringt nichts, Vektoren einzusynchronisieren, wenn die 
Abtastfrequenz asynchron zu den Daten ist. Da muss dann ein anderes 
Synchronisierungsverfahren her, z.B. mit den Steuersignalen WRn, RDn und 
CSn.
> oder kann man es so direkt verwenden,
Ja. Weil die Ansteuerung ja synchron im FPGA gemacht wird ist auch das 
Flash synchron zum FPGA.
> da man ja durch die Ansteuerung des Flash (durch das Timing)
> automatisch die Setup- / Hold-Zeiten eingehalten hat?
"Automatisch" geht da gar nichts. Man muss trotzdem kontrollieren, ob 
die Laufzeiten vom und zum Flash eingehalten werden. Das kann entweder 
durch entsprechende Constraints oder relaxtes Timing über mehrere 
Taktzyklen erreicht werden. Das letztere Timing wird dann ja wieder 
implizit über den Takt constrained.

von Cihan K. (lazoboy61)


Lesenswert?

Ok. super. Danke euch für eure Antworten

Cihan

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.