Tutorial por ejemplos de VHDL


#1

El ejemplo está basado en el kit:

A3P250 Development Board

y este programador:

Actel JTAG programmer, microJTAG SD

El archivo por si queréis descargarlo:

Y el resultado es el que aparece en el video: los 4 leds rotando.


 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
entity example1 is
    Port (
 
                LEDS:out STD_LOGIC_VECTOR(3 downto 0);
                SWITCHES:in STD_LOGIC_VECTOR(3 downto 0);
                CLK_in: in STD_LOGIC;
                RESET_in: in STD_LOGIC
 
 
           );
end example1;
 
architecture Behavioral of example1 is
 
      signal clk_count: natural range 0 to 11999999;
      signal LEDS_output: STD_LOGIC_VECTOR (3 downto 0);
 
begin
 
    process(CLK_in,RESET_in,clk_count)
    begin
        if RESET_in='0' then 
            clk_count <= 0;
        elsif rising_edge(CLK_in) then
 
            if clk_count=11999999 then
                clk_count <= 0;
            else
                clk_count <= clk_count + 1;
            end if;
 
        end if;
 
 
 
    end process;
 
    process(clk_count,SWITCHES)
    begin    
        if clk_count<3000000 then
            LEDS_output<="0001";
        elsif clk_count<6000000 then
            LEDS_output<="0010";
        elsif clk_count<9000000 then
            LEDS_output<="0100";
        else
            LEDS_output<="1000";
        end if;
 
 
         LEDS(3 downto 0) <= LEDS_output(3 downto 0) xor SWITCHES(3 downto 0);
 
    end process;
 
 
 
end Behavioral;

Es un contador que va de 0 a 11999999, es decir 12 Mil pulsos de reloj. Teniendo el cristal a 24Mhz, tenemos que tarda en dar toda la vuelta a los leds 500ms exactamente.

Además, el encendido de los leds se modifica con los switches justo antes de sacarlos:

LEDS(3 downto 0) <= LEDS_output(3 downto 0) xor SWITCHES(3 downto
0);

Conectando LEDS_output (xor) SWITCHES a la salida que enciende los leds.

Creamos el proyecto, y añadimos un archivo VHDL, con el contenido de nuestro proyecto.

Abrimos la herramienta de compilación y síntesis “Synplify”.

Le damos a RUN para compilar, (nos aseguramos de que esté la A3P250)

Una vez terminado, si no hay errores podemos usar “View Log” para examinar los resultados.

En este caso, nos dice que la lista de “sensibilidad” de un proceso está incompleta: Esto quiere decir que estamos usando señales dentro del mismo que no están invocadas al abrir el process. Esto no es obligatorio, pero a la hora de simular, si lo hiciéramos, nos daría problemas.

Añadimos las señales que nos faltan a la cabecera del “PROCESS”

El resultado final es un 3% de ocupación (es normal que sea alto par algo tan simple, ya que estamos utilizando números que no son potencia de 2, y el signo “<” para las comparaciones.

Ahora hay que cargar el “Designer”, que nos permitirá asignar los resultados de Synplify a los recursos internos del propio chip.

Seleccionamos el modelo que estamos utilizando.

Y los voltajes: LVTTL, por ejemplo.

Continuamos configurando, “siguiente … siguiente …”

Y nos vamos al editor de “I/Os” que nos permitirá asignar las entradas/salidas de nuestro VHDL raiz a pines físicos de la FPGA.

Seleccionamos uno por uno los pines correspondientes.

Ahora configuramos las resistencias de Pull-up correspondientes a las entradas de los switches( 41, 42 ,43 ,44) para que cuando no estén activados estas entradas se mantengan a nivel alto.

Así debería quedar la configuración de I/Os.

Pulsamos el botoncito de arriba a la izquierda “Commit & Check”, y comprobamos que todo sea correcto.

Ahora que ya tenemos los pines de entrada/salida configurados pinchamos en el icono de generar los archivos de programación.

Seleccionamos la generación de archivos STAPL que son los que aceptará el JTAG de embeddedboards.com

Seleccionamos la programación del FPGA Array, y que deje los puertos de E/S en triestado (al aire) mientras se realiza la programación., le damos a siguiente.

Esperamos mientras compila, mapea… ruta… :slight_smile:

Abrimos el programador, y seleccionamos “Open File” para abrir el archivo.

Seleccionamos la opción “Programar” y esperamos a que acabe.

¡¡Acabó!! :slight_smile:

Ahora el resultado, si todo ha ido bien, debería ser el siguiente:
YouTube - Actel A3P250 Board from www.embeddedboards.com


#2

Como curiosidad adjunto la visualización de la síntesis que hace el synplify,

Por un lado, el XOR de las entradas de los switches, con las salidas de los leds.

Y por otro, la conexión de las señales de RESET y CLK_in a los biestables que hacen de contador.


#3

Genial tutorial, simple, práctico e ilustrativo. Vete preparándome un kit de esos !!! :smiley:

Enhorabuena ajo :slight_smile:


#4

Jejejej gracias dani, te reservo uno por aquí :slight_smile:

Se me olvido comentar, que el entorno de desarrollo utilizado es el Libero IDE que ofrece Actel:

Design Software

Hay que descargárselo: Download Libero IDE

y solicitar (en su servidor) una licencia gratuita (hay que registrarse en su web): https://www.actel.com/portal/default.aspx?r=1


#5

Felicidades Ajo, excelente tutorial.

Espero impacientemente, el próximo tutorial, haber si nos adentramos en este interesante mundo.

SaLu2


#6

gracias javi, creo que este más bien debería titularlo “Tutorial sobre el entorno de Actel para FPGA”.

Dejo pendiente otro sobre lo básico de VHDL :slight_smile:


#7

Sencillamente espectacular Ajo.

Aunque no tengo medios para desarrollar en casa un sistema vhdl, la lectura de este tutorial además de interesante, resulta amena y sumamente didáctica. Siempre es bueno aprender cosas nuevas.

Enhorabuena Ajo, con este tutorial si que te has salido de la norma.

Bravo.


#8

muy bueno,lastima que no tenga donde probarlo je je.espero impaciente las siguientes entregas(por si me dejan una placa de desarrollo)¿se puede proteger la fpga para que solo la pueda grabar con la clave aeso el stapl no soporta eso?

saludos de antonio


#9

[quote=Kid_Bengala;5541]muy bueno,lastima que no tenga donde probarlo je je.espero impaciente las siguientes entregas(por si me dejan una placa de desarrollo)¿se puede proteger la fpga para que solo la pueda grabar con la clave aeso el stapl no soporta eso?

saludos de antonio[/quote]

Jejeje, seguro que en breve te la prestan :-).

Como comentas, el STAPL que genera actel permite todas las opciones:
[ul]
[li]Programar una FPGA sin claves[/li][li]Programar una FPGA con claves (AES +acceso)[/li][li]Programar una FPGA que ya tiene claves cargadas, y por lo tanto el binario va ya cifrado.[/li][/ul]


#10

pues no se si en breves me la dejan,porque llevo desde hace 2 dias llamandole y mandandole correos y no me a contestado… :confused:

pensaba que el stapl era texto plano y el cifrado algod e directc o algo asi.una cosa mas que he aprendido je je :stuck_out_tongue:

por cierto¿que quiere decir Programar una FPGA con claves (AES +acceso)?

¿para cuando la siguiente entrega? :rolleyes:

saludos de antonio


#11

tengo instalado el entorno de desarrollo,esperando que cierta persona me preste su placa de desarrollo… (por si alguien lee esto y se sient aludido,que sepa que no le devolvere su macbook hasta que haga esto je je :D,q por cierto no me gusta nada…)

¿nuevas entregas del cursillo?

saludos de antonio


#12

[QUOTE=Kid_Bengala;5699]tengo instalado el entorno de desarrollo,esperando que cierta persona me preste su placa de desarrollo… (por si alguien lee esto y se sient aludido,que sepa que no le devolvere su macbook hasta que haga esto je je :D,q por cierto no me gusta nada…)

¿nuevas entregas del cursillo?

saludos de antonio[/QUOTE]

¿Te la dejó ya? :slight_smile:


#13

si,porque el anda liado con no se que leches de empresa y asi (y de paso le pedi prestado el fluke portatil que tiene :D) y no tiene tiempo ni para usarla,me dijo q este veranito sela devolviera que la iba a usar(seguro que se le olvida pedirmela como siempre y se lo tengo q recordar yo).he instalado el entorno de desarrollo y poco mas jeje.

saludos antonio


#14

[QUOTE=Kid_Bengala;6708]si,porque el anda liado con no se que leches de empresa y asi (y de paso le pedi prestado el fluke portatil que tiene :D) y no tiene tiempo ni para usarla,me dijo q este veranito sela devolviera que la iba a usar(seguro que se le olvida pedirmela como siempre y se lo tengo q recordar yo).he instalado el entorno de desarrollo y poco mas jeje.

saludos antonio[/QUOTE]

Bueno bueno, ahora te falta correr algun ejemplillo :slight_smile:


#15

Ajo leí atentamente el tutorial que nos proporcionaste pues dispongo de un kit de desarrollo Proasic3 de Actel y estoy trabajando hace algún tiempo ya en mi tesis de maestría programando en VHDL empleando las Herramientas de Actel al igual que tú. Me gustaría saber si has tenido alguna experiencia en el muestreo de señales con esta FPGA, pues necesito tomar el valor de corriente de un motor de reluctancia conmutada de 4 fases y al realizar la sintesís me dice que la palabra digital de entrada a la fpga que es la de salida del conversor ADC no está siendo utilizada. También tengo dudas en el empleo del modelsim utilizando el fichero de post-síntesis te agradecería cualquier ayuda en este aspecto pues me devuelve las señales de salida en rojo que significa valor desconocido.:confused: