Вы находитесь на странице: 1из 11

Introduccin a Verilog y XILINX

Enunciados de Prcticas de Laboratorio


Estructura de Computadores

(v. 5.0)

1. Introduccin y objetivos
Uno de los objetivos generales de la asignatura Estructura de Computadores es llegar a conocer la
metodologa de diseo de sistemas digitales a nivel de transferencia entre registros. Para ello en las
clases de teora y prcticas, que se desarrollan en clases de aula, se introduce dicha metodologa y se
aplica a un amplio nmero de casos de diseo de sistemas digitales. Para completar la formacin en este
tema es importante no quedarnos exclusivamente en la parte ms terica sino que es necesario
complementarla con un conocimiento de implementacin real de dichos sistemas digitales.

Los objetivos de esta prctica son:

Familiarizarse con el lenguaje Verilog-HDL

Conocer el entorno de diseo sobre FPGA, en concreto el entorno de diseo de XILINX1.

Conocer las herramientas de verificacin del diseo desarrollado.

Desarrollar el proceso de diseo y simulacin. Para ello se han elegido dos circuitos muy simples,
uno combinacional y otro secuencial. Concretamente un decodificador 4 a 16 y un contador.

2. Estudio previo
Para realizar la sesin de laboratorio es necesario estudiar previamente el diseo de una serie de
mdulos Verilog que a continuacin se detallan:

1 Xilinx Inc.: Compaa de desarrollo de FPGAs (www.xilinx.com)


Estructura de Computadores 2

Nombre del
Contenido Descripcin
fichero

Mdulo con el cdigo del


decodificador.v Debe estudiarlo antes de asistir al laboratorio.
decodificador 4 a 16

Testbench para el
decodificador_tb.v Debe estudiarlo antes de asistir al laboratorio.
decodificador 4 a 16

Mdulo con el contador


contador.v Debe estudiarlo antes de asistir al laboratorio.
modulo 16

Testbench para el contador Debe estudiarlo antes de asistir al laboratorio y


contador_tb.v
mdulo 16 modificarlo durante la sesin de laboratorio.

Descripcin estructural con Debe estudiarlo antes de asistir al laboratorio y


lab1.v
la unin de los 2 mdulos completarlo durante la sesin de laboratorio.

Testbench del sistema


lab1_tb.v Debe estudiarlo antes de asistir al laboratorio.
completo

Tabla 1. Ficheros necesarios durante la sesin de laboratorio.

A continuacin se detalla el comportamiento de los dos circuitos principales, el contador y el


decodificador.

2.1. Especificaciones del DEC 4 a 16


Se trata de un circuito combinacional con una entrada A, de cuatro bits, que representa en binario
natural la salida que hay que activar, en nivel alto, de las 16 salidas existentes. Solo se activa una salida,
el resto estn a valor bajo. La tabla de verdad describe de forma inequvoca el comportamiento de este
circuito (ver tabla 2).
Estructura de Computadores 3

A3 A2 A1 A0 W15W14W13W12W11W10W9W8W7W6W5W4W3W2W1W0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Tabla 2: Tabla de verdad del codificador 4 a 16.

Para disear el cdigo Verilog se ha usado una descripcin procedimental, que es la que se muestra
en el fragmento de cdigo 1 (fichero decodificador.v). Estudie dicha descripcin hasta que tenga claro su
funcionamiento.

module dec4a16(
input [3:0] a,
output reg [15:0] w
);

always @ (a)
begin
w = 0;
w[a] = 1;
end

endmodule

Cdigo 1. Fichero decodificador.v

2.2. Diseo del contador de 4 bits


Dicho contador est disparado por el flanco de subida del reloj, tiene una seal RESET sncrona de
puesta a cero. Adems, incluye una seal carry (CY) que se activa cuando el contador llega al ltimo
estado de cuenta.

El contador debe cumplir la tabla comportamiento de la figura 1b y, el cdigo Verilog propuesto para
describirlo es el fragmento de cdigo 2 (fichero contador.v). Debe estudiarlo hasta entender su
funcionamiento.
Estructura de Computadores 4

CLK RESET UP CONT


