Está en la página 1de 13

UNIVERSIDAD NACIONAL DE CHIMBORAZO

FACULTAD DE INGENIERIA

GUÍA DE PRÁCTICAS VERSIÓN: 1


PERIODO ACADÉMICO: ABRIL 2020- SEPTIEMBRE 2020
Página 1 de 13
CARRERA: DOCENTE: SEMESTRE: DÉCIMO
ELECTRÓNICA Y ING. LEONARDO PARALELO: A
TELECOMUNICACIONES RENTERIA
NOMBRE DE LA CÓDIGO DE LA LABORATORIO A UTILIZAR:
ASIGNATURA: ASIGNATURA: ELECTRÓNICA
DISPOSITIVOS EMBEBIDOS EETOP10B

Práctica No.: Tema: Duración (horas) No. Grupos No. Estudiantes (por
SISTEMAS DE ALTA VELOCIDAD Grupo)
4 4 8
4

Objetivos de la Práctica:

 Diseñar circuitos digitales usando lenguaje de descripción de hardware

Equipos, Materiales e Insumos:

 PC
 Software apio

Marco Teórico:
La necesidad de construir circuitos digitales cada vez más complejos es patente día a día. Ya en el siglo XXI
somos capaces de construir microprocesadores de muy altas prestaciones que están compuestos por millones de
unidades funcionales (transistores) que realizan tareas de gran responsabilidad en la sociedad. Por ejemplo, un
sistema de control de transacciones económicas de una bolsa de valores ha de ser un sistema informático
extraordinariamente rápido y resistente, ya que un fallo en la transferencia de información acarrearía un sinfín de
problemas con los inversores. Otro ejemplo, la electrónica de control de un avión supersónico tiene igualmente
una responsabilidad extrema, tanto en aportar la información necesaria al piloto para determinar su rumbo como
para asistirle en sus tareas de pilotaje y combate. (Aguirre, 2005)
Los lenguajes de descripción de hardware, HDL’s, realizan aquello para lo que están diseñados, describir un
hardware: Describen un comportamiento propio de un circuito en sentido amplio y por tanto no existen
precedencia entre la activación de una parte del mismo u otra. Representan un comportamiento inherentemente
paralelo. Esto tiene un conjunto de implicaciones que han de tenerse en cuenta a la hora de elaborar el diseño que
particularizaremos al caso del VHDL. La primera implicación es la relación entre el lenguaje y la plataforma de
desarrollo, que es una computadora y tiene el comportamiento descrito en el párrafo anterior.
Por tanto, simulación y síntesis han de estar provistas de mecanismos o artificios que emulen el paralelismo y
que inciden directamente en la formulación del código. La segunda implicación es en un cambio de mentalidad
en el diseñador a la hora de elaborar la descripción del diseño, estando habituado a realizar programas software.
El mencionado ahorro en este caso exige une cuidadosa planificación del diseño previa a su elaboración. Existen
usos típicos del programador de software que están absolutamente prohibidos en la formulación de un diseño
hardware.
Lenguaje de descripción de hardware
Un lenguaje de descripción de hardware (HDL, hardware description language) es un lenguaje de programación
especializado que se utiliza para definir la estructura, diseño y operación de circuitos electrónicos, y más
comúnmente, de circuitos electrónicos digitales, como el convertidor analógico-digital o cualquier antena
satelital. Así, los lenguajes de descripción de hardware hacen posible una descripción formal de un circuito
electrónico, y posibilitan su análisis automático y su simulación.
Los lenguajes de descripción de hardware se parecen mucho a otros lenguajes de programación de ordenadores
tales como el C o Java: básicamente consisten en una descripción textual con expresiones, declaraciones y
estructuras de control. Sin embargo, una importante diferencia entre los HDL y otros lenguajes de programación
está en que el HDL incluye explícitamente la noción de tiempo.
Los HDL’s en la metodología de diseño.
Metodología clásica
La secuencia de herramientas informáticas que procesan un diseño desde su descripción en un lenguaje fácilmente
comprensible por el hombre hasta la información final, útil para la fabricación del dispositivo se llama flujo de
diseño. La figura representa un flujo típico en el que se han introducido las derivaciones debidas a las
comprobaciones necesarias para verificar la correcta introducción del diseño.

Figura 1. Flujo de diseño mediante HDL's (Aguirre, 2005)


