hey leute :) brauche eure hilfe, hab folgendes problem: - von einem DSP gehen die leitungen ins FPGA. FPGA ist wie eine pipe. ---------- ---------- -------------------- | | | | | sonstige Logik, | | DSP |==<==>==| FPGA |==<==>==| controller, MCU, | | | | | | etc... | ---------- ---------- -------------------- - wie kann man in AHDL bidirektionale leitung realisieren?
Am besten in der Hilfe von Quartus nach "TRI Primitive" suchen. Hier ist ein kurzer Beispielcode. Viele Grüße TobiFlex SUBDESIGN tristate ( ... data[7..0] :BIDIR; ... ) VARIABLE t_data[7..0] :TRI; ... BEGIN DEFAULTS t_data[].oe=GND; --Bus tristate ... END DEFAULTS; data[]=t_data[].out; IF Bedingung THEN t_data[].oe=VCC; --Bus aktivieren t_data[].in=PAI[]; --Daten für Ausgang END IF; IF Bedingung THEN PBO[].ena=VCC; PBO[]=data[]; --data lesen END IF; END;
hey, danke man. aber ich hab es nicht ganz verstanden was PAI[] und PBO[] bedeutet...
PAI[] und PBO[] sind vom Namen her unwichtig. PAI[] steht für den Vector dessen Daten auf den Bus sollen und anhand von PBO[] sieht man wie die Daten vom Bus gelesen werden. PAI[] könnte also z.B auch IN[] oder beliebig anders heissen. Genauso PBO[]. Viele Grüße TobiFlex
alles klar, danke... sitze irgendwie verplannt vor dem PC heute... ;)
hey TobiFlex, brauch nochmal deine hilfe. also, i habe folgendes code: subdesign tri_dff ( wr, rd : input; data, datb : bidir; ) variable tria, trib : tri; begin DEFAULTS tria.oe=GND; --Bus tristate trib.oe = gnd; END DEFAULTS; datb = tria.out; data = trib.out; if (wr & !rd) then tria.oe = vcc; tria.in = data; elsif (!wr & rd) then trib.oe = vcc; trib.in = datb; end if; end; aber irgendwie übernimmt er die ausgänge nicht, oder irre ich mich??? im anhang ist ein waveform...
Vermutlich lassen sich die Signale nicht mit sich selbst "tristaten". Nimm man extra INPUTs - dann sollte es klappen. subdesign tri_dff ( wr, rd : input; data, datb : bidir; data_in, datb_in : input; ) variable tria, trib : tri; begin DEFAULTS tria.oe=GND; --Bus tristate trib.oe = gnd; END DEFAULTS; datb = tria.out; data = trib.out; if (wr & !rd) then tria.oe = vcc; tria.in = data_in; elsif (!wr & rd) then trib.oe = vcc; trib.in = datb_in; end if; end;
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.