¿Es un código VHDL válido y sintetizable?
case IR(10 downto 7) is -- RD
when "0000" => R0 <= RTA;
when "0001" => R1 <= RTA;
when "0010" => R2 <= RTA;
when "0011" => R3 <= RTA;
when "0100" => R4 <= RTA;
when "0101" => R5 <= RTA;
when "0110" => R6 <= RTA;
when "0111" => R7 <= RTA;
when "1000" => R8 <= RTA;
when "1001" => R9 <= RTA;
when "1010" => R10 <= RTA;
when "1011" => R11 <= RTA;
when "1100" => R12 <= RTA;
when "1101" => R13 <= RTA;
when "1110" => R14 <= RTA;
when "1111" => R15 <= RTA;
when others => null ;
end case;
Como se ve en cada caso, la señal de salida es diferente: R0, R1, R2, etc. Pensé que tal vez tendría que poner todas las salidas en cada caso; Algo como esto:
case IR(10 downto 7) is -- RD
when "0000" =>
R0 <= RTA;
R1 <= 0; -- The problem here is that I don't want R1 to be 0
-- but to retain its previous value
R2 <= 0;
R3 <= 0;
R4 <= 0;
R5 <= 0;
R6 <= 0;
R7 <= 0;
R8 <= 0;
R9 <= 0;
R10 <= 0;
R11 <= 0;
R12 <= 0;
R13 <= 0;
R14 <= 0;
R15 <= 0;
when "0001" =>
R0 <= 0;
R1 <= RTA;
R2 <= 0;
R3 <= 0;
R4 <= 0;
R5 <= 0;
R6 <= 0;
R7 <= 0;
R8 <= 0;
R9 <= 0;
R10 <= 0;
R11 <= 0;
R12 <= 0;
R13 <= 0;
R14 <= 0;
R15 <= 0;
.
.
.
when others => null ;
end case;
Si no tengo todas las salidas (R0 a R15) en cada caso, el compilador VHDL me da una advertencia: "Se encontró un enclavamiento de 1 bit para la señal. Se pueden generar pestillos a partir de un caso incompleto o declaraciones if. no se recomienda el uso de cierres en los diseños FPGA / CPLD, ya que pueden dar lugar a problemas de tiempo ".
Necesito deshacerme de esta advertencia.