La simulación de Modelsim no funciona Por favor ayuda

0

Por mi vida no puedo entender por qué no obtengo una salida de este banco de pruebas y la entidad que he creado. Lo he intentado de varias maneras diferentes con la SALIDA y nunca lo he hecho. Sé que esta es una pregunta de noob, pero soy un noob, así que está bien.

AQUÍ está mi entidad:

Library IEEE;
use ieee.std_logic_1164.all;
-----------------------------------------
PACKAGE my_vector IS
    TYPE vector_array IS ARRAY (Natural RANGE <>) OF STD_LOGIC_VECTOR(8-1 downto 0);--(Natural RANGE <>,Natural RANGE <>) OF STD_LOGIC;
END my_vector;
-----------------------------------------
Library IEEE;
USE work.my_vector.all;  --using my package
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.NUMERIC_STD.all;
USE IEEE.STD_LOGIC_ARITH.UNSIGNED;
use ieee.NUMERIC_STD.UNSIGNED;
-----------------------------------------
Entity mux IS
   GENERIC ( M : INTEGER := 8;
             N : INTEGER := 3 );
    PORT (  a   : IN vector_array ((2**N)-1 downto 0); -- ,M-1 downto 0);
            sel : IN INTEGER;                          --STD_LOGIC_VECTOR(N-1 downto 0);
            y   : OUT STD_LOGIC_VECTOR(M-1 downto 0));
END mux;
-----------------------------------------
ARCHITECTURE logic of mux is

signal test : STD_LOGIC_VECTOR(8-1 downto 0); 
    BEGIN
    y  <= a(sel);
END logic;

AQUÍ está el TESTBENCH:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------
PACKAGE my_vector IS
    TYPE vector_array IS ARRAY (Natural RANGE <>) OF STD_LOGIC_VECTOR(8-1 downto 0);--(Natural RANGE <>,Natural RANGE <>) OF STD_LOGIC;
END my_vector;
-----------------------------------------
Library IEEE;
USE work.my_vector.all;  --using my package
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.NUMERIC_STD.all;
use ieee.std_logic_arith.UNSIGNED;
-----------------------------------------
entity tb_GenericMux is
--  Port ( );
end tb_GenericMux;

----------------------------------------------------------------
architecture Behavioral of tb_GenericMux is
constant TIME_DELTA : time := 10 ns;
--DUT-----
COMPONENT Mwidth_by_Ninputs_MUX IS

   GENERIC ( M : INTEGER := 8;
             N : INTEGER := 3 );
    PORT (  a   : IN vector_array ((2**N)-1 downto 0); --,M-1 downto 0);
            sel : IN INTEGER;--STD_LOGIC_VECTOR(N-1 downto 0);
            y   : OUT STD_LOGIC_VECTOR(M-1 downto 0));
END COMPONENT;
------------
use work.my_vector.all;

signal input :  vector_array((2**3)-1 downto 0);--,8-1 downto 0);
signal slt   :  INTEGER;--STD_LOGIC_VECTOR(3-1 downto 0);
signal outp  :  STD_LOGIC_VECTOR(8-1 downto 0);

begin
--connect DUT
DUT: Mwidth_by_Ninputs_MUX port map(a   => input,
                                    sel => slt,
                                    y => outp);


PROCESS
BEGIN
input(0) <= "00000001";
input(1) <= "00000010";
input(2) <= "00000100";
input(3) <= "00001000";
input(4) <= "00010000";
input(5) <= "00100000";
input(6) <= "01000000";
input(7) <= "10000000";

slt <= 1;
wait for TIME_DELTA;
slt <= 2;
wait for TIME_DELTA;
slt <= 3;
wait for TIME_DELTA;
slt <= 4;
wait for TIME_DELTA;

END PROCESS;

end ARCHITECTURE Behavioral;

    
pregunta Toojer

1 respuesta

2

Solicite 35 'reiniciar' y recibirá una advertencia de que el componente DUT no está vinculado. Eso es legal en VHDL.

El nombre de su componente instanciado no coincide con el nombre de la entidad que compiló.

Modelsim tiene un verror que devuelve una definición expandida de las causas del error:

  

Mensaje # 3473 de vsim: el componente especificado no ha sido explícitamente   enlazado y no se ha encontrado ningún enlace predeterminado para ello. Esto significa que   su diseño VHDL no incluye una especificación de configuración o   configuración de componentes para la instancia del componente especificado en orden   para indicar la entidad / arquitectura a usar para ese componente.   Adicionalmente, ninguna entidad del mismo nombre que el componente, teniendo   puertos y genéricos que coinciden con los de la declaración del componente, fue   encontrado al buscar en todas las bibliotecas visibles un enlace predeterminado.   La simulación puede ocurrir, pero no se ejecutará ningún código VHDL para el   instancia de componente independiente: es esencialmente una instancia nula.

Para solucionarlo, puede cambiar el nombre de mux o configurar su banco de pruebas para usar mux para Mwidth_by_by_Ninputs_MUX (DUT). Este último se realiza con una especificación de configuración:

signal outp:    std_logic_vector(8 - 1 downto 0);

-- configuration specification added to map mux to Mwidth_by_Ninputs_MUX
    for DUT: Mwidth_by_Ninputs_MUX use entity work.mux;  -- ADDED

begin
--connect DUT
DUT: Mwidth_by_Ninputs_MUX  port map (...

Solicite 36 y ejecutó la simulación sin el DUT. El componente faltante no puede conducir tus salidas. No tiene en cuenta específicamente que la salida Y no es correcta (outp es todas las 'U', el valor inicial predeterminado). Su formato de forma de onda los traduce a 'X'.

Arregla esos y algo más aparecerá. El valor inicial predeterminado para SLT es INTEGER'LEFT (valor entero negativo máximo), fuera de los límites de un en mux.

Las declaraciones de SEL y SLT tienen fallas y el error es un error de tiempo de ejecución en mux para la asignación:

y  <= a(sel);

a tiene un rango declarado de 0 a 2 ** N -1.

Puedes restringir la declaración de SEL:

        sel : in integer range 0 to 2 ** n - 1; 

Y SLT para que coincida:

signal slt:     integer range 0 to 2 ** 3 - 1;

y ahora tu simulación se completará:

La especificación de configuración está vinculada a mux para DUT (un componente virtual Mwidth_by_Ninputs_MUX).

Arreglar las restricciones de rango para que el SEL y la SLT permanezcan dentro de los límites permite que la simulación se ejecute sin un error de límites.

    
respondido por el user8352

Lea otras preguntas en las etiquetas