Herramientas Personales

Módulo 2 y notas adicionales

por Ruiz de Clavijo, Paulino Última modificación 30/11/2010 17:14

Diseño de la ALU y su testbench. Consta de 2 submódulos

Módulo 2a

Recursos:

Notas adicionales

  • Revisar las funciones existentes en  IEEE.NUMERIC_STD antes de comenzar a escribir código.
  • Los bits de estado se almacenan en biestables y el significado es el siguiente: 
    - Negativo: Es el bit de signo del resultado
    - Overflow: Es el bit de desbordacmiento de las operaciones aritméticas (ADD,SUB, MULT, INC, DEC)
    - Zero: Indica si el resultado de la útlima operación es cero (1 si el resultado es cero y '0' en otro caso)
  • DIV y REM no se implementan
  • Overflow en la suma: Ocurre cuando se suman dos número positivos y el resultado obtenido es negativo o, cuando se suman 2 número negativos y el resultado es positivo.
  • Para el overflow en la resta hay que pensar de manera similar
  • La operación MULT da como resultado el producto de los datos A y B con las siguientes consideraciones:
  1. A y B son números con signo y, el resultado también
  2. A y B deben ser números representables en DATA_WIDTH/2 bits para que el resultado quepa en DATA_WIDTH bits
  3. Hay overflow si algunos de los datos A o B no cabe en DATA_WIDTH/2 bits
  4. Para implementar MULT en el código la mejor opción es emplear la función MultL que se define en micro_pk.vhd:
    result <= MultL(A,B);
  5. Esta función incluye la función RESIZE definida en NUMERIC_STD
  6. Se puede utilizar la función TRUNCATED definida en micro_pk

Módulo 2b

Recursos:

Notas adicionales

  • Abrir la librería STD_TEXTIO para ver las funciones existentes
  • Se necesitan ficheros de módulos anteriores
  • Los vectores de test están en un fichero de texto alu_testvectors.txt.
  • Del fichero alu_testvectors.xls se pueden obtener que datos de A y B son enteros. Para leerlos habrá que definir una variable del tipo correcto, que posteriormente habrá que asociar a la correspondiente señal. Para leer el dato A:
    variable a_integer:integer;
    read(vector_actual,a_integer);
    A <= (std_logic_vector(signed(a_integer)));
  • Realizar la comparación de los valores esperados y los resultados de simulación de los bits neg, avf, zro y del dato result. Ejemplo de neg:
    assert neg=bit_neg report “Neg” & std_logic'image(neg) & “no coincide con el valor esperado en el vector”&integer'image(num_vec)
    severty ERROR;
  •  Realizar el chequeo del resultado sólo si el bit de chequeo C de resultado vale 1. Sino, el testbench falla

 

Acciones de Documento