library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity encoder32to5 is port ( din : in STD_LOGIC_VECTOR(31 downto 0); dout : out STD_LOGIC_VECTOR(4 downto 0); valid : out STD_LOGIC -- '1' if any input is high, '0' if all zero ); end encoder32to5; architecture impl of encoder32to5 is begin process(din) begin valid <= '1'; if din(31) = '1' then dout <= "11111"; elsif din(30) = '1' then dout <= "11110"; elsif din(29) = '1' then dout <= "11101"; elsif din(28) = '1' then dout <= "11100"; elsif din(27) = '1' then dout <= "11011"; elsif din(26) = '1' then dout <= "11010"; elsif din(25) = '1' then dout <= "11001"; elsif din(24) = '1' then dout <= "11000"; elsif din(23) = '1' then dout <= "10111"; elsif din(22) = '1' then dout <= "10110"; elsif din(21) = '1' then dout <= "10101"; elsif din(20) = '1' then dout <= "10100"; elsif din(19) = '1' then dout <= "10011"; elsif din(18) = '1' then dout <= "10010"; elsif din(17) = '1' then dout <= "10001"; elsif din(16) = '1' then dout <= "10000"; elsif din(15) = '1' then dout <= "01111"; elsif din(14) = '1' then dout <= "01110"; elsif din(13) = '1' then dout <= "01101"; elsif din(12) = '1' then dout <= "01100"; elsif din(11) = '1' then dout <= "01011"; elsif din(10) = '1' then dout <= "01010"; elsif din(9) = '1' then dout <= "01001"; elsif din(8) = '1' then dout <= "01000"; elsif din(7) = '1' then dout <= "00111"; elsif din(6) = '1' then dout <= "00110"; elsif din(5) = '1' then dout <= "00101"; elsif din(4) = '1' then dout <= "00100"; elsif din(3) = '1' then dout <= "00011"; elsif din(2) = '1' then dout <= "00010"; elsif din(1) = '1' then dout <= "00001"; elsif din(0) = '1' then dout <= "00000"; else dout <= "00000"; valid <= '0'; end if; end process; end impl;