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.






0 comentarios: