jueves, 26 de junio de 2014

Problema al implementar un programa asíncrono en VHDL

Supongamos que tenemos un programa muy simple en VHDL en el que prendemos y apagamos dos leds mediante dos interruptores: 

library ieee;
use ieee.std_logic_1164.all;

entity leds is
port( a,b : in std_logic;
     s1,s2: out std_logic);   
end leds;

architecture control of leds is
begin

s1 <= a;
s2 <= b;

end control;


Para la tarjeta de desarrollo Basys2 nuestro archivo .ucf quedaría:

# Interruptores
NET "a" LOC = P11;
NET "b" LOC = L3;

# Leds
NET "s1" LOC = M5;
NET "s2" LOC = M11;


Hasta aquí todo parece en orden e incluso nuestro programa funciona bien en la simulación. Pero un problema muy común entre los estudiantes de los primeros cursos de sistemas digitales es que al momento de cargar el archivo .bit de un programa asíncrono como este a una tarjeta de desarrollo, ésta se queda sin hacer nada. Esto ocurre porque la tarjeta espera arrancar por default con el oscilador interno aunque no lo usemos en el programa (razón por la que este problema muy rara vez se presenta en programas que si lo usan). Este problema se resuelve simplemente haciendo click derecho sobre "Generate Program File", buscar "Process Properties" que nos abrirá la siguiente ventana en la debemos buscar la categoría "Startup Options" y cambiar la opción de FPGA Start-Up Clock de CCLK a JTAG Clock:

No hay comentarios: