paicore_behavioral/encoders/encoder32to5.vhdl
2025-07-13 04:29:59 -05:00

87 lines
No EOL
2.4 KiB
VHDL

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;