miércoles, 2 de noviembre de 2011

Creación de un símbolo a partir de un esquema



Vamos a aprender a crear un componente a partir de un esquemático. El ejercicio consiste en un contador binario de cuatro bits decodificado a decimal. Las salidas encenderán 10 leds.
Descargar documentos.


Creación de un nuevo proyecto:

Creamos un nuevo proyecto y seleccionamos esquemático.


Seleccionamos las características de nuestro CPLD:
-Seleccionamos la familia del CPLD, XC9500 CPLDs.
-El modelo, XC9572.
-El  encapsulado, PC84.
-La  velocidad de trabajo del CPLD, -7.
-El sintetizador.
-El simulador.
-El lenguaje de programación, VHDL.


En la siguiente ventana añadimos el fichero fuente.


Seleccionamos schematic y damos nombre al archivo


Aceptamos todos los apartados siguientes y se nos crea el proyecto.


Creación del componente: 

Con el botón derecho en el nombre, añadimos un nuevo fichero fuente (New Source) esquemático.


Se nos abrirá una hoja en blanco en la que colocaremos las funciones de cada salida del decodificador.


Colocaremos las cuatro líneas con la herramienta add wireque, que serán Q3 Q2 Q1 Q0, a las que añadimos inversores. Colocamos diez puertas AND de cuatro entradas y unimos sus correspondientes entradas.


Si no nos caben los componentes podemos modificar el tamaño de la hoja del esquema en Edit/ Change Sheet Size.



En las entradas del decodificador podemos crear un bus:
- Dibujamos un línea con el nombre clave Q(3:0) y se convertirá en un bus.


- Conectamos las líneas del bus con la herramienta seleccionada, y las damos nombres. Estos nombre no pueden variar ya que son nombres clave:


Ponemos etiquetas a las entradas y salidas con la herramienta add net name, y las marcas con la herramienta add I/O marker.
En la ventana processes generamos el símbolo del decodificador para poder utilizarlo en el esquema principal del diseño. En la ventana Sources nos aparecerá la ruta del componente creado para poder utilizarle.



Creación del esquema:

En el esquema principal:
- Colocamos un contador con un BUFG a la entrada del reloj que nos mejora el skew (llegada de señal de reloj a diferentes puntos en distintos tiempos).
- Ponemos una AND en las salidas Q1 y Q3 para que cuando llegue a 9 (1010), se reinicie la cuenta.


- Añadimos el decodificador creado.
- Creamos una línea para el bus.
- Añadimos las entradas de bus.
- Damos los nombres clave tanto al bus como a sus entradas.


- Ponemos etiquetas a todas las entradas y salidas de nuestro diseño y las ponemos las marcas.


 - Compilamos en busca de errores:




Simulación previa:

En la ventana Sources elegimos simulación previa y añadimos un test bench waveform.



Elegimos la configuración del tiempo:
- Podemos elegir el tiempo que va a estar el reloj en 0 (clock low time) y en 1 (clock high time), en mi caso 100ns, con lo que tendremos un periodo de 200ns y un ciclo de trabajo del 50%.
- Podemos modificar el Offset (bloqueo de las entradas en el instante inicial).
- Por último modificamos el tiempo que va a durar la simulación (Initial Lenght of Test Bench).



Nos aparecerá la ventana de simulación donde podemos dar valores a las entradas haciendo clic sobre la línea de la entrada. Podemos observar que no nos deja hacer cambios los primeros 100ns por la configuración del Offset.



En la ventana processes generamos la simulación.


Podemos cambiar el tiempo de simulación y volver a simularlo con la siguiente herramienta:



Síntesis:

Hacemos la síntesis del esquema.


En View Technology Schematic podemos observar la representación esquemática del diseño:


Si hacemos doble clic sobre algún componente se nos abrirá su arquitectura lógica. Por ejemplo en el decodificador podemos ver las puertas que nosotros creamos:



Asignación de los pines:

Añadimos un nuevo archivo al proyecto de tipo: Implementation Constraints File. Aquí podemos añadir los pines con código en VHDL.


También podemos añadir los pines de forma gráfica con el PACE. Para que se nos abra el PACE dando doble clic al documento creado, debemos cambiar la configuración.
Vamos a Edit/ Preferences y se nos abrirá la siguiente ventana donde cambiamos lo señalado:


Una vez configurado solo debemos dar doble clic al documento .ucf de los pines y se nos abrirá el PACE donde colocamos de forma gráfica los pines en el encapsulado.


En modo texto podemos observar como se implementaron los pines en código VHDL.



Translate y documentación: 

- Convertimos el esquemático en un lenguaje interno NGD. Haciendo doble clic en Translate.


- Generamos el archivo Fit y comprobamos que todo esté bien.



Simulación con los tiempos reales:

En la ventana Sources seleccionamos Post-Fit Simulation.  En la ventana processes hacemos doble clic sobre Simulate Post-Fit Model.



Programación:

Por último generamos el archivo de programación .JED que le abriremos con el programa IMPACT.
Hacemos doble clic sobre Generate Programming File.


Abrimos el IMPACT, creamos un nuevo proyecto, escribimos el nombre y la dirección de la ruta:


Seleccionamos el modo de trabajo del JTAG, lo dejamos por defecto:


Añadimos el documento de programación .JED en Add Device:


Colocamos los pines del JTAG y nos aseguramos que la tarjeta está en modo configuración.


Hacemos doble clic en program


Seleccionamos las siguientes opciones de programación:


Nos aparecerá un mensaje de que la programación a finalizado con éxito.


Finalmente cambiamos la tarjeta a modo ejecución y comprobamos su funcionamiento físico:

No hay comentarios:

Publicar un comentario