Está en la página 1de 10

6.10. Elaboracin de circuitos repetitivos.

Es el proceso por el cual VERILOG permite al diseador de circuitos repetir N veces una estructura en
un circuito. Se utiliza en este procedimiento la instruccin generate-endgenerate, en cuyo interior se
generan las estructuras repetitivas empleando la instruccin de ciclo repetitivo for. La Variable de
control de la instruccin for se declara del tipo genvar. En el ejemplo 71 se construye un decodificador
con Enable y seleccin de nivel lgico en la salida empleando la elaboracin.

Ejemplo 71. Disear el decodificador que se muestra en la figura 127. Se utilizar el cdigo del
ejemplo 70 para crear un decodificador.

Figura 127. Decodificador con selector de Nivel y pin de habilitacin.

module lab1(A, B, C, O,CS,NIVEL);


input A, B, C;
input CS,NIVEL;
output [7:0]O;
wire [7:0] X;
genvar i;

deco38 DECOX(.A({A,B,C}) , .L(X));


generate

for (i=0;i<8;i=i+1)
begin:in
assign O[i]=(X[i]&CS)^NIVEL;
end
endgenerate

endmodule

Otra manera para describir el circuito sin utilizar generate es la siguiente:

module lab1(A, B, C, O,CS,NIVEL);


input A, B, C;
input CS,NIVEL;
output [7:0]O;
wire [7:0] X;

deco38 DECOX(.A({A,B,C}) , .L(X));


assign O=(X & {8{CS}}) ^ {8{NIVEL}};

endmodule
Ejemplo 72. Disear un multiplexor de 8 entradas y una salida con instancias de un multiplexor de 2
entradas y una salida. Utilice la instruccin generate endgenerate de verilog.

module mux81(X,O,S);
input [7:0] X;
input [2:0] S;
output O;
wire [6:0] W;

genvar i;

generate

// primera columna de multiplexores 2 a 1.


for(i=0;i<4;i=i+1)
begin : stage1
mux21 muxi(.X(X[2*i + 1 : 2*i ]), .S(S[0]), .O(W[i]));
end

// segunda columna de multiplexores 2 a 1.


for(i=0;i<2;i=i+1)
begin : stage2
mux21 muxj(.X(W[2*i + 1 : 2*i ]), .S(S[1]), .O(W[i+4]));
end

endgenerate

mux21 muxa(.X(W[5:4]),.S(S[2]),.O(W[6]));
assign O = W[6];

endmodule

6.11. Instanciamiento de circuitos.


Si un circuito ya ha sido descrito se puede crear una instancia del mismo en otro diseo. Esta parte de
curso describe este tipo de procedimientos en VERILOG. Para explicar este tipo de cdigo en
VERILOG se disear, comenzando desde un sumador de 1 bit, un sumador de N bits.

Ejemplo 72. Disear un circuito sumador de 1 bit con acarreo de entrada y acarreo de salida. La tabla
de verdad de un sumador de 1 bit se muestra a continuacin.

ENTRADAS SALIDAS
Cin A i Bi S i 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

S i =C i Ai B i +C i Ai B i +C i Ai B i +C i Ai B i =C i ( Ai B i ) +C i ( Ai B i )=C i A i B i

C out =C in Ai Bi +C in Ai B i +C in Ai B i +C in Ai B i =C in Ai ( B i + B i ) +C in Ai B i +C in Ai B i

C out =C in Ai +C in Ai B i +C in Ai B i = Ai ( C i +C i B i ) +C i A i B i = Ai C i + Ai B i +C i A i B i =C i ( Ai + Ai B i ) + A i B i

C out =C in ( Ai + B i ) + Ai B i P i = Ai B i ,Gi = Ai + B i C out =C in Gi + P i

Figura 128. Circuito para el sumador de 1 bit.

module sumador1bit(Ai,Bi,Cin,Si,Cout);
input Ai,Bi,Cin;
output Si,Cout;

wire Gi,Pi;

assign Pi=Ai&Bi;
assign Gi=Ai|Bi;
assign Cout = (Cin&Gi)|Pi;
assign Si = (Ai^Bi)^Cin;

endmodule

