Forum: FPGA, VHDL & Co. Internes Signal auf andere interne (r/w) Signale mappen


von B. B. (bib)


Lesenswert?

Hallo,

ich habe das folgende Problem und würde gerne wissen ob VHDL eine 
einfache Lösung zulässt:

Ich benutze im XILINX EDK den Import Peripheral Wizard um mir den VHDL 
Rahmen für eine IP erzeugen zu lassen. Ich benötige einige Register und 
in dem erzeugten VHDL Code wird dann ein Internes Signal wie z.B.
1
signal slv_reg0                       : std_logic_vector(0 to C_SLV_DWIDTH-1);

erzeug. Dieses Signal ist in dem Fall 32 bit breit.
Jetzt möchte ich einzelne Subteile dieses Registers an unterschiedliche 
in VHDL beschriebene Schaltungen weiterreichen. Die verwendeten Signale 
sollen (zwecks code lesbarkeit) sinnvolle Namen erhalten. Ich würde also 
zum Beispiel die folgenden beiden zusätzlichen internen Signale 
definieren und die Zuweisung wie folgt machen:
1
architecture IMP of user_logic is
2
  signal slv_reg0               : std_logic_vector(0 to C_SLV_DWIDTH-1); 
3
  signal control_channels   : std_logic_vector(7 downto 0);
4
  signal control_runmode        : std_logic_vector(4 downto 0);
5
begin
6
7
  --USER logic implementation added here
8
  control_channels <= slv_reg0(0 to 7);
9
  control_runmode <= slv_reg0(8 to 12);

ab jetzt kann ich in meinen weiteren VHDL Code auf control_channels und 
control_runmode lesend zugreifen. Da das Signal slv_reg0  ein internes 
Signal ist kann ich sowohl lesend als auch schreibend darauf zugreifen - 
wie kann ich aber lesend und schreibend auf control_runmode zugreifen? 
Im Prinzip habe ich ja nur für einige Bits einen neuen Namen definiert. 
Ich suche also eine Signalzuweisung die das folgende macht:
1
 control_runmode <=> slv_reg0(8 to 12);
(Es ist mir klar das ich dies nicht so hinschreiben kann...)

Gibt es ein ähnliches Konstrukt oder muss ich mindestens noch ein 
zusätzliches Read/Write Signal und getrennte Lese/Schreibsignale 
einführen?

Gruß

Birk

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Was du suchst könnte ein Alias sein.
http://de.wikibooks.org/wiki/VHDL#alias
Damit kannst du z.B. Teilen von Verktoren andere Namen geben.

BTW:
> slv_reg0(0 to 7);
Nummerier deine Vektoren doch mit downto durch (MSB links, LSB 
rechts).

von B. B. (bib)


Lesenswert?

Lothar Miller schrieb:
> Was du suchst könnte ein Alias sein.
> http://de.wikibooks.org/wiki/VHDL#alias
> Damit kannst du z.B. Teilen von Verktoren andere Namen geben.


Danke Lothar, das hört sich genau nach dem an was ich suche!

>
> BTW:
>> slv_reg0(0 to 7);
> Nummerier deine Vektoren doch mit downto durch (MSB links, LSB
> rechts).
Mache ich bei meinen Code auch - der Teil kommt aus dem Wizard und da 
möchte ich nicht eingreifen...

Gruß

Birk

von Georg A. (Gast)


Lesenswert?

Xilinx hat mit dem EDK für ihre PPC-Virtexe leider auch die "verkehrte" 
Bitnummerierung von IBM übernommen. Das geht schon Generationen von 
EDK-Nutzern auf den S*ck und hat mit den daraus resultierenden Bugs (zB. 
bei DRAMs, wo die Adressleitungen wirklich eine bestimmte Ordnung haben 
müssen) sicher schon Millionen $ an unnützer Fehlersuche verschwendet...

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.