Módulo 2 y notas adicionales
por Ruiz de Clavijo, Paulino
—
Última modificación
30/11/2010 16:14
Diseño de la ALU y su testbench. Consta de 2 submódulos
Módulo 2a
Recursos:
- Enunciado: Lab4Mod2aV1.1_E.pdf.
- Ficheros: alu.vhd
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:
- A y B son números con signo y, el resultado también
- A y B deben ser números representables en
DATA_WIDTH/2
bits para que el resultado quepa enDATA_WIDTH
bits - Hay overflow si algunos de los datos A o B no cabe en
DATA_WIDTH/2
bits - Para implementar MULT en el código la mejor opción es emplear la función
MultL
que se define enmicro_pk.vhd
:
result <= MultL(A,B);
- Esta función incluye la función
RESIZE
definida enNUMERIC_STD
- Se puede utilizar la función
TRUNCATED
definida enmicro_pk
Módulo 2b
Recursos:
- Enunciado: Lab4Mod2bV1.1_E.pdf
- Ficheros: alu_tb.vhd, alu_testvectors.xls, alu_testvectors.txt, micro_comp_pk.vhd, compile.do.
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 datoresult
. Ejemplo deneg
:
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