www.mikrocontroller.net

Forum: FPGA, VHDL & Co. (others => '0')


Autor: Gabriel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liebe Kollegen!

Ich habe eine Frage zu (others => '0')

wenn ich mein Signal so fülle
signal s_mem   : bit_vector(22 downto 0);
s_mem <= ( X"33333" & "000");
funktioniert es.

Wiso geht das nicht?
s_mem <= (X"33333", others => '0');
??????????

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woran machst du fest, dass es nicht geht? Bekommst du eine Fehlermeldung 
beim Simulieren bzw. Synthetisieren?

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
probier mal
s_mem <= (X"33333", (3 => '0'));

3 ist die Länge des Vectors, der angehängt wird.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> 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');

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
s_mem              <= (others => '0');
s_mem(22 downto 3) <= x"33333";

--
Marcus

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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');

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus Harnisch schrieb:
s_mem              <= (others => '0');
s_mem(22 downto 3) <= x"33333";

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:
s_mem(2 downto 0)  <= (others => '0');
s_mem(22 downto 3) <= x"33333";

Ich lasse mich aber auch gerne eines Besseren belehren.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die erste Schreibweise mußt Du in einen process stecken. Deine 
funktioniert überall.

Duke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.