Publicado el 7 de Junio del 2018
1.200 visualizaciones desde el 7 de Junio del 2018
1,2 MB
149 paginas
Creado hace 20a (24/11/2003)
Descripción en VHDL de arquitecturas para implementar el algoritmo CORDIC
Agradecimientos
Este trabajo va dedicado a mis padres, que posibilitaron la culminación de mi carrera,
debido al apoyo brindado y su gran insistencia.
Quisiera agradecer a mis directores el M.Sc. Prof. Oscar N. Bria y el Ing. Prof. Horacio A.
Villagarcía por su apoyo y excelentes consejos, a los profesores de la Facultad de Informática, a mi
hermano Gerrit y a mi novia Andrea por apoyarme y soportarme siempre. Y por último un
agradecimiento muy especial para Constanza, mi sobrina, que me acompañó durante las pausas que
me tomé en la realización del trabajo.
i
Descripción en VHDL de arquitecturas para implementar el algoritmo CORDIC
Indice
Agradecimientos
Indice
Introducción
Capítulo 1 – El algoritmo CORDIC
El algoritmo de cómputo numérico CORDIC
Problema a resolver
Objetivos a cumplir
Motivaciones y expectativas
Organización del informe
3.6.1 Comentarios
3.6.2 Identificadores
3.6.3 Números
3.6.4 Caracteres
3.6.5 Cadenas de caracteres (Strings)
3.6.6 Cadenas de bits
3.6.7 Tipos de datos del lenguaje
3.6.7.1 Tipo entero
3.6.7.2 Tipos físicos
ii
1.1 Fundamento teórico
1.2 Cálculo del seno y del coseno
1.3 Transformación de coordenadas polares a cartesianas y viceversa
1.4 Arcotangente y módulo de un vector
1.5 CORDIC generalizado
1.5.1 Caso lineal
1.5.2 Caso hiperbólico
1.6 Arquitecturas para implementar el algoritmo CORDIC
1.6.1 La arquitectura Bit-Paralela Iterativa
1.6.2 La arquitectura Bit-Paralela Desplegada
1.6.3 La arquitectura Bit-Serie Iterativa
2.1 Herramientas CAD
2.2 Diseño Bottom-Up
2.3 Diseño Top-Down
2.4 Ventajas del diseño Top-Down
2.5 Descripción de un diseño
Capítulo 2 – Metodologías de diseño de hardware
Capítulo 3 – El lenguaje de descripción de hardware VHDL
3.1 VHDL describe comportamiento
3.2 VHDL describe estructura
3.3 Un ejemplo de descripción en VHDL
3.4 Modelo de tiempo basado en eventos discretos
3.5 VHDL como lenguaje de programación
3.6 Elementos de sintaxis
i
ii
vi
vi
vii
vii
vii
viii
1
1
6
7
8
8
8
9
10
10
11
12
14
14
16
17
18
19
20
20
21
21
24
25
25
25
25
25
26
26
26
26
26
27
Descripción en VHDL de arquitecturas para implementar el algoritmo CORDIC
3.6.7.3 Tipos de punto flotante
3.6.7.4 Tipo enumerativo
3.6.7.5 Tipo arreglo
3.6.7.6 Tipo registro
3.6.7.7 Tipo puntero
3.6.7.8 Tipo archivo
3.6.7.9 Subtipos
3.6.8 Declaración de objetos de datos
3.6.9 Atributos
3.6.10 Expresiones y operadores
3.6.10.1 Operadores lógicos
3.6.10.2 Operadores de desplazamiento
3.6.10.3 Operadores relacionales
3.6.10.4 Operador de concatenación
3.6.10.5 Operadores aritméticos
3.6.11 Construcciones secuenciales
3.6.11.1 Asignación a variables
3.6.11.2 Sentencia IF
3.6.11.3 Sentencia CASE
3.6.11.4 Sentencia nula
3.6.11.5 Aserciones (Assertions)
3.6.11.6 Sentencia de bucle
3.6.12 Subprogramas y paquetes
3.6.12.1 Funciones y procedimientos
3.6.12.2 Sobrecarga de operadores (Overloading)
3.6.12.3 Paquetes (Packages)
3.6.12.4 Alcance, visibilidad y utilización de los paquetes
3.6.13 Declaración de entidad
3.6.14 Declaración de arquitectura
3.6.14.1 Bloques
3.6.14.2 Declaración de componentes
3.6.14.3 Instanciación de componentes
3.6.15 Asignación a las señales
3.6.16 Ejecución secuencial: Procesos y la sentencia WAIT
3.6.17 Asignación concurrente a señales
3.6.18 Unidades y bibliotecas
3.6.19 La sentencia GENERATE
3.6.20 La unidad de configuración
3.6.20.1 Especificación de configuración
3.6.20.2 Declaración de configuración
3.6.21 Buses y resolución de señales
3.6.22 Aserciones concurrentes
3.6.23 Invocación a procedimiento concurrente
3.6.24 Transacciones nulas
3.7 Descripción de bancos de prueba
3.7.1 Método tabular
3.7.2 Utilización de archivos
3.7.3 Utilización de un algoritmo
iii
27
27
28
29
29
30
30
30
31
32
32
32
32
33
33
33
33
33
34
34
34
34
35
35
37
38
38
38
39
40
40
41
41
42
44
45
45
46
46
47
48
49
49
50
50
50
51
51
Descripción en VHDL de arquitecturas para implementar el algoritmo CORDIC
Capítulo 4 – Descripción del algoritmo CORDIC en VHDL
4.1 Herramienta de desarrollo
4.2 La descripción funcional algorítmica
4.2.1 La descripción del package CORDIC
4.2.2 El banco de pruebas para la descripción funcional algorítmica
4.3 Descripción de las arquitecturas particulares
4.3.1 El formato numérico
4.3.2 Componentes comunes a ambas arquitecturas
4.3.2.1 El sumador completo (Full-Adder)
4.3.2.2 La unidad de suma
4.3.2.3 El multiplexor de dos bits
4.3.3 La descripción bit-paralela desplegada y sus componentes
4.3.3.1 La unidad de desplazamiento aritmético cableada
4.3.3.2 La entidad y arquitectura correspondientes a una iteración
4.3.3.3 Descripción final de la arquitectura bit-paralela desplegada
4.3.4 La arquitectura bit-paralela iterativa y sus componentes
4.3.4.1 La unidad de desplazamiento aritmético para la descripción
iterativa
4.3.4.2 Las compuertas lógicas de múltiples entradas
4.3.4.3 La tabla de búsqueda
4.3.4.4 El multiplexor múltiple de dos bits
4.3.4.5 Circuitos secuenciales
4.3.4.6 Los elementos de almacenamiento: Flip-flops
4.3.4.7 El flip-flop D
4.3.4.8 El registro
4.3.4.9 El contador de iteraciones
4.3.4.10 La unidad de control
4.3.4.11 Diseño y descripción de la unidad de control
4.3.4.12 Descripción final de la arquitectura bit-paralela iterativa
4.3.5 El banco de pruebas para las descripciones particulares
Capítulo 5 – Simulación de las descripciones
5.1 Herramientas de simulación
5.2 Valores para la simulación
5.3 Simulación de la descripción funcional algorítmica
5.4 Simulación de las arquitecturas particulares
5.4.1 Cálculo de valores
5.4.2 Visualización de ondas
Conclusiones
Acerca del uso de VHDL
Acerca de las descripciones del algoritmo CORDIC
Acerca de la exactitud de los resultados numéricos
Perspectivas sobre trabajos futuros
iv
52
53
54
54
56
57
57
59
60
61
63
63
64
65
67
69
69
71
73
75
76
77
77
80
81
83
84
91
94
95
95
97
98
102
102
108
115
115
116
116
117
118
119
119
122
123
123
124
124
125
126
127
128
131
136
141
143
Descripción en VHDL de arquitecturas para implementar el algoritmo CORDIC
Anexos
v
Descripción en VHDL de arquitecturas para implementar el algoritmo CORDIC
Introducción
El algoritmo de cómputo numérico CORDIC
Existen gran cantidad de algoritmos eficientes [7] [8] que pueden emplearse para el cálculo
de diversas funciones matemáticas, sin embargo sólo algunos de éstos algoritmos pueden
implementarse adecuadamente en hardware. Entre estos algoritmos se destaca una clase de los
mismos basada únicamente en sumas y desplazamientos, colectivamente denominados algoritmos
CORDIC. Esta clase de algoritmos pueden utilizarse para calcular funciones trigonométricas
circulares, hiperbólicas y funciones lineales.
El cálculo de las funciones trigonométricas está basado en rotaciones de vectores. La
denominación CORDIC, es un acrónimo de COordinate Rotation DIgital Computer o en castellano,
Computadora Digital para Rotación de Coordenadas.
El algoritmo CORDIC fue desarrollado originalmente como una solución digital para los
problemas de navegación en tiempo real. El trabajo original es acreditado a Jack Volder [1] quien
investigó el algoritmo CORDIC para el caso de rotaciones circulares. Ciertas extensiones a la teoría
de CORDIC están basadas en trabajos de John Walther [5] entre otros, y proveen soluciones para
una clase más amplia de funciones.
Como lo propuso Jack Volder el algoritmo CORDIC realiza únicamente operaciones de
suma y desplazamiento, que lo hace idóneo para ser implementado en hardware. No obstante al
implementar dicho algoritmo se puede optar por diversas arquitecturas de diseño y se debe
balancear la complejidad del circuito respecto del desempeño. Las arquitecturas utilizadas para
implementar el algoritmo CORDIC son, bit-paralela desplegada (Bit-Parallel Unrolled), bit-paralela
iterativa (Bit-Parallel Iterative) y bit-serie iterativa (Bit-Serial Iterative) [2].
vi
Descripción en VHDL de arquitecturas para implementar el algoritmo CORDIC
Problema a resolver
En el presente trabajo se estudia el algoritmo de cómputo numérico CORDIC y se
describen algunas de sus variantes arquitecturales. Para comenzar se realizará una descripción a
nivel funcional algorítmica con un alto nivel de abstracción del algoritmo en VHDL, utilizando
aritmética en punto flotante proporcionada por el lenguaje. El propósito es validar el
funcionamiento de algoritmo mediante el cálculo del seno, del coseno y del arcotangente.
Seguidamente se realizará la descripción de dos de las arquitecturas mas comunes (CORDIC bit-
paralelo desplegado y CORDIC bit-paralelo iterativo) utilizando aritmética de punto fijo como
forma de representación numérica.
La descripción de las arquitecturas particulares, se llevará a cabo a partir del funcionamiento
correcto de la descripción funcional algorítmica. Otro aspecto interesante es la modificación de los
parámetros principales que afectan a las arquitecturas, ancho de palabra y número de iteraciones.
Para verificar el funcionamiento de las descripciones, se utilizarán como referencia a las funciones
seno, coseno y arcotangente. La validación se llevará a cabo utilizando MATLAB como
he
Comentarios de: Descripción en VHDL de arquitecturas para implementar el algoritmo CORDIC (1)