Hallo,
ich habe ein Modul welches zwei eingehende Signale(STD_LOGIC_VECTOR)
vergleichen soll. Um zu sehen ob ein gewisser Schwellwert(threshold)
überschritten wird, werden beide Signale in Integer umgewandelt.
Gleichzeitig soll 'in_valid' und 'avail' gesetzt sein.
Im Xilinx ISE klappt der Syntaxcheck, aber bei der Simulation bekomme
ich den Fehler "ERROR: In process chk_magn.vhdl:31"
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.all;
|
3 | use IEEE.NUMERIC_STD.all;
|
4 |
|
5 |
|
6 | entity MAGNITUDE is
|
7 | generic(
|
8 | addr_width : integer := 22;
|
9 | magn_width : integer := 11;
|
10 | amp_width : integer := 10
|
11 | );
|
12 | port(
|
13 | -- address 45 downto 23
|
14 | -- magnitude 22 downto 11
|
15 | -- amplitude 10 downto 1
|
16 | tuble : in STD_LOGIC_VECTOR(addr_width+magn_width+amp_width downto 0);
|
17 | in_valid : in STD_LOGIC;
|
18 | threshold : in STD_LOGIC_VECTOR(magn_width-1 downto 0);
|
19 |
|
20 | valid : out STD_LOGIC
|
21 | );
|
22 | end entity MAGNITUDE;
|
23 |
|
24 |
|
25 | architecture behv_magn of MAGNITUDE is
|
26 | signal avail : STD_LOGIC;
|
27 | signal magn_s : STD_LOGIC_VECTOR(threshold'range);
|
28 | begin
|
29 | avail <= tuble(0);
|
30 | magn_s <= tuble(magn_width+amp_width downto amp_width+1);
|
31 | valid <= '1' when (((to_integer(unsigned(magn_s)) > to_integer(unsigned(threshold))) AND in_valid='1') AND avail='1')
|
32 | else '0';
|
33 |
|
34 | end architecture behv_magn;
|