¿Cuál es el uso de 'evento en vhdl?

7

En el código vhdl para el contador síncrono, reemplacé la siguiente parte

process(clock)
begin
    if(clock'event and clock='1')then
        count <= count + 1;
    end if;
end process

con

process(clock)
begin
    if(clock='1')then
        count <= count + 1;
    end if;
end process

el resultado sigue siendo el mismo. Entonces, ¿por qué siempre se recomienda la primera forma de codificación utilizando clock'event ? ?

    
pregunta tollin jose

2 respuestas

8

La lista de sensibilidad es principalmente un concepto utilizado por el simulador para programar la ejecución de procesos. Una herramienta de síntesis usualmente descartará la lista de sensibilidad.
¿Cuáles son los resultados al ejecutar los fragmentos de código anteriores a través de una herramienta de síntesis? La implementación sin 'event inferirá un bloqueo, porque eso es lo que una herramienta de síntesis "ve" cuando se mira el código.

Resultados de Xilinx XST para if clk'event and clk = '1' then :

Adders/Subtractors : 1  
8-bit adder        : 1  
Registers          : 1  
8-bit register     : 1 

Resultados de Xilinx XST para if clk = '1' then :

Adders/Subtractors : 1  
8-bit adder        : 1  
Latches            : 8  
1-bit latch        : 8

Los resultados anteriores se obtuvieron al sintetizar un contador ascendente de 8 bits.

EDITAR (2015-06-11): En IEEE-1076.6-1999 "Estándar IEEE para síntesis de nivel de transferencia de registro (RTL) VHDL" las expresiones que "representarán un borde positivo del reloj cuando se utilicen como condición en una si declaración " se define explícitamente como:

  • RISING_EDGE (clk_signal_name)
  • clk_signal_name'EVENT y clk_signal_name = '1'
  • clk_signal_name = '1' y clk_signal_name'EVENT
  • no clk_signal_name'STABLE y clk_signal_name = '1'
  • clk_signal_name = '1' y no clk_signal_name'STABLE
respondido por el damage
9

Comenzando con la definición de VHDL de wikipedia

  

VHDL (lenguaje de descripción de hardware VHSIC) es una descripción de hardware   lenguaje utilizado en la automatización del diseño electrónico para describir digital y    sistemas de señal mixta como matrices de puertas programables en campo y   circuitos integrados. VHDL también puede usarse como propósito general   lenguaje de programación paralelo

VHDL se usa principalmente para describir circuitos digitales para ASIC o FPGA, pero se puede usar para sistemas analógico-digitales (señal mixta) o incluso para describir procesos paralelos.

'evento significa un cambio en una señal digital, que es un borde . Combinado con '1' , se define un borde ascendente . Esto es casi lo mismo que la función rising_edge (clk) . Aquí la leve diferencia entre ellos (para usuarios avanzados).

Entonces, si no usas el evento, estás describiendo un proceso activado durante el alto nivel de clk. Por ejemplo, para un ciclo de trabajo de 50MHz de 40MHz, el reloj está en estado '1' durante 12.5ns. ¿Qué pasa con el contador durante estos 12.5ns? ¿Cuántas veces contarán durante estos 12.5ns? Y lo más importante, ¿ el sistema en el que se escribió este código es capaz de incrementar un contador usando un nivel de reloj? Probablemente no, aunque su simulador le dé los mismos resultados. Tenga cuidado con los resultados del simulador , porque los simuladores son diferentes a los sintetizadores y pueden proporcionar resultados muy diferentes.

VHDL es un lenguaje generalista que se usa ampliamente para describir circuitos digitales. Entonces, cada fabricante tiene sus plantillas óptimas para describir contadores, registros, memorias ... Y clock'event and clock = '1' o rising_edge (clk) son estándares de facto para describir el flanco ascendente de una señal que figura en la lista de sensibilidad. De la misma manera, si describe un restablecimiento asíncrono, coloca una señal de restablecimiento en la lista de sensibilidad y un nivel alto o bajo que inicializa el registro todo el tiempo que se recibe la señal, no en un instante definido con un borde.

process (clock, reset) 
begin
   if reset='1' then 
      count <= (others => '0');
   elsif clock='1' and clock'event then
      <count> <= <count> + 1;
   end if;
end process;

Para resumir , cada fabricante de lógica programable utiliza un conjunto limitado y definido de definiciones VHDL para describir sus sistemas. Le recomiendo que busque las plantillas VHDL o Verilog para Xilinx o Altera. El sintetizador entiende correctamente que estas plantillas se traducen a elementos de un chip lógico programable en particular, o ASIC u otros sistemas.

    
respondido por el David Quiñones

Lea otras preguntas en las etiquetas