En este paquete de trabajo los estudiantes deben familiarizarce con el framework de trabajo de la FPGA seleccionado, a partir de la descripción de un sumador de 1, y su simulación básica
Diseñar un sumador de un bit A y un bit B completo. Es decir el sumador cuenta con carrier y se comporta acorde a la siguiente tabla de verdad.
A | B | Cin | Out | Cout |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
Según la especificación del sumador completo de 1 bit. se deduce que el bloque o modulo funcional esta dado por la siguiente gráfica:
Optimizando el circuito, según la Tabla de verdad , podemos observar que la lógica combinación del ejercicio propuesto esta dada por:
Nota : verifique que tenga el programa para sintetizar la descripción de hardware, para este ejemplo, se usa Quartus prime lite, si desea usar el framework de Xilinx ir al link
Una vez abierto el framework de Quartus prime lite, cree el nuevo proyecto como se explico en el laboratorio anterior con el wizard.
Nota: Recuerde se debe clonar el repositorio en su computador, e importar el archivo sum1bcc_primitive.v
Sin embargo si no importo el archivo sum1bcc_primitive.v , realice el siguiente procedimiento:
module sum1bcc_primitive (A, B, Ci,Cout,S);
input A;
input B;
input Ci;
output Cout;
output S;
wire a_ab;
wire x_ab;
wire cout_t;
and(a_ab,A,B);
xor(x_ab,A,B);
xor(S,x_ab,Ci);
and(cout_t,x_ab,Ci);
or (Cout,cout_t,a_ab);
endmodule
Observe que el HDL inicia con la descripción del módulo sum1bcc_primitive.v
: Se definen las entradas y salidas del bloque funcional , tal cual como se estaba especificado en el bloque funcional
Luego se instancia las respectivas puertas lógicas (AND, OR, XOR), acorde a los resultados de la lógica de la tabla de verdad. Se resalta la definición de tres componentes a_ab, x_ab, cout_t
, de tipo wire
, que no es mas que ‘cables’ utilizados para conectar las salidas y entradas de unos módulos, en el actual ejemplo son conexiones de puertas.
como vimos en el paso anterior y su nombre lo indica se esta realizando una descripción funcional del módulo,este sentido, podemos tener varios tipos de descripción, pero que cumplen con el mismo funcionamiento. a continuacíón se presenta otra descripción a partir del mismo sumados.
En el archivo sum1bcc.v
, que se encuentra en la carpeta src de su paquete de trabajo clonado, pueden observar la siguiente descripción:
module sum1bcc (A, B, Ci,Cout,S);
input A;
input B;
input Ci;
output Cout;
output S;
reg [1:0] st;
assign S = st[0];
assign Cout = st[1];
always @ ( * ) begin
st = A+B+Ci;
end
endmodule
Se evidencia que esta nueva descripción cuenta con un Reg
de 2 bits st
. Reg
, en este sentido, representan un elemento de almacenamiento de datos y conserva dicho valor hasta que se les asigna el siguiente valor.
sum1bcc.v
modulo sum1bcc
y modulo sum1bcc_primitive
Para ejecutar el simulador de EDA (en este caso, Modelsim-Altera) automáticamente desde el software Quartus II usando la función NativeLink, se debe especificar la ruta de herramienta de simulación realizando los siguientes pasos:
C:\intelFPGA_lite\19.1\modelsim_ase\win32aloem
.una vez configurado, estas listo para realizar las simulaciones del banco de pruebas, (testBench), para ello: