Decoding in VHDL - Bit masking
figured it out. I needed a break, here's what I do to make this more elegant:

for i in 0 to 7 loop
     if (i = unsigned(rx_data(7 downto 5))) then
           cs_o(i) &lt;= '1';
     end if;
end loop ; 


rx_data(7 downto 5) being the 3 bits that need to be encoded into the cs_o byte.

[EDIT]
Or even better (credits to A. Kieffer) :

cs_o(to_integer(unsigned(rx_data(7 downto 5)))) &lt;= '1'; 


This transforms a 20+ lines switch statement into 1. wow