File: ../../Sources/A22_errval_mapping.vhd
0: ----------------------------------------------------------------------------------
1: -- Engineer: Vitor Mendes Camilo
2: --
3: -- Module Name: A22_errval_mapping - Behavioral
4: --
5: -- Description: Code segment A.22
6: -- Errval mapping for run interruption sample
7: --
8: ----------------------------------------------------------------------------------
9:
10: library ieee;
11: use ieee.std_logic_1164.all;
12: use ieee.numeric_std.all;
13: use work.openjls_pkg.all;
14:
15: entity a22_errval_mapping is
16: generic (
17: ERROR_WIDTH : natural := CO_ERROR_VALUE_WIDTH_STD;
18: MAPPED_ERRVAL_WIDTH : natural := CO_MAPPED_ERROR_VAL_WIDTH_STD
19: );
20: port (
21: iErrval : in signed (ERROR_WIDTH - 1 downto 0);
22: iRiType : in std_logic;
23: iMap : in std_logic;
24: oEmErrVal : out unsigned (MAPPED_ERRVAL_WIDTH - 1 downto 0)
25: );
26: end entity a22_errval_mapping;
27:
28: architecture behavioral of a22_errval_mapping is
29:
30: begin
31:
32: p_errval_map : process (iErrval, iRiType, iMap) is
33:
34: variable vRI : integer;
35: variable vMap : integer;
36: variable vEmErrval : integer;
37:
38: begin
39:
40: vRI := std_to_int(iRiType);
41: vMap := std_to_int(iMap);
42:
43: vEmErrval := 2 * abs(to_integer(iErrval)) - vRI - vMap;
44:
45: -- Clamp to 0 to absorb delta-cycle transients during sReg4 transitions
46: -- (A.21's iNn/iNq go through an extra delta via sNnExt/sNqExt, so iMap
47: -- may briefly trail iErrval/iRItype before A.21's process re-evaluates).
48: -- The settled value is always non-negative when inputs are coherent.
49: if (vEmErrval < 0) then
50: vEmErrval := 0;
51: end if;
52:
53: oEmErrVal <= to_unsigned(vEmErrval, oEmErrVal'length);
54:
55: end process p_errval_map;
56:
57: end architecture behavioral;