Liebe Kollegen! Ich habe eine Frage zu (others => '0') wenn ich mein Signal so fülle
1 | signal s_mem : bit_vector(22 downto 0); |
2 | s_mem <= ( X"33333" & "000"); |
funktioniert es. Wiso geht das nicht?
1 | s_mem <= (X"33333", others => '0'); |
??????????
|
Forum: FPGA, VHDL & Co. (others => '0')Liebe Kollegen! Ich habe eine Frage zu (others => '0') wenn ich mein Signal so fülle
funktioniert es. Wiso geht das nicht?
?????????? Woran machst du fest, dass es nicht geht? Bekommst du eine Fehlermeldung beim Simulieren bzw. Synthetisieren? probier mal
3 ist die Länge des Vectors, der angehängt wird. >> Wiso geht das nicht? >> s_mem <= (X"33333", others => '0'); Woher soll der Synthesizer wissen, wohin die x"33333" in den Vektor gehören? > probier mal > s_mem <= (X"33333", (3 => '0')); Das wird nicht gehen: damit würde nur das 3. Element definiert... Das dürfte gehen, hier ist alles definiert: s_mem <= (22 downto 3 => X"33333", others => '0'); Der erste Ansatz ist ein literal, der sich aus zwei zusammengesetzten literalen ergibt. Das zweite ist der Versuch eine Art aggregate expression zu bilden. Die wiederum kann keine string literals enthalten, sondern nur einzelne Zuweisungen. Versuch mal das hier:
-- Marcus Lothar Miller schrieb: > Das dürfte gehen, hier ist alles definiert: > s_mem <= (22 downto 3 => X"33333", others => '0'); Man kann meines Wissens nach in aggregates keine literals unterbringen. Questa sagt dazu: Bit string literal found where non-array type std.standard.bit was expected. -- Marcus > Man kann meines Wissens nach in aggregates keine literals unterbringen.
Aua, da habe ich mich ins Abseits gestellt :-/
Die Zuweisung über einen Bereich ginge natürlich bestenfalls so:
s_mem <= (22 downto 3 => '1', others => '0');
Marcus Harnisch schrieb:
Sorry, dass ich einen so alten Thread ausgrabe, aber das gleiche Problem wie der Fragensteller hatte ich auch gerade. Bei dem oben zitierten VHDL-Code meckert ModelSim allerdings: s_mem sei ja schon "als Ganzes" definiert. Für mich ist das auch irgendwo nachvollziehbar, da diese spezielle Stelle des Signals nicht zwei verschiedene Werte zur gleichen Zeit annehmen kann. Abhilfe schafft da glaube ich nur:
Ich lasse mich aber auch gerne eines Besseren belehren. Die erste Schreibweise mußt Du in einen process stecken. Deine funktioniert überall. Duke 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.
|
|