NVC code coverage report

File:  ../../Sources/A11_error_mapping.vhd

     0:   ---------------------------------------------------------------------------------- 
     1:   -- Engineer:    Vitor Mendes Camilo 
     2:   -- 
     3:   -- Module Name: A11_error_mapping - Behavioral 
     4:   -- 
     5:   -- Description:                     Code segment A.11 
     6:   --                                  Error mapping to non-negative values 
     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 a11_error_mapping is 
    16:     generic ( 
    17:       N_WIDTH                : natural := CO_NQ_WIDTH_STD; 
    18:       B_WIDTH                : natural := CO_BQ_WIDTH_STD; 
    19:       K_WIDTH                : natural := CO_K_WIDTH_STD; 
    20:       ERROR_WIDTH            : natural := CO_ERROR_VALUE_WIDTH_STD; 
    21:       MAPPED_ERROR_VAL_WIDTH : natural := CO_MAPPED_ERROR_VAL_WIDTH_STD 
    22:     ); 
    23:     port ( 
    24:       iK                     : in    unsigned (K_WIDTH - 1 downto 0); 
    25:       iBq                    : in    signed (B_WIDTH - 1 downto 0); 
    26:       iNq                    : in    unsigned (N_WIDTH - 1 downto 0); 
    27:       iErrorVal              : in    signed (ERROR_WIDTH - 1 downto 0); 
    28:       oMappedErrorVal        : out   unsigned (MAPPED_ERROR_VAL_WIDTH - 1 downto 0) 
    29:     ); 
    30:   end entity a11_error_mapping; 
    31:    
    32:   architecture behavioral of a11_error_mapping is 
    33:    
    34:     -- Control flags 
    35:     signal sSpecialMap          : std_logic; 
    36:     signal sErrEqualGreaterZero : std_logic; 
    37:    
    38:     -- Width-extended compare for 2*B <= -N (avoid overflow and mismatched lengths) 
    39:     signal sBExt                : signed(B_WIDTH downto 0); 
    40:     signal sNExt                : signed(B_WIDTH downto 0); 
    41:     signal sErrorValExt         : signed((2 * MAPPED_ERROR_VAL_WIDTH) - 1 downto 0); -- so that abs(ErrorVal) fits 
    42:    
    43:     -- Precomputed mapping candidates (parallel) 
    44:     signal sErrU, sErrAbsU      : unsigned (oMappedErrorVal'range); 
    45:     signal sMapErrorSpecialPos  : unsigned (oMappedErrorVal'range); 
    46:     signal sMapErrorSpecialNeg  : unsigned (oMappedErrorVal'range); 
    47:     signal sMapErrorRegPos      : unsigned (oMappedErrorVal'range); 
    48:     signal sMapErrorRegNeg      : unsigned (oMappedErrorVal'range); 
    49:    
    50:   begin 
    51:    
    52:     sErrorValExt <= resize(iErrorVal, sErrorValExt'length); 
    53:     -- Extend and compare: 2*B <= -N with one extra bit to prevent overflow 
    54:     sBExt <= resize(iBq, sBExt'length); 
    55:     -- Zero-extend N before the signed reinterpretation: N reaches RESET (64), whose 
    56:     -- bit pattern sets the MSB of the N_WIDTH-bit vector, so signed(iNq) would read 
    57:     -- it as negative and wrongly trigger the special map. Widen first => sign bit 0. 
    58:     sNExt <= signed(resize(iNq, sBExt'length)); 
    59:    
    60:     sSpecialMap <= '1' when (iK = 0 and 2 * sBExt <= - sNExt) else 
    61:                    '0'; 
    62:    
    63:     -- Error sign flag 
    64:     sErrEqualGreaterZero <= '1' when iErrorVal >= 0 else 
    65:                             '0'; 
    66:    
    67:     -- Magnitudes for mapping 
    68:     sErrU    <= resize(unsigned(iErrorVal), sErrU'length); -- Only used when ErrorVal >= 0, conversion is safe 
    69:     sErrAbsU <= resize(unsigned(abs(sErrorValExt)), sErrAbsU'length); 
    70:    
    71:     -- Special mapping 
    72:     sMapErrorSpecialPos <= resize((2 * sErrU) + 1, sMapErrorSpecialPos'length); 
    73:     sMapErrorSpecialNeg <= resize((2 * sErrAbsU) - 2, sMapErrorSpecialNeg'length); 
    74:    
    75:     -- Regular mapping 
    76:     sMapErrorRegPos <= resize(2 * sErrU, sMapErrorRegPos'length); 
    77:     sMapErrorRegNeg <= resize((2 * sErrAbsU) - 1, sMapErrorRegNeg'length); 
    78:    
    79:     -- Final selection (purely combinational) 
    80:     oMappedErrorVal <= sMapErrorSpecialPos when (sSpecialMap = '1' and sErrEqualGreaterZero = '1') else 
    81:                        sMapErrorSpecialNeg when (sSpecialMap = '1' and sErrEqualGreaterZero = '0') else 
    82:                        sMapErrorRegPos when (sSpecialMap = '0' and sErrEqualGreaterZero = '1') else 
    83:                        sMapErrorRegNeg; -- last case (Errval<0) 
    84:    
    85:   end architecture behavioral;