12 use ieee.std_logic_1164.
all;
13 use IEEE.NUMERIC_STD.
all;
22 ENCODING_MODE : integer
26 is_hadronic : in std_logic := '0';
27 IN_threshold : in std_logic_vector(INPUT_DATA_WIDTH-1 downto 0);
28 IN_Load : in std_logic;
29 IN_Data : in std_logic_vector(INPUT_DATA_WIDTH-1 downto 0);
30 OUT_Data : out std_logic_vector(DATA_WIDTH-1 downto 0)
40 signal Data : std_logic_vector(INPUT_DATA_WIDTH-1 downto 0);
42 signal IntegerOutData0 : unsigned(DATA_WIDTH-7 downto 0);
43 signal IntegerOutData1 : unsigned(DATA_WIDTH-6 downto 0);
44 signal IntegerOutData2 : unsigned(DATA_WIDTH-5 downto 0);
45 signal IntegerOutData3 : unsigned(DATA_WIDTH-4 downto 0);
46 signal IntegerOutData4 : unsigned(DATA_WIDTH-3 downto 0);
47 signal OverThreshold : std_logic;
48 signal Data2, Data4 : std_logic_vector(DATA_WIDTH-1 downto 0);
49 signal Saturated : std_logic;
50 signal Invalid : std_logic;
51 signal Negative : std_logic;
53 signal OutData : std_logic_vector(DATA_WIDTH-1 downto 0);
54 signal special : std_logic_vector(1 downto 0);
61 ENCODING_IF : if ENCODING_MODE = 1 generate
63 Sync_proc :
process (clk)
65 if rising_edge(clk) then
68 OverThreshold <= '0' when unsigned(IN_Data) <= unsigned(IN_threshold) else '1';
69 Invalid <= '1' when IN_Data = "1111111110" or IN_Data = "1111111101" else '0';
70 Saturated <= '1' when unsigned(IN_Data) > 1011 else '0';
71 Negative <= '1' when IN_Data(INPUT_DATA_WIDTH -1 downto 5) = "00000" and is_hadronic = '0' else '0';
72 Data2 <= '0'&'0'&'0'&'0'& IN_Data &'0'&'0';
73 Data4 <= '0'&'0'& IN_Data &'0'&'0'&'0'&'0';
75 IntegerOutData0 <= unsigned(IN_Data) - 32;
76 IntegerOutData1 <= unsigned(IN_Data &'0') - 128;
77 IntegerOutData2 <= unsigned(IN_Data &'0'&'0') - 512;
78 IntegerOutData3 <= unsigned(IN_Data &'0'&'0'&'0') - 2048;
79 IntegerOutData4 <= unsigned(IN_Data &'0'&'0'&'0'&'0') - 8192;
82 OverThreshold <= OverThreshold;
84 Saturated <= Saturated;
88 IntegerOutData0 <= IntegerOutData0;
89 IntegerOutData1 <= IntegerOutData1;
90 IntegerOutData2 <= IntegerOutData2;
91 IntegerOutData3 <= IntegerOutData3;
92 IntegerOutData4 <= IntegerOutData4;
96 OUT_Data <= "0000000000000000" when OverThreshold = '0' or Invalid = '1' or Negative = '1' else
97 "1111111111111111" when Saturated = '1' else
98 std_logic_vector(unsigned(Data2) + unsigned(Data4)) when is_hadronic = '1' else
99 (DATA_WIDTH-3 downto 0 => std_logic_vector(IntegerOutData4), others => '0') when unsigned(Data) > 767 else
100 (DATA_WIDTH-4 downto 0 => std_logic_vector(IntegerOutData3), others => '0') when unsigned(Data) > 383 else
101 (DATA_WIDTH-5 downto 0 => std_logic_vector(IntegerOutData2), others => '0') when unsigned(Data) > 191 else
102 (DATA_WIDTH-6 downto 0 => std_logic_vector(IntegerOutData1), others => '0') when unsigned(Data) > 95 else
103 (DATA_WIDTH-7 downto 0 => std_logic_vector(IntegerOutData0), others => '0');
106 end process Sync_proc;
108 elsif ENCODING_MODE = 2
111 data_proc :
process (clk)
113 if rising_edge(clk) then
114 if IN_Load = '1' then
115 if is_hadronic = '1' then
116 OutData <= '0'& std_logic_vector(unsigned('0' & IN_Data & '0'&'0'&'0'&'0') + unsigned('0'& IN_Data &'0'&'0'));
118 case IN_Data(9 downto 8) is
120 if IN_Data(7 downto 5) = "000" then
121 OutData <= "0000000000000000";
123 OutData <= '0'&'0'&'0'&'0'&'0'&'0'&'0'&'0'&std_logic_vector(unsigned(IN_Data(7 downto 0)) - 32);
126 OutData <= '0'&'0'&'0'&'0'&'0'&'0'&std_logic_vector(unsigned('0'&IN_Data(7 downto 0)&'0') + 224);
128 OutData <= '0'&'0'&'0'&'0'&'0'&std_logic_vector(unsigned('0'&IN_Data(7 downto 0)&'0'&'0') + 736);
130 OutData <= '0'&'0'&'0'&std_logic_vector(unsigned('0'&IN_Data(7 downto 0)&'0'&'0'&'0'&'0') + 1760);
137 end process data_proc;
139 special_proc :
process (clk)
141 if rising_edge(clk) then
142 if IN_Load = '1' then
143 if unsigned(IN_Data) <= unsigned(IN_threshold) then
145 elsif IN_Data(INPUT_DATA_WIDTH-1 downto 2) = "11111111" then
146 case IN_Data(1 downto 0) is
161 end process special_proc;
164 out_proc :
process (clk)
166 if rising_edge(clk) then
169 OUT_Data <= "0000000000000000";
171 OUT_Data <= "1111111111111111";
176 end process out_proc;
180 end architecture str;
External data-types and functions.