Hallo,
ich bin gerade etwas verwirrt. Ich habe folgendes Code-Konstrukt in
VHDL.
Im "Kopf" Der architecture sind folgende Signaldefinitionen:
1 | signal my_reg : std_logic_vector(31 downto 0);
|
2 | alias func_1 : std_logic_vector(7 downto 0) is my_reg(7 downto 0);
|
3 | alias func_2 : std_logic_vector(7 downto 0) is my_reg(15 downto 8);
|
Im Code werden dann func_1 und func_2 beschrieben:
1 | -- Irgendwo in einem synchronen Prozess
|
2 | -- ...
|
3 | func_1 <= (others => '0');
|
4 |
|
5 | -- Irgendwo in einem ANDEREN synchronen Prozess
|
6 | -- ...
|
7 | func_2 <= (1 => '1', others => '0');
|
In der Simulation (Modelsim / Xcelium) tut das auch.
Wird func_2(0) <= '1' geschrieben, ändert sich my_reg(8).
Wenn man das Ganze aber durch die Synthese jagt, kommt der Fehler, dass
mehrere Quellen die signale my_reg[7:0] treiben. Aus irgendeinem Grund
legt die Synthese beide Aliase an dieselben bits 7...0 in my_reg.
Da ich mir aktuell unsicher bin, ob das überhaupt so gehen sollte: Ist
das überhaupt valides VHDL? Als Workaround mache ich es jetzt erstmal
ohne alias und lege getrennte Signale an...
Standard ist VHDL-93.
Edit: Die Signalnamen sind natürlich jetzt exemplarisch, da ich das
Originaldesign nicht reinstellen kann.