1 X CONT 0
UP 0 1 CONT CONT+1
RESET CONT MOD 16 CY
0 0 CONT CONT

CY = Si se cumple que...

CLK q3 q2 q1 q0 0 [CONT] 1111


1 [CONT] = 1111

(a) (b)

Figura 1. Descripcin del contador mdulo 16: (a) Descripcin estructural, (b) Descripcin funcional.

module contador_mod_16(
input clk, up, reset,
output reg [3:0] q,
output cy
);

assign cy = &q;

always @(posedge clk)


if (reset==1 )
q <= 0;
else if (up==1)
q <= q + 1;

endmodule

Cdigo 2. Fichero contador.v

3. Estudio experimental
En esta sesin de laboratorio se va a realizar la simulacin del sistema digital diseado con el
paquete de herramientas de Xilinx ISE. Se utilizarn unos ficheros con mdulos verilog tanto de
circuitos como de testbench previamente preparados. Los pasos a seguir son los siguientes:

1. Siga los pasos del Tutorial de uso de Xilinx ISE (incluido en la siguiente seccin de este
documento), para crear un nuevo proyecto de nombre PracticaEdC1 (por ejemplo),
incluyendo todos los ficheros Verilog de la tabla 1.

2. Realice la simulacin del decodificador 4 a 16 (fichero decodificador.v) siguiendo los pasos


descritos en el Tutorial de uso de Xilinx ISE, con ayuda del testbench facilitado (fichero
decodificador_tb.v). Compruebe si el decodificador funciona correctamente.

3. Realice ahora la simulacin del contador de 4 bits (contador.v), con ayuda del testbench
facilitado (fichero contador_tb.v). Compruebe si el contador funciona correctamente.

4. Fjese que al simular el contador no aparecen todos los estados ni la activacin de la seal
de Carry. Haga los cambios oportunos en el testbench del contador para poder visualizar al
Estructura de Computadores 5

menos un ciclo completo de cuenta y vuelva a realizar la simulacin para comprobarlo.

5. Aada una descripcin estructural en Verilog que interconecte ambos bloques: contador y
decodificador, de forma que ambos aparezcan incluidos por este nuevo fichero. Utilice como
plantilla el fragmento de cdigo 3 (fichero lab1.v).

6. Realice por ltimo la simulacin de este nuevo mdulo (fichero lab1.v), con ayuda del
testbench facilitado (fichero lab1_tb.v). Compruebe si el sistema completo funciona
correctamente.

// El modulo lab1 esta formado por la interconexion estructural


// de los modulos contador_mod_16 y dec4a16.
// Simplificando un poco, la idea es conectar la salida
// del contador con la entrada del decodificador.

module lab1(
input clk, up, reset,
output [15:0] z,
output cy);

wire [3:0] de_cont_a_dec; // necesitara el cable para unir los componentes

// Rellene los huecos para conectar correctamente las entradas del contador
// a las entradas del modulo lab1 y las salidas del contador a las entradas
// del decodificador o a las salidas del lab1, segn corresponda.
contador_mod_16 instancia_contador(
.clk( ),
.up( ),
.reset( ),
.q( ),
.cy( )
);

// Rellene los huecos para conectar correctamente la entrada del decodificador


// a la salida del contador y la salida del decodificador a la salida del lab1.
dec4a16 instancia_decodificador(
.a( ),
.w( )
);

endmodule

Cdigo 3. Fichero lab1.v

4. Tutorial de uso de Xilinx ISE


Esta seccin describe el entorno ISE del fabricante XILINX. Este entorno, entre otras caractersticas,
incluye un simulador para el lenguaje Verilog que ser utilizado en esta sesin de laboratorio.

4.1. Creacin de un proyecto en Xilinx ISE


Tras iniciarse el sistema operativo, el primer paso es arrancar el entorno ISE y crear un nuevo
proyecto. En el men File hay que utilizar la opcin New Project, obtenindose la ventana mostrada en
la figura 2 donde hay que escribir un nombre para el proyecto, por ejemplo PracticaEdC1. La
herramienta crear una carpeta con ese mismo nombre y guardar en su interior todo lo que se va gene-
rando a medida que vamos trabajando en ese proyecto.
Estructura de Computadores 6