Ejemplo 73. Con base en el sumador de 1 bit disee un sumador de 4 bits. En la figura 129 se muestra
el circuito que se debe generar a partir de las instancias del mdulo sumador1bit.

Figura 129. Sumador de 4 bits construido con instancias del mdulo sumador1bit.

module sumador4bits(A,B,Cin,S,Cout);
input [3:0] A,B;
output [3:0] S;
input Cin;
output Cout;

wire [2:0]C;

sumador1bit suma(.Ai(A[0]),.Bi(B[0]),.Cin(Cin),.Si(S[0]),.Cout(C[0]));
sumador1bit sumb(.Ai(A[1]),.Bi(B[1]),.Cin(C[0]),.Si(S[1]),.Cout(C[1]));
sumador1bit sumc(.Ai(A[2]),.Bi(B[2]),.Cin(C[1]),.Si(S[2]),.Cout(C[2]));
sumador1bit sumd(.Ai(A[3]),.Bi(B[3]),.Cin(C[2]),.Si(S[3]),.Cout(Cout));

endmodule

Ejemplo 74. Con base en el funcionamiento del sumador de 4 bits disee un circuito que sume N bits.
Para ello se emplear la instruccin generate.

module sumadorNbits(A,B,Cin,S,Cout);

parameter N = 4;
input [N-1:0] A,B;
output [N-1:0] S;
input Cin;
output Cout;
genvar i;
wire [N-2:0] C;

sumador1bit sumini(.Ai(A[0]),.Bi(B[0]),.Cin(Cin),.Si(S[0]),.Cout(C[0]));
sumador1bit sumfin(.Ai(A[N-1]),.Bi(B[N-1]),.Cin(C[N-2]),.Si(S[N-1]),.Cout(Cout));
generate
for (i=1;i<=N-2;i=i+1)
begin:ini
sumador1bit sumn(.Ai(A[i]),.Bi(B[i]),.Cin(C[i-1]),.Si(S[i]),.Cout(C[i]));
end
endgenerate

endmodule
CIRCUITOS BSICOS PARA ALMACENAMIENTO DE DATOS:

Las celdas bsicas para almacenamiento permiten al diseador guardar datos de un solo bit. Este tipo
de elementos se requieren en sistemas que deben almacenar informacin de lo sucedido en instantes de
tiempo anteriores al instante actual (Ver ejemplo).

Salida i=Salidai1 +entradai i presente


i1 pasado

Un circuito que muestra este comportamiento se muestra a continuacin:

El circuito no tiene forma de cambiar el estado. Para cambiar el estado almacenado se agregan un par
de compuertas seguidoras de alta impedancia tal y como se muestra a continuacin:

Si la seal WR es igual a 0, entonces el circuito almacena el estado y se puede leer el mismo en la


salida DATA OUT. La figura siguiente muestra este funcionamiento.
Si la seal WR es igual a 1, entonces el circuito permite la escritura de un dato nuevo en el cerrojo. La
figura siguiente muestra este funcionamiento.

El circuito anterior se puede visualizar como una caja negra de la siguiente manera:

Una aplicacin del LATCH D es una tabla de bsqueda o Look Up Table (LUT). Este circuito tiene en
su entrada N cerrojos tipo D y en su salida un multiplexor de N entradas y una salida. Con este diseo
se puede construir cualquier funcin lgica de log 2(N) variables. Para cambiar de una funcin lgica a
otra basta con cambiar el dato almacenado por los N cerrojos de entrada. La siguiente figura muestra el
circuito lgico correspondiente a una LUT de 2 variables, es decir, 4 cerrojos tipo D.
La caja negra que representa una LUT de 2 variables se muestra a continuacin:

Las celdas internas del circuito representan cada uno de los cerrojos que se utilizan para la creacin de
la tabla de bsqueda; las entradas A y B seleccionan cual de estos datos se conectar con la salida. En el
siguiente ejemplo se muestra el diseo de una compuerta XOR con una LUT de dos entradas.

Se pueden combinar dos LUTs de dos variables para disear un circuito capaz de llevar a cabo una
funcin lgica de tres variables (X, Y, Z) y dos funciones de 2 variables G(Y, Z) y H(y, z) de la
siguiente manera:

También podría gustarte