Sie sind auf Seite 1von 8

FUNDAMENTOS DEL LENGUAJE PARA DESCRIPCIN DE HARDWARE (VERILOG).

Es un lenguaje que describe circuitos digitales muy grandes (hardware digital) de manera rpida y
clara. Adems se utiliza en el anlisis, la sntesis, el modelamiento y la simulacin de circuitos
digitales.

6.1 El mdulo:
La base de la descripcin de cualquier circuito en VERILOG es el mdulo. Un mdulo es una caja
negra donde se conectan las entradas y salidas del circuito que se quiere describir. Las palabras claves
(minsculas) empleadas para crear y declarar un mdulo en el lenguaje VERILOG son: module
(declaracin del mdulo), output (salida), input (entrada), inout (entrada-salida: circuitos con
realimentacin) y endmodule (fin del mdulo). En la figura 98 se muestra un mdulo creado para el
circuito cuyo nombre es and1.

Figura 98. Mdulo para describir el circuito and1.

6.2.1 Red wire:


La red wire se utiliza para conectar una salida con una entrada o varias entradas. No se debe utilizar
como el resultado de una operacin en el interior de un bloque always@. Una red wire puede tomar los
valores lgicos 0, 1, x y z. En la figura 99 se muestran en rojo algunas conexiones que se pueden
definir como una red tipo wire.

Figura 99. Redes tipo wire en un circuito.


module circ1(A,B,C,D);

input A,B,C;
output D;

wire F,E;
assign E= A & B;
assign F= C & B;
assign D= E & F;

endmodule
6.4. arreglos y vectores:
Este tipo de declaraciones en VERILOG se utilizan para agrupar varios elementos del mismo tipo.
Ejemplos de vectores y arreglos se muestran a continuacin:

Figura 107. Diferencias entre un vector matriz y una matriz.

wire [6:0] x; 7 wire agrupados de la siguiente forma:

x[6] x[5] x[4] x[3] x[2] x[1] x[0]


0 1 1 1 0 1 1

wire [0:6] x; 7 wire agrupados de la siguiente forma:

x[0] x[1] x[2] x[3] x[4] x[5] x[6]


0 1 1 1 0 0 0

wire [6:0] x [2:0]; 3 wire cada uno con 7 bits de ancho.

6 5 4 3 2 1 0
x[2] 1 0 1 0 1 1 0
x[1] 0 0 0 1 1 1 0
x[0] 1 1 1 1 0 0 0

wire [0:6] x [0:2]; 3 wire cada uno con 7 bits de ancho.

0 1 2 3 4 5 6
x[0] 1 0 1 0 1 1 0
x[1] 0 0 0 1 1 1 0
x[2] 1 1 1 1 0 0 0
wire x[6:0] [2:0]; 1 matriz de wire cada posicin tiene 1 bit de ancho.

6 5 4 3 2 1 0
2 1 0 1 0 1 0 1
1 0 1 1 0 1 0 1
0 1 0 0 0 1 1 0

wire x[0:6] [0:2]; 1 matriz de wire cada posicin tiene 1 bit de ancho.

0 1 2 3 4 5 6
0 1 0 1 0 1 0 1
1 0 1 1 0 1 0 1
2 1 0 0 0 1 1 0

Ejemplo 65. Dadas las declaraciones siguientes diga si las instrucciones son correctas o no.

//declaraciones
wire [7:0] mema[0:255];
wire arrayb[7:0][0:255];

mema=0; //ilegal se intenta poner 0 en toda la matriz


arrayb[1][0]=0 //legal. Carga un cero en el elemento (1,0) de la matriz arrayb.
mema[1]=0 //legal. Carga 00000000 en el elemento 1 del vector mema.
arrayb[1]=0 //ilegal. Trata de cargar con 0 los elementos de la fila 1 columnas 0 a las 255.

6.9. Instruccin de asignacin continua assign.


Asigna valores de forma continua a las redes (nets). Los valores que se asignan pueden ser vectores,
matrices o escalares (uno solo). La instruccin assign modela un circuito sin la necesidad especfica de
conocer su interconexin interna.

6.9.1. Operadores de lgica binaria con assign.


Estos operadores son ms poderosos que las compuertas bsicas explicadas en la seccin anterior.
Permiten hacer lgica con escalares (un solo cable) o con mltiples cables al mismo tiempo. En la
siguiente tabla se muestran los operadores lgicos.

