Está en la página 1de 11

Diseño de sistemas modulares verilog y Eda Playground

NOMBRE: Alvarez Jonathan Gilberto / Moreno Ortiz Jorge Luis GRUPO: 9G

PROFESOR: Oscar Becerra FECHA: 06/04/2022

ACTIVIDAD: IMPLEMENTACION DE SUMADORES DE DIFERENTES


ARQUITECTURAS (MAS BITS)
1. Una solución para la suma de más de un bit es el sumador de desplazamiento o Ripple
adder, en este diseño, el bit de acarreo de salida de un bit se alimenta al acarreo de entrada
del siguiente bit más significativo, en Eda playground construya los módulos descriptivos y
de estímulo utilizando el siguiente bloque:

Compruebe el funcionamiento del circuito con todas las posibilidades.

Desarrollo Ejercicio 1:

Vista General del Programa.


Módulo Estimulo Modulo Descriptivo (Design.sv)

`timescale 10ns/100ps `timescale 10ns/100ps


module test_moreno (); module c_electiva(
input [3:0]A,
reg [3:0]A; input [3:0]B,
reg [3:0]B; input Cin,
reg Cin; output S0,S1,S2,S3,Cout);
wire C1,C2,C3;
wire S0,S1,S2,S3,Cout; sum_completo
SC0(A[0],B[0],Cin,S0,C1);
c_electiva sum_completo
SC1(A,B,Cin,S0,S1,S2,S3,Cout); SC1(A[1],B[1],C1,S1,C2);
sum_completo
initial SC2(A[2],B[2],C2,S2,C3);
begin sum_completo
$dumpfile("out.vcd"); SC3(A[3],B[3],C3,S3,Cout);
$dumpvars(1,test_moreno); endmodule

A= 1'b0; B = 1'b0; Cin = 1'b0;


#25 A= 1'b0; B = 1'b0; Cin =
1'b1;
#25 A= 1'b0; B = 1'b1; Cin =
1'b0;
#25 A= 1'b0; B = 1'b1; Cin =
1'b1;
#25 A= 1'b1; B = 1'b0; Cin =
1'b0;
#25 A= 1'b1; B = 1'b0; Cin =
1'b1;
#25 A= 1'b1; B = 1'b1; Cin =
1'b0;
#25 A= 1'b1; B = 1'b1; Cin =
1'b1;
#25;

end
endmodule
Anexo de código auxiliar de la sección del módulo descriptivo

Sum_medio.v Sum_completo.v

`timescale 10ns/100ps `timescale 10ns/100ps


module medio_sumador( module sum_completo(
input A, input A,B,Cin,
input B, output S,Cout);
output S, wire P,G,H;
output Cout); medio_sumador ms1(A,B,P,G);
xor (S, A,B); medio_sumador ms2(P,Cin,S,H);
and (Cout,A,B); or (Cout, G,H);
endmodule endmodule

Tabla de verdad
Tabla de verdad (Forma Teórica)

N A B Cin S0 S1 S2 S3

0 0 0 0 0 0 0 0

1 0 0 1 1 0 0 0

2 0 1 0 1 0 0 0

3 0 1 1 0 1 0 0

4 1 0 0 1 0 0 0

5 1 0 1 0 1 0 0

6 1 1 0 0 1 0 0

7 1 1 1 1 1 0 0
Resultados Obtenidos

Análisis Punto 1.

• Como se puede observar en el desarrollo del ejercicio anterior, dado que el resultado nos da
la respuesta indicada, la suma de las entradas A, B y el input carry, se puede analizar que la
implementación del código que ya es satisfactoria.
• Se puede entender en el código que forma parte de un módulo descriptivo porque son
complementos o enlaces que permiten una simulación y desarrollo del ejercicio propuesto.
• Podemos concluir en la tabla de verdad, la suma de 4 bits se puede ver porque su conjunto
debe dar un valor máximo, que es el camino que lleva la entrada cambia a lo largo de la
suma, considerando Cin. Tenga en cuenta que el acarreo de salida es cuando hay un acarreo
en el 4to bit, y se considera que el acarreo es C4, pero como la suma no puede exceder, no
hay valor extra, porque si se da, excederá el valor de decimal o en binario.
2. Otra solución para la suma de más de un bit es el sumador de acarreo adelantado o carry
look ahead, en este diseño todos los bits de los sumandos están disponibles al mismo
tiempo, como se muestra en la siguiente figura:

Para construir el bloque de carry look ahead, se representa con el siguiente circuito:

Utilice los diagramas bloques mostrados anteriormente para comprobar el funcionamiento


de los circuitos en funcionamiento.
Desarrollo Ejercicio 2:

Vista General del Programa.


Módulo Estimulo Modulo Descriptivo (Design.sv)

