Logré resolver este problema, pero antes de publicar la solución, solo quería señalar algunas cosas, a saber:
- No puede tener una señal que sea sensible a dos relojes. Es por eso que no puedes reaccionar a las presiones de
key(0)
y key(1)
al mismo tiempo.
- No puede detectar un borde ascendente y descendente de una señal. Es por eso que, incluso si combina ambas pulsaciones de tecla en un
signal bit
, todavía no podría hacer mucho con eso.
- La solución presentada por @Andrew no funciona porque está basada en suposiciones inseguras. Si lo coloca en el hardware, los botones responderán de manera intermitente (de manera poco confiable). Lo que se explica fácilmente por el hecho de que los procesos son concurrentes en VHDL.
Así que ahora, la solución real. Lo que hacemos es introducir dos señales que indican la cantidad de veces que se presionó cada botón:
signal up, down : integer := 0;
Luego, simplemente asignamos estas señales al presionar cada botón:
process(key)
begin
if (key(0)'event and key(0) = '0') then
up <= up + 1;
end if;
if (key(1)'event and key(1) = '0') then
down <= down + 1;
end if;
end process;
Y luego, a nivel de arquitectura, simplemente ponemos:
setting.temp <= up - down;
Si desea realizar un cambio rápido, esta solución no controla el desbordamiento (botón presionado > 2 ^ 31 veces) pero eso no es un problema real.