OPERADOR FUNCIN
& AND
| OR
^ XOR
~ NOT
~^ XNOR
~| NOR
~& NAND

Ejemplo. Convierta en un circuito la instruccin assign que se muestra a continuacin:

assign Z=(X [0]^ X[1]) ^ ( (~X[2]) ^ ( (~X[1]) & X[3]));

El circuito se muestra en la siguiente figura:

Ejemplo. Utilice los operadores binarios de la instruccin assign y los cables vectorizados para
describir el circuito que se muestra a continuacin:

Se mostrarn dos soluciones posibles. La primera describe cada compuerta; la segunda utiliza la lgica
de vectores.

module S1(
input [3:0]X,
input [3:0]Y,
output [3:0]Z
);

assign Z[0]=X[0]&Y[0];
assign Z[1]=X[1]&Y[1];
assign Z[2]=X[2]&Y[2];
assign Z[3]=X[3]&Y[3];
endmodule

module S2(
input [3:0]X,
input [3:0]Y,
output [3:0]Z
);
assign Z=X&Y;
endmodule

Ejemplo. Si en el ejemplo anterior se define la entrada Y de la siguiente manera: input [0:3]


Y, cual sera el circuito que se describira con la instruccin assign Z=X&Y?

6.9.4. Concatenacin con la instruccin assign.


En la seccin precedente se utiliza la concatenacin para crear un vector a partir de dos redes: Cout y
R. En este caso el bit ms significativo de la concatenacin es la red Cout y los bits menos
significativos de la misma son los bits de R. En la figura 122 se muestra la concatenacin de tres
vectores.

Figura 122. Concatenacin de los vectores A, B y C.

Ejemplo. Utilice la concatenacin para describir el circuito que se muestra a continuacin:


Solucin 1. Sin concatenacin.
module S1(
input [3:0]X,
input [3:0]Y,
output [1:0]Z
);
wire [3:0]A;
assign A=X ^ Y;
assign Z[0]=A[0] ~& A[1];
assign Z[1]=A[2] ~& A[3];

endmodule
Solucin 2. Utilizando concatenacin.
module S1(
input [3:0]X,
input [3:0]Y,
output [1:0]Z
);
wire [3:0]A;
assign A=X ^ Y;
assign Z={A[2] ~& A[3] , A[0] ~& A[1]};

endmodule

Ejemplo. Utilice la concatenacin y la particin vectorial para describir el circuito que se muestra a
continuacin:

module S1(
input [3:0]X,
input [3:0]Y,
output [3:0]Z
);

assign Z={X[3:2] & Y[3:2] , X[1:0] ^ Y[1:0]};

endmodule
6.9.5. Replicas con la instruccin assign.
Este operador sirve para repetir N veces una red dentro de una concatenacin. En la figura 123 se
muestra un ejemplo con replicas de un vector.

Figura 123. Replicas de un vector o un cable en una concatenacin.

6.9.6. Uso de condiciones en la instruccin assign.


La mayor versatilidad se obtiene en la instruccin assign cuando se emplean los condicionales y el
operador (?). En el ejemplo 69 se muestra un multiplexor de dos entradas y una salida modelado con
una instruccin assign condicional.

Ejemplo 69. Disear un multiplexor de 2 canales de entrada y una salida utilizando para ello la
instruccin assign condicional.

Figura 124. Multiplexor de 2 entradas y una salida


module mux21(
input CH0,
input CH1,
input Selector,
output OUT
);

assign OUT = (Selector==0)?CH0:CH1;

endmodule

En este caso la salida OUT es igual a CH0 cuando si el selector es igual a 0; si no lo es, entonces la
salida ser igual a CH1. En la figura 125 se muestra el funcionamiento de la instruccin assign
condicional.
Figura 125. Funcionamiento de la instruccin assign condicional.

Ejemplo. Describir en verilog un multiplexor de 4 entradas y una salida con dos selectores.

module mux41(
input [3:0]CH,
input [1:0]S,
output O
);

assign O = (S==0)?CH[0]:
(S==1)?CH[1]:
(S==2)?CH[2]:
CH[3];
endmodule

Das könnte Ihnen auch gefallen