` `timescale 10ns/100ps
`timescale 10ns/100ps module sumador_ex(
module test_Jorge_Moreno();
input [3:0]A,
reg [3:0]A; input [3:0]B,
reg [3:0]B; input Cin,
reg Cin; output s0,s1,s2,s3);

wire s0,s1,s2,s3; wire [3:0]P;


wire [3:0]G;
sumador_ex wire C1,C2,C3,C4;
ms(A,B,Cin,s0,s1,s2,s3);
sumador_in
initial Si1(P,G,Cin,C1,C2,C3,C4);
begin
$dumpfile("out.vcd"); xor xo1(P[3], B[3],A[3]);
$dumpvars(1,test_Jorge_Moreno); xor xo2(P[2], B[2],A[2]);
xor xo3(P[1], B[1],A[1]);
A= 1'b0; B = 1'b0; Cin = 1'b0; xor xo4(P[0], B[0],A[0]);
#25 A= 1'b0; B = 1'b0; Cin =
1'b1; and an1(G[3], B[3],A[3]);
#25 A= 1'b0; B = 1'b1; Cin = and an2(G[2], B[2],A[2]);
1'b0; and an3(G[1], B[1],A[1]);
#25 A= 1'b0; B = 1'b1; Cin = and an4(G[0], B[0],A[0]);
1'b1;
#25 A= 1'b1; B = 1'b0; Cin = xor xo5(s3, P[3],C3);
1'b0; xor xo6(s2, P[2],C2);
#25 A= 1'b1; B = 1'b0; Cin = xor xo7(s1, P[1],C1);
1'b1; xor xo8(s0, P[0],Cin);
#25 A= 1'b1; B = 1'b1; Cin =
1'b0; endmodule
#25 A= 1'b1; B = 1'b1; Cin =
1'b1;
#25;

end
endmodule
Anexo de código auxiliar de la sección del módulo descriptivo

Sum_medio.v

`timescale 10ns/100ps
module sumador_in(
input [3:0]P,
input [3:0]G,
input Cin,
output C1,C2,C3,C4);

wire a,b,c,d,e,f,h,i,j,k;

or o1(C1, f,G[0]);
or o2(C2, d,e,G[1]);
or o3(C3, a,b,c,G[2]);
or o4(C4, h,i,j,k,G[3]);

and a1(f,P[0],Cin);
and a2(e,G[0],P[1]);
and a3(d,P[1],P[0],Cin);
and a4(c,G[0],P[1]);
and a5(b,G[0],P[1],P[2]);
and a6(a,Cin,P[0],P[1],P[2]);
and a7(k,G[2],P[3]);
and a8(j,P[3],P[2],G[1]);
and a9(i,G[0],P[3],P[1],P[2]);
and a10(h,Cin,P[0],P[1],P[2],P[3]);

endmodule

Tabla de Verdad.

Tabla de verdad (Forma Teórica)


N A B Cin S0 S1 S2 S3
0 0 0 0 0 0 0 0
1 0 0 1 1 0 0 0
2 0 1 0 1 0 0 0
3 0 1 1 0 1 0 0
4 1 0 0 1 0 0 0
5 1 0 1 0 1 0 0
6 1 1 0 0 1 0 0
7 1 1 1 1 1 0 0
Resultados Obtenidos

Análisis punto 2.

• Para el desarrollo del anterior circuito, primero se plantea un circuito de predicción de


acarreo, ya que este circuito es la base, se comporta como eje de desarrollo para el ejercicio
sugerido, una vez que se crea esta predicción de acarreo en el "sum_med. .sv", que declara
todas las operaciones externas del circuito de búsqueda anticipada de acarreo, e instancia el
módulo "sum_med.v" para el acople y la combinación de funciones específicas del
circuito.
• Teniendo en cuenta la simulación se puede determinar que las salidas ‘s2’ y ‘s3’ que se
mantuvieron en bajo en cada una de las combinaciones posibles de los 2 bits de entrada ‘A
y B’ y el carry ‘Cin’
Conclusiones.

• Es indispensable definir cada variable y tener en cuenta cada parámetro de la tabla de


verdad o del circuito a realizar, ya que es muy importante tener claro cada factor de la
programación en este caso Eda-Playgraund por medio del lenguaje de descripción de
hardware verilog para entender la lógica programable.
• En nuestra interfaz de código escrito Testbench.sv, es fundamental proceder a
definir la operación a realizar en cada módulo, teniendo en cuenta su respectivo
acarreo, que se ejecutará en cada una de las entradas de la operación realizadas,
independientemente de la definición de espacio de cada paso.
• Para diseñar diferentes circuitos a raíz de que complementan otros circuitos es
indispensable el uso de funciones, ya que gracias a ellas se puede realizar el diseño
de los circuitos de una forma más resumida y clara, así se previenen errores en la
programación en el diseño de circuitos simples o complejos.
• Finalmente, para realizar el diseño de un circuito compuesto por circuitos integrados
tener el Datasheet del diseño interno de estos integrados nos facilitara el desarrollo
y la elaboración del circuito, ya que podremos la función de cómo crear las librerías
para la elaboración del circuito y facilitar su compresión.

También podría gustarte