Forum: FPGA, VHDL & Co. AHDL- bidirektionale Leitung


von Dimitri (Gast)


Lesenswert?

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?

von TobiFlex (Gast)


Lesenswert?

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;

von Dimitri (Gast)


Lesenswert?

hey, danke man.

aber ich hab es nicht ganz verstanden was PAI[] und PBO[] bedeutet...


von TobiFlex (Gast)


Lesenswert?

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

von Dimitri (Gast)


Lesenswert?

alles klar, danke...

sitze irgendwie verplannt vor dem PC heute... ;)

von Dimitri (Gast)


Angehängte Dateien:

Lesenswert?

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...

von TobiFlex (Gast)


Lesenswert?

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;

von Dimitri (Gast)


Lesenswert?

vielen vielen vielen dank für deine hilfe :)

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.