Images

Introducción al kit Open3S250E (9): Montaje del hardware Core3S250E+DVK601 y conexión con el PC.

En la anterior entrada hemos hecho el montaje sólo con la tarjeta Core3S250E por dos motivos: el primero es porque para este proyecto no es necesario la tarjeta DVK601, el segundo es para que los que tengan sólo la placa Core3S250E lo tengan más fácil.


Sin embargo, si te hiciste de un kit (como los que se venden por ebay) más completo, lo lógico es que en el futuro quieras sacar más partido a los periféricos del kit, con lo cual si vas a necesitar la placa DVK601.

Si te vino las dos placas montadas (o armadas) , no las desarmes,  es someter a los pines y los conectores a un esfuerzo inútil. Si lo has hecho o no estaban montadas es fácil hacer lo sabiendo un par de detalles que explicaré de forma visual a continuación.

Se trata de encajar los pines machos de la Core3S250E en los conectores hembra adecuados de la DVK601. Para ello fijemos nos en los el pin superior izquierda de la Core3S250E.


Dicho pin tiene que ir en la entrada del terminal siguiente:





La entrada de los terminales macho sobre los hembra no es tan franco como sería de desear, pero si vas pulsando con mesura -pero sin miedo- hasta que estés seguro de que han entrado completamente los pines, al final queda montado perfectamente.

Para asegurarte de que lo montaste/armaste bien, te sugiero que mire la siguiente imagen:

Dónde se señala con una llave y la flecha vemos que hay dos columnas de cuatro terminales hembra cada uno al descubierto, si lo tienes así es que lo has montado bien, sino te aconsejo que lo saques con cuidado y paciencia (no es necesario ni conveniente que salga la primera vez que tires de la Core3S250E) y vuelvas a el armado de las dos placas.

De nuevo no hemos hecho ningún arco de herradura, pero ya sabemos que “todo” es muy fácil menos cuando no lo has hecho nunca y ni siquiera tienes idea de cómo empezar :-)

Quedaría:

Interruptor en POWER OFF:



Interruptor en POWER ON:



Observación final:

 Por ahora no vas a tener el problema que voy a explicar, pero más adelante cuando carguemos el programa en la FPGA puede ocurrirte como me ocurrió a mí, que además de alumbrándose los LEDs  secuencialmente escuches un zumbido agudo bastante desagradable que podría hacer ladrar a todos los perros de tu vecindario. Ese zumbido viene de un componente de la placa DVK601 llamado Buzzer que señalo en la siguiente figura:

Para buscar la solución a este problema fijemosnos en el puente amarillo entre dos pines que señalo a continuación:

Esa pieza amarilla que puentea entre dos pines se puede quitar: 


Sin embargo esa pieza amarilla que hace de puente entre los dos pines notados como Buzzer JMP nos hará falta más adelante y es tan pequeña que es fácil de perder, para que eso no suceda sugiero que se coloque como se indica en la próxima foto:



Si nos fijamos ahora la pieza amarilla queda sujeta a un pin quedando el otro al aire, con esto se evita el zumbido y a la vez no corremos el riesgo de perderla.
Images

Introducción al kit Open3S250E (8): Montaje del hardware Core3S250E y conexión con el PC.

Este es un buen momento para que montemos el hardware (que necesitamos por ahora), y para conectarlo todo al PC. 


En primer lugar si compraste el Core3S250E y su cable de alimentación (raro es que te lo vendan sin su cable) tienes:



Si compraste el kit completo tienes más que esto, y es posible que venga montado sobre la placa DVK601, no hay problema, trabajas con todo el montaje que se muestra a continuación:


Todo lo que explicaré con sólo el CoreXC3S250E, es válido para el montaje anterior CoreXC3S250E + DVK601. La placa DVK601 es principalmente para conectar al FPGA a periféricos, algo que no haremos en esta ocasión.

Por otro lado, y para que podamos programar la FPGA es necesario, tenemos:



Es decir, el “XILINX Platform Cable USB” (el bloque blanco de la imagen anterior), el cable con el que se conecta la “XILINX Platform Cable USB” (el cable azul de la imagen anterior), y un bus para conectar el “XILINX Platform Cable USB” con el Core3S250E (el “cable” gris de la mencionada última foto).

