Bus mit fester Richtung für jedes Bit in VHDL?

Gast #389101
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.
Gast #389103
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?
#389104
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
#389106
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
#389107
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

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