¿Cómo se evalúan los procesos en VHDL si una señal aparece / no aparece en una lista de sensibilidad y una declaración IF anidada?

0

En VHDL, se evalúan las sentencias IF condicionales cuando cambia cualquier en la lista de sensibilidad del proceso, o solo si las señales están en la lista de sensibilidad y aparecen como una declaración IF argumentos?

Quiero saber si contado a continuación se incrementa solo cuando se habilita, cnt_clk_cur, o cnt_clk_cur cambia de estado (asumiendo que la declaración IF se evalúa como verdadera), o cuando cambia alguna señal en la lista de sensibilidad (y La declaración IF se evalúa como verdadera).

Soy nuevo en VHDL, así que sé bueno. Cualquier recomendación del simulador VHDL es bienvenida.

begin

   process(clk, aclr, cnt_clk_last, cnt_clk_cur, cnt_clk, enable)

   begin
      if (aclr = '1') then                -- if aclr set all to zero
         counted <= (Others => '0');      -- clear counter
         cnt_clk_last <= '0';
         cnt_clk_cur <= '0';
      elsif rising_edge(clk) then         -- on an edge increment
         cnt_clk_cur <= cnt_clk_last;
         cnt_clk_last <= cnt_clk;
      if (enable = '1' and cnt_clk_cur = '0' and cnt_clk_last = '1') then
         counted <= counted + '1';        -- increment
      end if;
   end if;
   count <= counted;
   end process;

end behavioral;
    
pregunta schadjo

1 respuesta

2

Se evaluará todo el proceso si cambia alguna señal en la lista de sensibilidad.

El valor counted debe estar en un registro cronometrado, de lo contrario, creará un ciclo de retroalimentación combinacional. Por lo tanto, el valor de counted solo debe cambiarse en un flanco ascendente de reloj.

    
respondido por el Elliot Alderson

Lea otras preguntas en las etiquetas