Ein kleines "Schönheitsproblem".
Ich möchte Register anlegen, die vom angeschlossenen Microprozessor aus
zugreifbar sein sollen, das funzt auch soweit.
Dazu gibt es für jedes Register ein Chip-Select, das folgendermaßen
angesprochen wird:
1 | reg_1_cs <= '1' WHEN adr = 20X"FF200" ELSE '0';
|
2 | reg_2_cs <= '1' WHEN adr = 20X"FF204" ELSE '0';
|
3 | ...
|
Das tut auch soweit. Bloß will ich die Adressen nicht vollständig
ausdekodieren, sondern auch Byte- und Word-Zugriffe "mittenrein"
zulassen (also die unteren zwei Bit ignorieren).
Das man in VHDL 2008 "hübsche" Literale definieren kann, die die
Vektorlänge vorgeben, hab' ich schon rausgefunden:
1 | reg_1_cs <= '1' WHEN adr(19 DOWNTO 2) = 18X"3FC80" ELSE '0';
|
2 | reg_2_cs <= '1' WHEN adr(19 DOWNTO 2) = 18X"3FC81" ELSE '0';
|
3 | ...
|
Funktioniert auch. Dummerweise ist aber jetzt die "Selbstdokumentierung"
von oben weg: um die "echte" Adresse aus dem VHDL rauszufinden, muß man
erst das Rechnen anfangen. Was ich dazu eigentlich bräuchte, wär' so
was:
1 | reg_1_cs <= '1' WHEN adr(19 DOWNTO 2) = 20X"FF200"(19 DOWNTO 2) ELSE '0';
|
2 | reg_2_cs <= '1' WHEN adr(19 DOWNTO 2) = 20X"FF204"(19 DOWNTO 2) ELSE '0';
|
3 | ...
|
, also ein Slice von einem Literal. Das geht aber so nicht.
Gibt's einen Trick, wie man das "schöner" machen kann?