mikrocontroller.net

Forum: FPGA, VHDL & Co. vhdl typumwandlung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Dergute W. (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,


Ich hab' sowas:
signal vcl : integer range 0 to 2047;
signal evenodd : std_logic;


Wie greif' ich denn da in VHDL auf's LSB von vcl zu?
Also sows von dem Kaliber:
if (LSB_von(vcl) = evenodd) then
  ...
else
  ...
end if;

Das kotzt mich grad wieder ordentlich an bei vhdl. Da wird sich 
angestellt wie ein Profi-Informatiker, weil die Typen nicht 100% 
zusammenpassen wollen. Aber wenn man mal 2 std_logic_vector mit 
(versehentlich) unterschiedlichen laengen auf Groesse vergleicht, da 
geht natuerlich alles OK. Da muss man nicht mal ne Warning schmeissen. 
Grmpf.

Gruss
WK

Autor: Duke Scarring (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Ich würde es so probieren:

> signal vcl : integer range 0 to 2047;
> signal evenodd : std_logic;

signal vcl_uns : unsigned( 10 downto 0);

vcl_uns <= unsigned( vcl);

if vcl_uns(0) = evenodd then
>   ...
> else
>   ...
> end if;



Dergute W. schrieb:
> Aber wenn man mal 2 std_logic_vector mit
> (versehentlich) unterschiedlichen laengen auf Groesse vergleicht
Nimmt da etwa jemand noch std_logic_arith?!?

Duke

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dergute W. schrieb:
> Wie greif' ich denn da in VHDL auf's LSB von vcl zu?
Evtl. solltest du den vcl gleich als unsigned Vektor definieren, wenn 
du da sowieso auf einzelne Bits zugreifen willst.

Duke Scarring schrieb:
> vcl_uns <= unsigned( vcl);
... to_unsigned(vcl);
bringt hier weniger Fehlermeldungen ;-)

Autor: Dergute W. (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Merci - ich seh' schon: An der Grundproblematik aendert sich nix. 
Elegant isses nicht. Naja. Maguggn obs geht...
vclstlv <= std_logic_vector(to_unsigned(vcl,11));

Gruss
WK

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dergute W. schrieb:
> vclstlv <= std_logic_vector(to_unsigned(vcl,11));
Den Cast zum std_logic_vector kannst du im Prinzip weglassen, denn auch 
von einem unsigned Vektor lassen sich einzelne Bits indizieren.

Autor: Maus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
>> vclstlv <= std_logic_vector(to_unsigned(vcl,11));
> Den Cast zum std_logic_vector kannst du im Prinzip weglassen, denn auch
> von einem unsigned Vektor lassen sich einzelne Bits indizieren.

Und damits noch universeller wird:
vclstlv <= std_logic_vector(to_unsigned(vcl, vclstlv'legnth));


Maus

Autor: Kinderkacke Entsorger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dergute W. schrieb:
> Moin,
>
> Merci - ich seh' schon: An der Grundproblematik aendert sich nix.
> Elegant isses nicht. Naja. Maguggn obs geht...

Wir sind hier aber nicht auf dem Bolschoi Theater beim Schwanensee, hier 
geht's nicht um Eleganz, sondern um lösungsorientiertes Code 
runterschreiben.
Diese Geseire um "Eleganz" ist so ziemlich das Gegenteil von "geradlinig 
auf die Problemlösung zu arbeiten".

Autor: Thomas U. (thomasu)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Es geht bei Eleganz und zwei Dinge : Schreibarbeit und Lesbarkeit. 
Beides ist bei VHDL und konkret dem Konstrukt so dolle  nicht.

Maus schrieb:
> vclstlv <= std_logic_vector(to_unsigned(vcl, vclstlv'legnth));

Ich würde "length" nehmen und darüber nachdenken, ob man dem Vector 
nicht einen aussagefähigen Namen verpasst. Sowas wie:

Katze.Type <= conv_to_std_animal (resize (Maus.Type, size_of (Maus) * 
10);

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> ... to_unsigned(vcl);
> bringt hier weniger Fehlermeldungen ;-)
Ja, natürlich. Die Modelsim-Session war schon wieder zu für heute...

Dergute W. schrieb:
> Aber wenn man mal 2 std_logic_vector mit
> (versehentlich) unterschiedlichen laengen auf Groesse vergleicht, da
> geht natuerlich alles OK.
Das andere Problem ist doch viel interessanter als der Syntaxkram:

WIMRE hatte ich auch mal den Fall, wo
signal vec5 : std_logic_vector( 2 downto 0) := "101";
signal vec3 : std_logic_vector( 1 downto 0) := "11";

if vec5 < vec3 then
...
ohne Warnung 'true' war. Da habe ich auch eine Weile nach dem Fehler 
suchen müssen.

Wenn man den Code auf numeric_std umstellt, kommt auch die erwartete 
Warnung beim Cast auf unsigned.

Duke

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das lässt sich auch einfach so schreiben:
if to_unsigned(vcl, 1)(0) = evenodd then
...

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus F. schrieb:
> if to_unsigned(vcl, 1)(0) = evenodd then
ja, aber ist das wirklich vorteihaft(er)?

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans schrieb:
> Markus F. schrieb:
>> if to_unsigned(vcl, 1)(0) = evenodd then
> ja, aber ist das wirklich vorteihaft(er)?

Ich versteh' die Frage nicht.

Ich brauch' doch keinen Vektor mit 11 Bits, wenn mich nur eins davon 
interessiert?

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.

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