La simulación de VHDL muestra 'X' para la entrada

3

Soy nuevo en VHDL y estoy tratando de simular un multiplicador de matrices (he usado Verilog antes). Sin embargo, en los resultados de la simulación muestra 'X' para las entradas que solían ser '1'. Aquí está el resultado: YesteeselTestbench:

LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYarray_multiplier_tester2ISENDENTITY;ARCHITECTUREtimedOFarray_multiplier_tester2ISSIGNALA,B:std_logic_vector(3DOWNTO0):="0000";
  SIGNAL product:std_logic_vector(7 DOWNTO 0):="00000000";
BEGIN
 UUT:ENTITY WORK.array_multiplier(main)
    PORT MAP(A,B,product);
 A<="0000"; B<="0000";
PROCESS BEGIN
  WAIT FOR 23 NS;A(0)<='1';B(0)<=NOT B(0);
  WAIT FOR 23 NS;A(3)<='1';B(3)<='1';
  WAIT FOR 23 NS;A(2)<='1';B(2)<='1';A(0)<='0';B(0)<='0';
  WAIT FOR 23 NS;A(1)<='1';B(3)<='0';A(0)<='1';B(0)<='1';
  WAIT FOR 23 NS;A(3)<='0';B(2)<='0';
  WAIT;
END PROCESS;
END ARCHITECTURE timed;

También intenté usar A <="0001" en lugar de A (0) < = '1', pero el resultado fue el mismo. Estoy usando Modelsim para la simulación.

  

¡No sé por qué muestra 'X' para la entrada!

    
pregunta SMA.D

1 respuesta

7

Tiene varios controladores para las señales A y B aquí:

 A<="0000"; B<="0000";

y aquí:

PROCESS BEGIN
  WAIT FOR 23 NS;A(0)<='1';B(0)<=NOT B(0);
  WAIT FOR 23 NS;A(3)<='1';B(3)<='1';
  WAIT FOR 23 NS;A(2)<='1';B(2)<='1';A(0)<='0';B(0)<='0';
  WAIT FOR 23 NS;A(1)<='1';B(3)<='0';A(0)<='1';B(0)<='1';
  WAIT FOR 23 NS;A(3)<='0';B(2)<='0';
  WAIT;
END PROCESS;

Los valores de señal en el primer lugar asignan continuamente "0000" a A y B . Estos no son una asignación de un valor inicial.

Luego, su proceso asigna algo a las mismas señales, por lo tanto, tiene varios controladores que están resueltos. Pero, si maneja 0 en el primer lugar y 1 en el proceso, el valor resultante no está definido como X en la simulación.

Si solo desea inicializar A y B, mueva la primera asignación al proceso:

PROCESS BEGIN
  A<="0000"; B<="0000";
  WAIT FOR 23 NS;A(0)<='1';B(0)<=NOT B(0);
  WAIT FOR 23 NS;A(3)<='1';B(3)<='1';
  WAIT FOR 23 NS;A(2)<='1';B(2)<='1';A(0)<='0';B(0)<='0';
  WAIT FOR 23 NS;A(1)<='1';B(3)<='0';A(0)<='1';B(0)<='1';
  WAIT FOR 23 NS;A(3)<='0';B(2)<='0';
  WAIT;
END PROCESS;
    
respondido por el Martin Zabel

Lea otras preguntas en las etiquetas