Forum: FPGA, VHDL & Co. Import peripheral mit inout ins XPS


von Ütze (Gast)


Lesenswert?

Hallo

ich möchte einen FTDI FT2232 im FiFo-Mode per PLB vom MicroBlaze 
lesen/schreiben. Nur bekomm ich den inout Port im XPS nicht zum Laufen.
Bin mittlerweile 3 Schritte zurück und hab ein einfaches Design mit 
einem Register(slv_reg0) eportiert. Diese Register wird bei tristate = 0 
vom inout Port und kann bei tristate = 1 vom PLB beschrieben werden. Auf 
dem inout Port liegt bei tristate = 1 slv_reg0 sonst Z.

Im Top_Level sind die 3 Ports einzeln in_out_i, in_out_o, in_out_t und 
beim reimport ins XPS wird der inout Port erzeugt.

Den hab ich mit dem IO Port von GPIO verbunden (den IO-Port, die drei 
einzelnen sind nicht verbunden).

Im SDK kann ich per GPIO_SetDataDirection den tristate Port umschalten 
(hab mir einen Pin rausgelegt der je nach in_out_t Zustand low oder high 
ist).

Und das wars, kann vom IO-Port (also per GPIO) weder Daten lesen noch 
schreiben. Das slv_reg0 per plb schreiben und lesen geht.

In der .mpd des Cores wird der I/O port zweimal identisch generiert, 
weiß jemand warum? Hab hier auch enable = single versucht, ohne Erfolg.

Hab das umschalten in einem kleinen Projekt ohne XPS/SDK, einfach mit 
Oszi und per Hand Spannung/GND setzen, gechecked - das geht.

Wo könnte der Fehler liegen?

von Christian (Gast)


Lesenswert?

Hallo,

Nun, _I _O _T beziehen sich auf IOBUF. Hier ein Auszug aus dem
Language-Template:

   IOBUF_inst : IOBUF
   generic map (
      DRIVE => 12,
      IOSTANDARD => "DEFAULT",
      SLEW => "SLOW")
   port map (
      O => O,     -- Buffer output
      IO => IO,   -- Buffer inout port (connect directly to top-level
port)
      I => I,     -- Buffer input
      T => T      -- 3-state enable input, high=input, low=output
   );

D.h. du müsstest T auf '0' ( = low) setzen, wenn du schreiben willst.
Ich hoffe das löst dein Problem

Grüße
  Christian

von Ütze (Gast)


Lesenswert?

Danke für die Antwort aber leider nicht. Mein Core verhält sich genau 
entgegen gesetzt zum xps_gpio. D.h. wenn ich vom uB aus die gpio 
Datenrichtung auf Output setze ist in_out_t = 0 und mein Core soll lesen 
und umgekehrt. Das klappt auch im ISE mit 4 rausgelegt Pins(inout,einem 
eingang der auf inout geschrieben wird, einem ausgang auf dem das von 
inout gelesenen geschrieben wird und einen zum Umschalten(t quasi)). Nur 
nach dem Import ins xps funktioniert es nicht. Da werden zwar noch _i,_o 
und _t in einem io zusammen gefasst, den kann ich mit io vom xps_gpio 
verbinden und die IOs sind auch wirklich verbunden da ich zumindest 
tristate(auch in meinem Core) per SetDataDirection des GPIO-Cores 
umschalten kann. Aber das lesen und schreiben geht nicht.

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.