Manejo de señales temporales en un entorno concurrente

0

Estoy aprendiendo VHDL y escribí el código para Full Adder como:

 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity FA1 is
port (
A: in std_logic;
B: in std_logic;
Cin: in std_logic;
Cout: out std_logic;
Sum: out std_logic
);
end FA1;

architecture Behavioral of FA1 is
signal s1,c1,c2 : std_logic :='0';

begin

HA1: entity work.HA1 port map(A,B,c1,s1); 
HA2: entity work.HA1 port map(s1,Cin,c2,Sum);
Cout  = c1 OR c2;


end Behavioral;

Mi duda es que todas las sentencias se ejecutarán simultáneamente, ¿cómo se manejan las señales en la arquitectura de FA1? Por ejemplo, ¿cómo se coordinan los valores de s1 y c2 entre estas dos sentencias? En este ejemplo, es necesario que HA1 se ejecute antes que HA2. Entonces, ¿cómo se maneja esto sin usar el "proceso"?

También en la línea

Se hace referencia a
HA1: entity work.HA1 port map(A,B,c1,s1); 
work como el directorio en el que estamos los archivos que se compilarán. Sin embargo, no pude encontrar ninguna carpeta llamada "trabajo" en el área de trabajo.     
pregunta Mojo Jojo

1 respuesta

2

Según el "problema de concurrencia", debe tener en cuenta que VHDL can ejecuta la instrucción simultáneamente, pero que no todos < Las instrucciones / em> se ejecutan simultáneamente en todo momento.

En la práctica, lo que hace VHDL es ejecutar una instrucción tan pronto como uno de sus argumentos cambia (por ejemplo, una asignación var1 < = var2 se ejecuta tan pronto como var2 cambia). Para resolver su problema, HA1 se ejecutará cuando A o B varíen, producirá c1 y s1 como salidas y then , cuando se produzca s1 (varia), HA2 ejecutar.

    
respondido por el DavideM

Lea otras preguntas en las etiquetas