VHDL: no puedo ver por qué estas dos arquitecturas producen una RTL diferente

1

Tengo los siguientes ejemplos:

  1. architecture two of andex is begin process(abus) variable y: bit :='1'; begin for i in 7 downto 0 loop y:=abus(i) and y; end loop; x<=y; end process; end;
  2. architecture three of andex is begin process(abus) variable y: bit; begin y:='1'; for i in 7 downto 0 loop y:=abus(i) and y; end loop; x<=y; end process; end;

La única diferencia entre las dos arquitecturas es la ubicación de la inicialización de la variable.

La primera arquitectura produce este RTL:

¿Por qué hay una ruta de retroalimentación? y es conocido por la primera iteración de bucle y cada iteración posterior.

Esperaba que produjera una compuerta AND de 8 bits como la 2a arquitectura.

    
pregunta Mike

2 respuestas

6

En el primero, y se establece en un valor predeterminado de 1 en el momento de la puesta en marcha. En el segundo, y se establece en un valor inicial de 1 cada vez que se ejecuta el proceso.

El primero transfiere el valor resultante de y a la próxima vez que se ejecuta, el segundo no, pero comienza con y igual a 1. Por lo tanto, la retroalimentación.

En C es el equivalente de algo como esto:

int y = 1;
void doSomething() {
    y = y + 1;
}

int y;
void doSomething() {
    y = 1;
    y = y + 1;
}

En el primero, cada vez que doSomething() se llama y se incrementa. En el segundo, cada vez que doSomething() se llama y se establece en 1 y luego se incrementa, por lo que siempre termina en 2, independientemente de cuántas veces llame a doSomething() .

    
respondido por el Majenko
0

Las variables mantienen su estado en las "ejecuciones" del proceso, por lo que mover la inicialización significa que se inicializa una vez.

    
respondido por el Simon Richter

Lea otras preguntas en las etiquetas