Forum: FPGA, VHDL & Co. Problem mit tristate Bus


von Regentropfen (Gast)


Lesenswert?

Hallo,

ich habe ein kleines Problem und hoffe, dass mir jemand helfen kann.
Ich habe in meinem Design einen bidirektionalen Datenbus (inout) und ein 
register angeschlossen. Ich möchte auf den Datenbus schreiben 
(funktioniert) und erwarte eine Antwort (Bus in den Tristate versetzen). 
Wenn ich jetzt die Daten auf dem Datenbus in ein Register kopieren will, 
klappt das nicht. Das Zielregister hat dann immer einen 0xFFFF Wert, 
statt dem Datenbuswert. QuartusII gibt dazu auch eine Warnung aus:

Warning (13046): Tri-state node(s) do not directly drive top-level 
pin(s)
Warning (13047): Converted the fan-out from the tri-state buffer "AD" to 
the node "fifo_wrdat" into an OR gate

AD ist mein Datenbus, fifo_wrdat das Zielregister.

Verstanden habe ich die Warnung schon, aber ich weiß nicht, wie ich 
dieses Problem lösen kann, irgendwie muss das doch gehen!

von user (Gast)


Lesenswert?

Das sagt doch alles:

Tri-state node(s) do not directly drive top-level pin(s)

Die Tristates müssen bis in den Toplevel wenn du extern was treiben 
willst.

Interne Tristates können die meisten (eigendl. alle neuen) FPGAs nicht, 
Quartus wandelt es in Logik um

von Daniel__m (Gast)


Lesenswert?

Hi,

Das klingt ganz so, als wenn du innerhalb des FPGAs einen Tri-State Bus 
haben willst. Das geht nicht. Heutige FPGAs haben nur in den IO-Zellen 
Tri-State Buffer. Üblicherweise muss der internen Bus aufgetrennt 
werden.

von Regentropfen (Gast)


Lesenswert?

Genau das ist ja mein Problem:
Wie kann ich Daten von einem Tristate-Bus in ein Register kopieren, wenn 
dieses aber nicht im Tristate sein darf?
1
fifo_wrdat <= AD;

geht eben nicht.

von Duke Scarring (Gast)


Lesenswert?

Ich beschreibe Tristates im Toplevel (und nur im Toplevel) immer so:
1
...
2
  port (
3
    data_pad : std_logic;
4
    ...
5
  );
6
...
7
  signal data_in     : std_logic;
8
  signal data_out    : std_logic;
9
  signal data_enable : std_logic;
10
...
11
  data_in  <= data_pad;
12
  data_pad <= data_out when data_enable = '1' else 'Z'; 
13
...
Alles was unterhalb des Toplevel liegt, muß mit den Signalen data_in, 
data_out und data_enable auskommen.

Duke

von Regentropfen (Gast)


Lesenswert?

Danke viel mals, Duke!
Das hat mir wirklich weitergeholfen, kann jetzt ohne diese Warnings 
kompilieren und das Zielregister ist nicht mehr ständig 0xFFFF.

von Duke Scarring (Gast)


Lesenswert?

Kein Problem. Wir haben alle mal klein angefangen. Und wer gescheit 
fragt, soll auch 'ne gescheite Antwort bekommen.

Duke

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.