Este documento presenta una introducción al lenguaje VHDL y su uso para programar FPGA. Explica brevemente el origen y características de VHDL, así como los materiales y pasos utilizados en un taller práctico para crear un sumador-restador en VHDL y depurarlo en una tarjeta FPGA Basys 2. El documento concluye que el taller proporcionó una introducción sólida a los fundamentos de VHDL y la programación de FPGA.
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Curso
1. -1061085-747395<br /> S.E.P. S.E.S. D.G.E.S.T.<br />INSTITUTO TECNOLOGICO DE LA PIEDAD<br />1er. SIMPOSIUM<br />REPORTE DEL TALLER VHDL<br />POR:<br />MIGUEL ALEJANDRO GUZMAN MENDEZ<br />INTRODUCCION<br />Como introducción a este curso podemos decir que primero aprenderemos las bases o lo más básico del lenguaje vhdl el cual se usa para programar los famosos fpgas.<br />Así como aprender a manejar los fpgas entre algunas otras cosas se harán programas para irnos metiendo en este ambiente.<br />Marco teórico<br />Los estudios para la creación del lenguaje VHDL (VHSIC HDL)<br />comenzaron en el año 1981, bajo la cobertura de un programa para el desarrollo de Circuitos Integrados de Muy Alta Velocidad (VHSIC), del Departamento de Defensa de los Estados Unidos. En 1983 las compañías Intermetrics, IBM y Texas Instruments obtuvieron la concesión de un proyecto para la realización del lenguaje y de un conjunto de herramientas auxiliares para su aplicación.<br />Finalmente, en el año 1987, el lenguaje VHDL se convierte en la norma IEEE-1076 –como todas las normas IEEE, se somete a revisión periódica, por lo que en 1993 sufrió algunas leves modificaciones–.<br />3.- Características del lenguaje<br />El lenguaje VHDL fue creado con el propósito de especificar y documentar circuitos y sistemas digitales utilizando un lenguaje formal. En la práctica se ha convertido, en un gran número de entornos de CAD, en el HDL de referencia para realizar modelos sintetizables automáticamente. Las principales características<br />del lenguaje VHDL se explican en los siguientes puntos:<br />• Descripción textual normalizada: El lenguaje VHDL es un lenguaje de descripción que especifica los circuitos electrónicos en un formato adecuado para ser interpretado tanto por máquinas como por personas. Se trata además de un lenguaje formal, es decir, no resulta ambiguo a la hora de expresar el comportamiento o representar la estructura de un circuito. Está, como ya se<br />ha dicho, normalizado, o sea, existe un único modelo para el lenguaje, cuya utilización está abierta a cualquier grupo que quiera desarrollar herramientas basadas en dicho modelo, garantizando su compatibilidad con cualquier otra herramienta que respete las indicaciones especificadas en la norma oficial.<br />Es, por último, un lenguaje ejecutable, lo que permite que la descripción textual del hardware se materialice en una representación del mismo utilizable por herramientas auxiliares tales como simuladores y sintetizadores lógicos, compiladores de silicio, simuladores de tiempo, de cobertura de fallos,<br />herramientas de diseño físico, etc.<br />• Amplio rango de capacidad descriptiva: El lenguaje VHDL posibilita la descripción del hardware con distintos niveles de abstracción, pudiendo adaptarse a distintos propósitos y utilizarse en las sucesivas fases que se dan en el desarrollo de los diseños. Además es un lenguaje adaptable a distintas metodologías de diseño y es independiente de la tecnología, lo que permite,<br />en el primer caso, cubrir el tipo de necesidades de los distintos géneros de instituciones, compañías y organizaciones relacionadas con el mundo de la electrónica digital; y, en el segundo, facilita la actualización y adaptación de los diseños a los avances de la tecnología en cada momento.<br />• Otras ventajas: Además de las ventajas ya reseñadas también es destacable la capacidad del lenguaje para el manejo de proyectos de grandes dimensiones, las garantías que comporta su uso cuando, durante el ciclo de mantenimiento del proyecto, hay que sustituir componentes o realizar modificaciones en los circuitos, y el hecho de que, para muchas organizaciones contratantes, sea parte indispensable de la documentación de los sistemas.<br />Materiales<br />Se usaron los siguientes materiales <br />67246555245<br />396240770890Tarjeta basys 2 del proveedor digilent (como hardware).<br />3587115154305<br /> <br />Y el sw ISE del proveedor xilinx. Y el sw ADEPT<br />Desarrollo de la práctica<br />Para empezar con esta practica cada alumno deberá tener instalado el sw ya mencionado en su PC portátil.<br />A cada grupo de alumnos se le hará entrega de una tarjeta BASYS 2 con las cuales se demostraran las prácticas.<br />Primero se procedió a crear algunos programas en este lenguaje tales como un sumador restador los cuales su código fuente se muestra a continuación.<br />LIBRARY ieee;<br />USE ieee.std_logic_1164.ALL;<br />USE ieee.std_logic_signed.all;<br />USE ieee.numeric_std.ALL;<br /> <br />ENTITY sum_res_tb IS<br />END sum_res_tb ;<br /> <br />ARCHITECTURE test OF sum_res_tb IS <br /> <br /> -- Component Declaration for the Unit Under Test (UUT)<br /> <br /> COMPONENT sum_res_beh_cs <br /> PORT(a : IN std_logic_vector(3 downto 0);<br /> b : IN std_logic_vector(3 downto 0);<br /> c : OUT std_logic_vector(4 downto 0);<br /> s_r : std_logic);<br /> END COMPONENT;<br /> --Inputs<br /> signal a : std_logic_vector(3 downto 0) := (others => '0');<br /> signal b : std_logic_vector(3 downto 0) := (others => '0');<br /> signal s_r : std_logic;<br /> --Outputs<br /> signal c : std_logic_vector(4 downto 0);<br /> BEGIN<br /> -- Instantiate the Unit Under Test (UUT)<br /> uut: sum_res_beh_cs PORT MAP (a => a, b => b, c => c, s_r => s_r);<br /> <br /> b <= quot;
0001quot;
after 100 ns, quot;
0010quot;
after 200 ns, quot;
1011quot;
after 300 ns;<br /> a <= quot;
1010quot;
after 100 ns, quot;
0011quot;
after 200 ns, quot;
1111quot;
after 300 ns;<br /> s_r <= '0', '1' after 400 ns;<br />END test;<br />Este código se guarda con una extensión .vhd y aun falta mas ya que necesitamos otro código para la asignación de pines en la tarjeta ya que el código .vhd solo es el programa pero ahora nos falta decirle a la tarjeta donde y como actuar ese código se guarda con una extensión .ucf y es el siguiente<br /># entrada operando a (switches, bits 3 a 0) <br /> <br /> NET quot;
a<0>quot;
LOC = quot;
P38quot;
; # Bank = 2, Pin name = IP, Sch name = SW0<br /> NET quot;
a<1>quot;
LOC = quot;
P36quot;
; # Bank = 3, Pin name = IP, Sch name = SW1<br /> NET quot;
a<2>quot;
LOC = quot;
P29quot;
; # Bank = 3, Pin name = IO(3S100E)/IP(3S250E),Sch name = SW2<br /> NET quot;
a<3>quot;
LOC = quot;
P24quot;
; # Bank = 3, Pin name = IP Sch name = SW3<br /># entrada operando b (switches, bits 7 a 4) <br /> NET quot;
b<0>quot;
LOC = quot;
P18quot;
; # Bank = 3, Pin name = IP, Sch name = SW4<br /> NET quot;
b<1>quot;
LOC = quot;
P12quot;
; # Bank = 3, Pin name = IP/VREF_3, Sch name = SW5<br /> NET quot;
b<2>quot;
LOC = quot;
P10quot;
; # Bank = 3, Pin name = IO(3S100E)/IP(3S250E),Sch name = SW6<br /> NET quot;
b<3>quot;
LOC = quot;
P6quot;
; # Bank = 3, Pin name = IP, Sch name = SW7<br /># salida resultado c <br /> NET quot;
c<0>quot;
LOC = quot;
P15quot;
; # Bank = 3, Pin name = IO_L4N_3/GCLK21 Sch name = LD0<br /> NET quot;
c<1>quot;
LOC = quot;
P14quot;
; # Bank = 3, Pin name = IO_L4P_3/GCLK20 Sch name = LD1<br /> NET quot;
c<2>quot;
LOC = quot;
P8quot;
; # Bank = 3, Pin name = IO_L3N_3, Sch name = LD2<br /> NET quot;
c<3>quot;
LOC = quot;
P7quot;
; # Bank = 3, Pin name = IO_L3P_3, Sch name = LD3<br /> NET quot;
c<4>quot;
LOC = quot;
P5quot;
; # Bank = 3, Pin name = IO_L2N_3/VREF_3, Sch name = LD4<br /># Selección (botón 0)<br /> <br /> NET quot;
s_rquot;
LOC = quot;
P69quot;
; # Bank = 2, Pin name = IP, Sch name = BTN0<br />Estos 2 archivos son seleccionados en el programa ISE de esta forma como se muestra en la imagen …<br />Se da click en agregar fuente y ahí se agregan estos 2 archivos después ya podremos echar a andar estos programas pero antes debemos ver que no haya errores el programa mismo los detectara y te dirá donde están los errores.tendras que dar 2 click en el botón síntesis y después en el botón implement design y si esta tu programa correcto pues puedes dar 2 click en el botón generar archivo de programación.<br />Para saber si estás bien se tendrá que ver una ventana como la siguiente imagen<br />Deberá aparecer una palomita para indicar que tu programa esta bien elaborado<br />1015365652145Después de ver que el programa no marca errores damos click en generar el archivo de programación lo que nos dara un archivo .bit este archivo es el que meteremos a nuestra tarjeta por medio de un sw llamado adept mostrado la siguiente imagen.<br />El cual detectara a la tarjeta y por medio de este sw meteremos nuestro programa a la tarjeta. Depues apagamos y prendemos la tarjeta y ¡¡ listo!!<br />Conclusión<br />Para terminar esta práctica y como conclusión se puede decir que durante este curso aprendimos mucho mas acerca de las bases de este lenguaje así como a manejar un fpga y la estructura utilizada en estos lenguajes ya que todo el curso fue muy práctico y fue dado de una manera muy básica.<br />