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


von hergi (Gast)


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 =/
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.std_logic_arith.all;
4
use ieee.std_logic_unsigned.all;
5
use ieee.numeric_std.all;
6
7
...
8
9
TIME_CNT: process(s_clk)
10
    variable v_counter : integer := 9;
11
12
  begin
13
    if rising_edge(s_clk) then
14
          if s_cnt_en = '1' then    -- Count enabled
15
            s_cnt_mil <= s_cnt_mil + 1;  -- Millisekunde erhöhen     
16
17
...

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

von Guest (Gast)


Lesenswert?

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

von Thomas R. (Firma: abaxor engineering) (abaxor)


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

von hergi (Gast)


Lesenswert?

lol, studiere an der TU Ilmenau...


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von TU Ilmenau Student (Gast)


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.

von hergi (Gast)


Lesenswert?

TU Ilmenau Student schrieb:
> welchen kurs, bei wem ?

Hardwarebeschreibungssprachen, Dr. Arlt

von TU Ilmenau Student (Gast)


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 :)

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.