PDA

Ver la versión completa : [Ayuda] Programación VHDL



nakio
01/11/2008, 19:20
Hola a todos, me estoy volviendo loco con esta mierda de ejercicio a ver si me podéis echar una mano.
La cosa es que el programa compila con el puñetero "VeriBest" pero a la hora de ejecutar el simulador me da el siguiente error:

Error: <300c0> During elaboration.
Design unit MUXBASED from library WORK is out-of-date with respect to MUXALU from library WORK


Fatal error: <30041> During elaboration.
Failed to elaborate list of referenced design units for architecture :BITSLICE(MUXBASED)
At line 0, of file C:\PRACTICAVHDL\BITSLICE.VHD.

La cosa va de que me dan el archivo MuxALU.vhd en el que esta declarado el funcionamiento de un Multiplexor 4 a 1 y en el archivo BitSlice.vhd tengo que hacer un BitSlice formado a partir de 4 multiplexores.
Luego a parte me dan el archivo de test ya finalizado.

Resulta que si dentro del archivo BitSlice.vhd yo incorporo el funcionamiento del multiplexor el programa funciona perfectamente, pero en cuanto recurro a un archivo externo la cosa falla.

Archivo MuxALU.vhd:




LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY MuxALU IS
PORT(
Datos: IN std_logic_vector(3 DOWNTO 0);
Sel1: IN std_logic;
Sel0: IN std_logic;
SalMux: OUT std_logic);
END ENTITY MuxALU;

ARCHITECTURE FLujo OF MuxALU IS

SIGNAL Sal1, Sal0: std_logic;

BEGIN
Sal0 <= (Datos(0) AND (NOT Sel0)) OR (Datos(1) AND Sel0);
Sal1 <= (Datos(2) AND (NOT Sel0)) OR (Datos(3) AND Sel0);
SalMux <= (Sal0 AND (NOT Sel1)) OR (Sal1 AND Sel1);
END Flujo;

Archivo BitSlice.vhd



LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY Bitslice IS
PORT(
P: IN std_logic_vector(3 DOWNTO 0);
K: IN std_logic_vector(3 DOWNTO 0);
R: IN std_logic_vector(3 DOWNTO 0);
Abit: IN std_logic;
Bbit: IN std_logic;
ACin: IN std_logic;
Sbit: OUT std_logic;
ACout: OUT std_logic);
END BitSlice;

ARCHITECTURE MuxBased OF BitSlice IS

SIGNAL PF, KF: STD_LOGIC;
SIGNAL ACaux : STD_LOGIC_VECTOR(3 DOWNTO 0);


BEGIN

MUX0: ENTITY WORK.MuxALU(Flujo) PORT MAP(

P, Abit, Bbit, PF

);

MUX1: ENTITY WORK.MuxALU(Flujo) PORT MAP(
K, Abit, Bbit, KF

);

MUX2: ENTITY WORK.MuxALU(Flujo) PORT MAP(

ACaux, PF, KF, ACout

);

MUX3: ENTITY WORK.MuxALU(Flujo) PORT MAP(

R, PF, ACin, Sbit

);
ACaux <= '0' & ACin & '0' & '1';

END ARCHITECTURE MuxBased;

Y el archivo de test que supongo no esta mal porque nos lo ha dado ellos:




LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY TestBitSlice IS
END Entity;

ARCHITECTURE Test OF TestBitSlice IS
TYPE Ordenes IS (A_N_D, O_R, X_O_R, A_D_D);

SIGNAL P: std_logic_vector(3 DOWNTO 0);
SIGNAL K: std_logic_vector(3 DOWNTO 0);
SIGNAL R: std_logic_vector(3 DOWNTO 0);
SIGNAL Abit: std_logic:= '0';
SIGNAL Bbit: std_logic:= '0';
SIGNAL Sbit: std_logic;
SIGNAL ACout: std_logic;
SIGNAL orden: ordenes;

BEGIN

Instancia: ENTITY work.BitSlice(MuxBased)
PORT MAP(
P => P,
K => K,
R => R,
Abit => Abit,
Bbit => Bbit,
ACin => '0',
Sbit => Sbit,
ACout => ACout);

-- Realizamos un las cuatro operaciones AND, OR, XOR y un ADD, primero con Bbit a cero y luego a 1:

P <= "1000", "1110" AFTER 40 ns, "0110" AFTER 80 ns;
K <= "1111", "0001" AFTER 120 ns;
R <= "1100", "0110" AFTER 120 ns;

Bbit <= NOT Bbit AFTER 10 ns;
Abit <= NOT ABit AFTER 20 ns;

orden <= A_N_D, O_R AFTER 40 ns, X_O_R AFTER 80 ns, A_D_D AFTER 120ns;

END ARCHITECTURE Test;

A ver si me podéis echar una mano.

Saludos y gracias, Nakio.

eToiAqui
01/11/2008, 19:36
Creo que VHDL era sensible a mayúsculas minúsculas, así que mira a ver si:

ARCHITECTURE FLujo OF MuxALU IS
Del archivo MuxALU.vhd y lo pones como BitSlice (Flujo)

Ah, y pon END ENTITY BitSlice;
en bitslice.vhd.

De todas maneras, no creo que solucione tu problema, y no llegué en mi corta experiencia con VHDL a hacer diseños modulares, por lo que más no puedo ayudarte. Yo los hacía del estilo macroarchivo con todo, jeje. En lo demás no "veo" nada raro.

nakio
01/11/2008, 20:11
Que va, esta basado en ADA '95 el cual no era sensible y este tampoco :(

Saludos y gracias, Nakio.

EDIT: y con lo del END ENTITY tampoco...

< - >
Ya lo arreglé, me cago en la ****, fallaba por el orden en el que tenía puesto los ficheros , ya está arreglado.

Saludos, Nakio.