Podrías implementarlo como un proceso o una función. Mi ejemplo utiliza una función, que se puede reutilizar.
La función se define en utils paquete de nuestra PoC-Library . Los paquetes también contienen la transformación inversa y otro binario < = > codificaciones xxx.
Función :
-- Binary-Code to One-Hot-Code
function bin2onehot(Value : std_logic_vector) return std_logic_vector is
variable result : std_logic_vector(2**Value'length - 1 downto 0);
begin
result := (others => '0');
result(to_integer(unsigned(Value, 0))) := '1';
return result;
end function;
Nota: el resultado se inicializa en el cuerpo de la función, por lo que también funciona con Altera Quartus.
Uso :
signal bin : std_logic_vector(2 downto 0);
signal onehot : std_logic_vector(7 downto 0);
...
onehot <= bin2onehot(bin);
Fuente: PoC.utils paquete