Solución:
Creamos un nuevo proyecto en ISE 10.1 que llamamos Primos0al15 que se guarda en una carpeta con el mismo nombre creada por defecto por el programa e indicamos que vamos a trabajar con lenguaje VHDL
como nivel superior de jerarquía en el diseño ( Top-level souce type). Observe que previamente nosotros hemos creado en la raiz la carpeta: Ejercicios Xilinx.
Después de haber finalizado la creación del nuevo proyecto, creamos como nueva fuente el módulo VHDL para ingresar el archivo de VHDL que tambien llamamos: Primos0al15
Ingresamos las entradas y salidas del circuito lógico:
Se puede elaborar Mapa de karnaugh para encontrar la función Booleana en Suma de Productos (mintérminos). Podemos ayudarnos del LOGICA ID:
En la plantilla que aparece escribimos la función al comienzo de la arquitectura tal como se muestra a continuación:
Después de haber salvado este archivo es importante chequear su sintaxis para determinar algún posible error al respecto:
Luego procedemos a efectuar la simulación, para lo cual debemos crear inicialmente un banco de pruebas de formas de onda. El archivo lo denominamos: Primos0al15_tb tal como se muestra en el siguiente gráfico:
Al indicar que el circuito es Combinatorio (sin reloj) se puede fijar un tiempo de análisis de 2000 ns:
luego dibujamos las ondas correspondientes a las entradas, salvamos este archivo y cerramos la ventana:
Procedemos a ejecutar la simulación:
Las ondas deben confirmar que el circuito funciona perfectamente:
Procedemos a la asignación de pines y a efectuar la síntesis del circuito y a su implementación:
En este proceso el programa toma cierto tiempo y va colocando un visto bueno en cada etapa realizada. Se da YES a la ventana que aparece con el fin de crear el archivo UCF de asignación de pines:
Vamos a asignar las entradas en los pines correspondientes a los interruptores:
La salida se va a observar en el Led0 correspondiente al pin F12 de la tarjeta Digilent Spartan 3E:
Procedemos a señalar la localización de los pines:
Hay que cerrar el gráfico inicial que aparece a la derecha para que aparezca el Top Wiew (vista desde arriba) mostrado, en donde se señala con un óvalo de color azul la entrada y salida localizada. El archivo UCF de asignación de pines debe salvarse.
Si aparece en amarillo alguna interrogación hay que dar doble click para corregir la incongruencia en la implementación del diseño:
Al corregirse las incongruencias deben aparecer vistos buenos en donde aparecían los interrogantes:
Si observamos en el resúmen del diseño ( View Design Summary) en Pin Report dando click en la columna de Signal Name deben aparecer los pines correctamente asignados.
Como los pines aparecen reportados con error hay que volver a localizarlos dando doble click en Floorplan Area/ IO/ Logic Post -synthesis. Es probable que el archivo UCF, por ejemplo, no se hubiese guardado.
Vuelve entonces a aparecer los interrogantes anaranjados en Implement Design, damos doble click para corregir incongruencias, y al observar el reporte de pines, vemos que ahora si aparecen correctamente localizados en los correspondientes a los interruptores y al Led.
Alimentamos la tarjeta y conectamos el cable USB al computador para ser reconocida, y procedemos a efectuar la programación, dando doble click en Configure Target Device:
Hay que dar OK en la advertencia que se presenta:
Luego aparece una ventana donde se indica que se ha detectado cable para efectuar la programación automáticamente Vía JTAG ( serialmente a través de 4 líneas por USB)
Damos finish y asociamos el archivo Primos0al15.bit a la programación de la FPGA
Al abrir el archivo (open ) pasa de la FPGA al CPLD y luego a la memoria PROM. Hay que darles bypass
para ser omitidos.
Luego se dá OK a la ventana de las propiedades de programación del dispositivo, y con botón derecho se dá click en program. Debe aparecer una ventana indicando que la programación de la FPGA ha sido exitosa.
Finalmente se verifica al accionar los interruptores y observar el encendido del Led que todo funciona correctamente.
En la fotografía se observa, por ejemplo, que el LED enciende al detectar en los interruptores el número 11 ( 1011 ).