Antes de conectar los cables, en la placa Core3S250E, aseguremos nos de que está la alimentación en OFF, para ello veamos las siguientes figuras.



 Si empiezas a trabajar y esta la alimentación en ON, seguramente no va a ver problema, pero siempre es mejor trabajar con cierto orden.


Además es importante que tengas en cuenta que ese interruptor existe, porque si está todo el tiempo en OFF, puede ser que hagas todo correcto y que luego la FPGA no haga nada y estés dando le vueltas a que puedes haber hecho mal (sólo se te olvido desplazar una clavija, esas cosas pasan).

Empecemos a conectar los cables al Core3S250E. En primer lugar le conectamos el cable negro, que se conectará más adelante (no por el momento) al PC.

Una vez conectado queda como en la siguiente figura:



Observese que queda una parte de la clavija (en color plateado) al aire – lo señalo con la flecha- , es normal, queda así. No hay nada defectuoso y por supuesto no fuerces a que se introduzca más. No nos arriesgamos a romper algo que ha costado su dinero/plata ¿verdad?. No obstante que no nos invada el miedo, el kit es fuerte, pero ser prudentes nunca está de más.

Como ya dijimos este cable se conectará al PC más adelante, su función es la de alimentar la placa. Es el ordenador el que da la alimentación, igual que pasa con los Arduinos más populares (para el que tenga experiencia con ellos), o con un móvil/celular si lo conectas a un PC (se puede acceder a él pero también se carga mediante el puerto USB del ordenador).

Ahora haremos uso del conector señalado en la siguiente figura:



Para ello haremos uso del bus mostrado en la siguiente foto:



Si nos fijamos en los terminales de este bus, veremos que tienen una pequeña protuberancia como se observa en la siguiente figura:



Pues bien, dicha protuberancia del terminal hembra, cuando lo conectemos a la placa Core3S250E, deberá quedar a la altura del espacio perforado o abierto del terminal macho de la placa. Dicha obertura se muestra en la siguiente imagen:



 Presentados los terminales macho y hembra quedaría una cosa así.


Para encajar los conectores en este caso hay que hacer más presión que en el caso anterior, yo en lugar de apretar sobre la mesa (en cuyo caso estás haciendo presión sobre los pines de abajo), recomiendo que pulses de la manera en que lo hago en la siguiente foto.


Lo siguiente sería conectar el bus al “XILINX Platform Cable USB”, algo que en la anterior foto ya se ve que he hecho. No obstante sigo con la sesión fotográfica (no creo que me den un premio Pulitzer por ninguna pero bueno).

Presentado:


Conectado:



Para hacer el montaje completo (y luego conectar lo al ordenador, computador o computadora), sólo falta el cable dónde llegará el “bitstream” (secuencia de bits para programar la FPGA). En mi caso recordemos que es el cable de color azul.

Presentado:





Conectado:



De nuevo hay una parte metálica del terminal que queda a la vista, no entra completamente, no lo fuerces por favor, trata lo con el amor y mesura con el que se trata un hardware que te ha costado una suma cercana a los 100 euros :-).

Finalmente quedaría el montaje que ya hemos visto anteriormente:





 Tan sólo quedaría dos pasos, conectar los dos terminales USB al PC (negro y azul)  y poner el interruptor en ON.


Cuando se conecte el cable azul (en mi caso) al puerto USB, probablemente se instalará un software automáticamente, sino llegara a instalar del todo (que a mi me ha sucedido), veremos más adelante que tiene arreglo (y siempre esta la posibilidad de desconectar y conectar tan poco ortodoxa como útil).

Ya habrá podido comprobar el lector o lectora que no hemos diseñado "un arco de  herradura" precisamente, pero no me importa trabajar un poco más si con eso facilito las cosas un poco más.

Ya sólo nos queda los terminales USB del cable azul y el negro, cada uno de ellos se conectaría a un puerto USB del PC, tan fácil como eso. 







Images

Introducción al kit Open3S250E (7): Implementación y chequeo del código VHDL.

Implementación y chequeo del código VHDL:

Nos quedamos en la anterior entrada aquí:




Si nos fijamos en el área de la izquierda, más concretamente la superior llamada Hierarchy, vemos que hay un mensaje que empieza con “Empty View”, que nos explica que al proyecto hay que añadirle algo más (en nuestro caso un archivo tipo VHDL).

