Escolar Documentos
Profissional Documentos
Cultura Documentos
Palabra de salida
1111111000000000
1111111000000000
1000000000000000
19-01-2010
Sistemas Digitales
unsigned long int i;
fprintf(stream, "%s\n", "#Unos en palabra de 16 bits.");
fprintf(stream, "%s\n", ".i 16");
fprintf(stream, "%s\n", ".o 16");
fprintf(stream, "%s\n", ".ilb e15 e14 e13 e12 e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 e0");
fprintf(stream, "%s\n", ".ob s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0");
for(i=0;i<65536L;i++) //2^16
{ fprintf(stream, "%s\t", prtint(i, 16));
t=i;s=0;
for(j=0;j<16;j++)
{ if (t&1) {s=s>>1;s=s|0x8000; }
t=t>>1;
}
fprintf(stream, "%s\n", prtint(s,16));
printf("%ld \n",i); //comenta avance en consola
}
fprintf(stream, "%s\n", ".e");
}
int escribe_archivo(void)
{ FILE *stream;
/* Abre stream para escritura, en modo texto. Puede elegirse el nombre del archivo de salida*/
if ((stream = fopen("unos.pla", "w")) == NULL) {
fprintf(stderr, "No pudo abrir archivo de salida.\n");
return 1;
}
prtinfile(stream);
fclose(stream); /* close stream */
return 0;
}
int main(void)
{
escribe_archivo();
return 0;
}
El archivo generado tiene un peso de ms de 2MB. Se da un listado del comienzo y del final del
archivo.
#Unos en palabra de 16 bits.
.i 16
.o 16
.ilb e15 e14 e13 e12 e11 e10 e9 e8 e7 e6 e5 e4 e3 e2 e1 e0
.ob s15 s14 s13 s12 s11 s10 s9 s8 s7 s6 s5 s4 s3 s2 s1 s0
0000000000000000
0000000000000000
0000000000000001
1000000000000000
0000000000000010
1000000000000000
0000000000000011
1100000000000000
Profesor Leopoldo Silva Bijit
19-01-2010
Diseo Modular.
0000000000000100
0000000000000101
0000000000000110
0000000000000111
1111111111110111
1111111111111000
1111111111111001
1111111111111010
1111111111111011
1111111111111100
1111111111111101
1111111111111110
1111111111111111
.e
3
1000000000000000
1100000000000000
1100000000000000
1110000000000000
1111111111111110
1111111111111000
1111111111111100
1111111111111100
1111111111111110
1111111111111100
1111111111111110
1111111111111110
1111111111111111
19-01-2010
Sistemas Digitales
s0 = (e15&e14&e13&e12&e11&e10&e9&e8&e7&e6&e5&e4&e3&e2&e1&e0);
El formato eqn, es fcilmente traducido a verilog, basta encabezar y terminar el mdulo; adems
de preceder con assign a las ecuaciones de salida, daremos ejemplo de esto ms adelante. En
caso de ocurrir seales negadas, stas son precedidas con el smbolo !, en el formato eqn; el cual
debe reemplazarse globalmente con el smbolo de la negacin de verilog: ~.
El diseo en dos niveles tiene un costo demasiado elevado.
3. Diseo modular.
La estrategia: Dividir para vencer requiere conceptualizar mdulos que permitan
descomponer el problema en otros menos complejos.
Si se conociera el nmero de unos de la palabra de entrada, mediante una funcin
combinacional es sencillo generar el formato de salida. Veremos esto luego, cuando estudiemos
en detalle el mdulo denominado TablaSuma, en el diagrama de la Figura 1.
Para determinar el nmero de unos contenidos en la palabra de entrada se requiere un mdulo
combinacional que entregue como salida el nmero de unos de una palabra de n bits; este diseo
es sencillo de realizar si n es pequeo. Se requieren 5 bits de salida para contener el binario
10000 que equivale a la mxima cuenta de unos, que es 16 decimal. El mdulo SumaUnos es
combinacionalmente complejo de disear, ya que se requieren 5 tablas de verdad de 65536
renglones. Lo cual conduce a la necesidad de descomponer la entrada en partes.
Entrada 15..0
15..0
SumaUnos
4..0
TablaSuma
15..0
Salida 15..0
19-01-2010
Diseo Modular.
5
Entrada 15..0
15..12
11..8
7..4
3..0
cuenta1 cuenta1 cuenta1 cuenta1
12 2..0 12 2..0 12 2..0 12 2..0
suma1
suma1
3..0
3..0
Sumador5
4..0
TablaSuma
Salida 15..0
19-01-2010
Sistemas Digitales
Formato que puede traducirse al siguiente mdulo verilog, empleando un editor de texto:
//cuenta unos en palabra de 4 bits.
module cuenta1(s2,s1,s0,e3,e2,e1,e0);
input e3,e2,e1,e0;
output s2,s1,s0;
assign s2 = (e3&e2&e1&e0);
assign s1 = (~e2&e1&e0) | (~e3&e2&e1&e0) | (e2&~e1&e0) |
(e3&~e1&e0) |(e2&e1&~e0) | (e3&e1&~e0) | (e3&e2&~e0);
assign s0 = (~e3&~e2&~e1&e0) | (~e3&~e2&e1&~e0) | (~e3&e2&~e1&~e0) |
(e3&~e2&~e1&~e0) | (e3&~e2&e1&e0) |
(e3&e2&~e1&e0) | (e3&e2&e1&~e0) | (~e3&e2&e1&e0);
endmodule
19-01-2010
Diseo Modular.
Debe notarse que solamente se especifican los unos de la funcin. Las combinaciones que no
pueden presentarse se tratan como condiciones superfluas.
Con el comando: espresso Dexact oeqntott suma1.pla > suma1.eqn
Se obtienen las ecuaciones minimizadas en dos niveles:
#suma palabras de 3 bits. Operandos con valor maximo 4
su3 = (a2&!a1&!a0&b2&!b1&!b0);
su2 = (!a2&a0&!b2&b1&b0) | (!a2&a1&a0&!b2&b0) | (!a2&b2&!b1&!b0) |
(a2&!a1&!a0&!b2) | (!a2&a1&!b2&b1);
Profesor Leopoldo Silva Bijit
19-01-2010
Sistemas Digitales
19-01-2010
Diseo Modular.
Una modificacin menor de la rutina anterior, permite generar la tabla de verdad de suma1.
La ejecucin del programa anterior, genera la tabla:
#Suma operandos enteros sin signo de 4 bits. Mximo operando 8
.i 8
.o 5
.ilb a3 a2 a1 a0 b3 b2 b1 b0
.ob n4 n3 n2 n1 n0
00000000
00000
00000001
00001
00000010
00010
00000011
00011
00000100
00100
00000101
00101
00000110
00110
00000111
00111
00001000
01000
00010000
00001
00010001
00010
00010010
00011
00010011
00100
00010100
00101
00010101
00110
00010110
00111
00010111
01000
00011000
01001
00100000
00010
00100001
00011
00100010
00100
00100011
00101
00100100
00110
00100101
00111
00100110
01000
00100111
01001
00101000
01010
00110000
00011
00110001
00100
00110010
00101
00110011
00110
00110100
00111
00110101
01000
00110110
01001
00110111
01010
00111000
01011
01000000
00100
01000001
00101
01000010
00110
01000011
00111
01000100
01000
19-01-2010
10
01000101
01000110
01000111
01001000
01010000
01010001
01010010
01010011
01010100
01010101
01010110
01010111
01011000
01100000
01100001
01100010
01100011
01100100
01100101
01100110
01100111
01101000
01110000
01110001
01110010
01110011
01110100
01110101
01110110
01110111
01111000
10000000
10000001
10000010
10000011
10000100
10000101
10000110
10000111
10001000
.e
Sistemas Digitales
01001
01010
01011
01100
00101
00110
00111
01000
01001
01010
01011
01100
01101
00110
00111
01000
01001
01010
01011
01100
01101
01110
00111
01000
01001
01010
01011
01100
01101
01110
01111
01000
01001
01010
01011
01100
01101
01110
01111
10000
La que procesada con espresso, obtiene las ecuaciones minimizadas en dos niveles:
#Suma operandos enteros sin signo de 4 bits.
n4 = (a3&!a2&!a1&!a0&b3&!b2&!b1&!b0);
n3 = (!a3&b3&!b2&!b1&!b0) | (a3&!a2&!a1&!a0&!b3) | (!a3&a0&!b3&b2&b1&b0) |
(!a3&a2&a0&!b3&b1&b0) | (!a3&a1&a0&!b3&b2&b0) | (!a3&a2&a1&a0&!b3&b0) |
( !a3&a1&!b3&b2&b1) | (!a3&a2&a1&!b3&b1) | (!a3&a2&!b3&b2);
Profesor Leopoldo Silva Bijit
19-01-2010
Diseo Modular.
11
n2 = (!a3&!a2&a0&!b3&!b2&b1&b0) | (!a3&a2&a0&!b3&b2&b1&b0) |
(!a3&!a2&a1&a0&!b3&!b2&b0) | (!a3&a2&a1&a0&!b3&b2&b0) |
(!a3&!a2&!b3&b2&!b1&!b0) | ( !a3&a2&!a1&!b3&!b2&!b0) |
(!a3&!a2&!a1&!b3&b2&!b0) | (!a3&a2&!a0&!b3&!b2&!b1) |
(!a3&!a2&!a0&!b3&b2&!b1) | (!a3&!a2&a1&!b3&!b2&b1) |
(!a3&a2&a1&!b3&b2&b1) | (!a3&a2&!a1&!a0&!b3&!b2) |
(!a3&a2&!a1&!b3&!b2&!b1) | ( !a3&!a2&!a1&!b3&b2&!b1) |
(!a3&a2&!b2&!b1&!b0) | (!a2&!a1&!a0&!b3&b2);
n1 = (!a3&a1&a0&!b3&b1&b0) | (!a3&!a1&a0&!b3&!b1&b0) | (!a3&a1&!b2&!b1&!b0) |
(!a2&!a1&!a0&!b3&b1) | (!a3&a1&!b3&!b1&!b0) | (!a3&!a1&!b3&b1&!b0) |
(!a3&a1&!a0&!b3&!b1) | (!a3&!a1&!a0&!b3&b1);
n0 = (!a3&a0&!b2&!b1&!b0) | (!a2&!a1&!a0&!b3&b0) | (!a3&a0&!b3&!b0) |
(!a3&!a0&!b3&b0);
El que permite escribir el mdulo verilog:
//Suma operandos enteros sin signo de 4 bits. Mximo operando 8
module sumadorU5(a3,a2,a1,a0,b3,b2,b1,b0,n4,n3,n2,n1,n0);
input a3,a2,a1,a0,b3,b2,b1,b0;
output n4,n3,n2,n1,n0;
assign n4 = (a3&~a2&~a1&~a0&b3&~b2&~b1&~b0);
assign n3 = (~a3&b3&~b2&~b1&~b0) | (a3&~a2&~a1&~a0&~b3) |
(~a3&a0&~b3&b2&b1&b0) | (~a3&a2&a0&~b3&b1&b0) |
(~a3&a1&a0&~b3&b2&b0) | (~a3&a2&a1&a0&~b3&b0) |
(~a3&a1&~b3&b2&b1) | (~a3&a2&a1&~b3&b1) | (~a3&a2&~b3&b2);
assign n2 = (~a3&~a2&a0&~b3&~b2&b1&b0) | (~a3&a2&a0&~b3&b2&b1&b0) |
(~a3&~a2&a1&a0&~b3&~b2&b0) | (~a3&a2&a1&a0&~b3&b2&b0) |
(~a3&~a2&~b3&b2&~b1&~b0) | (~a3&a2&~a1&~b3&~b2&~b0) |
(~a3&~a2&~a1&~b3&b2&~b0) | (~a3&a2&~a0&~b3&~b2&~b1) |
(~a3&~a2&~a0&~b3&b2&~b1) | (~a3&~a2&a1&~b3&~b2&b1) |
(~a3&a2&a1&~b3&b2&b1) |(~a3&a2&~a1&~a0&~b3&~b2) |
(~a3&a2&~a1&~b3&~b2&~b1) | (~a3&~a2&~a1&~b3&b2&~b1) |
(~a3&a2&~b2&~b1&~b0) | (~a2&~a1&~a0&~b3&b2);
assign n1 = (~a3&a1&a0&~b3&b1&b0) | (~a3&~a1&a0&~b3&~b1&b0) |
(~a3&a1&~b2&~b1&~b0) | (~a2&~a1&~a0&~b3&b1) |
(~a3&a1&~b3&~b1&~b0) | (~a3&~a1&~b3&b1&~b0) |
(~a3&a1&~a0&~b3&~b1) | (~a3&~a1&~a0&~b3&b1);
assign n0 = (~a3&a0&~b2&~b1&~b0) | (~a2&~a1&~a0&~b3&b0) |
(~a3&a0&~b3&~b0) | (~a3&~a0&~b3&b0);
endmodule
19-01-2010
12
Sistemas Digitales
Traducida a verilog:
//convierte binarios de 0 a 16 en unos justificados a la derecha en ancho de 16 bits
19-01-2010
Diseo Modular.
13
module suma1(n4,n3,n2,n1,n0,
sa15,sa14,sa13,sa12,sa11,sa10,sa09,sa08,
sa07,sa06,sa05,sa04,sa03,sa02,sa01,sa00);
input n4,n3,n2,n1,n0;
output sa15,sa14,sa13,sa12,sa11,sa10,sa09,sa08,sa07,sa06,sa05,sa04,sa03,sa02,sa01,sa00;
assign sa15 = (n4&~n3&~n2&~n1&~n0) | (~n4&n0) | (~n4&n1) | (~n4&n2) | (~n4&n3);
assign sa14 = (n4&~n3&~n2&~n1&~n0) | (~n4&n1) | (~n4&n2) | (~n4&n3);
assign sa13 = (n4&~n3&~n2&~n1&~n0) | (~n4&n1&n0) | (~n4&n2) | (~n4&n3);
assign sa12 = (n4&~n3&~n2&~n1&~n0) | (~n4&n2) | (~n4&n3);
assign sa11 = (n4&~n3&~n2&~n1&~n0) | (~n4&n2&n0) | (~n4&n2&n1) | (~n4&n3);
assign sa10 = (n4&~n3&~n2&~n1&~n0) | (~n4&n2&n1) | (~n4&n3);
assign sa09 = (n4&~n3&~n2&~n1&~n0) | (~n4&n2&n1&n0) | (~n4&n3);
assign sa08 = (n4&~n3&~n2&~n1&~n0) | (~n4&n3);
assign sa07 = (n4&~n3&~n2&~n1&~n0) | (~n4&n3&n0) | (~n4&n3&n1) | (~n4&n3&n2);
assign sa06 = (n4&~n3&~n2&~n1&~n0) | (~n4&n3&n1) | (~n4&n3&n2);
assign sa05 = (n4&~n3&~n2&~n1&~n0) | (~n4&n3&n1&n0) | (~n4&n3&n2);
assign sa04 = (n4&~n3&~n2&~n1&~n0) | (~n4&n3&n2);
assign sa03 = (n4&~n3&~n2&~n1&~n0) | (~n4&n3&n2&n0) | (~n4&n3&n2&n1);
assign sa02 = (n4&~n3&~n2&~n1&~n0) | (~n4&n3&n2&n1);
assign sa01 = (~n4&n3&n2&n1&n0) | (n4&~n3&~n2&~n1&~n0);
assign sa00 = (n4&~n3&~n2&~n1&~n0);
endmodule
Salida 15..0
19-01-2010
14
Sistemas Digitales
19-01-2010
Diseo Modular.
Device utilization summary:
Selected Device : 3s400pq208-5
Number of Slices:
Number of 4 input LUTs:
Number of bonded IOBs:
15
46 out of 3584 1%
81 out of 7168 1%
32 out of 141 22%
4. Diseo abstracto.
La descripcin del problema, empleando verilog, permite describir lo que se desea realizar, en la
forma ms abstracta posible. En este caso el mdulo que suma los unos de la palabra es sencillo
de describir, y dejamos a la herramienta de sntesis que tome la iniciativa para descomponer el
problema en submdulos. Para la descripcin de la tabla de salida, empleamos una sentencia
case. Resulta:
module ctaunos(entrada, salida);
input [15:0] entrada;
output [15:0] salida;
reg [4:0] sumau;
reg [15:0] salida;
always @(*)
begin
sumau = entrada[15]+entrada[14]+entrada[13]+entrada[12]+
entrada[11]+entrada[10]+entrada[9] +entrada[8]+
entrada[7] +entrada[6] +entrada[5] +entrada[4]+
entrada[3] +entrada[2] +entrada[1] +entrada[0];
case (sumau)
5'b00000: salida = 16'b0000000000000000;
5'b00001: salida = 16'b1000000000000000;
5'b00010: salida = 16'b1100000000000000;
5'b00011: salida = 16'b1110000000000000;
5'b00100: salida = 16'b1111000000000000;
5'b00101: salida = 16'b1111100000000000;
5'b00110: salida = 16'b1111110000000000;
5'b00111: salida = 16'b1111111000000000;
5'b01000: salida = 16'b1111111100000000;
5'b01001: salida = 16'b1111111110000000;
5'b01010: salida = 16'b1111111111000000;
5'b01011: salida = 16'b1111111111100000;
19-01-2010
16
Sistemas Digitales
5'b01100: salida = 16'b1111111111110000;
5'b01101: salida = 16'b1111111111111000;
5'b01110: salida = 16'b1111111111111100;
5'b01111: salida = 16'b1111111111111110;
5'b10000: salida = 16'b1111111111111111;
default: salida = 16'b0000000000000000;
endcase
end
La herramienta de sntesis determina que la sentencia case puede implementares con una ROM
de 5 entradas para el bus de direccin, con palabras de largo 16. La suma de los bits la
implementa en cuatro niveles de sumadores que generan reservas de salida.
Los algoritmos empleados para realizar la sntesis se alejan bastante de los postulados y
teoremas del lgebra de Boole y de los mtodos basados en papel y lpiz.
Si la descripcin es sintetizable podra seguirse adelante en el diseo, salvo que los tiempos de
propagacin fueran excesivos; en este caso habra que intentar otra descripcin verilog, en la
cual el programador debera participar en la descomposicin del problema en mdulos
sintetizables que logren una sntesis en menos niveles.
Observando el siguiente resumen, proporcionado por la herramienta, vemos que la
descomposicin emplea un nivel de sumadores adicionales a la descomposicin en mdulos
estructurales vista antes.
4.1. HDL Synthesis Report
Macro Statistics
# ROMs
32x16-bit ROM
# Adders/Subtractors
1-bit adder carry out
2-bit adder carry out
3-bit adder carry out
4-bit adder carry out
:1
:1
: 15
:8
:4
:2
:1
19-01-2010
Diseo Modular.
17
Sumador5
Tablasuma
Suma1
31 out of 3584 0%
58 out of 7168 0%
32 out of 141 22%
19-01-2010
18
Sistemas Digitales
cta1
Fitting Status
Successful
Software Version
I.25
Device Used
XC95144-7-PQ100
Date
3-24-2007, 6:51PM
RESOURCES SUMMARY
Macrocells
Pterms Used Registers Used
Used
46/144 (32%) 551/720 (77%) 0/144 (0%)
Pins Used
32/81 (40%)
Function Block
Inputs Used
253/288 (88%)
ctaunos
Fitting Status
Successful
Software Version
I.25
Device Used
XC95144-7-PQ100
Date
3-24-2007, 6:58PM
RESOURCES SUMMARY
Macrocells
Pterms Used Registers Used
Used
64/144 (45%) 622/720 (87%) 0/144 (0%)
Pins Used
32/81 (40%)
Function Block
Inputs Used
179/288 (63%)
19-01-2010
Diseo Modular.
19
19-01-2010
20
Sistemas Digitales
Nivel tecnolgico.
El diseo en un dispositivo ispXPGA de Lattice, mostrando la descomposicin en LUTS:
19-01-2010
Diseo Modular.
21
7. Diseo secuencial.
Puede lograrse un diseo, que cumpla con la especificacin inicial, mediante una mquina
secuencial que emplee registros de desplazamiento. Este diseo requiere especificar seales de
control y adems disponer de una seal de reloj.
19-01-2010
22
Sistemas Digitales
ndice general.
DISEO MODULAR CON VERILOG. ..................................................................................................1
1. ESPECIFICACIN. ...................................................................................................................................1
2. DISEO BRUTA FORZA. ..........................................................................................................................1
3. DISEO MODULAR. ................................................................................................................................4
3.1. Mdulo cuenta1. ...........................................................................................................................5
3.2. Mdulo suma1. ..............................................................................................................................7
3.3. Mdulo suma5. ..............................................................................................................................8
3.4. Mdulo tablasuma.......................................................................................................................12
3.5. Instanciacin de mdulos. ...........................................................................................................13
3.6. Design Statistics ..........................................................................................................................14
3.7. Timing Summary: ........................................................................................................................15
4. DISEO ABSTRACTO. ...........................................................................................................................15
4.1. HDL Synthesis Report .................................................................................................................16
4.2. Esquemtico RTL .......................................................................................................................16
4.3. Timing Summary: ........................................................................................................................17
4.5. Device utilization summary: .......................................................................................................17
5. COMPARACIN ENTRE DISEO ABSTRACTO Y ESTRUCTURAL. .............................................................18
5.1. Comparacin empleando FPGA. ................................................................................................18
5.2. Comparacin empleando CPLD. ................................................................................................18
5.2.1. Mdulos optimizados en dos niveles. ................................................................................................... 18
5.2.2. Diseo abstracto. .................................................................................................................................. 18
ndice de Figuras
FIGURA 1. DIAGRAMA EN BLOQUES. ..............................................................................................................4
FIGURA 2 DETALLE DE MDULOS ..................................................................................................................5
FIGURA 3. INTERCONEXIN DE MDULOS....................................................................................................13
FIGURA 4. ESQUEMTICO RED COMBINACIONAL. ........................................................................................16
FIGURA 5. MDULOS DEL DISEO ABSTRACTO. ...........................................................................................17
FIGURA 6. SUMADOR DE UNOS. ...................................................................................................................19
FIGURA 7. SALIDA COMBINACIONAL. ..........................................................................................................19
FIGURA 8. DISEO EN BASE A LUTS. ...........................................................................................................20
FIGURA 9. ESQUEMA INTERNO DE LUTS. ....................................................................................................21
19-01-2010