Verilog Práctico

Capítulo 2.2. wire

20 de noviembre de 2021

Un wire es literalmente un cable. Se usa para conectar componentes intermedios. 

En Verilog pertenece a los datos tipo Net. Puede tomar valores 0, 1, X, Z, donde X es desconocido o no inicializado y Z alta impedancia o triestado. 

Una señal tipo Net, es gobernada continuamente y actualiza su valor cuando cambia el valor del controlador.


Un cable se declara con la palabra clave wire seguida del nombre del cable.


wire w1;


Se pueden declarar múltiples cables en la misma sentencia.


wire w1, w2, w3;


En el circuito de la imagen, cuando queremos unir dos puertos directamente, basta una declaración assign out2 = in4 para que se cree un cable que una ambas señales.


A continuación veremos algunos ejemplos más de cómo utilizar la declaración wire.


Todos los ejemplos se acompañan del archivo .pcf correspondiente para que los puedas subir y probar en tu Alhambra FPGA.

Ejemplo 1


El siguiente código Verilog describe el circuito de la imagen.


module circuito1 ( input in1, in2, in3, output out1, out2);


wire w1;


or OR1 (w1, in1, in2);

not NOT1 (out2, in3);

and AND1 (out1, w1, out2);


endmodule

archivo .pcf


set_io in1 119

set_io in2 118

set_io in3 117

set_io out1 95

set_io out2 96 

Ejemplo 2

module circuito2 ( input in1, in2, in3, in4, output out);


wire w1, w2;


or OR1 (w1, in1, in2);

or OR2 (w2, in3, in4);

and AND1 (out, w1, w2);


endmodule


archivo .pcf


set_io in1 119

set_io in2 118

set_io in3 117

set_io in4 116

set_io out 95 

Ejemplo 3

En este ejemplo vamos a sintetizar un multiplexor 2-1. 

module multiplexor_2_1 ( input in1, in2, sel, output out);


wire w1, w2, w3;


not NOT1 (w2, sel);

and AND1 (w1, in1, w2);

and AND2 (w3, sel, in2);

or OR1 (out, w1, w3);


endmodule


archivo .pcf


set_io in1 10

set_io in2 11

set_io sel 119

set_io out 95


Los ejemplos anteriores nos han servido para aprender qué es un cable y cómo se usa en Verilog.


Sin embargo, en determinadas circunstancias, no es necesario declarar los cables intermedios, Verilog permite hacer interconexiones mediante declaraciones implícitas.

Ejemplo 4

En el circuito del ejemplo 1, podemos declara la puerta OR 1 de la siguiente manera:


or OR1 (o1, in1, in2); 


donde o1 es la salida de la puerta OR 1 y a la vez, es una de las entradas de la puerta AND 1.


and AND1 (out1, o1, out2); 

El código Verilog queda así:


module circuito1 ( input in1, in2, in3, output out1, out2);


or OR1 (o1, in1, in2);

not NOT1 (out2, in3);

and AND1 (out1, o1, out2);


endmodule


El archivo .pcf no cambia.


set_io in1 119

set_io in2 118

set_io in3 117

set_io out1 95

set_io out2 96

Ejemplo 5

De igual manera, el circuito del ejemplo 2, también se puede describir sin necesidad de declarar cables, utilizando declaraciones implícitas. 

module circuito2 ( input in1, in2, in3, in4, output out);


or OR1 (o1, in1, in2);

or OR2 (o2, in3, in4);

and AND1 (out, o1, o2);


endmodule


El archivo .pcf no cambia.


set_io in1 119

set_io in2 118

set_io in3 117

set_io in4 116

set_io out 95

Ejemplo 6

Por último, el multiplexor 2-1 también se puede describir mediante declaraciones implícitas. 

module multiplexor_2_1 ( input in1, in2, sel, output out);


not NOT1 (_sel, sel);

and AND1 (o1, in1, _sel);

and AND2 (o2, sel, in2);

or OR1 (out, o1, o2);


endmodule


El archivo .pcf no cambia.


set_io in1 10

set_io in2 11

set_io sel 119

set_io out 95 

Eso es todo, ¡hasta pronto!

Descargas

Descarga el código Verilog de los ejemplos anteriores aquí abajo: