HOla¡
Pues estoy haciendo una ALU en VHDL y ya la tengo practicamente terminada. El problema es que no puedo simularla por lo siguiente:
He creado la entidad de la ALU y luego he hecho una arquitectura diferente segun la operacion que tenga que realizar.
la operacion que tiene que realizar viene definida por un bit_vector, segun lo que valga en cada momento realiza una u otra.
Pues bien, el problema es que no se como decirle a la ALU en VHDL, que segun la secuencia de entrada del bit que seleciona la operacion, me cambie entre una arquitectura u otra.
Un ejemplo simplificado es el siguiente:
ENTITY alu IS
PORT (Ci : IN BIT;
A, B, S: IN BIT_vector (3 downto 0);
SUM : OUT BIT_vector (3 downto 0);
CO: buffer BIT);
END alu;
ARCHITECTURE op1 OF alu IS
signal n1,n2: bit_vector (4 downto 0);
signal prov,b2: bit_vector (3 downto 0);
BEGIN
-- operacion A+A+1
n1(0)<=ci;
n2(0)<=ci;
b2<="0001";
F1:for n in a'range generate
prov(n)<= (a(n) xor b(n) xor n1(n));
n1(n+1)<= ((a(n) and b(n)) or ((a(n) or b(n)) and n1(n) ));
SUM(n)<= (prov(n) xor b2(n) xor n2(n));
n2(n+1)<= ((prov(n) and b2(n)) or ((prov(n) or b2(n)) and n2(n) ));
end generate;
co<= n2(4);
end op1;
ARCHITECTURE op2 OF alu IS
signal n1: bit_vector (4 downto 0);
BEGIN
--operacion A-B
n1(0)<='1';
F1:for n in a'range generate
SUM(n)<= (a(n) xor b(n) xor n1(n));
n1(n+1)<= ((a(n) and b(n)) or ((a(n) or b(n)) and n1(n) ));
end generate;
co<= n1(4);
end op2;
-- Entidad de prueba de smador
entity Tsuma is end Tsuma;
architecture A1_Tsuma of Tsuma is
signal Ci, co : BIT;
signal A, B, S, SUM: bit_vector (3 downto 0);
component C_suma is
PORT (Ci : IN BIT;
A, B, S: IN BIT_vector (3 downto 0);
SUM : OUT BIT_vector (3 downto 0);
CO: buffer BIT);
end component;
for C1:C_suma use entity work.alu(op1);
for C2:C_suma use entity work.alu(op2);
begin
process (S)
begin
if S="1100" then
C1: C_suma port map (ci, a, b,s, sum, co);
elsif S="0110" then
C2: C_suma port map (ci, a, b,s, sum, co);
end if;
a<="0001","0010" after 50ns, "0100" after 100 ns, "0101" after 150 ns;
b<="0010";
ci<='0' ;
S<="1100";
end A1_Tsuma;
en él, genero una arquitectura para la op A+A+1 y otra para A-B y en la entidad de prueba intento decirle que si S vale 1100 utilice la arquitectura op1 y si vale 0110 que utiliza la arquitectura op2. El caso es que el compilador me da un error y no se que hacer.
A ver si algun alma caritativa me orienta sobre como hacer que segun lo que vlaga la señal S utilice una estructura u otra.
Muchisimas gracias y perdon por el tocho