Verilog Práctico
Capítulo 2.2. wire
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: