Forum: FPGA, VHDL & Co. Bus mit fester Richtung für jedes Bit in VHDL?


von Michi (Gast)


Lesenswert?

Ich habe einen Bus zwischen 2 Bausteinen, der insgesamt 10 Bit breit
ist. Es handelt sich dabei nicht um einen Adress-oder Datenbus sondern
einen Bus, bei dem die Richtung jeder einzelnen Leitung fest steht und
sich nicht mehr ändert. Allerdings kann sich die Bedeutung ändern.

Daher habe ich ihn mit "EXT_BUS : inout std_logic_vector (10 downto
1);" im TOP-Level File aufgenommen. Allerdings erhalte ich dann für
jedes Signal eine Fehlermeldung, da ich z.B. EXT_BUS(1) nur als Input
und EXT_BUS(2) nur als Output verwende.

Gibt es eine Möglichkeit im TOP-Level-File die Bezeichnung "EXT_BUS"
für alle 10 Leitungen zu verwenden und die Richtung für jede Leitung
einzeln vorzugeben (es sind eben nicht alle immer input oder output)?

Falls ja, wie?

Den Zugriff möchte ich eben weiterhin mit EXT_BUS(X) vornehmen können.

von Klaus F. (kfalser)


Lesenswert?

Warum spaltest Du deinen Bus nicht in 2 Busse auf (EXT_IN_BUS und
EXT_OUT_BUS)?

Dann gehts, sonst nicht.

Gruß
Klaus

von Michi (Gast)


Lesenswert?

Danke für den Tip.

Wenn ich Dich richtig verstehe geht dabei aber die Info (z.B.
1,3,4,5,8,9 als Input und der Rest als Output) verloren, da ich diese
von X downto 0 oder so anlegen müsste, oder?

von Alex H. (alex123)


Lesenswert?

Hallo Michi,

meines Wissens nach leider nicht (zumindest nicht
mit VHDL). Bei jedem Port wird ein Mode angegeben,
der festlegt ob in, out, inout ... (kann man
weglassen, default ist m.W. nach "in" - würde ich
aber immer angeben).
Dieser Mode gilt dann für das komplette Signal.

Ich habe mir in solchen Fällen zwei Datentypen
definiert, einen für jede Richtung (die können ja
ähnlich heissen, dann passt das ganze von der
Lesbarkeit auch wieder). Diese Ports kann man auch
sehr schön als Records definieren, dann kann man auf
die einzelnen Felder auch mit mnemonischen Namen
zugreifen ...

Gruss,

Alex

von Alex H. (alex123)


Lesenswert?

Uups, war wohl jemand schneller ... ;-)

Alex

von Alex H. (alex123)


Lesenswert?

Bzgl. der Zählweise:
> ... geht dabei aber die Info (z.B. 1,3,4,5,8,9 als
> Input und der Rest als Output) verloren, da ich diese
> von X downto 0 oder so anlegen müsste, oder?

Wie gesagt, mit nem Record oder sonstigem zusammengesetzten
Datentyp kannst Du das in gewisser Weise beibehalten.

type FromAtoB is record
  Bit1, Bit3, Bit4, ... Bit9: bit;
end record FromAtoB;

type FromBtoA is record
  Bit0, Bit2, Bit6, Bit7: bit;
end record FromBtoA;

Dann kannst Du in beiden Modulen immer noch in der
"richtigen" Reihenfolge darauf zugreifen ...
xyz <= FromBtoA.Bit0;
FromAtoB.Bit1 <= abc;
...
(würde aber den einzelnen Bits ggf. die richtigen
Namen geben, z.B. StartBit, Flag, ErrorCheckOk,
WasAuchImmer, ... usw

Gruss,

Alex

von Hagen R. (hagen)


Lesenswert?

Kann man nicht diese zwei getrennten Busse im VHDL Code virtuell wieder
zusammen-casten ?! Das geht und ich ärgere mich gerade das ich alle was
mit VHDL/FPGAs/CPLDs zu tun hat auf meinen Rechner gelöscht habe.

Gut habe gerade nachgeschaut ALIAS im Code benutzen. Ich weis abr nicht
ob es damit möglich ist eine ALIAS Variable/Signal auf mehrere
referenzierte Objekte zu deklarieren.

Gruß Hagen

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.