AHDL- bidirektionale Leitung

Gast #526885
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?
Gast #527000
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;
Gast #527323
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
Gast #527355
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...
Angehängte Dateien:
Gast #527403
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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren