www.mikrocontroller.net

Forum: FPGA, VHDL & Co. [VHDL]std_logic_vector inkrementieren?


Autor: hergi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir jemand sagen warum das nicht funktioniert?

Kann es kompilieren aber bei der Simulation kommt
"Warning: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the 
result will be 'X'(es)."

und es erscheint dann auch XXXX im vector =/
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;

...

TIME_CNT: process(s_clk)
    variable v_counter : integer := 9;

  begin
    if rising_edge(s_clk) then
          if s_cnt_en = '1' then    -- Count enabled
            s_cnt_mil <= s_cnt_mil + 1;  -- Millisekunde erhöhen     

...

Laut der Mitschrift aus meiner Vorlesung sollte es so funktionieren... 
-.-

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowie es jetzt dasteht hat s_cnt_mil keinen Startwert, es wird also auf 
etwas unbkanntes 1 addiert.

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hergi

hergi schrieb:

entweder
> use ieee.std_logic_arith.all;
> use ieee.std_logic_unsigned.all;

oder
> use ieee.numeric_std.all;

aber nie beide. Jedoch ist numeric_std besser.

> TIME_CNT: process(s_clk)
>     variable v_counter : integer := 9;
>
>   begin
>     if rising_edge(s_clk) then
>           if s_cnt_en = '1' then    -- Count enabled
>             s_cnt_mil <= s_cnt_mil + 1;  -- Millisekunde erhöhen

Dein Simulator initialisiert s_cnt_mil mit X (er weiß ja nicht was dein 
FPGA macht), damit erhälts X + 1, was nach wie vor unbekannt ist. Darum 
musst du s_cnt_mil entweder bei der deklaration oder mit einem Reset 
initilisieren.


> Laut der Mitschrift aus meiner Vorlesung sollte es so funktionieren..
Nur bei Profs die nie einen Simulator angefasst haben.

Wo studierst du? Ich hab da so einen Verdacht.

Tom

Autor: hergi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lol, studiere an der TU Ilmenau...


Danke für die Hinweise, es funktioniert jetzt. =)

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

Bewertung
0 lesenswert
nicht lesenswert
Thomas Reinemann schrieb:
> Jedoch ist numeric_std besser.
Allerdings kann mit numeric_std ein std_logic_vector nicht incrementiert 
werden. Das gibt die Fehlermeldung
 + can not have such operands in this context.
Aber dafür gibt es die Vektor-Datentypen signed und unsigned, mit denen 
lässt sich prächtig (und definiert) rechnen...

Wenn man sich das Ganze mal auf der Zunge zergehen lässt, sieht man 
auch, dass es unsinnig ist, mit uneingeschränkten Bitvektoren (wie z.B. 
std_logic_vector) zu rechnen. In einem solchen Vektor kann ja jedes Bit 
eine beliebige Wertigkeit haben (z.B. ein Statusregister eines 
Prozessors). Nur in unserem Kopf wird quasi automatisch den Bits eine 
Wertigkeit zugeordnet. Und einen solchen Automatimus gibt es eigentlich 
in VHDL mit der strengen Typkontrolle nicht.

Autor: TU Ilmenau Student (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> studiere an der TU Ilmenau...

welchen kurs, bei wem ?

mir fällt konkret nichts ein wo überhaupt vhdl gelehrt werden 
würde...sag mir mal bitte welcher das ist, möchte ich auch besuchen.

Autor: hergi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TU Ilmenau Student schrieb:
> welchen kurs, bei wem ?

Hardwarebeschreibungssprachen, Dr. Arlt

Autor: TU Ilmenau Student (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Info.

Das Vorlesungsskript scheint allerdings nix zu enthalten was man nicht 
in 1-2 Stunden Breitensuche zu vhdl bei google auch lernen würde.

Da war der Kurs vom Rommel auch ohne vhdl wohl in der Hinsicht viel 
ergiebiger.

Naja, hab ich wenigstens nix verpasst :)

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.