El siguiente fragmento de código muestra una manipulación de variables de dos pasos:
1) Convierta un número entero en un número sin signo
2) Convierta un número sin signo en un std_logic_vector y extraiga un cierto número de bits superiores.
¿Podrían estos dos pasos consolidarse en uno solo? Es decir, ¿se trata simplemente de encasillamiento (conexiones de cable) o se trata de algún tipo de circuito temporizado que podría dar lugar a un problema?
signal integrator_inter_uns : unsigned(20 downto 0):= (others => '0');
...
...
counter : process(CLK)
begin
if clk'event and clk = '1' then
-- oveflow
if pwm_counter = N then
pwm_counter <= 0;
-- 1
elsif pwm_counter = 1 then
pwm_counter <= pwm_counter + 1;
integrator_inter_uns <= to_unsigned(integrator, integrator_inter_uns'length); -- 20 bit unsigned
-- 2
elsif pwm_counter = 2 then
pwm_counter <= pwm_counter + 1;
data <= std_logic_vector(integrator_inter_uns(15 downto 0));
-- 3
elsif pwm_counter = 3 then
pwm_counter <= pwm_counter + 1;
dac_input <= data;
else
pwm_counter <= pwm_counter + 1;
end if;
end if;
end process;