Para ello hacemos clic en el icono de “New Source” (hay formas alternativas de hacer esto, como usar el botón derecho del ratón, de momento lo hacemos así). 


Sale la ventana emergente “New Sorce Wizard:





En ella seleccionamos VHDL Module, y le damos nombre como LEDA_blog.



Es importante observar que el casillero “Add to project” tiene que estar activado. Ahora pulsamos Next.



Cumplimentamos los casilleros que ahora tenemos como sigue:


Clic en Next y luego Finish.

Vemos que se ha añadido un nuevo archivo al proyecto, y además este se refleja ahora en la zona derecha con la pestaña LEDA_blog.vhd.


Si nos fijamos en el nuevo archivo en la zona derecha vemos que se ha generado código VHDL. Este código nos serviría como plantilla para implementar nuestro propio código fuente.

Sin embargo, por esta vez lo vamos a hacer más fácil, seleccionamos todo ese código,



Y le damos la tecla “Supr” de nuestro teclado (o análoga), eliminando todo ese código generado automáticamente y dejando todo ese espacio en blanco.


Recordamos que anteriormente copiamos el código de la demo, ahora pegamos ahí ese código. Si has hecho otro copiar-pegar posterior a ese, puedes volver a repetir el  proceso tal y como lo expliqué anteriormente, o puedes copiar y pegar el código tal y como lo dejé escrito tan sólo haciendo unas ligeras modificaciones (para diferenciar este código del de la demo) que mostraré a continuación, dichas modificaciones están marcadas en rojo.

 También puedes copiar y pegar el código VHLD que muestro a continuación:


--???21EDA?? --?????:A-C8V4 --www.21eda.com --??LED???LED??????0??????1??? --????????21EDA???????? LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.std_logic_unsigned.ALL; ENTITY LEDA_blog is PORT( clk:in STD_LOGIC; --System Clk --???? led1:out STD_LOGIC_VECTOR(3 DOWNTO 0); LCD_N : out std_logic; --?????? LCD_P : out std_logic); --LED output???8? END LEDA_blog ; ARCHITECTURE light_blog OF LEDA_blog IS SIGNAL clk1,CLK2:std_logic; BEGIN LCD_N<='0'; LCD_P<='0'; P1:PROCESS (clk) VARIABLE count:INTEGER RANGE 0 TO 9999999; BEGIN IF clk'EVENT AND clk='1' THEN --????????????????? IF count<=4999999 THEN clk1<='0'; --?count<=499999?divls=0??count?1 count:=count+1; ELSIF count>=4999999 AND count<=9999999 THEN --?ount>=499999 ?? count<=999998? clk1<='1'; -- count:=count+1; --clk1=1??count?1 ELSE count:=0; --?count>=499999???count1 END IF; END IF; END PROCESS ; P3:PROCESS(CLK1) begin IF clk1'event AND clk1='1'THEN clk2<=not clk2; END IF; END PROCESS P3; --------------------------------------------------------- P2:PROCESS(clk2) variable count1:INTEGER RANGE 0 TO 16; --???????????? BEGIN -- IF clk2'event AND clk2='1'THEN --????????????????? if count1<=4 then --?COUNT1<=9??????? if count1=4 then --?COUNT1=8??COUNT1?? count1:=0; -- end if; -- CASE count1 IS --CASE?????LED1?? WHEN 0=>led1<="1110"; --????????? WHEN 1=>led1<="1101"; -- WHEN 2=>led1<="1011"; -- WHEN 3=>led1<="0111"; -- WHEN OTHERS=>led1<="1111"; END CASE; count1:=count1+1; end if; end if; end process; END light_blog;

Si en lugar de añadir “_blog” añades “_mio” o “_ejemplo” o lo que quieras, saldrá igualmente bien, eso va “a gusto del consumidor”.

Eso sí, para evitar problemas si añades “_mio” a LEDA (por ejemplo) al principio de esa parte del programa llamada ENTITY, (teniendo LEDA_mio),

 dónde pone END LEDA  al final de dicho ENTITY , tienes que añadir el “_mio”  a la instrucción END LEDA quedando END LEDA_mio.


O sea,

LEDA -> LEDA_mio   (o LEDA_ej o lo que sea)

END LEDA;  -> END LEDA_mio;  (o END LEDA_ej; o lo que sea)

Lo mismo se puede decir de la otra parte de este tipo de códigos (VHDL) llamada ARCHITECTURE, al principio y al final de esta parte del programa.

O sea,

light OF LEDA -> light_mio OF LEDA_mio

END light; -> END light_mio;

Si no conoces mucho este tipo de lenguaje de programación, con esto que acabo de explicar ya te estás introduciendo en él.



Ahora pulsamos la combinación de teclas ctrl y s (ctrl.+s) para guardar el archivo modificado. En la pestaña LEDA_blog.vhd desaparece el asterisco indicando que el archivo se ha guardado modificado.


A continuación pulsamos en el desplegable (un signo +)  del área de procesos tal y como se señala en la siguiente figura:



Una vez hemos desplegado “Síntesis – XST”, hacemos doble clic en “Check Syntax” señalado en la figura anterior. Tarda un poco en procesarse la ejecución, y a medida que esta se realiza van apareciendo mensajes en la consola (parte inferior del interfaz). Finalmente tenemos:



Nos aparece un circulito verde con un visto blanco en “Check Syntax”, y además dice que el proceso se ha completado correctamente. ¡Oh!, ¡que sorpresa! :-)

En realidad dado que el código lo hemos copiado de una demo era de esperar que el resultado sea que test de la sintaxis esté bien, sin embargo es bueno que nos vayamos acostumbrando a que una vez escrito nuestro propio código VHDL lo hagamos cada vez. Incluso si tienes experiencia con el lenguaje VHDL, como en cualquier otra forma de programar cuando vamos con prisas o estamos cansados después de un día de trabajo es fácil cometer errores. Errores muy típicos son:


-          Olvidar acabar instrucciones con el punto y coma “;”.
-          Olvidar finalizar una instrucción if then con un end if;
-          Olvidar poner un end process, cuando has iniciado un proceso con el comando process... etc.


En la siguiente publicación veremos como montamos (o armamos) el hardware y lo conectamos al ordenador, computador, computadora o PC (como cada cual guste decir), de esta manera podemos continuar con este tutorial ya trabajando con hardware.






Images

Introducción al kit Open3S250E (6): Crear nuestro proyecto LED_blog

Ahora es cuando empezamos a hacer nuestro proyecto basándonos en la demo. Para ello hacemos doble clic en el enlace directo del “ISE Project Navigator” que se debe estar en el escritorio.



Como siempre clic en “ok” en la ventana emergente “Tip of the Day” y esta vez clic en “no” en la ventana “Open Read Only Project?”.  Ahora tenemos:


Creamos nuestro proyecto, para lo cual hacemos clic en el botón “New Project...”:


Aparece la ventana:




Le ponemos nombre al proyecto (por ejemplo LED_blog),  y lo situamos en el lugar que deseemos, por ejemplo, podemos crear una carpeta nueva en el escritorio que se llame “Proyectos XILINX del blog” y emplazar la localización ahí.






En el path:




Antes de darle al botón “next” debemos asegurarnos de que “Top-level source Type:” es HDL, para lo cual seleccionamos la opción HDL en el campo correspondiente:


Ahora ya si podemos hacer clic en “next”, con lo cual ahora tenemos:


Es muy probable que no tengas exactamente los mismos campos asignados que en la imagen anterior, por ejemplo en Familiy podrías tener Virtex 6, y en Preferred Language verilog, por poner dos ejemplos, asegúrate usando los desplegables que lo tienes exactamente como en la figura anterior, así nos ahorraremos problemas en el futuro.

Especialmente importante es que coincidan:

Product Category:  All
Family: Spartan 3E
Device:  XC3S250E
Package: TQ144
Speed: -4

Synthesis Tool: XST (VHDL/Verilog)
Preferred Language: VHDL

Si estas trabajando con otra versión del software de XILINX, que por lo menos coincidan esos parámetros.

Ahora clic en el botón “next”, aparece el “Project Summary” -que no hace más que darte un resumen de las condiciones en que operará el proyecto- y clic en finish. Y tenemos:





Ya hemos creado nuestro proyecto, el próximo paso será implementar y chequear el código VHDL.