Tras escribir el nombre se activa el botn Next y aparece el cuadro de dilogo mostrado en la figura
3, donde hay que establecer todas las opciones indicadas en la figura. Concretamente hay que
asegurarse de establecer las siguientes opciones a su valor correcto:

Family: Spartan 3E

Device: XC3S100E

Package: CP132

Preferred Language: Verilog

El resto de opciones deberan estar por defecto a los mismos valores que los mostrados en la figura 3.
Tras establecer las opciones correctas, utilizando el botn Next aparece una ltima ventana con
informacin y un botn Finish que se pulsa para crear el proyecto. La figura 4 muestra el proyecto
recin creado, slo se muestra el nombre del proyecto y el tipo de FPGA xc3s100e-4cp132.

Figura 2. Ventana de creacin del proyecto. Figura 3. Ventana de propiedades del proyecto.
Estructura de Computadores 7

Figura 4. Vista general de un proyecto en el entorno Xilinx.

Ntese que encima del nombre del proyecto aparecen dos iconos Implementation y Simulation, (ver
figura 4) cada uno con distintas vistas del mismo proyecto. Es muy importante que estemos siempre en
la vista de simulacin si lo que queremos hacer son simulaciones de los mdulos del proyecto. Tambin
se recomienda utilizar la entrada de men Layout Load Default Layout en caso de no ver
correctamente las ventanas o los controles del ISE Project Navigator (o del entorno de Simulacin Isim
que usar ms adelante).

4.2. Aadir ficheros al proyecto


El primer paso tras la creacin del proyecto es aadir los ficheros Verilog (diseos y testbenchs) al
proyecto. Para aadir ficheros al proyecto se puede puede utilizar la opcin de men Project o, pulsar el
botn derecho del ratn en la zona en blanco de la vista del proyecto, eligiendo entre Add Source o bien
Add Copy of Source teniendo en cuenta que estas dos opciones son algo diferentes:

Add Copy of Source crea un nuevo fichero dentro del proyecto que inicialmente ser una copia del
fichero fuente seleccionado. As las modificaciones sern propias a este proyecto y el fichero
fuente original no se modificar. La copia residir dentro de la carpeta del proyecto.

Add Source no crea un nuevo fichero dentro del proyecto, utiliza el propio fichero fuente
seleccionado sin crear ninguna copia. As las modificaciones afectarn al fichero fuente en su
ubicacin original, es decir, el fichero residir en la misma carpeta dnde est almacenado
previamente.

Otra posible opcin sera New Source crendose un nuevo fichero fuente vaco donde habra que
escribir el cdigo.
Estructura de Computadores 8

La mejor opcin es Add Source seleccionando uno o ms ficheros a aadir al proyecto. Hay que
confirmar los ficheros que son para implementacin y cuales son exclusivamente para simulacin (cmo
los ficheros de testbench suministrados). En la figura 5 se muestran los ficheros a aadir y la asociacin
realizada en cada uno de ellos para que la simulacin opere correctamente (elija All y Simulation segn
se indica).

Figura 5. Ventana de inclusin de ficheros al proyecto.

Una vez aadidos los ficheros, stos son mostrados en la vista del proyecto de forma jerrquica y,
componiendo el rbol de mdulos del proyecto en funcin de que un mdulo incluya en su interior
instancias de otro mdulo. Esto se puede visualizar en la figura 5. El mdulo que incluye a los dems
ser el primer mdulo del rbol de proyecto.

Para editar o ver cualquiera de los ficheros del proyecto, slo hay que seleccionarlo con el ratn en el
rbol de proyecto y pulsar el botn izquierdo del ratn dos veces.

4.3. Simulacin y verificacin de un diseo


La simulacin nos permite verificar el correcto funcionamiento de un mdulo que hayamos diseado,
para los casos que se plantean en el fichero de testbench. stos podrn ser ms o menos completos
segn el caso y si encontramos algn problema, nos permite indagar la causa del mismo antes de pasar
a modificar el cdigo. Efectuando correcciones y simulaciones se consigue solucionar todos los
problemas que pueda tener el diseo.

Tras aadir un fichero de testbench, ste no se muestra en la vista de implementacin, nicamente


aparece en la vista simulacin. Esto es debido a que dichos ficheros contienen informacin para realizar
una simulacin/verificacin del diseo lgico, pero no se usan para realizar una implementacin del
mdulo (la ltima etapa del proceso de diseo). Tambin puede comprobar como en la vista de
simulacin aparecen las unidades en un orden jerrquico distinto al de implementacin. Concretamente,
los mdulos de testbench aparecen en primer lugar, puesto que estos son los que contienen instancias
de los mdulos cuyo funcionamiento queremos probar. Esto se muestra en la figura 6.
Estructura de Computadores 9

Figura 6. Vista jerrquica de un proyecto.

Figura 7. Seleccin de simulacin para el dec4a16.

As, para simular el funcionamiento de un mdulo de testbench debemos resaltar el nombre del
mdulo de testbench y debajo en la caja titulada Processes desplegar la entrada ISim Simulator para
ejecutar la orden Simulate Behavioral Model pulsando el ratn dos veces, como muestra la figura 7.
Estructura de Computadores 10

Si no hay errores en el diseo, se abrir una nueva ventana con el simulador ISim y ejecutar una
simulacin durante un corto periodo de tiempo (habitualmente 1s), detenindose la simulacin en ese
punto, salvo que el testbench detenga la simulacin con antelacin (con la orden $finish).

Si no hay errores en el cdigo se abrir el simulador ISim donde, para ver las formas de onda, hay
que utilizar la pestaa Default.wcfg. Es aconsejable utilizar en este momento el icono (Zoom to Full
View) para tener una vista completa de toda la simulacin.

En esta vista, mostrada en la figura 8, se dispone de una ventana con las formas de onda a la derecha
en fondo negro y varias seales representadas con sus valores simulados, que deben ser las entradas y
salidas de nuestra unidad (al menos aquellas que aparecen en el testbench). Si pulsamos con el ratn
sobre el grfico de formas de ondas, se sita un cursor amarillo indicando datos exactos en ese instante
de tiempo (ntese como cambian los valores de las seales al situarse en distintos instantes). Para las
seales de varios bits podemos cambiar la codificacin pulsando el botn derecho del ratn sobre el
nombre de la seal y, accediendo en el men flotante a la opcin Radix (binario, hexadecimal, decimal,
etc.).

Figura 8. Simulacin con ISim del mdulo de testbench llamado decodificador_tb

Otros controles importantes de ISim se encuentran en dos bloques situados a la izquierda con los que
se puede navegar por todas las unidades que componen el diseo. Por ejemplo, utilizando el panel
Instances and Processes se pueden buscar seales y componentes internos de cualquier mdulo y
arrastrarlos a la ventana de las formas de onda para aadirlas a ella y poder ver sus valores a lo largo
Estructura de Computadores 11

de la simulacin. Si bien, para ello habra que reiniciar la simulacin despus de haberlas aadido a la
ventana de las formas de onda.

Por ltimo, en la barra de iconos superior hay varios iconos que permiten hacer ampliaciones y
reducciones de escala en la imagen. Adems de estos iconos, varios iconos verdes que hay a
continuacin sirven para navegar por la forma de onda y, los iconos azules, controlan la simulacin
utilizndose para continuar o detener el proceso.

Los iconos verdes se deben usar para buscar o centrarse en una parte concreta de las formas de
onda, por ejemplo, Previous Transition y Next Transition nos permiten ir al anterior/siguiente
flanco de una seal seleccionada previamente en la ventana de formas de onda.

Los iconos azules controlan el flujo de ejecucin de la simulacin permitiendo: borrar la simulacin
actual volviendo al instante cero ( Restart), continuar la simulacin indefinidamente hasta encontrar
un $finish ( Run All), continuar un tiempo de simulacin por un tiempo determinado (habitualmente

1s) y luego detenerse ( Run), ejecutar la simulacin lnea a lnea de Verilog ( Step) y, por ltimo,
detener una simulacin en ejecucin ( Break).

Вам также может понравиться