Hallo,
ich bin noch relativ neu im Thema VHDL und stehe nun vor einem Problem:
Bei der Simulation eines eigentlich einfachen Zählers taucht eine für
mich nicht verständliche Warnung im ModelSim auf:
# ** Warning: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand,
the result will be 'X'(es).
# Time: 100 ns Iteration: 1 Instance: /testbench_zaehler/t1
Folgender Code liegt vor:
>Zaehler
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 |
|
6 | ENTITY zaehler IS
|
7 | PORT (clk, en : IN STD_LOGIC ;
|
8 | q : OUT STD_LOGIC_VECTOR (3 downto 0));
|
9 | END zaehler;
|
10 |
|
11 | ARCHITECTURE behav OF zaehler IS
|
12 |
|
13 | SIGNAL q_s : STD_LOGIC_VECTOR (3 DOWNTO 0);
|
14 |
|
15 | BEGIN
|
16 |
|
17 | p1 : PROCESS (clk)
|
18 |
|
19 | BEGIN
|
20 |
|
21 | IF ( clk'EVENT AND clk = '1' AND clk'LAST_VALUE = '0') THEN
|
22 | IF (en = '1') THEN q_s <= q_s + "0001"; END IF;
|
23 | IF (en = '1' AND q_s = "1001") THEN q_s <="0000"; END IF ;
|
24 | END IF ;
|
25 |
|
26 | END PROCESS p1 ;
|
27 |
|
28 | q <= q_s;
|
29 |
|
30 | END behav ;
|
>Stimulus
1 | LIBRARY IEEE;
|
2 | USE IEEE.STD_LOGIC_1164.ALL;
|
3 |
|
4 | ENTITY stimulus_zaehler IS
|
5 | PORT( clk, en : OUT STD_LOGIC );
|
6 | END stimulus_zaehler ;
|
7 |
|
8 | ARCHITECTURE behav OF stimulus_zaehler IS
|
9 | SIGNAL clk_s: STD_LOGIC:='0';
|
10 | BEGIN
|
11 | clk_s <= NOT clk_s AFTER 100 ns;
|
12 | clk <= clk_s ;
|
13 | en <= '0', '1' AFTER 80 ns, '0' AFTER 3000 ns, '1' AFTER 3500 ns;
|
14 |
|
15 | END behav ;
|
>Testbench
1 | LIBRARY IEEE;
|
2 | USE IEEE.STD_LOGIC_1164.ALL;
|
3 |
|
4 | ENTITY testbench_zaehler IS
|
5 | PORT(q_g: OUT STD_LOGIC_VECTOR (3 downto 0));
|
6 | END testbench_zaehler;
|
7 |
|
8 | ARCHITECTURE behav_testbench_zaehler OF testbench_zaehler IS
|
9 |
|
10 | SIGNAL en_g, clk_g: STD_LOGIC;
|
11 |
|
12 | COMPONENT zaehler
|
13 | PORT (clk, en : IN STD_LOGIC ;
|
14 | q : OUT STD_LOGIC_VECTOR (3 downto 0));
|
15 | END COMPONENT;
|
16 |
|
17 | COMPONENT stimulus_zaehler
|
18 | PORT (clk, en : OUT STD_LOGIC );
|
19 | END COMPONENT;
|
20 |
|
21 | BEGIN
|
22 | t1: zaehler PORT MAP (clk=>clk_g, en=>en_g, q=>q_g);
|
23 | t2: stimulus_zaehler PORT MAP (clk=>clk_g, en=>en_g);
|
24 | END behav_testbench_zaehler;
|
Für Hinweise wo der Fehler zu finden ist bin ich sehr dankbar!
Vielen Dank!
LG K.