Una vez que se decide la funcionalidad del circuito que queremos integrar el procedimiento a seguir suele ser una
descomposición jerárquica de las funciones. Suelen ser diagramas de bloques y las señales que los conectan
estableciendo las relaciones entre ellos. A su vez estos bloques son descompuestos en otros más simples, de
menor rango en la jerarquía. Este proceso continúa hasta alcanzar funciones basadas en los elementos de menor
entidad. A este proceso se le denomina descomposición Arriba Abajo (Up-Bottom), usualmente realizado sin la
ayuda de ninguna herramienta informática.
Terminada la etapa de decisiones, se procede a la introducción del diseño. Si utilizamos librerías de elementos
básicos proporcionadas por los fabricantes (también llamados primitivas) construimos los primeros elementos de
la jerarquía a partir de estas primitivas creando y verificando estas funciones del primer estadio jerárquico. Estos
primeros bloques se incorporan a la librería de elementos que constituirán nuestro diseño.
Seguidamente construimos y verificamos el segundo nivel, tercero, cuarto, ... hasta llegar al nivel más elevado,
que es nuestro diseño y las interconexiones con el sistema exterior. Esta es la fase de la metodología Abajo-Arriba
(Bottom-Up). Cada unidad funcional es incorporada a la librería de diseño de forma que varias funciones podrían
hacer uso de una misma función de inferior rango jerárquico.
Metodología basada en HDL’s
La introducción de los HDL’s como métodos de descripción de circuitos han enriquecido el proceso de creación
de un diseño, lo han acelerado y asegurado, abaratando los costes de desarrollo.
La figura muestra la modificación del flujo clásico cuando se utiliza esta técnica para la introducción del diseño.
Existen varias mejoras sustanciales: La librería de diseño es independiente de la tecnología para la que se diseña,
por lo que la reusabilidad de los módulos constituyentes es total.
No solo se puede compartir entre diseños, sino que puede ser compartido por diferentes procesos de fabricación.
Es independiente de la tecnología. El código introducido es de Alto Nivel y la simulación para su comprobación
es asimismo de Alto Nivel. Solamente cuando se obtiene una imagen física del diseño puede predecirse con cierta
certeza si cumple o no cumple las especificaciones.
El programa de síntesis ha de alimentarse con el diseño, las condiciones de contorno en que funcionará, y la
tecnología disponible del fabricante. El resultado será un código HDL de Bajo Nivel o lo que es lo mismo una
representación del circuito alfanumérica compuesta por primitivas y sus conexiones, lo que se conoce como una
netlist. (Aguirre, 2005)
Jerarquía de un diseño
En este momento del desarrollo del tema es fácil comprender la idea de descomposición jerárquica de un diseño.
Un diseño de gran dimensión, típico de un circuito microelectrónico digital requiere una buena organización del
diseño, una descomposición razonada en módulos de inferior rango, que se suceden con una descripción cada vez
más detallada de sus funciones, los llamados bloques funcionales.
Niveles de abstracción de un HDL
Como se ha comentado un HDL puede expresar un mismo diseño bajo diversos puntos de vista, son los llamados
niveles de abstracción. El más elevado es una descripción en la que se define el comportamiento del circuito, es
el llamado nivel comportamental (behavioral). El más bajo es un modelo íntimamente relacionado con la
tecnología compuesto por primitivas y conexiones, representando la estructura del circuito, es el llamado nivel
estructural (structural). También llamaremos nivel estructural al que expresa una interrelación entre bloques
funcionales del mismo nivel jerárquico. Posteriormente veremos que podemos definir niveles intermedios o
mixtos compuestos por mezclas de ambos, en el que las unidades de un nivel estructural no son primitivas, sino
que son módulos de rango jerárquico inferior.
HDL: Programa o diseño
El lector habrá notado que hemos procurado eludir la palabra “programa” a la hora de referirnos a la elaboración
de un código HDL, nos referiremos a él siempre como “diseño”. Como programa conocemos a una secuencia
ordenada de comandos y funciones, que realizan unas tareas definidas por el diseñador en una computadora. Estos
comandos y funciones están expresados en un lenguaje alfanumérico que es fácilmente comprensible por el
hombre, pero que tiene una proyección directa sobre el lenguaje comprensible por la computadora, y, por tanto,
fiel a su arquitectura. La traducción de uno a otro la realiza un programa compilador. Veamos de una forma
somera las tareas que se han de realizar para elaborar un programa informático:

a) Generación de un código basado en el lenguaje elegido (C, C++, PASCAL, Fortran, ...)
b) Análisis sintáctico para detección de errores e inconsistencias del programa.
c) Elaboración de los códigos objeto reubicables o imagen binaria de los módulos componentes.
d) Montaje del programa por parte del montador de enlaces y detección de errores en la relación entre los
módulos.

