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.
