Quiero atenuar una señal entrante (número de signo de 16 bits entre -1 y 1) en una cierta cantidad (digamos 0,8), es decir,
incoming = incoming * 0.8
Donde entrante es una señal:
signal incoming : std_logic_vector(15 downto 0);
Pero estoy teniendo problemas para que esto funcione. Dentro de un bloque de proceso:
variable temp : std_logic_vector(31 downto 0);
variable scale_factor : std_logic_vector(15 downto 0) := x"6666";
begin
incoming_raw <= data_in;
temp := incoming_raw * scale_factor;
incoming <= temp(31 downto 16);
end process;
A ModelSim no le gusta esto y me da:
# ** Error: /home/blah/blah.vhd(254): No feasible entries for infix operator "*".
# ** Error: /home/blah/blah.vhd(254): Bad right hand side (infix expression) in variable assignment.
¿Por qué el operador * no puede hacer esto cuando ambos operandos son std_logic_vectors de 16 bits?