Durante la ejecución del programa se ejecutan una tras otra las instrucciones siguiendo un esquema secuencial
definido por la arquitectura de la CPU, que es la llamada máquina de Turing. Existen típicamente dos soluciones:
la arquitectura Harvard y la arquitectura Von Newman. En ambos casos la estructura del programa es una
secuencia de instrucciones, accesos a memoria y saltos en la secuencia de ejecución. En particular una subrutina
puede ser accedida mediante un mecanismo de saltos tantas veces como se precise, resultando un ahorro en
términos de memoria de programa.
Lenguajes HDL
Existen varios lenguajes HDL’s la mayoría de ellos con un propósito limitado. Los más conocidos son:
• ABEL: Lenguaje promovido por XILINX para la introducción de módulos de carácter específico, como
máquinas de estados finitos.
• AHDL: Lenguaje promovido por ALTERA para facilitar la introducción de diseños en sus FPGA’s.
• EDIF, XNF, ...: No son lenguajes propiamente dichos, en el sentido de no ser fácilmente comprensibles por el
usuario, pero se utilizan cómo medios para transferir netlist entre herramientas.
Python
Es un lenguaje de scripting independiente de plataforma y orientado a objetos, preparado para realizar cualquier
tipo de programa, desde aplicaciones Windows a servidores de red o incluso, páginas web. Es un lenguaje
interpretado, lo que significa que no se necesita compilar el código fuente para poder ejecutarlo, lo que ofrece
ventajas como la rapidez de desarrollo e inconvenientes como una menor velocidad. En los últimos años el
lenguaje se ha hecho muy popular, gracias a varias razones como:
 La cantidad de librerías que contiene, tipos de datos y funciones incorporadas en el propio lenguaje, que
ayudan a realizar muchas tareas habituales sin necesidad de tener que programarlas desde cero.
 La sencillez y velocidad con la que se crean los programas. Un programa en Python puede tener de 3 a 5 líneas
de código menos que su equivalente en Java o C.
 La cantidad de plataformas en las que podemos desarrollar, como Unix, Windows, OS/2, Mac, Amiga y otros.
 Además, Python es gratuito, incluso para propósitos empresariales. (desarrollo web.com, 2003)
Procedimiento:

1. Ingresar a la página web http://python.org/ y descargar la última versión de Python


2. Instalar Python en el computador. Verificar que se agreguen las siguientes opciones: PIP y Add Python.exe
to Path

Figura 2. Ventana de instalación de Phyton

3. Abrir la ventana de comandos e instalar las herramientas de software de la TinyFpga con los siguientes
comandos:
a. pip install -U apio

Figura 3. Instalaciones de las herramientas de software de la TinyFpga.

4. Una vez instalado, abrimos una consola. Ejecutamos este comando para comprobar que está correctamente
instalado
a. apio –version

Figura 4. Comando apio –version para ver que versión tengo instalada.
5. Ejecutamos este otro para instalar el resto de dependencias de apio
a. apio install –a

Figura 5. Instalando las demás dependencias de apio.

6. Instalar el visualizador gtkwave


a. apio install gtkwave

Figura 6. Instalando el visualizador gtkwave.

7. Instalar el Toolchain de Simplez


a. pip install toolchain-simplez

Figura 7. Instalando el Toolchain de Simplez

8. Para comprobar que se han instalado correctamente ejecutamos esto en la consola:


a. sasm –h

Figura 8. Comprobamos que se haya instalado correctamente las herramientas con el comando sasm -h
9. Descargue el siguiente archivo y descomprímalo https://github.com/Obijuan/simplez-
fpga/archive/master.zip

Figura 9. Carpeta descargada de nuestro fichero de GitHub

10. Abrir la ventana de comandos y navegar hasta el directorio /simplez-fpga-master/src ubicado en la carpeta
anterior usando
a. “CD pathTOfolder/simplez-fpga-mastersrc”

Figura 10. Con cd ingresamos a la ubicación de la carpeta del fichero que descargamos.

11. Ensamblamos el ejemplo leds_on.asm

a. sasm ../asm/leds_on.asm

Figura 11. Con el comando sasm ensamblamos el ejemplo leds_on.asm.

12. Visualizar el fichero de la memoria prog.list:

a. type prog.list

Figura 12. Con el comando type visualizamos la memoria del fichero prog.list
13. Simular el sistema con el comando:
a. apio sim

Figura 13. Con el comando sim procedemos a la simulación de nuestro archivo leds_on.asm

14. Describir el resultado

14.1. Como podemos observar al ejecutar el comando sim se nos abre automáticamente el archivo de
configuración de leds_on.asm, en el cual podemos realizar cualquier modificación o cambio.
14.2. Como podemos observar en la figura 11, nuestro simulador contiene ciclos de reloj, memoria ROM,
timers, estados, y funciones para transmisión y recepción de la señal de leds.
14.3. Podemos apreciar una simulación en esquemático de los ciclos de los leds.

Figura 14. Simulación de nuestro archivo leds_on.asm

Figura 15. Al cerrar el programa de simulación podemos ver en cmd como concluye la respectiva simulación y
modificación del archivo.

15. Ensamblar uno de los ejemplos del directorio ../asm/ simular y describir el resultado. Realice una
modificación al código y repita el proceso.
15.1. Primero, escogimos el archivo sec.asm.
15.2. Abrimos nuestro cmd
15.3. Con el comando cd, ingresamos a la ruta del archivo sec.asm
15.4. Luego con el comando sasm
Figura 16. Con el comando sasm y la ruta del archivo sec.asm, lo ensamblamos.

15.5. Ahora, procedemos a visualizar la memoria del fichero con el comando type prog.list

Figura 17. Con el comando type prog.list visualizamos la memoria del fichero sec.asm

15.6. Procedemos a simular nuestro archivo con el comando apio sim.


15.7. Luego procedemos a la modificación del archivo realizando cambios añadiendo clock, entre otras.

Figura 18. Con el comando apio sim procedemos a la simulación del archivo.

15.8. Primero insertamos un archivo en blanco dentro de nuestro escenario como indica la figura 16.
15.9. Añadimos un nombre a nuestro archivo en blanco.
15.10. Procedemos a cerrar, para poder verificar si se realizó cambios en nuestro archivo.

Figura 19. Insertamos un archivo en blanco en el escenario.


Figura 20. Añadimos un nombre a nuestro archivo en blanco.

Figura 21. Cerramos y podemos ver que en cmd se ejecutó correctamente.

15.11. Ahora procedemos a abrir otra vez nuestro archivo para verificar si se guardaron cambios,
mediante el comando apio sym.

Figura 22. Con el comando apio sim procedemos a la simulación del archivo.

15.12. Procedemos a agregar clocky rstn=1.


15.13. En la parte superior izquierda en SSC damos click, podemos observar que en la parte inferior
izquierda despliega varias opciones para añadir a nuestro escenario.
15.14. Añadimos un clk y un rstn=1.

Figura 23. Podemos observar que no se guardó ningún cambio.


Figura 24. Añadimos, clk, y rstn=1.

15.15. Podemos observar que en el escenario se agregaron correctamente los clk y rstn=1.
15.16. Para poder guardar y que se guarden las modificaciones que realizamos en la parte superior
izquiera en File le damos click en Write Safe file, y procedemos a cerrar nuestro programa.

Figura 25. Podemos observar los cambios hechos y añadidos en el escenario con un nuevo clk y un nuevo rstn=1.

Figura 26. Para guardar los cambios en File: Writesave file y cerramos.
15.17. Podemos ver que ahora si se guardaron las modificaciones en cmd.

Figura 27. Modificaciones hechas a nuestro archivo sec.asm

15.18. Procedemos a abrir de nuevo nuestro archivo para verificar si están hechas nuestras
modificaciones con el comando apio sym.

Figura 28. Observamos que las modificaciones fueron hechas a nuestro archivo sec.asm

Resultados:

 Al realizar esta práctica los estudiantes aprenderán a diseñar e implementar sistemas en chip usando
lenguaje de descripción de hardware.
 El acceso a archivos no solo se limita a la lectura de patrones de prueba, sino también al almacenamiento
de los resultados de la simulación en un archivo. Esto último puede resultar útil en caso de que se deseen
comparar dos archivos con resultados para validar el funcionamiento de un circuito.
 Al instalar phyton y luego en nuestro código de sistema de Windows instalamos TinyFpga, nos damos
cuenta que al ejecutar cualquier archivo y ensamblarlo mediante cmd, podemos especificar para cada
diseño en concreto que implementación de una entidad se utiliza y visualizarla, también ayuda a tener
mejor velocidad en las tareas que se ejecutan.

Anexos:

Referencias bibliográficas:

Aguirre, M. (2005). Diseño De Sistemas Digitales Mediante Lenguajes De Descripción De Hardware.


Recuperado el 04 de Julio de 2020, de DISEÑO DE SISTEMAS DIGITALES MEDIANTE
desarrollo web.com. (19 de Noviembre de 2003). Obtenido de https://desarrolloweb.com/articulos/1325.php
ndustrial System Engineering. (2011). Obtenido de
http://www.ieec.uned.es/investigacion/Dipseil/PAC/archivos/Informacion_de_referencia_ISE5_3_1.pdf
Tellez, J. C. (julio de 2012). Estado de la formación en sistemas embebidos. Obtenido de
https://infotec.repositorioinstitucional.mx/jspui/bitstream/1027/152/1/4.pdf

Fecha de Revisión y Aprobación: 07/07/2020

_____________________ __________________

Firma Director de Carrera Firma Docente

También podría gustarte