plataforma de desarrollo de lógica programable de alto desempeño

Anuncio
PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE
ESCUELA DE INGENIERIA
PLATAFORMA DE DESARROLLO
DE LÓGICA PROGRAMABLE DE
ALTO DESEMPEÑO
JUAN PABLO CARAM WIGDORSKY
Memoria para optar al título de
Ingeniero Civil Electricista
Profesor Supervisor:
MARGELO GUARINI
Santiago de Chile, 2008
PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE
ESCUELA DE INGENIERIA
Departamento de (departamento)
PLATAFORMA DE DESARROLLO DE
LÓGICA PROGRAMABLE DE ALTO
DESEMPEÑO
JUAN PABLO CARAM WIGDORSKY
Memoria presentada a la Comisión integrada por los profesores:
MARCELO GUARINI
MIGUEL RIOS
SERGIO ENRIQUE GUTIÉRREZ
Para completar las exigencias del título de
Ingeniero Civil Electricista
Santiago de Chile, 2008
A mis Padres, hermanos y amigos,
que me apoyaron mucho.
ii
iii
Índice
1. Motivación y Objetivos
9
1.1. Plataforma Educacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2. Placa Madre multipropósito . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2. Teoría
2.1. Lógica Programable y FPGAs . . . . . . . . . . . . . . . . . . . . . .
2.1.1. Introducción y Reseña Histórica . . . . . . . . . . . . . . . . .
2.1.2. Arquitectura de los dispositivos lógicos programables . . . . .
2.1.3. Lenguajes de modelamiento de hardware . . . . . . . . . . . .
2.2. Dimensión Analógica de la Electrónica Digital . . . . . . . . . . . . .
2.2.1. Interconexiones como Líneas de Transmisión . . . . . . . . . .
2.2.2. Tipos de Líneas de Transmisión . . . . . . . . . . . . . . . . .
2.2.3. Efectos de las Líneas de Transmisión sobre las señales . . . . .
2.2.4. Línea con fuente de baja impedancia y carga de alta impedancia
2.2.5. Corrientes de retorno y Continuidad en las líneas de transmisión
2.2.6. Interferencia cruzada o Crosstalk . . . . . . . . . . . . . . . .
2.2.7. Distribución de Poder . . . . . . . . . . . . . . . . . . . . . .
2.2.8. Rebote de Tierra (Ground Bounce) . . . . . . . . . . . . . . . .
2.2.9. Simulación y modelamiento . . . . . . . . . . . . . . . . . . .
2.2.10. Conclusión . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Diseño
3.1. Diseño del Sistema . . . . . . . . . . . . . . . . . . . . .
3.1.1. FPGA, Configuración y Alimentación . . . . . . .
3.1.2. Periféricos . . . . . . . . . . . . . . . . . . . . .
3.1.3. Microcontrolador . . . . . . . . . . . . . . . . . .
3.2. Diseño del Circuito . . . . . . . . . . . . . . . . . . . . .
3.2.1. Diseño resistente a errores . . . . . . . . . . . . .
3.2.2. JTAG y configuración del FPGA a 3.3V . . . . . .
3.2.3. Controlador USB en la cadena JTAG . . . . . . .
3.2.4. USB con alimentaciones del bus USB y de la placa
3.2.5. Circuitos de Reseteo . . . . . . . . . . . . . . . .
3.2.6. Buses de las memorias SRAM y SDRAM . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
12
12
13
14
15
16
17
19
20
22
24
26
28
29
30
.
.
.
.
.
.
.
.
.
.
.
32
32
32
35
36
38
38
39
39
40
41
41
3.2.7. Configuración de la fuente de poder . . . . . . .
3.2.8. ICSP a 5V y PIC alimentado con 3.3V . . . . . .
3.2.9. Particularidades en el circuito de conversión A/D
3.3. Diseño del PCB . . . . . . . . . . . . . . . . . . . . . .
3.3.1. Restricciones al diseño . . . . . . . . . . . . . .
3.3.2. Parámetros de las líneas de transmisión . . . . .
3.3.3. Proceso de diseño . . . . . . . . . . . . . . . . .
3.3.4. Diseño flexible . . . . . . . . . . . . . . . . . .
3.4. Recursos, Técnicas y Herramientas . . . . . . . . . . . .
3.4.1. Software de Diseño . . . . . . . . . . . . . . . .
3.4.2. Software de Simulación . . . . . . . . . . . . .
3.4.3. Otro Software . . . . . . . . . . . . . . . . . . .
3.4.4. Herramientas de Soldadura y Montaje . . . . . .
3.4.5. Instrumentos de Medición . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4. Implementación y verificación del prototipo
4.1. Fabricación de la PCB . . . . . . . . . . . . . . . . . . . . .
4.2. Adquisición de componentes . . . . . . . . . . . . . . . . . .
4.3. Ensamblaje . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4. Verificación . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1. Prueba de Fuente de Poder . . . . . . . . . . . . . . .
4.4.2. Verificación de la cadena JTAG . . . . . . . . . . . .
4.4.3. APP1: Divisor de reloj . . . . . . . . . . . . . . . . .
4.4.4. Programación del PIC vía ICSP . . . . . . . . . . . .
4.4.5. APP2: Generación de onda cuadrada en el PIC . . . .
4.4.6. APP3: Comunicación entre el PIC y el FPGA . . . . .
4.4.7. APP4: Comunicación Serial . . . . . . . . . . . . . .
4.4.8. APP5: Lectura de los ADCs y transmisión serial al PC
4.4.9. APP6: Uso de memoria FLASH . . . . . . . . . . . .
4.4.10. APP7: Uso de memoria SRAM . . . . . . . . . . . .
4.4.11. APP8: Comunicación USB . . . . . . . . . . . . . . .
5. Aplicaciones y ejercicios propuestos
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
42
42
43
43
43
45
46
54
54
54
55
55
56
57
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
59
59
59
59
60
60
60
61
63
63
64
65
67
68
69
71
72
2
6. Producción
6.1. Adquisiciones . . . . . . . . .
6.1.1. Circuitos Impresos . .
6.1.2. Componentes . . . . .
6.2. Ensamblaje . . . . . . . . . .
6.2.1. Indicaciones Generales
6.2.2. Procedimiento . . . .
6.3. Pruebas . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
75
75
75
75
75
75
75
77
Índice de cuadros
1.
2.
3.
4.
5.
6.
Tiempo de propagación de campos electromagnéticos en distintos medios. .
Distribución de condensadores balanceada [Xapp623]. . . . . . . . . . . .
Fuentes de poder para las secciones de comunicación USB y TTL/CMOS del
chip USB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Restricciones técnicas de Advanced Circuits para la promoción de prototipos
de 4 capas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tiempos de levantamiento Tr para distintas configuraciones de los estándares
de E/S del FPGA, LVCMOS33 y LVTTL según los modelos IBIS de Xilinx,
y la longitud critica de la línea de transmisión correspondiente. . . . . . . .
Opciones de ensamblaje. . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
. 17
. 27
. 40
. 44
. 45
. 124
Índice de figuras
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Arquitectura de una CI GAL22V10 (Lattice Semiconductor) . . . . . . . . .
Arquitectura de un FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tipos de líneas de transmisión utilizadas en circuitos digitales. . . . . . . . .
Formas de onda en una línea de transmisión ideal en circuito abierto. . . . . .
Simulación de una compuerta CMOS de la familia HC sobre una línea de 75
Ω y un retardo de 100 ps, terminada en 1.0 M Ω. . . . . . . . . . . . . . . . .
Misma configuración de la figura 5 pero con una línea con retardo de 3ns. . .
Camino de las corrientes de retorno a alta y baja frecuencia. . . . . . . . . .
Corrientes de retorno y plano de tierra interrumpida. . . . . . . . . . . . . . .
Corrientes de retorno y cambio de lado de una pista. . . . . . . . . . . . . . .
Mecanismos de interferencia cruzada. . . . . . . . . . . . . . . . . . . . . .
Circuito equivalente de un condensador de desacoplo en una PCB y su curva
de impedancia en función de la frecuencia. . . . . . . . . . . . . . . . . . . .
Ejemplo de impedancia versus frecuencia de un sistema de distribución de
potencia [Xapp623]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Causa del Rebote de tierra. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Diagrama de bloques del diseño . . . . . . . . . . . . . . . . . . . . . . . .
Circuito externo de reset . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Geometría de la PCB de 4 capas de Advanced Circuits . . . . . . . . . . . .
Dibujo tri-dimensional y huella de un empaquetado de circuito integrado
DPAK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Casos críticos (a) y (b): Líneas con 2 cargas. Caso (c): líneas largas paralelas.
Especificación de la geometría y materiales del PCB para el programa HyperLynx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Simulación del caso (a) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Simulación del caso (b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Simulación del caso (c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Osciloscopio Tektronix 5054B-NV . . . . . . . . . . . . . . . . . . . . . . .
Cadena JTAG de la Plataforma de Desarrollo . . . . . . . . . . . . . . . . .
Formas de onda de APP1. Izquierda: LVTTL a 2mA. Derecha: LVTTL a 8mA.
APP2, Onda rectangular generada en el PIC . . . . . . . . . . . . . . . . . .
APP3, FSK Controlada desde el PIC . . . . . . . . . . . . . . . . . . . . . .
Señal serial en niveles TTL (canal 1) y RS232 (canal 2). . . . . . . . . . . .
5
13
15
18
21
22
22
23
24
24
25
26
28
28
33
41
45
46
49
50
51
51
53
58
61
62
63
65
65
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Terminal que la operación de la aplicación APP4. . . . . . . . . . . .
Señal original en osciloscopio . . . . . . . . . . . . . . . . . . . . .
Sinusoidal capturada. (a) Datos en terminal serial. (b) Gráfico para el
número 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
APP6 en terminal serial . . . . . . . . . . . . . . . . . . . . . . . . .
Máquina de estados APP7 . . . . . . . . . . . . . . . . . . . . . . .
Terminal exhibiendo la actividad de la aplicación. . . . . . . . . . . .
Fotografía de la plataforma completamente armada y operando. . . . .
Esquemáticos: Diagrama principal . . . . . . . . . . . . . . . . . . .
Esquemáticos: Configuración del FPGA . . . . . . . . . . . . . . . .
Esquemáticos: Memoria . . . . . . . . . . . . . . . . . . . . . . . .
Esquemáticos: Comunicaciones . . . . . . . . . . . . . . . . . . . .
Esquemáticos: Microcontrolador . . . . . . . . . . . . . . . . . . . .
Esquemáticos: I/O del FPGA . . . . . . . . . . . . . . . . . . . . . .
Esquemáticos: Fuente de Poder . . . . . . . . . . . . . . . . . . . . .
Esquemáticos: Puertos de Expansión . . . . . . . . . . . . . . . . . .
Serigrafía cara superior. No a escala. . . . . . . . . . . . . . . . . . .
Cobre cara superior. No a escala. . . . . . . . . . . . . . . . . . . . .
Cobre capa de alimentación (Vcc). No a escala. . . . . . . . . . . . .
Plano de tierra (Negativo). No a escala. . . . . . . . . . . . . . . . .
Serigrafía cara inferior (Invertida). No a escala. . . . . . . . . . . . .
Cobre cara inferior (Invertida). No a escala. . . . . . . . . . . . . . .
6
. . .
. . .
ADC
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. 66
. 67
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
68
69
70
70
72
81
82
83
84
85
86
87
88
89
89
90
90
91
91
Resumen
Esta memoria explora y analiza los conceptos teóricos y prácticos del desarrollo de circuitos electrónicos digitales de alta velocidad, y describe el diseño e implementación de una
plataforma de desarrollo de aplicaciones digitales mediante lógica programable y basada en
un FPGA1 . Los propósitos de este desarrollo son aplicar la teoría estudiada, proveer una
plataforma de aprendizaje de estos conceptos y permitir el desarrollo de aplicaciones digitales avanzadas, mediante técnicas y hardware modernos. Para facilitar el aprendizaje se proporcionan ejemplos del uso de esta plataforma. Sin embargo, este trabajo se enfoca ante todo
en los aspectos de hardware, mientras que las aplicaciones y su programación son ejercicio
para el lector.
1
Field Programmable Gate Array, que en castellano significa Arreglo de Compuertas programable en Terreno. Este concepto es central en esta memoria y es desarrollado en profundidad en el capítulo 2
7
Abstract
This document explores and studies the concepts involved in the development of highspeed digital circuits. It describes the design and fabrication of a multi-purpose programmable
logic circuit board based on an FPGA2 . It’s intended to provide a hardware platform to aid in
the teaching and learning of advanced digital electronics concepts. Examples and guidelines
for software application development are provided. However this work focuses mainly in the
hardware and analog aspects of digital design. The programmable logic tasks are left to the
application developer.
2
Field Programmable Gate Array. This is a crucial concept in this thesis and will be developed further in
chapter 2.
8
1.
1.1.
Motivación y Objetivos
Plataforma Educacional
La motivación original de este proyecto surgió con la intención de facilitar la ampliación
del currículo de Ingeniería Eléctrica de la Pontificia Universidad Católica de Chile (PUC) en
el área de la electrónica digital. Si bien al momento de desarrollar esta memoria existen ramos
de aplicación en sistemas digitales, tales como Procesamiento Digital de Señales, Arquitectura de Computadores y Comunicaciones Digitales, el aprendizaje en el currículum podría
favorecerse y potenciarse, mediante la ayuda de tecnologías, metodologías y procedimientos prácticos, que permitan la implementación de sistemas que en otros ramos son descritas
únicamente en forma teórica.
La importancia de completar la cadena de aprendizaje en sistemas digitales no solo radica
en el nexo entre los conceptos básicos y los de aplicación. También en que, dados los requerimientos del mercado mundial, la Ingeniería Eléctrica a nivel educacional universalmente se
está enfocando cada vez más en la electrónica digital.
El autor ha tenido la oportunidad de conocer y participar poco tiempo atrás del programa
educacional en Ingeniería Eléctrica de la universidad Carnegie Mellon (Pittsburg, Pensylvania, EE.UU.). Pudo observar allí la marcada tendencia hacia la electrónica digital del currículo. Los ramos cubren desde los aspectos de fabricación en silicio hasta el diseño digital
asistido por computadora, donde a alumnos de tercero y cuarto año de pregrado ya se les
asigna el diseño completo de CPUs a nivel de silicio como proyecto de ramo.
Aspectos como la actual duración del plan de estudios, limitaciones presupuestarias, y
la realidad tecnológica nacional, sin duda hacen poco factible agregar al currículo de ingeniería eléctrica de la PUC ramos con tal nivel de profundidad. El alumno, sin embargo puede
adquirir conocimientos con un nivel de abstracción levemente mayor, si se le entregan los
conceptos necesarios para comprender lo que puede fabricarse hoy, así como los bloques
constructivos básicos de diseño y fabricación actuales de circuitos digitales.
Los FPGA son una parte de estos bloques constructivos. A la vez, estos últimos están
construidos sobre la base de bloques constructivos menores interconectables mediante software. Con FPGAs, complejos sistemas digitales pueden diseñarse e implementarse en forma
de productos finales (cuando el número de unidades es pequeño), o como prototipos para ser
fabricados posteriormente como ASICs (Application Specific Integrated Circuits). Estas dos
vías son las preferidas en la industria a menos que la complejidad del sistema requiera algún
tipo de control específico sobre los parámetros de fabricación en el sustrato. Si los alumnos
9
alcanzan el dominio de los conceptos involucrados en la estructura y diseño con FPGAs y
desarrollan habilidad práctica con ellos, estarán capacitados para diseñar los más complejos
sistemas digitales a nivel de prototipo o producción.
El acceso a una placa de desarrollo con FPGA, que sea versátil, de bajo costo y a la
vez de alto desempeño, permite acceder a la experiencia práctica necesaria para alcanzar
los objetivos mencionados. Adicionalmente, una adecuada documentación, con ejemplos de
diferente complejidad, son necesarios para acelerar el proceso de aprendizaje y hacer factible
la creación de proyectos en ramos relacionados.
Los conceptos teóricos que acompañen el hardware deben ser transmitidos a los alumnos
a través de ramos específicos, cuyos nombres podrían ser, por ejemplo “Electrónica Digital
de Alta Velocidad” y “Diseño Digital asistido por Computadora”, donde se describiesen las
técnicas de diseño a nivel de hardware y a nivel de software respectivamente. Estos ramos
requieren ser dictados por profesores especializados en el área de electrónica digital.
Se espera que esta memoria pueda proveer un resumen de gran parte de los conceptos
teóricos para aquellos posibles ramos, y que otorgue una estructura lógica para transmitirlos
a los alumnos, así como una fuente de literatura y una guía para el diseño y confección de
hardware digital sofisticado.
1.2.
Placa Madre multipropósito
Además de cumplir con los objetivos educacionales se espera que el diseño del hardware
propuesto cumpla con condiciones de versatilidad y desempeño, de manera tal que permita
su uso como parte de sistemas más complejos, en el ejercicio profesional y la investigación.
Estas son característica difícil de encontrar en placas de desarrollo con FPGAs disponibles
en el mercado, debido a que estas últimas están diseñadas con el objetivo de familiarizar al
desarrollador con las funcionalidades del dispositivo específico embedido en la placa, y no
a obtener su máximo desempeño. Tampoco están diseñadas para utilizarlas embedidas en
productos de tipo comercial.
La forma de alcanzar estos objetivos, que sin duda no son sencillos - y considerando que
el autor no tiene experiencia ni educación formal en profundidad en esta área, sino sólo autoaprendizaje y el desarrollo de algunos proyectos personales relacionados - será hacer uso de
los recursos que el alumno dispone actualmente en su entorno de trabajo. Esto es, el National
Radio Astronomy Observatory (NRAO) en los EE.UU, que cuenta con un equipamiento de
punta y expertos a nivel mundial en esta y otras áreas.
Ante un resultado exitoso, el hardware desarrollado podrá ser de utilidad para desarrollar
10
productos a la medida o de consumo, en las más variadas áreas, como son, por ejemplo el
procesamiento digital de señales, control automático, instrumentación, telecomunicaciones,
y muchos otros.
11
2.
Teoría
2.1.
Lógica Programable y FPGAs
2.1.1.
Introducción y Reseña Histórica
Hacia el principio de los años 80, los medios para desarrollar circuitos digitales eran,
principalmente, la interconexión de numerosos circuitos integrados (chips) de compuertas
lógicas discretas en un gran circuito impreso3 , o la fabricación de un circuito integrado especializado (aquel en que toda la aplicación es fabricada en un único chip) que implementase
las funciones específicas deseadas. La primera opción tenía las desventajas de tener un alto
costo unitario, gran tamaño, bajo desempeño debido a las longitudes de la interconexiones, y
de tomar mucho tiempo en su fabricación. La segunda opción tenía las desventajas de tener
un costo inicial muy alto, haciéndola muy desfavorable para diseños con pocas unidades de
producción o prototipos.
En aquellos tiempos los dispositivos de lógica programable - entendidos como circuitos
integrados cuyos componentes y estructura son fijos pero que cuentan con elementos que
el usuario puede modificar para definir o alterar su función - estaban limitados a memorias PROM (Programmable Read-Only Memory) para la implementación de lógica combinacional4 . A la vez primeros PLDs (Programmable Logic Devices) contaban sólo con unas
cuantas decenas de compuertas lógicas que podían interconectarse, en el momento de su
fabricación o, posteriormente por el usuario5 . Estas limitaciones hacían que los circuitos de
lógica programable disponibles en aquel entonces, sólo fueran de interés para aplicaciones
de baja densidad y baja velocidad.
En 1984, Ross Freeman, fundador de la compañía Xilinx6 , inventó el FPGA. El diseño
de los primeros FPGAs estaba basado en el de los CPLDs (Complex Programmable Logic
Devices), predecesores de esta tecnología, pero de mucha menor densidad. Los FPGAs incluyen un gran número de compuertas, tanto combinacionales como secuenciales, un flexible
sistema de interconexión, y re-programabilidad por el usuario, lo que resuelve los principales
inconvenientes que enfrentaba hasta entonces el diseñador.
En otras palabras, los FPGAs son dispositivos lógicos programables con muchas más
3
O en un circuito tipo wire-wrap.
Donde las entradas al circuito son la dirección de memoria en la PROM y las salidas son las líneas de datos.
5
Electrónicamente, y cuyo borrado (deshacer las interconexiones) generalmente no era posible, o mediante
exposición a luz ultravioleta.
6
Xilinx, San José, California. www.xilinx.com. Actualmente es la empresa líder en la fabricación de circuitos
lógicos programables como FPGAs y CPLDs.
4
12
Figura 1: Arquitectura de una CI GAL22V10 (Lattice Semiconductor)
macroceldas (a definir más adelante) que sus predecesores, muchos más recursos de interconexión, y cuya estructura ha madurado durante casi tres décadas para que los diseños lógicos basados e implementados en ellos resulten más eficientes.
2.1.2.
Arquitectura de los dispositivos lógicos programables
La figura 1 muestra la arquitectura de un dispositivo de lógica programable GAL22V10
de Lattice Semiconductor. A pesar de ser un dispositivo muy limitado en comparación con
los CPLDs y FPGAs en términos de flexibilidad, velocidad y número de compuertas, lleva
casi dos décadas en el mercado y, estructuralmente, es representativo de la arquitecturas de
los actuales dispositivos lógicos programables. Es un ejemplo de los circuitos lógicos de la
antigüedad, pero su legado es fundamental. Este cuenta con 22 pines, todos los cuales pueden
operar como entradas, pero solo 10 de ellos como salidas. Estructuralmente, cuenta con una
gran matriz de interconexión de las 22 entradas, que conectan a la vez con las 10 etapas de
salida. Cada etapa de salida contiene varias compuertas lógicas y registros, cuyo conjunto
se conoce como Macro-celda. En la figura están identificadas como OLMCs (Output Logic
Macrocells) y su estructura se muestra en el costado derecho.
La figura 2 muestra la estructura típica de un FPGA destacando sus principales elementos,
que se describen a continuación.
Los elementos fundamentales de la arquitectura de los FPGAs son los bloques lógicos
13
configurables (CLB, Configurable Logic Blocks), descendientes de las Macro-celdas, y que
permiten la implementación de lógica combinacional mediante elementos conocidos como
“Look-up tables”, similares a una memoria, donde las entradas equivalen a la dirección y la
salida al valor en memoria correspondiente. Permiten también la implementación de lógica
secuencial mediante registros que pueden ser utilizados como flip-flops o latches.
Los bloques lógicos se encuentran distribuidos físicamente en forma matricial en el FPGA, y pueden interconectarse con cualquiera de los bloques lógicos vecinos, con un bloque
de entrada y salida u otro recurso en el FPGA.
Los bloques de entrada y salida (E/S) permiten interfasar el circuito digital interno al
FPGA con el exterior. Éstos permiten controlar las características analógicas de las señales
digitales, como por ejemplo, si una línea de datos será referida a tierra o será diferencial
(utilizando 2 pines), los niveles de voltaje, las velocidad de los flancos de subida y bajada y
la capacidad de corriente de cada pin.
La mayoría de los fabricantes incorpora algún tipo de controlador de reloj, que permite,
a partir de una señal de reloj externa de frecuencia fija, generar distintas frecuencias y alterar
su fase (introducir retardo). Estos sistemas pueden ser de tres tipos: completamente digitales
y que se conocen como DDLs (Digital Delay Loops), donde la síntesis de frecuencias se
implementa mediante retardos, contadores y otras compuertas; completamente analógicos
cuya implementación es mediante PLLs (Phase-Locked Loops); o híbridos.
La mayoría de los fabricantes incorporan memoria RAM y elementos para acelerar operaciones matemáticas requeridas en el procesamiento digital de señales (DSP), principalmente
multiplicadores.
El detalle de la estructura de los distintos circuitos integrados de lógica programable
puede encontrarse en su respectiva hoja de datos. Es esencial conocer la arquitectura de estos
dispositivos si se ha de optimizar el uso de recursos y el desempeño en el diseño final.
2.1.3.
Lenguajes de modelamiento de hardware
Los lenguajes de modelamiento de hardware o HDLs (Hardware Description Languages)
son un tipo de lenguaje computacional que permite describir circuitos digitales en su dimensión temporal (comportamiento) y espacial (física). Los primeros HDLs fueron creados a
fines de los años 70, y los dos más utilizados actualmente, Verilog y VHDL (VHSIC - Very
High Speed Integrated Circuit - Hardware Description Language), fueron creados en 1985 y
1987 respectivamente.
Estos lenguajes difieren de los lenguajes de computador en hecho que están especialmente
14
Figura 2: Arquitectura de un FPGA
diseñados para describir procesos paralelos, lo que es una característica propia del hardware.
Adicionalmente, algunos de estos lenguajes permiten describir un set de estímulos externos
para simular el comportamiento de un diseño.
En general, permiten describir hardware con distintos niveles de abstracción, facilitando
el diseño de sistemas complejos, dejando que un software compilador realice la tarea de
traducir el diseño a nivel físico. El compilador está optimizado para aprovechar al máximo los
recursos físicos provistos por un determinado dispositivo de lógica programable. El proceso
de traducción de un diseño en HDL a una especificación de interconexión de recursos en un
dispositivo de lógica programable se conoce como síntesis.
El desarrollo de aplicaciones con FPGAs se realiza hoy mediante lenguajes de descripción de hardware. El desarrollador debe dominar estos lenguajes para diseñar aplicaciones
digitales. Sin embargo, debe tener claros los niveles de abstracción que se están utilizando.
Éstos van desde el nivel más bajo y que corresponde a la estructura interna de los bloques
constructivos del dispositivo específico que se pretende utilizar, hasta la representación al nivel de transferencia de registros utilizada en el lenguaje de su elección para lograr aplicaciones
eficientes.
2.2.
Dimensión Analógica de la Electrónica Digital
Los circuitos digitales han alcanzado velocidades de reloj y tiempos de transición que
acentúan las características “parásitas” (como se conocen las no idealidades de los compo15
nentes electrónicos a bajas frecuencias) en las interconexiones de los componentes. En la
actualidad, la interconexión de circuitos integrados digitales presenta un gran desafío y es
parte esencial del diseño del sistema.
El diseño presentado en esta memoria considera velocidades de reloj y tiempos de transición de estado que requieren un análisis analógico electromagnético para poder predecir
su comportamiento. A continuación se presenta un resumen de los conceptos fundamentales
que permiten enfrentar el problema de diseño en cuestión y que constituyen la base teórica
de esta memoria y del hardware desarrollado.
2.2.1.
Interconexiones como Líneas de Transmisión
Toda interconexión eléctrica7 entre dos puntos es una línea de transmisión. Cuando la
longitud de esta conexión es relativamente pequeña en comparación con la longitud de onda
de la señal transmitida por ella, es válido hacer aproximaciones basándose en el supuesto
de que la onda se transfiere infinitamente rápido. De esta manera, asumimos que cuando un
determinado voltaje y corriente se presentan en cierto instante en un extremo de la línea, estos
son invariables a lo largo de toda su longitud.
Para tratar una conexión como línea de transmisión se utiliza como criterio la longitud de
ésta. A saber, una longitud tal que causa efectos importantes sobre las señales transmitidas
por ella. Esto ocurre usualmente cuando la longitud de la línea l y la longitud de onda λ de la
componente de mayor frecuencia de la señal transmitida cumplen con la siguiente relación8 :
λ
(1)
6
En el caso de las señales digitales, la mayor frecuencia relevante (correspondiente a λ
en la ecuación 1) puede ser de varios órdenes de magnitud por sobre la frecuencia de reloj,
ya que se trata de ondas (idealmente) cuadradas, que contienen armónicas de magnitudes
dependientes de los tiempo de elevación Tr y caída de los flancos de las señales. La frecuencia
a considerar como máxima relevante en una señal digital, en tanto la potencia de la señal por
sobre dicha frecuencia es una fracción despreciable de la potencia total de la señal, está dada
por:9 :
l>
7
De dos conductores, donde uno es considerado para las corrientes de retorno.
Este criterio es sólo de referencia y su validez dependerá de la sensibilidad de la aplicación.
9
Esta también es una aproximación. El nombre fknee , donde knee significa rodilla en ingles, proviene de la
característica gráfica del espectro de una señal digital donde se produce un incremento en la pendiente negativa
de la amplitud. La frecuencia a la que ocurre este incremento en la pendiente (punto que denominamos knee o
rodilla) se considera como la frecuencia máxima relevante.
8
16
Cuadro 1: Tiempo de propagación de campos electromagnéticos en distintos medios.
Medio
Retardo Tp [ns/m] Constante del dieléctrico r
Aire (Ondas de Radio)
3.35
1.0
Cable Coaxial (75 % velocidad)
4.45
1.8
Cable Coaxial (66 % velocidad)
5.08
2.3
FR4 PCB, pista externa
5.51-7.09
2.8-4.5
FR4 PCB, pista interna
7.09
4.5
Alumina PCB, pista interna
9.45-10.63
8-10
fknee =
0,5
Tr
(2)
Para el cálculo de la longitud de onda es necesario conocer la velocidad de propagación
de ésta, la cual depende únicamente del dieléctrico10 a través del cual la onda se propaga. El
cuadro 1 presenta los tiempos de propagación en algunos medios (dieléctricos) comunes.
Teniendo la información de la tabla conviene escribir la ecuación 1 en función del tiempo
total de propagación T = Tp × l y el tiempo de levantamiento de una señal digital Tr como:
T >
2.2.2.
Tr
3
(3)
Tipos de Líneas de Transmisión
La figura 3 muestra las secciones transversales de 4 tipos comunes de líneas de transmisión. Entre estos, Microstrip y Stripline son los más comunes en circuitos impresos digitales. Ambos pueden coexistir en un mismo circuito impreso de varias capas, donde aquellas
pistas en las caras de la placa corresponden a los primeros, mientras que los segundos corresponden a las pistas en sus capas internas entre planos de tierra.
En el caso de Stripline, las líneas de campo eléctrico sólo cruzan el dieléctrico del circuito
impreso, por lo tanto, la constante efectiva o permitividad del dieléctrico es la del material de
la placa. Para Microstrip en cambio, las líneas de campo que emergen del lado superior del
conductor, cruzan el aire antes de penetrar en el dieléctrico. La permitividad efectiva depende,
entonces, de cuánto se concentre el campo eléctrico bajo la pista, en comparación con cuánto
cruza el aire, lo que a la vez depende de la geometría de la línea.
En [Johnson93] se pueden encontrar fórmulas para calcular parámetros de distintos tipos
de líneas de transmisión en función de su geometría y del dieléctrico.
10
La constante del dieléctrico r se conoce también como permitividad relativa del dieléctrico.
17
Figura 3: Tipos de líneas de transmisión utilizadas en circuitos digitales.
Para Microstrip, las siguientes aproximaciones para la impedancia natural Z0 y el tiempo
de propagación Tp entregan buenos resultados cuando 0,1 < w/h < 2,0 y 1 < r < 15,
donde w, h y t son el ancho de la pista, la separación entre la pista el plano de tierra, y el
espesor del conductor respectivamente. r es la permitividad realtiva del dieléctrico:
87
5,98h
ln
Z0 = √
r + 1,41
0,8w + t
!
[Ω]
(4)
ns
]
(5)
m
Para Stripline, las siguientes aproximaciones son válidas cuando w/b < 0,35 y t/b <
0,25, donde w, b y t son el ancho de la pista, la separación entre ambos planos de tierra y el
espesor del conductor respectivamente:
q
Tp = 3,35 0,475r + 0,67 [
60
1,9b
Z0 = √ ln
r
0,8w + t
!
√ ns
Tp = 3,35 r [ ]
m
18
[Ω]
(6)
(7)
2.2.3.
Efectos de las Líneas de Transmisión sobre las señales
La respuesta en frecuencia entre la fuente y la carga a través de una línea de transmisión,
considerando infinitas reflexiones entre la carga y la fuente, está dada por [Johnson93]:
S∞ =
A(ω)Hx (ω)T (ω)
1 − R2 (ω)Hx2 (ω)R1 (ω)
(8)
A(ω) representa la fracción de la señal que es transmitida desde la fuente hacia la línea.
Depende de la impedancia de salida Zs de la fuente y de la impedancia natural de la línea Z0 .
Z0 es la impedancia instantánea que “ve” una señal hacia la línea de transmisión. Esto causa
que una señal que emerge de la fuente se vea afectada por un divisor de voltaje durante el
tiempo que toma a la señal en viajar por la línea y reflejarse de vuelta, afectando su amplitud
con un factor A(ω):
A(ω) =
Z0 (ω)
Zs (ω) + Z0 (ω)
(9)
Este efecto puede observarse en la figura 4, donde la señal en el origen solo alcanza una
fracción de su amplitud final en el flanco de subida.
HX (ω) es la respuesta de la línea a una distancia X de la fuente y considera las pérdidas
y el desfase causado por el comportamiento LC distribuido11 :
HX (ω) = e−X
√
(R(ω)+jωL)(jωC)
(10)
T (ω) representa cuánto es transmitido hacia la carga de impedancia ZL , mientras que
R2 (ω) representa cuánto es reflejado de vuelta a la fuente.
T (ω) =
2ZL
ZL (ω) + Z0 (ω)
(11)
R2 (ω) =
ZL (ω) − Z0 (ω)
ZL (ω) + Z0 (ω)
(12)
R1 (ω) representa cuánto es reflejado nuevamente de la señal incidente en la fuente de
vuelta hacia la línea.
R1 (ω) =
Zs (ω) − Z0 (ω)
Zs (ω) + Z0 (ω)
11
(13)
La inductancia y capacitancia por unidad de longitud
p están dadas
√ por L = Z0 Tp y C = Tp /Z0 respectivamente. Estas relaciones se desprenden de que Z0 = L/C y Tp = LC.
19
Estas ecuaciones resumen los efectos que las líneas de transmisión tienen sobre las señales
que viajan por ellas. Es importante destacar que siempre se producirán reflexiones cuando
haya una discontinuidad en la impedancia, y que siempre se verán afectadas la amplitud y la
fase a lo largo de la línea.
Es importante destacar que los parámetros y ecuaciones presentadas en esta sección son
todos funciones de la frecuencia debido a los materiales involucrados en la fabricación del
circuito. En general, las variaciones de los parámetros debido a la frecuencia se presentan a
muy altas frecuencias. Esto se debe a fenómenos como el efecto pelicular, donde las corrientes tienden a viajar por la superficie de los conductores (siguiendo el camino de mínima
inductancia) causando un aumento en la resistividad del conductor, así como pérdidas en el
dieléctrico, lo que se debe a que la resistividad del material comienza a reducir su valor.
2.2.4.
Línea con fuente de baja impedancia y carga de alta impedancia
El efecto más evidente de las líneas de transmisión utilizadas en circuitos digitales de un
solo circuito impreso (sin cables de interconexión), se debe a que la impedancia de salida de
las compuertas lógicas es muy baja y es comparable a la impedancia natural de la línea, y al
hecho que la impedancia de la carga (la impedancia de entrada de las compuertas lógicas) es
muy alta y típicamente capacitiva.
La figura 4 muestra, el voltaje entregado por una compuerta cuya resistencia de salida es
10Ω y su tiempo de levantamiento es de 1ns, así como el voltaje recibido en una compuerta
cuya impedancia de entrada es de 5pF . La señal se transmite por una línea de transmisión
ideal cuyo tiempo de propagación es de 10ns y Z0 = 50Ω.
En este caso, T (ω) ≈ +2, R1 (ω) ≈ −1 y R1 R2 ≈ −1, lo que resulta en sucesivos
cambios de signo de las señales reflejadas, produciendo oscilaciones. Éstas tienen un período
igual a 4 veces el tiempo total de propagación en la línea y su constante de decaimiento está
dada por:
√
X LC
τ=
−ln(|R1 (2πfknee )R2 (2πfknee )|)
(14)
Las formas de onda pueden comprenderse sobre la base de que las reflexiones en el destino son positivas y de amplitud prácticamente igual a la magnitud del flanco incidente, y que
en el origen éstas son de valor negativo y amplitud similar.
El problema de esta situación es que debido a la amplitud de las oscilaciones posteriores
a un flanco de subida o bajada, el voltaje puede interpretarse con un valor lógico erróneo, par-
20
Origen
Destino
8
Voltaje [V]
6
4
2
0
−2
4
5
6
7
8
9
Tiempo [s]
10
11
12
13
−7
x 10
Figura 4: Formas de onda en una línea de transmisión ideal en circuito abierto.
ticularmente en señales de reloj que afectan al sistema mediante un flanco. Adicionalmente,
se reduce el margen disponible para tolerar ruido de diferentes índoles.
Simulación
La figura 5 muestra un modelo de simulación bajo un software especializado en la simulación de compuertas digitales y su efecto sobre las líneas de transmisión. La compuerta en
este caso es un modelo SPICE de la etapa de salida de una compuerta de la familia 74HC
alimentada con 5V, cuyo tiempo de levantamiento es aproximadamente 6 ns. La línea de
transmisión es de 75 Ω, y un tiempo de propagación de 100 ps, que es considerablemente
menor al tiempo de levantamiento de la compuerta (la línea es muy corta).
Ya que la línea es tan corta, aún cuando la carga de 1 M Ω está muy desbalanceada con
la impedancia natural de la línea, se puede observar en el resultado de la simulación, que
la forma de onda en el origen y el destino son coincidentes. No se produce sobrepaso ni
oscilaciones.
21
Forma de onda en el origen y el destino en una línea muy corta
y carga de alta impedancia
6
5
Voltaje [V]
4
3
2
Tr≈ 6ns
1
0
−1
0
10
20
30
40
50
Tiempo [ns]
Figura 5: Simulación de una compuerta CMOS de la familia HC sobre una línea de 75 Ω y
un retardo de 100 ps, terminada en 1.0 M Ω.
La figura 6 sin embargo muestra los resultados de la simulación donde se ha reemplazado
la línea de transmisión por una cuyo tiempo de propagación es de 3 ns. Las reflexiones en el
destino causan un sobrepaso debido a la suma de las ondas incidente y reflejada del mismo
signo. En el origen, el flanco de subida pierde impulso (toma más tiempo en alcanzar su
máximo), debido a que la compuerta “ve” 75 Ω por más tiempo (Esto puede puede calcularse
en forma aproximada como Tr + 2Tp ≈ 6ns + 2 × 3ns = 12ns y es visible en la figura 6).
Formas de onda en el origen y el destino en una línea
de transmisión con 3ns de tiempo de propagación.
7
Destino
Origen
6
5
Voltaje [V]
4
3
2
1
0
−1
−2
0
10
20
30
40
50
Tiempo [ns]
Figura 6: Misma configuración de la figura 5 pero con una línea con retardo de 3ns.
2.2.5.
Corrientes de retorno y Continuidad en las líneas de transmisión
Al trabajar con líneas de transmisión Microstrip o Stripline, donde se tienen amplios
planos de tierra, es importante comprender cuál es el camino que toman las corrientes de
retorno a través de ellos y por qué.
22
Carga
Carga
Plano de Tierra
Fuente
Corriente de
retorno
Fuente
(A) Alta Frecuencia
(B) DC o baja frecuencia
Figura 7: Camino de las corrientes de retorno a alta y baja frecuencia.
Las corrientes que fluyen de la fuente hacia la carga están confinadas a la pista conductora, sin embargo las corrientes de regreso a la fuente viajan por el plano de tierra y siempre
seguirán el camino de menor impedancia. A frecuencias bajas, la resistividad del plano de
tierra es el factor dominante en la impedancia (el factor mínimo de la impedancia), por lo
tanto, las corrientes siguen el camino más corto (Figura 7 (B)). Sin embargo, a altas frecuencias, es la inductancia el factor dominante, por lo tanto, las corrientes de retorno seguirán el
camino que las minimice. Como la inductancia es proporcional al área que encierra el camino
de la corriente, la mínima inductancia se obtiene cuando las corrientes de retorno viajan por
el plano de tierra justo bajo la pista (Figura 7 (A)).
El caso A de la figura 7 es el que más nos concierne, dadas las posibles interrupciones
que puedan producirse en el camino ideal de la corriente de retorno. La figura 8 muestra una
interrupción en el plano de tierra bajo dos líneas de transmisión Microstrip. La corriente de
retorno se ve obligada a bordear la interrupción. El área encerrada por el lazo de corriente
resulta en un incremento de la inductancia total de la línea de transmisión y, por lo tanto, del
tiempo que toma en propagarse por ella una señal.
Otra discontinuidad en el camino de retorno de la corriente ocurre cuando una pista cambia de capa en el circuito impreso y el plano de tierra deja de estar inmediatamente adyacente
a la pista. La figura 9 muestra un circuito impreso de 4 capas, en la cual la superior y la
inferior son de señal, mientras que la segunda es plano de tierra y la tercera es plano de alimentación. La señal se origina en la fuente y la corriente de retorno fluye por el plano de
tierra (Gnd) hasta que la pista cambia a la otra cara del circuito impreso. En este segmento
el plano de alimentación (Vcc) se interpone entre el plano de tierra y la señal, aislándolos
23
Figura 8: Corrientes de retorno y plano de tierra interrumpida.
Fuente
Carga
C
Gnd
Vcc
C
Figura 9: Corrientes de retorno y cambio de lado de una pista.
electromagnéticamente. El camino de retorno ideal para la corriente en este segmento es a
través del plano de alimentación. La forma de crear continuidad entre ambos planos (sin cortocircuitarlos, naturalmente), es mediante un condensador muy cerca del punto de cambio de
lado de la pista. Mientras más cerca se encuentre el condensador, menor será la inductancia
de la línea.
2.2.6.
Interferencia cruzada o Crosstalk
La figura 10 representa los 2 principales mecanismos por los cuales la señal en una pista
puede interferir la señal en una pista cercana. El primero (A) y el más importante, es que
cualquier corriente inducirá un campo magnético alrededor de dicha corriente. Este campo
a la vez puede inducir corriente en cualquier otra pista a la que enlace. La figura muestra
las líneas de campo generadas por la corriente en la pista m, que a su vez enlazan la pista n
induciendo una corriente en ella. Este tipo de interferencia cruzada se conoce como interferencia inductiva, debido a que al compartirse flujo magnético entre las pistas existe inductancia
24
m
n
(A)
Gnd
m
n
(B)
Gnd
Figura 10: Mecanismos de interferencia cruzada.
mutua entre ellas. El segundo mecanismo (B) se debe a las corrientes de retorno por el plano
de tierra. La figura muestra las distribuciones de la corriente en el plano de tierra para las
señales transmitidas en cada pista. Si las pistas están suficientemente cerca, las corrientes de
retorno se pueden interferir.
En general, la interferencia cruzada entre dos pistas paralelas se mide como el porcentaje
de la amplitud del voltaje de la señal de la pista m que es inducido sobre la pista n. La interferencia cruzada es dependiente de la distancia D entre los centros de las pistas en cuestión y la
distancia entre las pistas y el plano de tierra H. K es función de los tiempos de levantamiento
por las líneas y de la longitud en la cual las pistas se interfieren.
Crosstalk ∝
K
1 + (D/H)2
(15)
La interferencia puede ser mucho más severa si se da el caso de la figura 8. En este caso,
las superficies creadas por los lazos de corriente de ambas señales cubren un área común por
la que atraviesan líneas de campo magnético de ambas señales. En este caso la interferencia
cruzada es proporcional al área común de flujo magnético.
Lo mismo puede ocurrir cuando varias pistas cambian de capa en un circuito impreso. Si
no hay un condensador que permita el flujo de corriente de retorno muy cerca del cambio
de capa de la pista, las corrientes de retorno pueden ir muy lejos, creando grandes lazos de
corriente por cuya área pueden pasar las líneas de campo de muchas otras señales.
25
2.2.7.
Distribución de Poder
La función del sistema de distribución de potencia en un circuito es responder a la corriente demandada por las cargas, y responder tan rápido como sea posible a los cambios en
dicha demanda. Cuando no se logra cumplir estas demandas, se observa un cambio en el
voltaje de alimentación de los dispositivos y esto, a la vez, afecta las señales trasmitidas en
forma de ruido.
El consumo de potencia de los circuitos digitales modernos se concentra en las etapas de
entrada y salida de los circuitos integrados. Este consumo a su vez, ocurre principalmente
durante las transiciones de estado y se debe a la baja impedancia de las etapas de salida y al
comportamiento capacitivo de las etapas de entrada.
Para permitir altas velocidades de reloj, las transiciones de estado deben ocurrir muy
rápido, requiriendo altas corrientes por períodos muy breves. En otras palabras, se requieren
I y dI/dt muy altos.
Para cumplir con estos requerimientos la fuente de alimentación de los circuitos integrados digitales debe tener la capacidad de corriente necesaria y una baja impedancia de salida,
principalmente la inductiva.
Generalmente, las demandas transitorias en los circuitos digitales son tan altas que si se
usase una fuente que sea capaz de suministrarla en régimen permanente, ella sería absurdamente voluminosa. La forma de resolver esto es mediante condensadores conectados entre
los pines de alimentación y tierra de los circuitos integrados para proveer la corriente durante
las transiciones, y ubicados tan cerca de los pines de alimentación como sea posible para
minimizar la inductancia.
Z
L1
L2
LS
CI
C
F
(b) Impedancia
(a) Circuito equivalente
Figura 11: Circuito equivalente de un condensador de desacoplo en una PCB y su curva de
impedancia en función de la frecuencia.
26
Cuadro 2: Distribución de condensadores balanceada [Xapp623].
Valor
Cantidad
Tipo
Inductancia Típica
470 uF a 1000 uF
4%
Tantalio E
2.8 nH
1.0 a 4.7 uF
14 %
X7R 0805
2.0 nH
0.1 a 0.47 uF
27 %
X7R 0603
1.8 nH
0.01 a 0.047 uF
55 %
X7R 0402
1.5nH
La figura 11 (a) muestra el circuito equivalente del sistema de distribución de potencia
con un condensador de desacoplo12 (recuadro gris). El circuito equivalente de este último se
compone de un condensador ideal C y una inductancia en serie Ls . Ls es una característica
propia del encapsulado del condensador, motivo por el cual al elegir un condensador para este
propósito (desacoplo), debe escogerse aquel con un encapsulado del menor tamaño posible.
Igualmente, para un mismo encapsulado debe elegirse el condensador de mayor capacitancia.
L1 generalmente es de un valor relativamente alto, dado que es difícil ubicar la fuente de
voltaje cerca de cada uno de los circuitos integrados. L2 es la inductancia entre el condensador y los pines de alimentación del circuito integrado. Esta inductancia puede minimizarse
ubicando el condensador lo más cerca posible de los pines de alimentación de CI. Esto último, no solo para minimizar la inductancia, sino también para minimizar el tiempo que toman
los condensadores en entregar corriente al CI. El tiempo es igual a la velocidad de propagación en el medio por el doble de la distancia entre el condensador y el CI. A una distancia
de λ/4 o superior, el condensador no puede entregar energía al CI. Una distancia adecuada
es < λ/40 [Xapp623].
La figura 11 (b) muestra la impedancia del condensador equivalente en función de la
frecuencia. A frecuencias bajo la frecuencia de resonancia indicada en el eje de las abscisas,
el condensador se comporta como tal, mientras que por sobre la frecuencia de resonancia
se comporta como inductancia. A la frecuencia de resonancia el condensador presenta su
mínima impedancia, logrando su efectividad máxima.
Una regla empírica para el número y tamaño de los condensadores es agregar al menos,
uno por cada par de pines de alimentación y tierra, ubicando los condensadores de encapsulado más pequeños más cerca de estos pines, y distribuido según el cuadro 2.
La figura 12 muestra un ejemplo de la impedancia total de los condensadores de desacoplo del sistema de distribución de poder en un circuito. Al utilizar distintas capacitancias,
encapsulados y factores de calidad Q, se obtiene un amplio ancho de banda efectivo.
12
Nombre con el cual se conocen los condensadores utilizados con el fin de proveer corrientes transitorias.
27
Z
(Ohm)
7 x 2.2uF
X7R 0805
13 x 0.22uF
X7R 0603
26 x 0.022uF
X7R 0402
2 x 680uF
Tantalum E
1
0.1
0.01
10
1
100
1000
F
(MHz)
Figura 12: Ejemplo de impedancia versus frecuencia de un sistema de distribución de potencia [Xapp623].
Vcc
GND
Via al plano
de tierra
(A)
(B)
Figura 13: Causa del Rebote de tierra.
2.2.8.
Rebote de Tierra (Ground Bounce)
El rebote de tierra es un fenómeno que se debe a la inductancia entra el plano de tierra
de un circuito impreso y la tierra interna a un circuito integrado. Esta inductancia depende
de la longitud de la conexión entre ambas tierras. A esta longitud contribuyen la longitud del
pin del circuito integrado y la longitud de la pista desde el pin hasta el plano de tierra. Esta
situación se ilustra en la figura 13 (A).
El fenómeno que ocurre a causa de esta inductancia, es que el voltaje en la tierra interna al circuito integrado puede variar considerablemente con respecto a la tierra del circuito
impreso. Cuando ocurre una transición lógica de “0” a “1” en la salida de la compuerta, la
corriente que fluye entre la tierra interna y externa presenta un dI/dt muy grande y de signo
28
negativo, causando que el voltaje en la tierra interna al CI con respecto a la tierra del circuito
impreso se haga negativa. Del mismo modo, al haber una transición de “1” a “0” en la salida,
ocurre un dI/dt grande de signo positivo, causando un incremento en el voltaje de la tierra
interna con respecto a la del circuito impreso.
El efecto que producen estos cambios de voltaje en la tierra interna sobre el voltaje de
salida de las compuertas es pequeño, sin embargo, como se puede observar en la figura 13 (B),
el voltaje de entrada de la compuerta es comparado con un valor de referencia que es función
del voltaje de la barra de tierra interna al circuito integrado (que se encuentra conectada con la
tierra del circuito impreso mediante una inductancia). Por, las tanto variaciones en el voltaje
de tierra interno pueden inducir a una interpretación errónea del valor lógico de entrada.
En grandes circuitos integrados como los FPGAs, generalmente existen varios pines de
entrada y salida por cada pin de tierra. Por lo tanto, la problemática del rebote de tierra es
proporcional al número de pines de salida que estén simultáneamente cambiando de estado
lógico. Generalmente los fabricantes especifican el número máximo de pines de salida por
cada pin de tierra que pueden estar simultáneamente en transición y que mantienen el rebote
de tierra dentro de márgenes aceptables. Este criterio sólo considera la inductancia de los
pines de tierra, la que es constante, mientras que la inductancia de la pista que conecta el pin
de tierra al plano de tierra del circuito impreso, puede ser varias veces mayor, debiendo, por
lo tanto, cuidarse de mantener su longitud tan corta como sea posible.
2.2.9.
Simulación y modelamiento
La simulación del comportamiento analógico de los circuitos digitales requiere poder
modelar, cuantitativa y temporalmente, sobretodo, las etapas de entrada y salida de las compuertas digitales, así como las líneas de transmisión que las interconectan.
Las etapas de entrada y salida generalmente se modelan mediante estructuras SPICE,
que representan la interconexión de elementos circuitales y sus características técnicas, o
bien, mediante modelos IBIS. Estos últimos describen el comportamiento de una compuerta
solamente mediante tablas de voltaje y corriente en función del tiempo, y tienen la ventaja
para el fabricante de no revelar cómo están construidas dichas compuertas.
Las líneas de transmisión son elementos pasivos lineales (Combinaciones R, L y C)
aunque distribuidos, y existen como elementos discretos bajo SPICE y otros simuladores
de circuitos. Como se ha ilustrado anteriormente, sus parámetros son fáciles de calcular,
sin embargo, en un circuito impreso pueden existir interacciones entre múltiples líneas de
transmisión, o entre líneas de transmisión y otros elementos, como son por ejemplo las vías,
29
interrupciones en los planos de tierra, etc. Estos fenómenos, aunque generalmente de carácter
lineal, son mucho más difíciles de predecir y cuantificar, y más aún, de modelar mediante los
elementos provistos por los simuladores de circuitos basados en SPICE o similares.
Cuando las frecuencias involucradas en un circuito son muy altas comienzan a cobrar
relevancia aspectos no-lineales como el efecto pelicular y las pérdidas en el dieléctrico. Ambos son efectos resistivos en función de la frecuencia, aunque respectivamente, en serie o en
paralelo con respecto a la línea.
Cuando se combinan muchos efectos como los recién descritos, el modelo SPICE de
línea de transmisión resulta poco preciso y es preferible utilizar software especializado en el
modelamiento de líneas de transmisión. Ver 3.4.2.
En casos de complejidad extrema, es a veces necesario recurrir a la simulación electromagnética, donde ya no se requiere utilizar equivalentes circuitales de líneas de transmisión
y otros elementos presentes en un circuito impreso. En este caso, se modela mediante estructuras físicas tridimensionales de distintos materiales bajo el estímulo de ondas electromagnéticas. Naturalmente, este es el método más exacto y preciso, sin embargo, exige modelar el
circuito impreso como un objeto físico tridimensional. Esto que puede tomar mucho tiempo si
es que el software de diseño de la PCB no facilita la trasformación. Requiere además, largos
tiempos de simulación y los programas disponibles son extremadamente costosos. Ejemplos de este tipo de programas son Ansoft Designer, utilizado en la simulación de estructuras
planares como PCBs, y Ansoft HFSS, que permite la simulación de estructuras tridimensionales complejas. Ver www.ansoft.com.
2.2.10.
Conclusión
La teoría recién presentada, como en todas las otras disciplinas de la ingeniería, puede
ser aplicada en forma analítica, experimental o en simulación para resolver un problema. Entre los métodos analíticos aplicables al estudio de la dimensión analógica de la electrónica
digital es poco lo que se puede extraer que no haya sido ya resuelto y que se aplique como
norma. Si se entienden bien los fundamentos y modos de aplicación de estas normas, ellas
pueden ser suficientes para resolver problemas y diseñar sistemas de un gran nivel de complejidad, es decir, circuitos con velocidades de reloj de hasta GigaHertz de frecuencia, y así
es como se ha procedido en el diseño del hardware que acompaña esta memoria. Durante el
proceso de diseño del proyecto práctico de esta memoria, se ha recurrido a la simulación de
casos extremos en que se transgreden estas normas, intentando verificar la funcionalidad y
el desempeño. Por último, las simulaciones han revelado un margen de seguridad tal, que no
30
se ha requerido validarlas mediante el uso intensivo de instrumentos de medición, salvo para
ilustrar algunos conceptos.
El análisis instrumental, al igual que la simulación, se vuelven indispensables cuando
ocurren o se sospecha que pueden ocurrir muchos de los fenómenos antes descritos. En sistemas complejos y a GigaHertz de frecuencias de reloj, recurrir a estos métodos se vuelve
extremadamente costoso. Los equipos de medición, ya sea el osciloscopio, analizador de espectro, analizador de red, u otro, deben ser capaces de medir fidedignamente varias veces
mayor a la frecuencia de reloj para dar cuenta de la integridad de las señales. A la vez, estudiar un problema de diseño mediante experimentación puede requerir el desarrollo de sucesivos
prototipos y otros subsistemas de prueba, incrementando todavía más el costo y el tiempo de
desarrollo.
Por otro lado, la simulación electromagnética, que es la opción actual para estudiar el
comportamiento de los sistemas digitales más complejos, involucra la adquisición de licencias de software cuyo costo es del orden de cientos de miles de dólares. A demás, toma
mucho tiempo modelar los circuitos en estructuras tridimensionales de múltiples materiales,
y se requiere de una poderosa infraestructura computacional para resolver estos modelos.
En resumen, cada ingeniero debe aprovechar las oportunidades de involucrarse en el desarrollo de hardware, y aprender de los éxitos y fracasos propios y ajenos para poder desarrollar un conjunto de normas propias. Ésta deberían permitirle diseñar en forma predominantemente eficiente y segura y, a la vez, minimizar costos en estudios de laboratorio y licencias de
software. [Johnson93] presenta varias configuraciones experimentales que son simples y de
bajo costo de implementación. Además existe software de simulación gratis aunque limitado.
Ambas son alternativas que deben ser tomadas en consideración.
31
3.
Diseño
El diseño y a la implementación, son las dos etapas conducentes a obtener el producto
entregado junto a esta memoria. La etapa de diseño puede descomponerse en 3 principales
niveles de abstracción: el nivel de sistema o funcional, el circuital esquemático y el físico o
pre-implementacional. Ese orden de abstracción descendente en el proceso es imperativo, no
solo por el ordenamiento jerárquico de las distintas etapas, sino además por la combinación
de dicha jerarquía con la naturaleza diferente de cada nivel de abstracción. Ésta metodología
difiere de aquella que se utiliza en el diseño en otras disciplinas, como es el caso del desarrollo
de software, en que ambas direcciones de nivel de abstracción son válidas al desarrollar un
proyecto.
Las tres etapas de diseño pueden segmentarse a la vez en niveles de abstracción y desarrollarse en nivel de abstracción creciente o decreciente. Esto se debe a que los segmentos de
una misma etapa son de igual naturaleza.
3.1.
Diseño del Sistema
La plataforma de desarrollo está representada en un diagrama de bloques en la figura
14. Ésta cuenta con 2 unidades de procesamiento, una de bajo nivel (de abstracción) para
procesamiento paralelo de alto desempeño y que consiste en un FPGA, y otra de alto nivel para procesos secuenciales, compuesta por un microcontrolador. Estos son los elementos
que permiten a quien desarrolle aplicaciones con este hardware, implementar sus diseños vía
software. Otras unidades en la plataforma permiten el almacenamiento de datos y la comunicación con el exterior.
3.1.1.
FPGA, Configuración y Alimentación
El elemento principal del sistema es el FPGA. Se ha optado por el FPGA Spartan 3E de
Xilinx en su versión de 250k compuertas, ya que es el más grande (según número de CLBs)
en encapsulado QFP13 - con pines en su periferia, a diferencia del encapsulado BGA14 que
tiene contactos en su cara posterior y es mucho más difícil de soldar - y que es soportado por
el software de desarrollo gratuito de Xilinx. Los principales recursos con los que cuenta este
dispositivo se resumen a continuación:
Número equivalente de macroceldas: 5508
13
14
QFP: Quad Flat Pack.
BGA: Ball Grid Array.
32
Figura 14: Diagrama de bloques del diseño
CLBs (Configurable Logic Blocks): 612
Los Bloques Lógicos Configurables contienen LUTs (Look-Up Tables) que implementan lógica combinacional, además de elementos de almacenamiento como Flip-Flops
o Latches, y que permiten el desarrollo de lógica secuencial.
Slices: 2448
Cada CLB está compuesto de 4 Slices, que replican exactamente el mismo hardware.
RAM distribuida: 38Kb
Elementos de memoria distribuida a través de los CLBs del dispositivo.
RAM en bloque: 216Kb
Bloques exclusivos de 18Kb de memoria RAM de doble puerto (un puerto para entrada
y otro para salida).
Multiplicadores dedicados: 12
Multiplicadores de 18 x 18 bits implementados mediante recursos exclusivos.
DCMs (Digital Clock Managers): 4
Los Administradores Digitales de Reloj proveen distribución, retardo, multiplicación,
división y ajuste de fase de las señales de reloj.
33
Máx. I/O: 17215
Los pines de entrada y salida permiten una amplia variedad de estándares digitales,
facilitando en gran medida la interfaz con otros dispositivos.
Max. I/O diferenciales: 6816
Estos datos permiten estimar la complejidad y tamaño de los diseños que pueden ser implementados sobre este dispositivo, aunque la práctica común es diseñar primero la aplicación y
luego seleccionar el dispositivo. Naturalmente, en una plataforma de propósito general esto
no es posible. Información detallada del dispositivo puede encontrarse en la hoja de datos
[DS312].
La gran mayoría de los FPGAs tiene memoria de configuración (aquella donde se almacena el programa que determina su funcionalidad) de carácter volátil, es decir, que no retiene
su configuración cuando se desconecta el voltaje de alimentación. Por este motivo, la mayoría de los diseños con FPGA incorpora una memoria EPROM en el circuito impreso, con
el propósito de almacenar la configuración del FPGA. El FPGA la leerá cada vez que se
le aplique voltaje y entre en funcionamiento. Para este propósito pueden utilizarse distintos
tipos de EPROM, sin embargo, el más común es aquel para operar en modo “Master Serial”,
donde el FPGA inicia la comunicación con le EPROM y lee los datos serialmente. Xilinx
provee memorias especializadas para este propósito. Esta ha sido la opción en el diseño de la
plataforma. La hoja de datos de cada FPGA indica el tamaño requerido de la EPROM para
almacenar su configuración.
Para cargar la configuración en el FPGA existen dos métodos en este diseño. En el
primero, el FPGA lee la configuración de la EPROM automáticamente al inicializarse. En
el segundo, la configuración puede escribirse externamente mediante la interfaz JTAG (Joint
Test Action Group, un estándar de comunicación y monitoreo de circuitos). Para escribir la
configuración en la EPROM también se utiliza JTAG. Además, se ha incluido un chip de
comunicación USB que permite comunicación JTAG, en caso que el usuario desarrollador
quisiera implementar software para utilizar USB como medio de programación.
El FPGA requiere 3 distintos voltajes de alimentación, 1.2V para su operación interna,
2.5V para configuración, y 3.3V para entrada y salida (este último es una opción de diseño
y puede tomar otros valores). Ello determina, en parte, los requerimientos para la fuente de
15
El diseño de la plataforma ya ha hecho uso de parte de estos recursos, por lo que la disponibilidad para el
usuario es menor.
16
Ídem.
34
poder. En este caso se ha optado por generarlos a partir de un voltaje de alimentación principal
de 5V.
Probablemente la aplicación más simple de un FPGA es la de matriz de interconexión.
Por este motivo, en la figura 14 se lo ubica en el centro con todos los otros dispositivos a su
alrededor y ninguno de ellos conectado directamente. En el FPGA estas interconexiones se
pueden implementar de manera flexible y óptima.
3.1.2.
Periféricos
Dos elementos esenciales en sistemas embedidos son el almacenamientos de datos y las
comunicaciones. Por este motivo se han incorporado 3 tipos de memoria: 4Mb de almacenamiento no volátil con tecnología Flash, y dos tipos de memoria RAM: SRAM (100MHz)
y SDRAM (133MHz). La ventaja de la primera es que es muy fácil uso en términos de interfaz lógica con el dispositivo al cual se comunica, peor su tamaño (en bytes) y velocidad
son relativamente reducidos debido a la tecnología utilizada en su implementación y estructura interna. La segunda, tiene las ventajas de ser de gran tamaño y generalmente operar más
rápido que las SRAM. Sin embargo, la interfaz de esta última es compleja, requiriendo que
el usuario desarrolle código adicional para acceder a sus datos con una sencillez equivalente
a la de la SRAM.
RS232 y USB son las interfaces de comunicación incorporadas. El circuito integrado USB
elegido, el FT2232 de FTDI (www.ftdichip.com), es extremadamente flexible y cuenta con
2 interfases independientes que pueden operar, desde el punto de vista del chip, como doble
FIFO, una para entrada y otra para salida, o en modo Bit-Bang, donde los pines de cada interfaz pueden usarse como pines de entrada y salida en forma arbitraria. Adicionalmente, una de
las interfases permite implementar distintos tipos de protocolos seriales, incluido JTAG. Por
este motivo, se ha diseñado en el circuito la posibilidad de conectar el chip USB como parte
de la cadena JTAG. Desde el punto de vista del PC, el fabricante provee controladores que
permiten acceder al dispositivo como si fuera un puerto serial, minimizando el desarrollo de
software requerido, y también provee una interfaz de programación para acceder a funciones
más complejas.
Se han incorporado también al diseño dos convertidores análogo-digitales (ADC) AD9283
de Analog Devices (www.analog.com) cuyas características principales son:
8 bits de resolución de cuantización
100 Mega-muestras por segundo
35
Circuito Track & Hold incorporado
475 MHz de ancho de banda analógico (-3dB).
SNR = 46.5 dB @ 41 MHz a 100M-muestras/seg.
Rango de entrada de 1Vp-p.
Voltaje de referencia interno.
Estas características lo hacen muy versátil, ya que este ADC mantiene un excelente desempeño en los distintos factores que definen su desempeño global y a lo largo de todo su rango de
operación. En [AN282] se explican en detalle los parámetros de desempeño, tipos de convertidores análogo-digitales, y los efectos prácticos bajo distintas aplicaciones. Este documento
permite interpretar en profundidad todas las características técnicas de estos convertidores,
descritas en la lista anterior y en la hoja de datos del dispositivo.
Es buena práctica incorporar los ADCs en el lado digital de un sistema de procesamiento
de señales. A velocidades de reloj de 100MHz la integridad de señal (digital) se puede ver
muy deteriorada si el dispositivo está lejos del FPGA. Si, por el contrario, se incorporan los
ADCs en una placa de procesamiento analógico externa, puede contaminarse severamente la
integridad de las señales analógicas en dicha placa debido al bus de datos digitales que debe
llegar hasta ella.
3.1.3.
Microcontrolador
Se ha incorporado un microcontrolador de 8 bits, el PIC18F458 de Microchip (www.microchip.com)
para realizar tareas de alto nivel (de abstracción), tareas que al ser programadas en el FPGA,
pueden resultar tediosas y requerir una innecesaria cantidad de tiempo y recursos. Tener un
microcontrolador en la plataforma de desarrollo permite concentrarse en el motivo principal
del proyecto basado en lógica programable. Al mismo tiempo, una interesante metodología
de desarrollo puede ser la de implementar funcionalidad prototipo en el PIC para transferirla,
en etapas posteriores, al FPGA cuando se requiera mejorar el desempeño. También constituye
un desafío la forma en que se reparten en una aplicación, las tareas entre el microcontrolador,
un dispositivo basado en una CPU y un programa, y un dispositivo de lógica programable
como el FPGA. Este desafío involucra eficiencia y metodología en el diseño y desempeño
final.
36
El microcontrolador puede acelerar y simplificar el proceso de desarrollo de aplicaciones
ya que por una parte, es posible programarlo en lenguajes de alto nivel y, por otra, que muchos
ingenieros están familiarizados con la arquitectura del PIC.
Las características principales de este dispositivo se señalan a continuación:
Memoria de programa: 32KB (16384 Instrucciones)
Memoria RAM: 1536 Bytes
Memoria EPROM: 256 Bytes
I/O: 3317
ADC: 8 Canales de 10 bits de resolución
Comparadores Analógicos: 2
CCP (Capture, Compare and PWM (Captura, Comparación y Modulación por ancho
de pulso))
Puerto serial síncrono que soporta: SPI (Serial Peripheral Interface (Interfaz de periférico serial)) e I2 C Maestro
Hasta 10 Mips18
Interrupciones con prioridad configurable
Multiplicador de 8 x 8 bits de un solo ciclo de instrucción
3 Pines de interrupción externa
3 Contadores, 2 de 16 bits, 1 de 8 bits
Puerto serial asíncrono
Interfaz CAN19 2.0B hasta 1 Mbps
Ejemplos en la distribución de tareas entre una CPU y un FPGA son muchos instrumentos de
medición o procesamiento de datos, en que el FPGA realiza la medición y cálculos, mientras
que la CPU se encarga de la interfaz del usuario y otras funcionalidades secundarias del
aparato.
17
El diseño de la plataforma ya ha hecho uso de parte de estos recursos, por lo que la disponibilidad para el
usuario es menor.
18
Millones de instrucciones por segundo.
19
Controller Area Network, un estándar de comunicaciones industriales desarrollado por Bosch.
37
3.2.
Diseño del Circuito
Esta etapa de diseño permite implementar la funcionalidad explicitada en la sección anterior, en función de los requerimientos específicos de cada componente. Para lograr esto,
primero deben haberse elegido los componentes adecuados que permitan y faciliten la interfaz entre ellos, así como la implementación de la funcionalidad deseada. Esto requiere estudiar en profundidad las especificaciones técnicas (hojas de datos) de todos los componentes
del circuito. Es ésta la etapa en que se cometen la mayor cantidad de errores de diseño, por
lo tanto es relevante recalcar la importancia de este proceso.
Al mismo tiempo, debe considerarse cómo afectarán al diseño del circuito impreso las
decisiones de diseño que se toman a nivel de circuito . Las huellas (foot-prints) de cada
componente deben diseñarse u obtenerse de una librería de componentes, considerándose
la disponibilidad del mercado. Generalmente, es conveniente adquirir los componentes con
anticipación para poder realizar mediciones para diseñar la huella.
El diseño de circuitos digitales es relativamente sencillo comparado con el diseño de
circuitos analógicos a nivel esquemático. Por lo general el diseñador debe concentrarse más
que nada en cómo satisfacer mejor las especificaciones de sistema. Más aún, en el caso de
una plataforma multipropósito como ésta, ello es crítico. Por otra parte, las hojas de datos
de los distintos componentes describen el circuito de soporte que debe implementarse para
que aquellos operen correctamente. El diseñador debe mantenerse dentro de los márgenes
especificados y si, por algún motivo, debe o desea modificar estos circuitos, es importante
que comprenda su propósito para lograr mantener la funcionalidad con su propio diseño.
En esta sección se describen algunas estrategias utilizadas y algunas partes del circuito
que son relevantes al funcionamiento y uso del hardware desarrollado.
3.2.1.
Diseño resistente a errores
Debe tenerse presente que en proyectos de este nivel de complejidad los errores de diseño
son frecuentes, e incluir en el circuito recursos que permitan implementar modificaciones
posteriores a la fabricación del circuito impreso. En este caso, algunos de esto recursos son:
Resistencias de 0Ω: Éstas permiten cortocircuitar dos segmentos o dejarlos en circuito
abierto si no son soldadas en su lugar. Pueden también ser reemplazadas por resistencias de valor finito si fuese necesario.
Puentes de Soldadura: Cumplen el mismo propósito de las resistencias de 0Ω, sin
embargo, permiten mayor paso de corriente.
38
Jumpers: Cumplen el mismo propósito que las resistencias de 0Ω, sin embargo, los
cambios pueden ser realizados por el usuario sin requerir soldar o de-soldar componentes.
Usar el FPGA como matriz de interconexión: Al conectar la gran mayoría de los
componentes al FPGA, debido a su reprogramabilidad, éste puede usarse para interconectar componentes vía software, lo que flexibiliza el diseño.
Resistencias pull-up y pull-down: Si se estima que eventualmente podrían requerirse,
pueden incluirse en el diseño. Si finalmente no se requieren, simplemente no son soldadas en su lugar.
3.2.2.
JTAG y configuración del FPGA a 3.3V
La interfaz JTAG y la de configuración (comunicación con la EPROM de configuración)
del Spartan 3E utilizan 2.5V. Algunos pines del FPGA son dedicados a estas tareas, pero
otros, luego de que la configuración del FPGA ha concluido, pueden utilizarse como pines
de E/S. La configuración estos pines para trabajar con 2.5V, requiere alimentar un banco de
E/S20 completo a 2.5V, obligando al usuario a trabajar con todos los pines de ese banco a
dicho voltaje.
Es deseable evitar esta situación por dos motivos. Primero, porque en una plataforma de
desarrollo es preferible usar el/los estándares de E/S más comunes, que son LVCMOS33 y
LVTTL33 que operan a 3.3V. Segundo, porque es más fácil encontrar programadores JTAG
que operen a 3.3V que aquellos que operan a 2.5V.
Para lograr la operación de todos los bancos y la interfaz JTAG a 3.3V se han implementado las modificaciones a la interfaz del FPGA, su memoria de configuración y el circuito
de soporte según se describe en [Xapp453]. Dichas modificaciones se pueden observar en el
diagrama esquemático del proyecto (Ver Apéndice), figura 37.
3.2.3.
Controlador USB en la cadena JTAG
Como ya se ha mencionado, el chip USB puede ser usado como dispositivo maestro o
programador de la cadena JTAG. Sin embargo, sólo puede existir solo un dispositivo maestro
en el circuito, por lo tanto, por defecto, este chip se ha dejado fuera de la cadena, aunque con
la capacidad de incorporarlo, exclusivamente mediante configuración con jumpers.
20
Los pines de E/S del XC3S250E están separados en 4 bancos, los que pueden alimentarse con distintos
voltajes para operar mediante distintos estándares de E/S.
39
Normalmente, los pines 3 y 5 del conector JTAG_TAP (Ver figura 39 del esquemático
del proyecto en el Apéndice) se cortocircuitan dejando todos los demás desconectados. Esto
deja al chip USB fuera de la cadena. Para incorporarlo, es necesario cortocircuitar los pines
2 (TDI) y 3 (TDO) del conector JTAG (Figura 37), y cortocircuitar los pares 1 y 2, 3 y 4, 5 y
6, 7 y 8, en el conector JTAG_TAP.
Con esta modificación debiera ser evidente cómo se ha reemplazado el conector JTAG
por el chip USB.
3.2.4.
USB con alimentaciones del bus USB y de la placa
El chip USB requiere una alimentación de 5V para la sección de comunicación con el
BUS serial USB y de 3.3V o 5V para sus buses de datos (interfaz con otros dispositivos
TTL/CMOS). El bus USB provee 5V y hasta 500mA de corriente, por lo que puede usarse
esta u otra fuente regulada de 5V para alimentar dicha sección del chip.
La hoja de datos del dispositivo proporciona esquemáticos para la distribución de poder
con las siguientes configuraciones:
Cuadro 3: Fuentes de poder para las secciones de comunicación USB y TTL/CMOS del chip
USB.
Comunicación USB
TTL/CMOS
Bus USB (5V)
Bus USB (5V)
Bus USB (5V)
Bus USB regulado a 3.3V
Externa a 5V
Externa de 5V
Externa a 5V
Externa de 5V regulada a 3.3V
En el diseño se ha deseado usar el bus USB como fuente de 5V para la comunicación
USB. La placa puede ser alimentada externamente no sólo con 5V regulados, sino que acepta
leves variaciones, las que no serían apropiadas para alimentar el chip. Mientras tanto, se ha
deseado alimentar la interfaz TTL/CMOS del chip mediante los 3.3V provistos por la placa.
Es innecesario utilizar potencia adicional del bus USB y agregar otro regulador de 3.3V a
la placa para obtener dicho voltaje. Esta configuración, con fuentes independientes, no se
incluye entre los esquemáticos guía de la hoja de datos.
Sobre la base del segundo caso de la tabla se improvisó con éxito una solución como la
deseada. Posteriormente, se encontró en la página web del fabricante una nota que sugería
no utilizar fuentes independientes. Sin embargo, el único inconveniente encontrado consiste
en que el chip completo se resetea al encenderse o apagarse la fuente de 3.3V del circuito, lo
que no tiene consecuencias operacionales.
40
3.2.5.
Circuitos de Reseteo
En el diseño de este proyecto el microcontrolador y el FPGA pueden resetearse independientemente mediante pulsadores, mutuamente uno al otro, o desde una conexión externa.
El chip USB también puede ser reseteado desde el FPGA. Los pines de reset de estos dispositivos son todos “Active Low”, por lo que se diseñan para estar normalmente en estado
lógico “1” , mediante una resistencia pull-up y un condensador a tierra para obtener un filtro
pasa-bajos.
Esta estructura facilita la incorporación de fuentes de reseteo externas e independientes
mediante un circuito como el que se observa en la figura 15
Figura 15: Circuito externo de reset
Este ejemplo, extraído del esquemático del proyecto (figura 37), utiliza un transistor de
propósito general con la suficiente capacidad de corriente para descargar rápidamente el condensador del filtro - si es que existe - y así llevar el pin de Reset a tierra gracias a la caída
de voltaje que se produce en la resistencia pull-up. La resistencia de la base a tierra (R120
en este caso), asegura que el transistor esté en corte si es que la fuente externa de reset está
“flotando”. Ésta debe ser considerablemente más grande que la resistencia en series (R119)
para no producir entre ambas un divisor de voltaje muy grande. El propósito de esta resistencia es limitar la corriente y debe calcularse en función de la ganancia del transistor elegido,
la resistencia pull-up, el tamaño del condensador del filtro y la rapidez con que se desea que
el pin de reset llegue a un voltaje lo suficientemente bajo que resetee el dispositivo.
3.2.6.
Buses de las memorias SRAM y SDRAM
Estas memorias comparten el bus de dirección y el bus de datos. Sus líneas de control son
independientes y llevan resistencias pull-up en su pin de activación para prevenir colisiones.
41
3.2.7.
Configuración de la fuente de poder
La placa debe ser alimentada por una fuente regulada de 5,0 ± 0,5V. En su entrada comprende un diodo Zenner de 5.6V y 3W entre los terminales de entrada. De esta manera, si la
fuente principal de alimentación cuenta con limitador de corriente, el diodo proveerá protección en el caso que se supere el máximo voltaje de alimentación o que se conecte la fuente
en polaridad inversa.
A partir del voltaje de alimentación principal se generan:
3.3V para la alimentación de todos los dispositivos mediante un regulador switching o
conmutado capaz de entregar hasta 2.5A.
2.5V para la configuración del FPGA mediante un regulador lineal tipo Low-dropout.
3.0V para la alimentación la parte analógica de los convertidores A/D mediante un
regulador lineal tipo Low-dropout.
Adicionalmente, y a partir de los 3.3V ya generados, se generan 1.2V para la lógica interna
del FPGA, también mediante un regulador lineal tipo Low-dropout, capaz de entregar hasta
800mA.
Las fuentes de 5V, 3.3V, 2.5V y 1.2V alimentan LEDs para indicar su funcionamiento.
3.2.8.
ICSP a 5V y PIC alimentado con 3.3V
El PIC18F458 puede operar con un voltaje de alimentación entre 1.8V y 6V. Como la
plataforma opera con todas sus señales digitales a 3.3V, el PIC debe, naturalmente, operarse
al mismo voltaje.
Sin embargo, durante su proceso de programación, el PIC debe ser alimentado con 5V
que son entregados por el programador. Por este motivo, la alimentación normal del PIC se
realiza a través de un diodo Schottky de potencia. Esto último para que al aplicar los 5V en
los pines de alimentación del PIC, este voltaje no se propague al resto del circuito y cause un
corto-circuito con la fuente de 3.3V de la placa. Ver el esquemático del proyecto, figura 40.
Este diodo tiene el efecto de reducir el voltaje de alimentación del PIC cuando éste demanda mucha corriente. Cuando la corriente demandada es mínima, el voltaje de alimentación es
de aproximadamente 3V. Se han observado casos, sin embargo, en que éste se ha reducido casi
a 2.5V. Esto no es problema para la operación del PIC y generalmente tampoco en su interfaz
con el FPGA, ya que el umbral entre estados lógicos de este dispositivo es el valor medio del
voltaje de alimentación del banco de E/S, que en este caso corresponde a 3,3V /2 = 1,65V .
42
Por si la caída de voltaje en el diodo causase problemas, se ha incluido un jumper (JP63)
en paralelo al diodo con el fin de cortocircuitarlo. Es importante recordar que hay que quitarlo
cuando se programe el microcontrolador.
Otro aspecto a considerar durante la programación de PIC es que se aplican 13V en su
pin de reset o MCLR/Vpp. Se han tomado las precauciones en el diseño para que este voltaje
no se propague al resto del circuito.
3.2.9.
Particularidades en el circuito de conversión A/D
El principal objetivo al diseñar un circuito de conversión análogo-digital, es mantener la
integridad de la señal analógica. Para este propósito, se ha tenido gran cuidado en el sistema
de alimentación, utilizando varios condensadores de filtro, antes y después de la regulación,
y una ferrita en la entrada para eliminar las componentes de alta frecuencia que se pudieran
haber propagado a la fuente de 5V debido a la fuente conmutada de 3.3V o las transiciones
digitales en la placa.
Luego, por simplicidad, se optó por utilizar los convertidores con su entrada analógica
referida a tierra, aún cuando pudiese haberse configurado la entrada en forma diferencial.
En el lado digital, las líneas PWRDOWN, que permiten deshabilitar el dispositivo (ActiveLow), se conectaron vía resistencias pull-up a Vcc y se incorporó un filtro RC para evitar que
el ADC se resetease por ruido inducido en dicha línea.
3.3.
Diseño del PCB
3.3.1.
Restricciones al diseño
Lo primero a considerar son las posibles restricciones a los objetivos planteados. La versatilidad en el diseño ya se ha establecido a nivel de sistema. Al diseñar la PCB los parámetros
a optimizar son costo, tamaño y desempeño. Este último, se refiere principalmente a la integridad de señal, la cual es la principal limitante a las altas velocidades de reloj. Como se
ha ilustrado anteriormente, la integridad de señal requiere de conexiones cortas entre componentes (dado que no es factible incluir terminaciones en todas las líneas), lo que naturalmente
hace que el circuito impreso sea más pequeño (menor superficie). Entonces, el tamaño y el
desempeño se optimizan mutuamente. Sin embargo, comprimir un circuito impreso en un
área menor, implica por lo general, aumentar el número de capas de cobre. El número de
capas de cobre es el factor principal en el costo de la PCB. A la vez la PCB constituye gran
parte del costo del circuito. Por este motivo el costo juega en sentido opuesto a los otros dos
43
Cuadro 4: Restricciones técnicas de Advanced Circuits para la promoción de prototipos de 4
capas.
Parámetro
Restricción
Tiempo de Fabricación
5 días
Número de capas
4
Dieléctrico
FR-4
Espesor del cobre
1 oz/f t2 (0.035mm)
Ancho/Espacio entre líneas >0.006” (0.15mm)
Diámetro de agujeros
>0.015” (0.38mm)
factores mencionados.
Las empresas en el rubro de fabricación de circuitos impresos en los EE.UU. generalmente ofrecen promociones para la fabricación de prototipos en 2 y en 4 capas. Más de 4
capas implica un costo desproporcionadamente mayor.
Considerando el número de componentes (~250), de pines en cada uno (~1000 en total),
y el número de distintos voltajes de alimentación requeridos (5), se ha estimado que no son
necesarias más de 4 capas. Es prácticamente imposible implementar el diseño en sólo 2 capas
a menos que se utilice una placa muy grande, lo que requeriría pistas muy largas y con muchos
cambios de lado (capa). Esto deterioraría el desempeño.
La empresa que se seleccionó en el presente trabajo para fabricar la placa es Advanced
Circuits (www.4pcb.com) ya que sus precios son razonables y varios de los ingenieros que
han apoyado este trabajo han tenido buena experiencia con esta empresa. El precio por la
fabricación de prototipos de 4 capas no es más que el doble del precio de aquellos de 2
capas. Esta elección implica las restricciones técnicas impuestas por la compañía para esta
promoción. Éstas se encuentran resumidas en la tabla 4. El grosor de las distintas capas,
la elección de utilizar las pistas exteriores para las señales y las interiores para la tierra y
alimentación pueden observarse en la figura 16.
A partir de esta información se ha elegido arbitrariamente un ancho de pista de 0.010”
(0.254 mm) y una separación entre pistas de al menos 0.010”, lo que cumple con las restricciones con un buen margen de seguridad, y se adecua bien al ancho y separación de los pines
de todos los circuitos integrados en este diseño. Las vías se han diseñado con un agujero de
0.015” de diámetro y un diámetro exterior de 0.028”.
Con esta información sabemos que las pistas en ambos lados forman líneas Microstrip, y
contamos con la información suficiente para calcular sus parámetros.
44
Figura 16: Geometría de la PCB de 4 capas de Advanced Circuits
Cuadro 5: Tiempos de levantamiento Tr para distintas configuraciones de los estándares de
E/S del FPGA, LVCMOS33 y LVTTL según los modelos IBIS de Xilinx, y la longitud critica
de la línea de transmisión correspondiente.
Estándar
Tr [ns] fknee [MHz] λ/6 [mm]
LVTTL_S_2
1.27
394.9
38
LVTTL_S_8
1.20
418.4
36
LVTTL_F_2
0.36
1408
11
LVTTL_F_8
0.33
1502
10
LVCMOS_S_2
1.27
394.6
38
LVCMOS_S_16 1.02
488.8
30
LVCMOS_F_2
0.36
1404
11
LVCMOS_F_16 0.32
1558
10
3.3.2.
Parámetros de las líneas de transmisión
Evaluando las fórmulas 4 y 5 con la información anterior sobre geometría y material,
obtenemos una impedancia característica Z0 = 61,6 Ω y un tiempo de propagación de Tp =
5,61 ns
.
m
El cuadro 5 muestra la longitud de la línea de transmisión, λ/6, longitud a la cual se
comienza a comportar como tal para distintos tiempos de levantamiento, y que corresponden
a distintos estándares de entrada y salida soportados por el Spartan 3E.
La información de esta tabla permite discriminar si las pistas en el diseño requieren atención especial por estar cerca o sobre el límite de λ/6, en cuyo caso deben realizarse simu-
45
laciones para verificar la integridad de la señal en ellas. Si ésta no es adecuada, puede ser
necesario redistribuir componentes para disminuir la longitud de las pistas, minimizar bifurcaciones, u otros.
3.3.3.
Proceso de diseño
El proceso de diseño de una PCB de nivel profesional es un proceso iterativo entre actualizaciones de los esquemáticos, simulaciones circuitales, simulaciones electromagnéticas y
actualizaciones de la PCB. La base teórica para el diseño de la PCB es principalmente lo que
se describe en la sección 2.2. A continuación se presentan los distintos pasos requeridos en
este proceso.
(a) Verificar todas las huellas
La huella de un componente es el patrón de cobre sobre el cual va soldado el componente
en el circuito impreso. La figura 17 muestra la huella y las dimensiones sugeridas para un
componente de empaquetado DPAK.
Esta información se encuentra en las hojas de datos de los componentes, por lo que puede
contrastarse con librerías preexistentes o pueden crearse nuevas librerías a partir de la información del fabricante. Es importante asegurarse que el componente que se adquiere finalmente tenga la geometría que se ha utilizado en la PCB.
Figura 17: Dibujo tri-dimensional y huella de un empaquetado de circuito integrado DPAK.
(b) Distribuir componentes
Consiste en ubicar los componentes del circuito estratégicamente sobre las caras de la
placa para cumplir varios propósitos. Dos de los principales son a) facilitar la interconexión
entre los componentes, tanto para minimizar el tiempo y esfuerzo de ruteo y mantener una
46
buena integridad de señal y, b) lograr un diseño espacialmente adecuado, como sería por
ejemplo, ubicar aquellos componentes destinados a la interfaz del circuito con el exterior en
la periferia de la placa.
Algunos programas computacionales realizan la distribución de componentes en forma
automática, intentando optimizar ciertas variables predefinidas o especificadas por el usuario,
como las mencionadas anteriormente.
(c) Verificar sugerencias de diseño de cada CI en hojas de datos
En muchos casos, los fabricantes ya han determinado los circuitos de soporte óptimos
para ciertos circuitos integrados, al igual que su distribución geométrica en la PCB. Particularmente, en el diseño de este circuito, el fabricante de los convertidores A/D establece una
serie de reglas y sugerencias para evitar la contaminación de la señal analógica. En el caso
de circuitos integrados digitales de alta velocidad, como el reloj de 100MHz, se especifica
dónde ubicar el condensador de desacoplo en relación al dispositivo.
(d) Establecer reglas de diseño
Entre las reglas principales se encuentran el ancho mínimo de las pistas, la distancia
mínima entre pistas de distinta señal, el diámetro mínimo de los agujeros, el diámetro mínimo
del cobre alrededor de una vía, entre muchas otras. La gran mayoría de los programas de
diseño de circuitos impresos permite definir estas reglas y muchas más.
Es importante que el software elegido para el diseño cuente con a) la factibilidad de definir
con precisión reglas de diseño en las áreas de funcionalidad electrónica, de factibilidad de
fabricación, de costos, de integridad de señal, y otros y, b) permita verificar dichas reglas
en un diseño. No es posible para una persona llevar a cabo esta tarea en forma metódica,
completa y en tiempo razonable. Un computador puede llevarla a cabo en segundos o minutos
y sin omisiones.
(e) Realizar ruteo21 tentativo
El ruteo consiste en definir geométricamente las conexiones eléctricas determinadas previamente en forma esquemática entre dispositivos. La dificultad de esta tarea radica en que,
a su vez, consiste en optimizar el proceso en varias variables con los recursos limitados de
21
Castellanización de Routing. Formalmente debiese ser Enrutamiento.
47
área y número de capas de la PCB (Tiempo y presupuesto también son restricciones de un
enfoque no técnico).
La mayoría de los paquetes de software de diseño de circuitos impresos de nivel profesional, incluye la funcionalidad de ruteo automático con optimización de parámetros, incluido el software utilizado para desarrollar este proyecto. Desafortunadamente, el proceso es tan
complejo, que el resultado del ruteo automático es generalmente poco óptimo. Por este motivo, muchos ingenieros prefieren realizar manualmente el ruteo completo o, al menos de las
partes críticas, dejando el resto al sistema de ruteo automático. Esto, si el tiempo lo permite
y/o si es absolutamente necesario, ya que el ruteo es un proceso iterativo que comprende un
gran porcentaje del diseño total de un circuito electrónico. El ruteo automático puede lograr
resultados aceptables en pocas horas o minutos, permitiendo minimizar el tiempo de salida
al mercado.
En esta etapa el ruteo es tentativo, ya que se encontrarán numerosas dificultades que harán
necesario re-intentar o cambiar una estrategia de ruteo, o volver a reacomodar componentes
para facilitar el proceso.
En el caso de la interconexión de dispositivos con un FPGA, el proceso consiste en intentar el ruteo y luego reasignar las señales del FPGA a distintos pines. Como se puede observar
en los diagramas del circuito impreso del proyecto, muchas interconexiones mantienen el orden de las señales en el FPGA según el orden de los pines del dispositivo al cual se conecta,
sin la necesidad de cambios de capa.
(f) Simular integridad de señal
En aquellos casos en que las pistas sean muy largas, tengan muchas bifurcaciones, cambios de capas en la PCB, estén enrutadas con muy poca separación entre una y otra, o
cualquier otra situación en la que se sospeche que pueda verse afectada la integridad de las
señales, puede ser necesario realizar simulaciones para comprobar esta posibilidad.
A pesar de que existe software que permite verificar la integridad de señal en todo un
circuito impreso en forma automatizada y en base a restricciones predefinidas, la relativa
simplicidad de esta PCB, es decir pocas capas, líneas de transmisión relativamente cortas,
pocas vías y pocas bifurcaciones, solo hicieron necesaria la verificación por simulación de
algunas situaciones que significaban casos extremos y, por lo tanto, representarían a todos los
otros casos si es que se cumple con la integridad de señal mínima necesaria.
La figura 18 ilustra los 3 casos que se han considerado como críticos. (a) y (b) son líneas
con 2 cargas en distintas configuraciones y relativamente largas en las que se presume puede
48
existir oscilaciones debido a las reflexiones en 3 distintos puntos. El caso (c) puede presentar un alto acoplamiento inductivo y, por lo tanto, interferencia cruzada. Estos casos se han
simulado bajo distintos escenarios.
Figura 18: Casos críticos (a) y (b): Líneas con 2 cargas. Caso (c): líneas largas paralelas.
Para simular con precisión es necesario contar a la vez con los modelos más precisos de
los distintos elementos involucrados en la simulación. Los modelos de las compuertas del
FPGA utilizados son modelos IBIS descargados del sitio web de Xilinx, mientras que las
compuertas utilizadas como carga son modelos SPICE de compuertas genéricas CMOS de
3.3V que se encuentran incluidas en la librería de componentes del programa utilizado. El
modelo de las líneas de transmisión puede especificarse mediante los parámetros ya calculados en 3.3.2, o especificando la geometría y materiales del circuito impreso. Se ha optado por
este segundo método, ya que ofrece mayor precisión que las aproximaciones provistas por las
fórmulas de la sección 3 y que se observa en la figura 19. Compárese los valores obtenidos
para Z0 , en este caso, con aquellos calculados en 3.3.2.
49
Figura 19: Especificación de la geometría y materiales del PCB para el programa HyperLynx.
La simulación de los casos (a) y (b) se ha ejecutado utilizando 3 distintos estándares de
salida configurables en el FPGA: LVCMOS33_S_6, LVCMOS33_S_12 y LVCMOS33_F_12.
Ver la tabla 5.
La figura 20 muestra el modelo de simulación para (a) donde U3.1 representa la compuerta de salida del FPGA, U4.1 representa la compuerta de entrada de la SDRAM y U6.1
la compuerta de entrada de la SRAM. TL3 y TL7 representan los segmentos de línea que interconectan estas compuertas. Los gráficos posteriores representan las formas de onda en los
distintos nodos para los 3 estándares de I/O mencionados, con una frecuencia de reloj de 75
MHz. La última fila muestra los diagramas de ojo respectivos para un tren de datos aleatorio
a la misma frecuencia.
La figura 21 muestra lo mismo para el caso (b) a excepción de los diagramas de ojo.
50
Formas de onda en fuente y cargas
utilizando una etapa de salida LVCMOS33_S_6
Formas de onda en fuente y cargas
utilizando una etapa de salida LVCMOS33_S_12
4
Formas de onda en fuente y cargas
utilizando una etapa de salida LVCMOS33_F_12
5
FPGA
SDRAM
SRAM
3.5
3
5
FPGA
SDRAM
SRAM
4
FPGA
SDRAM
SRAM
4
3
2
1.5
1
Voltaje [V]
3
Voltaje [V]
Voltage [V]
2.5
2
2
1
1
0
0.5
0
−1
0
−0.5
0
5
10
Tiempo [ns]
15
−1
20
0
5
10
Tiempo [ns]
15
−2
20
0
5
10
Tiempo [ns]
15
20
Figura 20: Simulación del caso (a)
Formas de onda en fuente y cargas
utilizando una etapa de salida LVCMOS33_S_6
Formas de onda en fuente y cargas
utilizando una etapa de salida LVCMOS33_S_6
4
Formas de onda en fuente y cargas
utilizando una etapa de salida LVCMOS33_F_12
5
FPGA
SDRAM
SRAM
3.5
3
5
FPGA
SDRAM
SRAM
4
FPGA
SDRAM
SRAM
4
3
2
1.5
1
Voltaje [V]
3
Voltaje [V]
Voltaje [V]
2.5
2
2
1
1
0
0.5
0
−1
0
−0.5
0
5
10
Tiempo [ns]
15
20
−1
0
5
10
Tiempo [ns]
15
20
Figura 21: Simulación del caso (b)
51
−2
0
5
10
Tiempo [ns]
15
20
La figura 22 muestra el modelo y los resultados de la simulación para el caso (c). Este
modelo requiere la especificación, adicional a la provista e ilustrada en la figura 19, de la
interacción entre ambas líneas de transmisión, que consta básicamente en la longitud de la
región de acoplamiento, el ancho de las pistas y la separación entre sus centros. La línea
punteada diagonal entre las líneas de la figura indica que se encuentran acopladas.
U7.1 se encuentra en el estado “0” durante toda la simulación, mientras que U3.1 oscila
a una frecuencia de 75 MHz. El objetivo es observar el efecto de TL8 sobre TL7 en la carga
(R1 y R2 están balanceadas con la impedancia de la línea). Por este motivo, denominamos la
línea TL8 como Agresor y a la TL7 como víctima.
Los gráficos de la figura muestran distintas configuraciones. La primera, utiliza un estándar LVCMOS33_S_6 y el resto de los parámetros son tal como se han construido el circuito
impreso real. Las configuraciones utilizadas en los otros casos están descritas en los títulos
de los gráficos. Compárese entre gráficos y verifique la validez de la ecuación 15.
52
Formas de onda en línea agresora y línea víctima
utilizando una etapa de salida LVCMOS33_S_6
Formas de onda en línea agresora y línea víctima
utilizando una etapa de salida LVCMOS33_F_12
0.2
0.2
0.15
0.15
Formas de onda en línea agresora y línea víctima
utilizando una etapa de salida LVCMOS33_S_6 y doble longitud
0.4
R1 (Agresor)
R2 (Víctima)
0.3
0.1
0.1
0.05
0.05
0
−0.05
Voltaje [V]
Voltage [V]
Voltaje [V]
0.2
0
0.1
−0.05
0
−0.1
−0.1
R1 (Agresor)
R2 (Víctima)
−0.15
−0.2
0
5
10
15
Tiempo [ns]
20
25
30
−0.2
0
5
10
15
Tiempo [ns]
Formas de onda en línea agresora y línea víctima
utilizando una etapa de salida LVCMOS33_S_6 y mitad de separación
20
25
30
−0.2
0
5
10
15
Tiempo [ns]
20
25
30
Formas de onda en línea agresora y línea víctima
utilizando una etapa de salida LVCMOS33_S_6, doble longitud y carga capacitiva de 10pF
0.5
R1 (Agresor)
0.4
R2 (Víctima)
0.2
R1 (Agresor)
R2 (Víctima)
0.15
0.3
0.2
Voltaje [V]
0.1
Voltaje [V]
−0.1
R1 (Agresor)
R2 (Víctima)
−0.15
0.05
0
0.1
0
−0.1
−0.2
−0.3
−0.05
−0.4
−0.1
0
5
10
15
Tiempo [ns]
20
25
−0.5
30
0
5
10
15
Tiempo [ns]
20
25
30
Figura 22: Simulación del caso (c)
(g) Reacomodar componentes o intercambiar líneas en el FPGA:
Gracias a que en el FPGA, la líneas de entrada y salida pueden configurarse vía software,
las interconexiones entre el FPGA y otros dispositivos pueden reacomodarse para facilitar el
diseño de la PCB. Por este motivo, puede observarse, en casos como las memorias RAM, que
todas las líneas de datos, control y dirección, se encuentran paralelas y en la misma cara de
la placa.
53
(h) Verificar las reglas de diseño
Aunque esta es una tarea que realiza el software de diseño, siempre es necesario inspeccionar visualmente los resultados. Imprimir el diseño en tamaño doble puede ayudar a localizar zonas críticas y potenciales problemas.
3.3.4.
Diseño flexible
Como se ha mencionado antes, es crucial tener los potenciales errores en mente al momento de diseñar. Además, en el caso de la PCB, es importante considerar las potenciales
dificultades de ensamblaje y uso que puedan surgir debido a un inadecuado diseño mecánico.
3.4.
Recursos, Técnicas y Herramientas
3.4.1.
Software de Diseño
Altium DXP (www.altium.com)
Este es un paquete de software integrado para el diseño completo de sistemas electrónicos
embedidos. Está orientado principalmente al diseño de aplicaciones con FPGAs.
Del conjunto de herramientas provistas por este software se han utilizado únicamente
el editor esquemático de circuitos y el diseñador de circuitos impresos. Ambos trabajan en
forma integrada permitiendo exportar las modificaciones al circuito de un ambiente a otro.
Altium DXP es uno de los paquetes de diseño más utilizados hoy en la industria electrónica. Provee funcionalidad para desarrollar los proyecto más complejos que se puedan
concebir. Aprender su uso y desarrollar habilidad con este software es una inversión valiosa
para el ingeniero.
La última versión de este software se conoce como Altium Designer.
Xilinx ISE Webpack 9.2i (www.xilinx.com)
Esta es la versión gratuita del ambiente de desarrollo para dispositivos de lógica programable de Xilinx. Permite desarrollar aplicaciones para FPGAs y CPLDs en los lenguajes
de descripción de hardware VHDL y Verilog, al igual que en forma esquemática. Pueden
combinarse en un mismo proyecto componentes lógicos desarrollados mediante estas distintas vías.
54
Adicionalmente, el software realiza la síntesis del diseño para el dispositivo específico a
utilizar, y genera las archivos de configuración para ser cargados directamente en los dispositivos de lógica programable o en memorias de configuración no volátiles.
Este software se ha utilizado para el desarrollo de las aplicaciones de prueba del hardware
que requieren de la intervención del FPGA.
CCS PIC C Compiler 3.2 (www.ccsinfo.com)
PIC C es un compilador de lenguaje C (ANSI con pequeñas modificaciones para adaptarlo
a microcontroladores) para microcontroladores PIC de Microchip.
Este compilador se ha utilizado para el desarrollo de las aplicaciones de prueba del hardware, en la que se requiere la intervención del microcontrolador.
3.4.2.
Software de Simulación
Microcap 7.0 (www.spectrum-soft.com)
Microcap es un popular software de captura de esquemáticos y simulación SPICE. Permite diseñar y verificar componentes analógicos incorporados en el diseño, al igual que el
comportamiento de líneas de transmisión bajo la presencia de pulsos cuadrados con distintos
tiempos de levantamiento.
HyperLynx 7.5 (www.mentor.com)
Este es un software especializado en la simulación de líneas de transmisión con señales
digitales, permitiendo especificar, en particular, mediante distintos modelos, las etapas de
entrada y salida de las compuertas digitales, todos los parámetros de las líneas, y simular la
interferencia cruzada entre líneas de transmisión paralelas.
3.4.3.
Otro Software
PICkit 2 v2.11 (www.microchip.com)
Este es un kit de hardware y software para la programación (cargar el programa en el
dispositivo) y depuración de microcontroladores PIC en forma In Circuit Serial Programming
(ICSP) o programación del dispositivo en circuito, lo que quiere decir que el dispositivo no
requiere ser retirado de su circuito huésped para ser programado, siempre y cuando el circuito
huésped esté diseñado con este propósito en mente y cuente con el conector adecuado.
55
Digilent Export 1.8.0 (Adept Suite, www.digilent.com)
Este es un software que en combinación con el cable USB-JTAG de Digilent, permite
cargar programas y monitorear circuitos mediante el estándar JTAG, como es el caso de los
FPGAs y sus memorias de configuración.
MProg 3.0a (www.ftdichip.com)
Este software permite configurar los dispositivos USB de FTDI. La configuración es
grabada en la EPROM externa conectada al dispositivo, si es que la memoria está presente.
En el caso del dispositivo utilizado en este hardware, el FT2232, MProg permite configurar el chip para operar en sus distintos modos, ya sea RS232, FIFO, BitBang, y otros, así
como explicitar qué controladores, Puerto Serial Virtual o D2XX, se utilizará para acceder al
dispositivo desde el PC.
3.4.4.
Herramientas de Soldadura y Montaje
Estación de soldadura de temperatura regulable y puntas intercambiables
Es imprescindible contar con control de temperatura en la punta de soldar, ya que existen
componentes de tamaño físico muy variado, al igual que las superficies de cobre a las cuales
serán conectados. Por lo tanto, es necesario adecuar la temperatura del cautín a la cantidad de
calor disipada por estas combinaciones. Por ejemplo, para soldar adecuadamente un pin de
un dispositivo QFP a una pista de 0.010 pulgadas, se requiere muchísima menos temperatura
que para soldar un diodo de potencia a un plano de tierra.
Microscopio Estereoscópico
Debido a los tamaños de los componentes en el circuito impreso, para soldar y verificar la
soldadura, es necesario trabajar bajo un microscopio. Es importante que sea estereoscópico
para poder tener una visión tridimensional de los componentes y para poder trabajar con
comodidad durante períodos prolongados utilizando ambos ojos. Es indispensable que los
niveles de aumento y la intensidad de la luz sean regulables.
Horno de Soldadura
Esta herramienta permite un método de soldadura alternativo al cautín y presenta ventajas
cuando se desea soldar una gran cantidad de componentes a la vez. El procedimiento de
56
soldadura con esta herramienta consiste en la aplicación de soldadura en pasta en los puntos a
soldar sobre la placa, poner los componentes en su lugar, con sus contactos sobre la soldadura.
Luego la placa se introduce en el horno, el que aplica un perfil de temperatura genérico, que
en la mayoría de los casos es adecuado, o puede ser configurado por el usuario.
Si se van a soldar componentes en ambos lados de la placa mediante este mismo método,
es necesario que aquellos componentes soldados en el primer lado sean pequeños y de poco
peso, de manera que al voltear la placa para soldar los componentes en el otro lado, aquellos
componentes que quedan cara abajo en el horno, se sostengan en su lugar por la tensión
superficial de la soldadura cuando ésta se funda.
3.4.5.
Instrumentos de Medición
Se han utilizado distintos instrumentos de medición en el proceso de verificación del
hardware, no tanto así durante el ensamblaje, donde se utilizaron más que nada para verificar
conexiones y corto-circuitos.
Osciloscopio
Este es el instrumento principal para verificar sistemas cuyas señales eléctricas evolucionan en el tiempo. Ya que el hardware desarrollado es principalmente digital, gran parte de la
verificación se ha realizado enviando datos al puerto serial del PC. Sin embargo, el osciloscopio es imprescindible en aquellos casos en que lo anterior falla y/o en que se desea verificar la
integridad de las señales estudiadas. En otras palabras, permite una observación del sistema
a más bajo nivel.
Este instrumento debe cumplir con ciertas características técnicas, específicas para la observación de señales digitales. Debe permitir, principalmente, observar sin distorsión los flancos de subida y bajada de las señales digitales. Esto se logra cuando el instrumento cuenta
con un ancho de banda superior a fknee y una frecuencia de muestreo varias veces la tasa de
Nyquist para esta frecuencia. Algunos osciloscopios poseen una tasa de Nyquist inferior a la
correspondiente a su ancho de banda, lo que permite igualmente, mostrar señales con componentes de frecuencia hasta dicho ancho de banda, pero sólo cuando éstas son periódicas.
La figura 23 muestra el osciloscopio utilizado para las pruebas del circuito, el que cuenta
con un ancho de banda de 500MHz y una tasa de muestreo de 5 Giga-muestras por segundo.
57
Figura 23: Osciloscopio Tektronix 5054B-NV
Fuente DC, Generador de señales, multímetro, etc.
Es evidentemente necesario utilizar una fuente de poder para alimentar el circuito. Idealmente, debe tener limitador de corriente en caso de ocurrir cualquier falla o que se haya
invertido la polaridad. Un multímetro es necesario para verificar los voltajes de alimentación,
cortocircuitos, circuitos abiertos e impedancias. Se ha utilizado un generador de señales, únicamente para verificar la operación de los convertidores análogo-digitales.
58
4.
4.1.
Implementación y verificación del prototipo
Fabricación de la PCB
Como se mencionó anteriormente, la empresa seleccionada para la fabricación de las
PCB fue Advanced Circuits (www.4pcb.com). Ellos imponen ciertas restricciones técnicas
que debe cumplir el diseño antes de que se lo acepte para ser fabricado. Estas restricciones
pueden ser verificadas por el usuario mediante la funcionalidad de chequeo de reglas o DRC
(Design Rule Check) provista por la mayoría de los programas de diagramación de PCBs, o
bien, mediante un sistema en línea que provee el fabricante para verificar que se cumpla su
set de restricciones. Para este proyecto se utilizaron ambos métodos de verificación.
No tan solo deben verificarse las restricciones técnicas de fabricación, sino también, errores circuitales, orientación de componentes, facilidad de ensamblaje, entre otros. El costo
de la PCB es un porcentaje importante dentro del costo total del producto, por lo que las verificaciones mencionadas son sumamente importantes. Pasar por alto errores puede significar
que se deba rehacer por completo el prototipo, dañar componentes, limitar la utilidad, o requerir reparación “artesanal” que puede afectar considerablemente la presentación visual y
confiabilidad de la placa.
4.2.
Adquisición de componentes
Los componentes fueron adquiridos vía Internet en la compañía Digi-key (www.digikey.com),
proveedora de componentes electrónicos más grandes de Norteamérica.
Se realizaron varios pedidos. Los primeros destinados a realizar mediciones físicas a los
componentes para diseñar su huella (foot-print). Los que siguieron completaban los componentes requeridos y, los últimos consistieron en la adquisición de componentes olvidados o
que fueron dañados en alguna etapa del proceso de implementación.
4.3.
Ensamblaje
Se utilizaron dos métodos de soldadura: soldadura en horno para los componentes en la
cara posterior de la PCB y soldadura manual con cautín para los componentes de la capa
superior.
La soldadura en horno consiste en aplicar soldadura en pasta en todas las huellas de
los componentes en una sola cara de la PCB y luego poner los componentes en su lugar.
Posteriormente, se introduce la PCB en el horno, el cual aplica un perfil de temperatura ideal
59
que primero activa la pasta y posteriormente derrite la soldadura. Después de esperar que la
placa se enfríe lentamente, puede limpiarse con alcohol y una brocha. Este método es ideal
para la cara posterior de la PCB debido a que contiene casi únicamente condensadores y
resistencias, ambos en gran cantidad.
La capa superior contiene componentes muy diversos en estructura y tamaño, lo que
la hace más apta para soldadura manual con cautín. Además, es recomendable soldar los
componentes en etapas, para poder realizar pruebas antes de proseguir con la siguiente. Esto
es especialmente importante en el caso de la fuente de poder, de la cual hay que asegurarse
que esté entregando los voltajes adecuados antes de soldar el resto de los circuitos integrados.
El tamaño de los componentes, así como el tamaño y separación de los pines hacen necesario trabajar constantemente bajo el microscopio durante el proceso de soldadura y ensamblaje.
La soldadura manual requiere mucha práctica y conocimiento. No es el propósito de esta
memoria profundizar en esto, pero determina la calidad y durabilidad del producto.
4.4.
Verificación
Para la verificación de la placa se han diseñado las pruebas enumeradas a continuación.
APP1 a APP8 son pequeños diseños de prueba y que se recomiendan como ejercicio para
nuevos usuarios. En el caso puntual de esta memoria sólo cumplen con la función de demostrar el correcto diseño y su funcionalidad.
4.4.1.
Prueba de Fuente de Poder
Esta prueba debe realizarse después de soldar los componentes de la fuente de poder y
antes que los componentes restantes. El propósito es verificar que la fuente de poder esté
entregando los voltajes esperados, y así evitar que se dañe algún componente.
Al agregar más componentes y realizar aplicaciones más complejas los voltajes se mantuvieron estables y en ninguno de los componentes de la fuente de poder aumentó significativamente temperatura.
La corriente en las aplicaciones más complejas alcanzó aproximadamente 400mA.
4.4.2.
Verificación de la cadena JTAG
Esta prueba puede llevarse a cabo una vez que se han soldado en su lugar el FPGA y la
EPROM de configuración con todos sus componentes anexos. Ambos conforman la cade60
na JTAG. Si el programador reconoce ambos componentes, quiere decir que ya pueden ser
programados.
La mayoría de los programadores JTAG despliega una representación gráfica de la cadena,
que en el caso de este proyecto, debería ser similar a lo ilustrado en la figura 24
Figura 24: Cadena JTAG de la Plataforma de Desarrollo
4.4.3.
APP1: Divisor de reloj
Esta prueba consiste en escribir un pequeño programa en VHDL que divide la frecuencia
del reloj principal (100MHz), compilarlo y cargarlo en la EPROM de configuración para que
sea ejecutado en el FPGA. Esto permite demostrar que la EPROM puede ser programada
vía JTAG, que el FPGA puede leer su configuración de la EPROM, y que puede ejecutar su
función.
El programa divide la frecuencia del reloj por 16 y está implementado como un contador
de 4 bits donde el bit más significativo es asignado a la salida.
61
Listado 1 Divisor de reloj (VHDL)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity div16 is
Port ( clock : in STD_LOGIC;
reset : in STD_LOGIC;
divided : out STD_LOGIC);
end div16;
architecture Behavioral of div16 is
begin
process (clock)
variable count: STD_LOGIC_VECTOR (3 downto 0);
begin
if (reset = ’1’) then
count := "0000";
elsif (clock’event and clock = ’1’) then
count := count + 1;
end if;
divided <= count(3);
end process;
end Behavioral;
Figura 25: Formas de onda de APP1. Izquierda: LVTTL a 2mA. Derecha: LVTTL a 8mA.
La figura 25 muestra la forma de onda de salida resultante para dos estándares de E/S
posibles en el FPGA. Se puede observar que el período es de 160ns, lo que corresponde a
6.25 MHz, o 100/16 MHz.
62
4.4.4.
Programación del PIC vía ICSP
Esta prueba, pretende demostrar la programabilidad “en circuito” del PIC. Puede no funcionar o ser dañinamente invasiva para el resto del circuito si es que no se ha diseñado para
aceptar este proceso. La sección 3.2.8 describe las dificultades presentes en este segmento
del diseño y el modo se han enfrentado. Está prueba está implícita en APP2.
4.4.5.
APP2: Generación de onda cuadrada en el PIC
En esta prueba se programa una simple rutina que crea una onda rectangular con duraciones distintas para los dos estados lógicos. Está implementada en lenguaje C (Compatible
con el compilador PIC C) y consiste en un loop infinito, donde se cambia de estado lógico y
se aplica un retardo diferente para cada uno.
Listado 2 Generador de onda rectangular en el PIC (C para PIC C)
#include "app2.h"
void main()
{
// Set pin directions
SET_TRIS_C(0b11110111); // 1=Input, 0=Output
while(1) {
// PF6 <=>Pin C3 <->EXP4-2 Connector <->FPGA Pin 200
delay_us(6);
OUTPUT_HIGH(PIN_C3);
delay_us(4);
OUTPUT_LOW(PIN_C3);
}
}
Figura 26: APP2, Onda rectangular generada en el PIC
63
La figura 26 muestra la señal resultante. Al costado derecho se encuentra información
temporal de la señal y que confirma los tiempos especificados en el programa.
4.4.6.
APP3: Comunicación entre el PIC y el FPGA
En el FPGA se ha generado una señal de frecuencia en función del estado lógico de una
de sus entradas. A esta entrada se ha conectado la señal generada por el PIC y que se obtuvo
en la prueba anterior. La figura 27 muestra la señal del PIC en el canal 1 del osciloscopio y
la señal resultante en el FPGA en el canal 2.
El programa está implementado como un contador síncrono de 6 bits, del cual se utiliza
el bit 6 (más significativo) cuando la entrada es ’1’, y el bit 4 cuando la entrada es ’0’.
Esto equivale a dividir el reloj principal de 100 MHz en 64 (1.5625 MHz) y 16 (6.25 MHz)
respectivamente.
Listado 3 APP3, Modulador FSK (VHDL)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dual_freq is
Port ( clock : in STD_LOGIC;
choice : in STD_LOGIC;
output : out STD_LOGIC);
end dual_freq;
architecture Behavioral of dual_freq is
begin
process (clock,choice)
variable count: STD_LOGIC_VECTOR(5 downto 0) := "000000";
begin
if (clock’event and clock = ’1’) then
count := count + 1;
end if;
if (choice = ’1’) then
output <= count(5);
else
output <= count(3);
end if;
end process;
end Behavioral;
64
Figura 27: APP3, FSK Controlada desde el PIC
4.4.7.
APP4: Comunicación Serial
Esta prueba involucra al PIC, al FPGA y a la interfaz RS232. En primera instancia, se
programó una pequeña rutina en el PIC, que envía en forma serial, reiteradamente un caracter a una frecuencia fija de 10 Hz. La señal TTL resultante se observó en el osciloscopio.
Posteriormente, se escribió un programa en VHDL para el FPGA que interconecta las líneas
seriales del PIC con las de la interfaz RS232. La conversión de niveles LVTTL a RS232 se
pudo verificar en el osciloscopio como se muestra en la figura 28.
Figura 28: Señal serial en niveles TTL (canal 1) y RS232 (canal 2).
Finalmente, para verificar la comunicación serial bidireccional, se escribió un programa
65
en el PIC que envía a una frecuencia fija el caracter ’-’, y cuando recibe un caracter lo envía
de vuelta.
Listado 4 Programa simple de RS232 bidireccional
#include "APP4.h"
char received_ch;
int1 got_data;
#int_RDA
RDA_isr()
{
received_ch = getc();
got_data = 1;
}
void main()
{
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(1)
{
if (got_data)
{
putc(received_ch);
got_data = 0;
}
putc(’-’);
delay_ms(100);
}
}
Figura 29: Terminal que la operación de la aplicación APP4.
66
4.4.8.
APP5: Lectura de los ADCs y transmisión serial al PC
En esta aplicación se alimentan los convertidores análogo-digitales con una señal sinusoidal de baja frecuencia. Se les suministra una señal de reloj de 25 MHz (El reloj principal
del FPGA dividido en 4). La salida de uno u otro es muestreada y entregada en paralelo al
microcontrolador en función de una línea de control.
Listado 5 Extracto de APP5
process (clock, adcA, adcB, get)
variable last_get : STD_LOGIC := ’0’;
begin
if (clock’event and clock = ’1’) then
if (last_get = ’0’ and get = ’1’) then
adc_out <= adcA;
elsif (last_get = ’1’ and get = ’0’) then
adc_out <= adcB;
end if;
last_get := get;
end if;
end process;
process (clock)
variable clk_count : STD_LOGIC_VECTOR (1 downto 0) := "00";
begin
if (clock’event and clock = ’1’) then
clk_count := clk_count + 1;
end if;
adcA_clk <= clk_count(1); -- 25 MHz
adcB_clk <= clk_count(1); -- 25 MHz
end process;
Figura 30: Señal original en osciloscopio
67
ADC #1
200
180
160
Valor (8 bits)
140
120
100
80
60
40
20
0
300
350
400
450
500
550
Muestras
(a)
(b)
Figura 31: Sinusoidal capturada. (a) Datos en terminal serial. (b) Gráfico para el ADC número
1.
Es importante destacar que esta prueba solamente demuestra que los ADCs no están dañados y que se encuentran correctamente conectados al FPGA. Se deja como ejercicio al lector
demostrar la correcta operación de los ADCs a su máxima tasa de muestreo. Esto puede
hacerse entregando una señal sinusoidal de entre 1 y 5 MHz a los ADCs, muestreando a 100
Mega-muestras por segundo y almacenando al menos 200 muestras consecutivas en la memoria interna del FPGA. Posteriormente ésta puede ser transferida a un PC a una tasa menor,
para poder graficar los puntos y observar la reconstrucción de la señal. El uso de una señal
triangular puede revelar mejor, a simple vista la integridad de la señal capturada.
4.4.9.
APP6: Uso de memoria FLASH
Para demostrar el funcionamiento de la memoria FLASH se ha utilizado el FPGA, simplemente para interconectar el microcontrolador con la memoria y con la interfaz RS232.
La memoria utiliza una interfaz SPI al igual que el microcontrolador, lo que hace que la
comunicación entre ellos sea muy simple.
En el microcontrolador se han implementado 4 rutinas que se comunican con la memoria. Éstas son: la lectura del identificador (3 bytes que identifican el fabricante y el tamaño
de la memoria), el borrado de la memoria completa, la escritura de una frase pre-definida
en una ubicación predefinida de la memoria, y la lectura de un número fijo de bytes de esa
ubicación. La figura 32 muestra un terminal serial donde se observa la ejecución del programa del microcontrolador. Se observa el resultado de la secuencia de comandos: Lectura del
identificador, borrado, escritura, lectura, borrado y lectura.
68
Figura 32: APP6 en terminal serial
4.4.10.
APP7: Uso de memoria SRAM
Esta prueba consiste en generar una secuencia de números pseudo-aleatorios, almacenarlos en la memoria SRAM y luego recuperarlos desde el microcontrolador, para finalmente
transmitirlos en forma serial al PC y verificar que todo el proceso ha funcionado correctamente.
Para esto se ha diseñado una máquina de estados (ver figura 33) que contiene 2 estados
principales, READ (y READ_B22 ), en el cual se puede realizar la lectura de la RAM desde
el PIC, y WRITE, donde se genera la secuencia de números pseudo-aleatóreos y se escriben
en la RAM. El paso de un estado a otro se realiza con la línea de control W generada desde
el PIC. Los estados intermedios TO READ y TO WRITE existen para asegurar que en la
transición de WRITE a READ y viceversa, se hayan deshabilitado los pines de salida del
FPGA o de la RAM, respectivamente. Al estado FULL se llega desde WRITE cuando la
memoria se ha llenado. El estado READ_B permite acceder al segundo byte entregado por la
RAM. READ sólo presenta el primer byte. El paso de READ_B a READ obtiene la palabra
siguiente de la RAM. La línea de control get_clk controla el paso entre estos dos estados.
La figura 33 es una simplificación de la máquina de estados. El detalle puede observarse
en el código VHDL de esta aplicación en el anexo.
22
READ y READ_B se requieren para obtener los bits 0 a 7 y 8 a 15 respectivamente ya que el PIC trabaja
solo con 8 bits a la vez.
69
W=1
TO WRITE
READ
get_clk=0
W=0
READ_B
W=1
get_clk=1
TO READ
WRITE
W=0
FULL
ADDR="111..."
W=0
Figura 33: Máquina de estados APP7
Figura 34: Terminal exhibiendo la actividad de la aplicación.
La generación de números pseudo-aleatorios se ha realizado mediante la técnica de registros (shift-registers) con re-alimentación. Se ha utilizado un registro de 16 bits de largo y
los bits realimentados han sido elegidos según [[Xapp052]] para obtener una secuencia de
máxima longitud sin repetición. La implementación sólo requiere 2 líneas en VHDL:
lfsr(15 downto 1) <= lfsr(14 downto 0);
lfsr(0) <= lfsr(16) xnor lfsr(15) xnor lfsr(13) xnor lfsr(4);
70
En la primera línea se desplaza el registro (lfsr), y en la segunda, se genera el primer bit en
función de los bits 16,15,13 y 4. En este caso se ha usado una semilla de valor 0xAAAA.
4.4.11.
APP8: Comunicación USB
Esta prueba utiliza el segundo canal del chip USB FT2232 en el modo USB a puerto serial
asíncrono, y el FPGA se configura para reproducir en la línea de transmisión lo que recibe en
la línea de recepción (interfaz loopback).
La primera parte de la prueba consiste en verificar que el PC detecte el dispositivo USB
al conectarlo. Para esto deben estar instalados los controladores para puerto serial virtual
(www.ftdichip.com). La primera vez que se conecta al PC, éste debe reportar que ha encontrado 2 puertos seriales virtuales USB y que están listos para ser utilizados.
El programa que implementa la interfaz loopback debe instalarse en el FPGA. Este no se
muestra aquí pero es muy simple y puede encontrarse en el Apéndice.
Cuando estos pasos se han completado, puede realizarse la prueba accediendo mediante
Hyperterminal u otro terminal serial, al puerto serial virtual correspondiente a la segunda interfaz del chip. Luego, puede seleccionarse cualquier velocidad de transmisión, y sin control
de flujo. Finalmente, cualquier caracter que se tipee en la ventana debe aparecer en ella, ya
que es enviado a la placa y devuelto inmediatamente. En condiciones normales, el terminal
serial no muestra lo que uno escribe, solo lo que se recibe remotamente.
La prueba resultó exitosa transmitiendo a la máxima velocidad permitida por Hyperterminal, es decir, 921600 bps.
71
5.
Aplicaciones y ejercicios propuestos
Figura 35: Fotografía de la plataforma completamente armada y operando.
Las posibles aplicaciones de esta plataforma de desarrollo están limitadas sólo por la
creatividad. La motivación original fue carácter educacional, para contribuir a la enseñanza
de ramos de la carrera universitaria de Ingeniería Eléctrica. De muchos de estos ramos se
desprenden aplicaciones que corresponden a la implementación de lo que se enseña teóricamente.
Por ejemplo, en ramos del área de Sistemas Digitales, puede utilizarse la plataforma
para la práctica de lógica programable; en Procesamiento Digital de Señales, para la implementación de filtros digitales y transformadas rápidas de Fourier (FFT); en Comunicaciones Digitales para la implementación de codificadores y códigos correctores de errores;
en Arquitectura de Computadores, para el diseño de CPUs; en Control Automático, para el
desarrollo de los más complejos controladores; en Electrónica de Potencia, para implementar
las unidades de control de convertidores de potencia, etc. En fin, en casi cualquier ramo se le
puede aprovechar eficientemente.
Esta versatilidad se detectó tempranamente y surgieron nuevas motivaciones, como por
ejemplo el uso de la plataforma para el desarrollo de soluciones industriales y científicas a
la medida, el desarrollo de instrumentos de medición u otros productos para su comercialización, o, simplemente para distribuir el diseño o venta de la plataforma ya ensamblada, lo
que a cierto plazo crearía una comunidad de desarrolladores interactuando, potenciando el
72
conocimiento de esta comunidad y ampliando posibles aplicaciones del producto.
Ejemplos
En el área de los instrumentos de medición, el osciloscopio de muestreo digital es uno
de los más versátiles. La plataforma, en este caso, además de servir de unidad de control
para la sección de procesamiento digital y para la interfaz de usuario, puede realizar el almacenamiento temporal de las muestras digitalizadas, analizar los datos para determinar el
momento del disparo, calcular frecuencia, amplitud, etc., y luego mostrar los resultados o
enviarlos a un PC mediante alguna de las interfaces de comunicaciones incorporadas.
En el caso de un analizador de espectro, la señal convertida a banda base puede ser digitalizada y convertida a su espectro de frecuencia mediante FFT, permitiendo una resolución
de ancho de banda mucho mayor que la obtenida con instrumentos analógicos. Al igual que
en un osciloscopio, lo mismo se aplica en el caso de control de la sección analógica, las
comunicaciones y la interfaz de usuario.
La implementación de analizadores lógicos y contadores de frecuencia es definitivamente
una tarea fácil. La generación de señales mediante el método DDS también es una aplicación
fácil de implementar.
Es posible implementar en el FPGA un Procesador Digital de Señales (DSP) completo,
o partes de uno. Por este motivo, las tareas que los DSP realizan pueden también llevarse a
cabo en esta plataforma y hasta con mejor desempeño, ya que el procesador se puede diseñar
a la medida de la aplicación.
Por ejemplo es posible procesar video (de baja y mediana resolución y unos pocos niveles
de colores) y realizar detección de objetos, rutas, contornos, etc., lo que puede ser de utilidad
en robótica, líneas de producción, etc. Lo mismo es aplicable para procesar sonido, ejemplo
de la cual es la detección de voz.
En esta área se consideran también aplicaciones de compresión, encriptación, y filtrado,
entre muchos otros.
También es aplicable esta unidad a sistemas de control, tanto en lazo cerrado, como en
control de procesos. En el caso de sistemas de control de lazo cerrado, el FPGA puede usarse
para aquellas tareas intensivas en procesamiento aritmético, mientras que en el microcontrolador, se puede implementar el algoritmo principal, funcionando bajo un sencillo sistema
operativo de tiempo real. En esta área el FPGA también puede procesar los datos de entrada
de muchos sensores a la vez, ya sea aquellos con respuesta analógica mediante los ADCs
incorporados (o adicionales externos a la placa), o aquellos con respuesta digital, como en73
coders, switches, etc. También puede controlar actuadores, mediante la generación de señales
PWM, o Convertidores Digital-Analógicos (DACs).
Otros recursos
El sitio de Internet OpenCores.org ofrece una inmensidad de aplicaciones de código abierto para FPGAs, dentro de las cuales las más populares son:
CPUs de distintas arquitecturas, microcontroladores y DSP.
Controladores Ethernet de 10, 100 y 1000 Mbps
Controladores USB, I2C, CAN, etc.
Controladores de Video VGA, TFT LCD, Plasma, etc.
Criptografía y generadores de números aleatorios
La variedad encontrada en este sitio web puede ser de utilidad inmediata, usando directamente algunos de los desarrollos disponibles o, quizás, la combinación de ellos, para realizar
aplicaciones más complejas y creativas. Por último, puede constituir una fuente de estímulo
para estudiar las posibles aplicaciones de los dispositivos de lógica programable modernos.
Los ejemplos mencionados aquí son tan solo un ínfimo subconjunto de las posibles aplicaciones. Se encuentran concentradas en ciertas áreas debido al inevitable sesgo profesional
del autor respecto a las necesidades humanas y de la industria. Sin embargo, se tiene la certeza
de que otros podrán hallar soluciones creativas a sus propios problemas, aplicándolos en sus
particulares mundos profesionales o personales.
74
6.
Producción
Esta sección se presenta como una ayuda para quienes pretendan llevar a producción sus
propias unidades.
6.1.
Adquisiciones
6.1.1.
Circuitos Impresos
Los Circuitos impresos deben ser solicitados al autor de esta memoria para ser adquiridos
con el fabricante original en USA. Si es factible, puede enviarse una autorización al fabricante
para que la Universidad realice pedidos directamente.
6.1.2.
Componentes
Todos los componentes utilizados en este proyecto fueron adquiridos en línea en Digikey
(www.digikey.com), por lo tanto, se sugiere utilizar esta vía para minimizar el número de
compras.
Es posible no encontrar exactamente los mismos componentes utilizados en los prototipos
originales, debido a falta de stock o porque han quedado obsoletos. En el primer caso, pueden
encontrarse sustitutos con características técnicas similares aunque de otros fabricantes, u
otros que utilizan otras tecnologías y/o materiales logrando el mismo resultado. En el segundo
caso, generalmente los fabricantes sugieren un dispositivo de reemplazo que es compatible
con aquel que ha sido retirado del mercado. Siempre es necesario verificar que el dispositivo
es mecánicamente compatible con el circuito impreso y que podrá ser soldado. En ambos
casos, se sugiere consultar con el autor de esta memoria antes de tomar una decisión.
6.2.
Ensamblaje
6.2.1.
Indicaciones Generales
6.2.2.
Procedimiento
1. Montar todos los condensadores de formato 0402 en de la cara posterior del circuito
impreso. Todos éstos tienen la misma capacitancia de 0,01µF .
2. Montar todos los condensadores cerámicos de formato 0805 de capacitancia 1µF en la
cara posterior del circuito impreso.
75
3. Montar todos los condensadores cerámicos de formato 0805 de capacitancia 0,1µF en
la cara posterior del circuito. No todos los condensadores de este formato en la cara
posterior son de esta capacitancia, por lo que hay que guiarse por la lista de componentes de la cara posterior.
4. Montar el resto de los condensadores de la cara posterior guiándose por la lista de
componentes. Debe tenerse precaución con los condensadores de Tantalio, ya que son
polarizados y no hay forma de determinar su orientación en la placa que no sea identificando los voltajes que hay en ambos terminales.
5. Los transistores Q51 y Q52 deben modificarse para ser montados en forma invertida,
es decir, la cara superior debe ir contra la placa. Para esto basta doblar los 3 pines hacia
la cara contraria. Luego se montan en forma invertida y se sueldan.
6. Montar el resto de los componentes de la cara posterior guiándose por la lista de componentes.
7. Verificar que entre los terminales de alimentación de 5V no exista un cortocircuito, y
que la impedancia entre ellos sea de al menos 1,5kΩ.
8. Montar los componentes de la fuente de poder que corresponden a la etapa de entrada
de 5V y al regulador conmutado de 3.3V, guiándose por el esquemático de la figura 42
que se encuentra en el Apéndice.
9. Alimentar la placa con 5V desde una fuente limitada en corriente, al mínimo amperaje
posible. Incrementar el límite lentamente hasta que el voltaje y la corriente se estabilicen. La corriente entregada por la fuente no debería superar los 100mA. Hay que
asegurarse también, durante este proceso, que ningún componente aumente considerablemente su temperatura. Verificar que el voltaje de salida del regulador de 3.3V sea
efectivamente aquel.
10. Complete el montaje de la fuente de poder según la figura 42 y verifique que todos los
voltajes de salida sean los correctos.
11. Montar el FPGA, la memoria PROM de configuración y todo el circuito de soporte
según la figura 37.
12. Alimentar el circuito y comprobar la cadena JTAG con un programador.
76
13. Completar el montaje de los componentes de la cara superior en un orden tal que facilite
el acceso a cada nuevo componente soldado con la punta del cautín en caso de que sea
soldado manualmente.
6.3.
Pruebas
Una vez que haya completado el ensamblaje pueden realizar las pruebas descritas en la
sección 4.4. Estas deberían ser suficientes para probar el correcto ensamblaje.
77
Referencias
[Johnson93]
Johnson, Howard W. y Graham, Martin (1993) High Speed Digital Design,
A Handbook of Black Magic. Prentice Hall PTR.
[Johnson03]
Johnson, Howard W. y Graham, Martin (2003) High Speed Signal Propagation: Advanced Black Magic. Prentice Hall PTR.
[Ashenden02] Ashenden, Peter J. (2002) The Designer’s Guide to VHDL. Morgan Kaufmann, 2nd Edition.
[Xapp623]
Alexander, Mark Power Distribution System (PDS) Design: Using
Bypass/Decoupling Capacitors. Xilinx, Application Note 623 v2.1.
www.xilinx.com.
[CYP1]
SRAM System Design Guidelines. Cypress Semiconductor Corporation,
October 25, 2002. www.cypress.com.
[DS312]
Spartan-3E FPGA Family: Complete Datasheet. Xilinx, May 19, 2006.
www.xilinx.com
[Xapp453]
GoldBlatt, Kim (2006) The 3.3V Configuration of Spartan-3 FPGAs. Xilinx Application Note 453 v1.1, 2006. www.xilinx.com
[Xapp052]
Alfke, Peter (1996) Efficient Shift Registers, LFSR Counters, and Long
Pseudo-Random Sequence Generators. Xilinx, Application Note 052 v1.1,
1996. www.xilinx.com.
[Horowitz89] Horowitz, Paul y Hill, Winfield (1989) The Art of Electronics, 2nd Edition.
Oxford University Press.
[IEEE1]
Yong-Ju Kim, Han-Sub Yoon, Seongsoo Lee, Gyu Moon, Joungho Kim, and
Jae-Kyung Wee (2004) An Efficient Path-Based Equivalent Circuit Model for Design, Synthesis, and Optimization of Power Distribution Networks in Multilayer Printed Circuit Boards. IEEE Transactions on Advanced Packaging, VOL. 27, No 1, February 2004.
[IEEE2]
Sharawi, Mohammad S. (2004) Practical Issues in High Speen PCB design.
IEEE Potencials, IEEE, 2004.
78
[IEEE3]
Jae Kwon Han y Dong Chul Park (2006) Crosstalk Analysis Between
Non-Parallel Coupled Lines Connected With Vias in a 4-layer PCB.
CEEM’2006/DALIAN.
[IEEE4]
Frank Ye Yuan Analysis of Power/Ground Noises and Decoupling Capacitors in Printed Circuit Board Systems. Quad Design Group, Viewlogic
Systems, Inc.
[IEEE5]
LaMeres, Brock J. y Kalkur, T.S. (2001) The Effect of Ground Vias on
Changing Signal Layers in a Multilayered PCB. Department of Electrical and Computer Engineering, University of Colorado. IEEE Microwave and
Optical Technilogy Letters / Vol. 28, No. 4, February 20, 2001.
[AN282]
Application Note AN-282: Fundamentals of Sampled Data Systems. Analog Devices, Norwood, Massachusetts. www. analog.com.
79
Apéndices
A: Esquemáticos
B: Diagramas del circuito impreso
C: Pines, nombres. números e interconexiones
D: Lista de componentes
E: Código VHDL y C de las aplicaciones de prueba
F: Opciones durante el ensamblaje
G: Estadísticas de trabajo
80
Apéndice A: Esquemáticos
Figura 36: Esquemáticos: Diagrama principal
81
Figura 37: Esquemáticos: Configuración del FPGA
82
Figura 38: Esquemáticos: Memoria
83
Figura 39: Esquemáticos: Comunicaciones
84
Figura 40: Esquemáticos: Microcontrolador
85
Figura 41: Esquemáticos: I/O del FPGA
86
Figura 42: Esquemáticos: Fuente de Poder
87
Figura 43: Esquemáticos: Puertos de Expansión
88
Apéndice B: Diagramas del circuito impreso
Figura 44: Serigrafía cara superior. No a escala.
Figura 45: Cobre cara superior. No a escala.
89
Figura 46: Cobre capa de alimentación (Vcc). No a escala.
Figura 47: Plano de tierra (Negativo). No a escala.
90
Figura 48: Serigrafía cara inferior (Invertida). No a escala.
Figura 49: Cobre cara inferior (Invertida). No a escala.
91
Apéndice C: Pines, números, nombres e interconexiones.
92
93
94
95
96
Apéndice D: Lista de componentes
97
98
99
100
101
102
Todas las resistencias son de 1/4W, 5 %
Todos los componentes estaban disponibles en Digikey (www.digikey.com) al momento de desarrollo.
103
Apéndice E: Código VHDL y C de las aplicaciones de prueba
APP1
Listado 6 APP1, Divisor de reloj (VHDL)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity div16 is
Port ( clock : in STD_LOGIC;
reset : in STD_LOGIC;
divided : out STD_LOGIC);
end div16;
architecture Behavioral of div16 is
begin
process (clock)
variable count: STD_LOGIC_VECTOR (3 downto 0);
begin
if (reset = ’1’) then
count := "0000";
elsif (clock’event and clock = ’1’) then
count := count + 1;
end if;
divided <= count(3);
end process;
end Behavioral;
Listado 7 APP1, Configuración de E/S del FPGA (UCF)
#PACE: Start of Constraints generated by PACE
#PACE: Start of PACE I/O Pin Assignments
NET "clock" LOC = "P80" | IOSTANDARD = LVTTL ;
NET "divided" LOC = "P33" | IOSTANDARD = LVTTL | DRIVE = 2 ;
#PACE: Start of PACE Area Constraints
#PACE: Start of PACE Prohibit Constraints
#PACE: End of Constraints generated by PACE
104
APP2
Listado 8 APP2, Generador de onda rectangular en el PIC (C para PIC C)
#include "app2.h"
void main()
{
// Set pin directions
SET_TRIS_C(0b11110111); // 1=Input, 0=Output
while(1) {
// PF6 <=>Pin C3 <->EXP4-2 Connector <->FPGA Pin 200
delay_us(6);
OUTPUT_HIGH(PIN_C3);
delay_us(4);
OUTPUT_LOW(PIN_C3);
}
}
APP3
Listado 9 APP3, Modulador FSK (VHDL)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dual_freq is
Port ( clock : in STD_LOGIC;
choice : in STD_LOGIC;
output : out STD_LOGIC);
end dual_freq;
architecture Behavioral of dual_freq is
begin
process (clock,choice)
variable count: STD_LOGIC_VECTOR(5 downto 0) := "000000";
begin
if (clock’event and clock = ’1’) then
count := count + 1;
end if;
if (choice = ’1’) then
output <= count(5);
else
output <= count(3);
end if;
end process;
end Behavioral;
105
Listado 10 APP3, Configuración de E/S del FPGA (UCF)
#PACE: Start of Constraints generated by PACE
#PACE: Start of PACE I/O Pin Assignments
NET "choice" LOC = "P200" | IOSTANDARD = LVTTL ;
NET "clock" LOC = "P80" | IOSTANDARD = LVTTL ;
NET "output" LOC = "P33" | IOSTANDARD = LVTTL | DRIVE = 2 ;
#PACE: Start of PACE Area Constraints
#PACE: Start of PACE Prohibit Constraints
#PACE: End of Constraints generated by PACE
APP4
Listado 11 APP4, Programa simple de RS232 bidireccional (C para PIC C)
#include "APP4.h"
char received_ch;
int1 got_data;
#int_RDA
RDA_isr()
{
received_ch = getc();
got_data = 1;
}
void main()
{
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(1)
{
if (got_data)
{
putc(received_ch);
got_data = 0;
}
putc(’-’);
delay_ms(100);
}
}
106
Listado 12 APP4, paso de señales seriales (VHDL)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity serial_pass is
Port ( tx_in : in STD_LOGIC; -- From PIC(44-TX) to FPGA(190)
tx_out : out STD_LOGIC; -- From FPGA(55) To RS232(4) transceiver
rx_in : in STD_LOGIC; -- From RS232(6) transceiver to FPGA(54)
rx_out : out STD_LOGIC);-- From FPGA(189) To PIC(1-RX)
end serial_pass;
architecture Behavioral of serial_pass is
begin
process (tx_in,rx_in)
begin
tx_out <= tx_in;
rx_out <= rx_in;
end process;
end Behavioral;
Listado 13 APP4, Configuración de E/S del FPGA (UCF)
#PACE: Start of Constraints generated by PACE
#PACE: Start of PACE I/O Pin Assignments
NET "rx_in" LOC = "P54" | IOSTANDARD = LVTTL ;
NET "rx_out" LOC = "P189" | IOSTANDARD = LVTTL | DRIVE = 2 ;
NET "tx_in" LOC = "P190" | IOSTANDARD = LVTTL ;
NET "tx_out" LOC = "P55" | IOSTANDARD = LVTTL | DRIVE = 2 ;
#PACE: Start of PACE Area Constraints
#PACE: Start of PACE Prohibit Constraints
#PACE: End of Constraints generated by PACE
107
APP5
Listado 14 APP5, Muestreo de los ADCs según señal del PIC (VHDL)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity adc_to_pc is
Port ( clock : in STD_LOGIC; -- 80
adcA : in STD_LOGIC_VECTOR (7 downto 0); -- 12,11,9,8,5,4,3,2
adcB : in STD_LOGIC_VECTOR (7 downto 0); -- 28,25,24,23,22,19,18,16
get : in STD_LOGIC; -- (PIC RB0) 181
adc_out : out STD_LOGIC_VECTOR (7 downto 0); -adcA_pwrdn : out STD_LOGIC; -- FPGA(61)
adcB_pwrdn : out STD_LOGIC; -- FPGA(62)
adcA_clk : out STD_LOGIC; -- FPGA(15)
adcB_clk : out STD_LOGIC; -- FPGA(29)
tx_in : in STD_LOGIC; -- From PIC(44-TX) to FPGA(190)
tx_out : out STD_LOGIC; -- From FPGA(55) To RS232(4) transceiver
rx_in : in STD_LOGIC; -- From RS232(6) transceiver to FPGA(54)
rx_out : out STD_LOGIC); -- From FPGA(189) To PIC(1-RX)
end adc_to_pc;
architecture Behavioral of adc_to_pc is
begin
process (clock, adcA, adcB, get)
variable last_get : STD_LOGIC := ’0’;
begin
if (clock’event and clock = ’1’) then
if (last_get = ’0’ and get = ’1’) then
adc_out <= adcA;
elsif (last_get = ’1’ and get = ’0’) then
adc_out <= adcB;
end if;
last_get := get;
end if;
end process;
process (clock)
variable clk_count : STD_LOGIC_VECTOR (1 downto 0) := "00";
begin
if (clock’event and clock = ’1’) then
clk_count := clk_count + 1;
end if;
adcA_clk <= clk_count(1); -- 25 MHz
adcB_clk <= clk_count(1); -- 25 MHz
end process;
adcA_pwrdn <= ’0’;
adcB_pwrdn <= ’0’;
tx_out <= tx_in;
rx_out <= rx_in;
end Behavioral;
108
Listado 15 APP5, Configuración de E/S del FPGA (UCF)
#PACE: Start of Constraints generated by PACE
#PACE: Start of PACE I/O Pin Assignments
NET "adc_out<0>" LOC = "P199" ;
NET "adc_out<1>" LOC = "P197" ;
NET "adc_out<2>" LOC = "P205" ;
NET "adc_out<3>" LOC = "P203" ;
NET "adc_out<4>" LOC = "P202" ;
NET "adc_out<5>" LOC = "P200" ;
NET "adc_out<6>" LOC = "P193" ;
NET "adc_out<7>" LOC = "P192" ;
NET "adcA<0>" LOC = "P2" ;
NET "adcA<1>" LOC = "P3" ;
NET "adcA<2>" LOC = "P4" ;
NET "adcA<3>" LOC = "P5" ;
NET "adcA<4>" LOC = "P8" ;
NET "adcA<5>" LOC = "P9" ;
NET "adcA<6>" LOC = "P11" ;
NET "adcA<7>" LOC = "P12" ;
NET "adcA_clk" LOC = "P15" ;
NET "adcA_pwrdn" LOC = "P61" ;
NET "adcB<0>" LOC = "P16" ;
NET "adcB<1>" LOC = "P18" ;
NET "adcB<2>" LOC = "P19" ;
NET "adcB<3>" LOC = "P22" ;
NET "adcB<4>" LOC = "P23" ;
NET "adcB<5>" LOC = "P24" ;
NET "adcB<6>" LOC = "P25" ;
NET "adcB<7>" LOC = "P28" ;
NET "adcB_clk" LOC = "P29" ;
NET "adcB_pwrdn" LOC = "P62" ;
NET "clock" LOC = "P80" ;
NET "get" LOC = "P181" ;
NET "rx_in" LOC = "P54" ;
NET "rx_out" LOC = "P189" ;
NET "tx_in" LOC = "P190" ;
NET "tx_out" LOC = "P55" ;
#PACE: Start of PACE Area Constraints
#PACE: Start of PACE Prohibit Constraints
#PACE: End of Constraints generated by PACE
109
Listado 16 APP5, Control del muestreo y envío al PC (C para PIC C)
#include "C:\Documents and Settings\jcaram\My Documents\fpga\pic\projects\APP5\APP5.h"
#byte PORTD=0xF83
#byte PORTC=0xF82
#byte PORTB=0xF81
void read_send(int1 nl)
{
int8 adc_val;
adc_val=((PORTD&0x3)< <6)|(PORTC&0x3F);
printf(" %u ",adc_val);
if(nl) printf("\n\r");
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
SET_TRIS_B(0xFE); // 1=Input, 0=Output
while(1)
{
if (got_data)
{
putc(received_ch);
got_data = 0;
}
delay_ms(50);
output_high(pin_b0);
read_send(0);
delay_ms(50);
output_low(pin_b0);
read_send(1);
}
}
110
APP6
Listado 17 APP6, Paso de señales seriales y SPI por el FPGA (VHDL)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity serial_and_spi_pass is
Port ( tx_in : in STD_LOGIC;
tx_out : out STD_LOGIC;
rx_in : in STD_LOGIC;
rx_out : out STD_LOGIC;
sck_in : in STD_LOGIC;
sck_out : out STD_LOGIC;
sdo_in : in STD_LOGIC;
sdo_out : out STD_LOGIC;
sdi_in : in STD_LOGIC;
sdi_out : out STD_LOGIC;
flash_ns_in : in STD_LOGIC; -- PIC(RD0-38)
flash_ns_out : out STD_LOGIC;
flash_nw : out STD_LOGIC;
flash_nhold : out STD_LOGIC);
end serial_and_spi_pass;
architecture Behavioral of serial_and_spi_pass is
begin
tx_out <= tx_in;
rx_out <= rx_in;
sck_out <= sck_in;
sdo_out <= sdo_in;
sdi_out <= sdi_in;
flash_ns_out <= flash_ns_in;
flash_nw <= ’1’;
flash_nhold <= ’1’;
end Behavioral;
111
Listado 18 APP6, Configuración de E/S del FPGA (UCF)
#PACE: Start of Constraints generated by PACE
#PACE: Start of PACE I/O Pin Assignments
NET "flash_nhold" LOC = "P102" ;
NET "flash_ns_in" LOC = "P199" ;
NET "flash_ns_out" LOC = "P100" ;
NET "flash_nw" LOC = "P99" ;
NET "rx_in" LOC = "P54" ;
NET "rx_out" LOC = "P189" ;
NET "sck_in" LOC = "P200" ;
NET "sck_out" LOC = "P98" ;
NET "sdi_in" LOC = "P101" ;
NET "sdi_out" LOC = "P193" ;
NET "sdo_in" LOC = "P192" ;
NET "sdo_out" LOC = "P97" ;
NET "tx_in" LOC = "P190" ;
NET "tx_out" LOC = "P55" ;
#PACE: Start of PACE Area Constraints
#PACE: Start of PACE Prohibit Constraints
#PACE: End of Constraints generated by PACE
112
Listado 19 APP6, Aplicación de prueba de memoria FLASH, Parte 1 de 4 (C para PIC C)
#include "C:\Documents and Settings\jcaram\My Documents\fpga\pic\projects\APP6_real\APP6_real.h"
char ch_in;
int1 ch_received;
char data[]="Juan Pablo Caram";
char data_len = 16;
#int_RDA
RDA_isr()
{
ch_received = 1;
ch_in = getc();
}
void flash_program(char sector, char page)
{
char i;
output_low(PIN_D0);
spi_write(0x06); // Write Enable
output_high(PIN_D0);
output_low(PIN_D0);
spi_write(0x02); // Page Program
// 3 Byte Address MSB first
spi_write(sector);
spi_write(page);
spi_write(0);
// Data
for(i=0;i<data_len;i++)
{
spi_write(data[i]);
}
output_high(PIN_D0);
}
void flash_read(char sector, char page)
{
char i;
char data_in;
output_low(PIN_D0);
spi_write(0x03); // Read
// Address
spi_write(sector);
spi_write(page);
spi_write(0);
113
Listado 20 APP6, Aplicación de prueba de memoria FLASH, Parte 2 de 4 (C para PIC C)
// Data
for(i=0;i<data_len;i++)
{
spi_write(0);
data_in = spi_read();
putc(data_in);
}
printf("\n\r");
output_high(PIN_D0);
}
int1 flash_busy()
{
char status;
output_low(PIN_D0);
spi_write(0x05);
spi_write(0);
status = spi_read();
output_high(PIN_D0);
if(status&0x01)
return 1;
else
return 0;
}
void wait_for_flash()
{
char status;
output_low(PIN_D0);
spi_write(0x05);
spi_write(0);
status = spi_read();
while(status&0x01)
{
spi_write(0);
status = spi_read();
}
output_high(PIN_D0);
}
void bulk_erase_flash()
{
// This might take up to 40 seconds.
output_low(PIN_D0);
spi_write(0x06); // Write Enable
output_high(PIN_D0);
output_low(PIN_D0);
spi_write(0xC7); // Bulk Erase
output_high(PIN_D0);
}
114
Listado 21 APP6, Aplicación de prueba de memoria FLASH, Parte 3 de 4 (C para PIC C)
void read_flash_id()
{
char v1, v2, v3;
output_low(PIN_D0);
spi_write(0x9F);
spi_write(0);
v1 = spi_read();
spi_write(0);
v2 = spi_read();
spi_write(0);
v3 = spi_read();
output_high(PIN_D0);
printf(" %x %x %x\n\r",v1,v2,v3);
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_CLK_DIV_4|SPI_SAMPLE_AT_END);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
SET_TRIS_D(0xFE); // DO is output
output_high(PIN_D0);
SET_TRIS_C(0b11010111);
delay_ms(100);
printf("APP6 Started.\n\r");
while(1)
{
if (ch_received)
{
ch_received = 0;
switch(ch_in)
{
case ’e’:
printf("Bulk Erase\n\r");
bulk_erase_flash();
while(flash_busy())
{
putc(’.’);
delay_ms(250);
}
printf("\n\rDone.\n\r");
break;
115
Listado 22 APP6, Aplicación de prueba de memoria FLASH, Parte 4 de 4 (C para PIC C)
case ’w’:
printf("Writing\n\r");
flash_program(0,0);
printf("Done.\n\r");
break;
case ’r’:
printf("Reading\n\r");
flash_read(0,0);
printf("Done\n\r");
break;
case ’i’:
printf("Chip ID\n\r");
read_flash_id();
break;
default:
printf("Unknown command %c\n\r",ch_in);
}
}
}
}
116
APP7
Listado 23 APP7, Escritura y lectura de números Pseudo-aleatorios en SRAM. Parte 1 de 3
(VHDL)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity noise_store is
Port ( clk_in : in STD_LOGIC;
w : in STD_LOGIC;
full : out STD_LOGIC;
get_clk : in STD_LOGIC;
byte_choose : in STD_LOGIC;
addr : inout STD_LOGIC_VECTOR (15 downto 0);
data : inout STD_LOGIC_VECTOR (15 downto 0);
data_out : out STD_LOGIC_VECTOR (7 downto 0);
nOE : out STD_LOGIC;
nWE : out STD_LOGIC;
nCE : out STD_LOGIC;
nBHE : out STD_LOGIC;
nBLE : out STD_LOGIC;
rx_in : in STD_LOGIC;
rx_out : out STD_LOGIC;
tx_in : in STD_LOGIC;
tx_out : out STD_LOGIC;
state : out STD_LOGIC_VECTOR (2 downto 0));
end noise_store;
architecture Behavioral of noise_store is
type MachState is (Reading, Reading_B, toWriting, Writing, toReading, RamFull);
signal clock : STD_LOGIC;
signal clk_div : STD_LOGIC := ’0’;
signal CurrentState: MachState := toReading ;
signal NextState: MachState;
signal lfsr : STD_LOGIC_VECTOR (15 downto 0) := "1010101010101010";
begin
tx_out <= tx_in;
rx_out <= rx_in;
nCE <= ’0’;
nBHE <= ’0’;
nBLE <= ’0’;
process (clk_in, clk_div)
begin
if clk_in’event and clk_in = ’1’ then
clk_div <= not clk_div;
end if;
end process;
117
Listado 24 APP7, Escritura y lectura de números Pseudo-aleatorios en SRAM. Parte 2 de 3
(VHDL)
clock <= clk_div;
process (CurrentState, w, addr, lfsr, clock, get_clk, data)
begin
case CurrentState is
when Reading =>
state <= "000";
full <= ’0’;
nWE <= ’1’;
nOE <= ’0’;
data <= "ZZZZZZZZZZZZZZZZ";
if byte_choose = ’0’ then
data_out <= data (7 downto 0);
else
data_out <= data (15 downto 8);
end if;
if w = ’1’ then
NextState <= toWriting;
elsif get_clk = ’0’ then
NextState <= Reading_B;
else
NextState <= Reading;
end if;
when Reading_B =>
state <= "001";
full <= ’0’;
nWE <= ’1’;
nOE <= ’0’;
data <= "ZZZZZZZZZZZZZZZZ";
data_out <= "00000000";
if get_clk = ’1’ then
NextState <= Reading;
else
NextState <= Reading_B;
end if;
when toWriting =>
state <= "010";
full <= ’0’;
nWE <= ’1’;
nOE <= ’1’;
data <= "ZZZZZZZZZZZZZZZZ";
data_out <= "00000000";
if w = ’1’ then
NextState <= Writing;
else
NextState <= toWriting;
end if;
when Writing =>
state <= "011";
full <= ’0’;
nWE <= clock;
nOE <= ’1’;
data <= lfsr;
data_out <= "00000000";
if w = ’0’ then
NextState <= toReading;
elsif addr = "1111111111111111" then
NextState <= RamFull;
else
NextState <= Writing;
end if;
118
Listado 25 APP7, Escritura y lectura de números Pseudo-aleatorios en SRAM. Parte 3 de 3
(VHDL)
when toReading =>
state <= "100";
full <= ’0’;
nWE <= ’1’;
nOE <= ’1’;
data <= "ZZZZZZZZZZZZZZZZ";
data_out <= "00000000";
if w = ’0’ then
NextState <= Reading;
else
NextState <= toReading;
end if;
when RamFull =>
state <= "101";
full <= ’1’;
nWE <= ’1’;
nOE <= ’1’;
data <= "ZZZZZZZZZZZZZZZZ";
data_out <= "00000000";
if w = ’0’ then
NextState <= toReading;
else
NextState <= RamFull;
end if;
when others =>
state <= "111";
full <= ’0’;
nWE <= ’1’;
nOE <= ’1’;
data <= "ZZZZZZZZZZZZZZZZ";
data_out <= "00000000";
NextState <= toReading;
end case;
end process;
process (clock)
begin
if clock’event and clock = ’1’ then
if CurrentState = toWriting then
lfsr <= "1010101010101010";
addr <= "0000000000000000";
end if;
if CurrentState = Writing then
lfsr(15 downto 1) <= lfsr(14 downto 0);
lfsr(0) <= lfsr(15) xnor lfsr(15) xnor lfsr(13) xnor lfsr(4);
addr <= addr + 1;
end if;
if CurrentState = Reading_B and get_clk = ’1’ then
addr <= addr + 1;
end if;
if CurrentState = toReading then
addr <= "0000000000000000";
end if;
CurrentState <= NextState;
end if;
end process;
end Behavioral;
119
Listado 26 APP7, Configuración de E/S del FPGA (UCF)
#PACE: Start of Constraints generated by PACE
#PACE: Start of PACE I/O Pin Assignments
NET "addr<0>" LOC = "P150" ;
NET "addr<10>" LOC = "P147" ;
NET "addr<11>" LOC = "P133" ;
NET "addr<12>" LOC = "P145" ;
NET "addr<13>" LOC = "P146" ;
NET "addr<14>" LOC = "P144" ;
NET "addr<15>" LOC = "P132" ;
NET "addr<1>" LOC = "P151" ;
NET "addr<2>" LOC = "P152" ;
NET "addr<3>" LOC = "P153" ;
NET "addr<4>" LOC = "P140" ;
NET "addr<5>" LOC = "P139" ;
NET "addr<6>" LOC = "P138" ;
NET "addr<7>" LOC = "P137" ;
NET "addr<8>" LOC = "P135" ;
NET "addr<9>" LOC = "P134" ;
NET "byte_choose" LOC = "P175" ;
NET "clk_in" LOC = "P80" ;
NET "data<0>" LOC = "P106" ;
NET "data<10>" LOC = "P127" ;
NET "data<11>" LOC = "P126" ;
NET "data<12>" LOC = "P123" ;
NET "data<13>" LOC = "P122" ;
NET "data<14>" LOC = "P120" ;
NET "data<15>" LOC = "P119" ;
NET "data<1>" LOC = "P107" ;
NET "data<2>" LOC = "P108" ;
NET "data<3>" LOC = "P109" ;
NET "data<4>" LOC = "P112" ;
NET "data<5>" LOC = "P113" ;
NET "data<6>" LOC = "P115" ;
NET "data<7>" LOC = "P116" ;
NET "data<8>" LOC = "P129" ;
NET "data<9>" LOC = "P128" ;
NET "data_out<0>" LOC = "P199" ;
NET "data_out<1>" LOC = "P197" ;
NET "data_out<2>" LOC = "P205" ;
NET "data_out<3>" LOC = "P203" ;
NET "data_out<4>" LOC = "P202" ;
NET "data_out<5>" LOC = "P200" ;
NET "data_out<6>" LOC = "P193" ;
NET "data_out<7>" LOC = "P192" ;
NET "full" LOC = "P187" ;
NET "get_clk" LOC = "P180" ;
NET "nBHE" LOC = "P172" ;
NET "nBLE" LOC = "P177" ;
NET "nCE" LOC = "P167" ;
NET "nOE" LOC = "P168" ;
NET "nWE" LOC = "P171" ;
NET "rx_in" LOC = "P54" ;
NET "rx_out" LOC = "P189" ;
NET "state<0>" LOC = "P33" ;
NET "state<1>" LOC = "P30" ;
NET "state<2>" LOC = "P49" ;
NET "tx_in" LOC = "P190" ;
NET "tx_out" LOC = "P55" ;
NET "w" LOC = "P181" ;
120
Listado 27 APP7, Control de la máquina de estados y envío de los datos al PC via serial.
Parte 1 de 2 (C para PIC C)
#include "C:\Documents and Settings\jcaram\My Documents\fpga\pic\projects\APP7\APP7.h"
#byte PORTD=0xF83
#byte PORTC=0xF82
#byte PORTB=0xF81
char received_char;
int1 char_received;
#int_RDA
RDA_isr()
{
char_received = 1;
received_char = getc();
}
void fill_ram()
{
// w = 1
output_high(PIN_B0);
// Wait until Full = 1
while( !input(PIN_D4) );
return;
}
#define RAMMAX 65536
void read_ram()
{
int32 i;
char value;
// w = 0
output_low(PIN_B0);
// Iterate over ram
for(i=0;i<RAMMAX;i++)
{
// byte_choose = 1, MSB
output_high(PIN_B2);
// Read and print
// C5=MSB, C4, C3, C2, C1, C0, D1, D0=LSB
value=(PORTC&0x3F)< <2|(PORTD&0x3);
printf(" %2x ",value);
// byte_choose = 0
output_low(PIN_B2);
// Read and print
value=(PORTC&0x3F)< <2|(PORTD&0x3);
printf(" %2x \n\r",value);
// get_clk LOW
output_low(PIN_B1);
delay_us(10);
// get_clk HIGH
output_high(pin_B1);
delay_us(10);
121
Listado 28 APP7, Control de la máquina de estados y envío de los datos al PC via serial.
Parte 2 de 2 (C para PIC C)
delay_ms(100);
}
return;
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
// B0 ->w, B1 ->get_glk, B2 ->byte_choose, D4 <- Full
SET_TRIS_B(0xFD); // 1=Input, 0=Output
//SET_TRIS_C(0xFF);
//SET_TRIS_D(0xFF);
// get_clk should start high
output_high(PIN_B1);
// w should start low
output_low(PIN_B0);
delay_ms(100);
printf("APP7 Started.\n\r");
while(1)
{
if (char_received)
{
char_received = 0;
switch(received_char)
{
case ’w’:
printf("Filling Ram...\n\r");
fill_ram();
printf("Done.\n\r");
break;
case ’r’:
printf("Reading RAM...\n\r");
read_ram();
printf("Done.\n\r");
break;
default:
printf("Unknown command %c\n\r",received_char);
}
}
}
}
122
APP8
Listado 29 APP8, Loopback (VHDL)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity LoopBack is
Port ( tx_in : in STD_LOGIC;
rx_out : out STD_LOGIC);
end LoopBack;
architecture Behavioral of LoopBack is
begin
rx_out <= tx_in;
end Behavioral;
123
Apéndice F: Opciones durante el ensamblaje
Buscar OPT[n] donde n es el número en la primera columna de la tabla, en la serigrafía
del circuito impreso, para reconocer los componentes involucrados en dicha opción.
OPT[]
1
2
3
4
5
6
7
Cuadro 6: Opciones de ensamblaje.
Opción
Por defecto
Notas
Modo de configuración 0,0,0 = Master Serial
Crear un puente de soldadudel FPGA
ra entre el cuadro central y
aquel marcado con un ’0’.
En este modo el FPGA leerá
su configuración automáticamente desde la memoria de
configuración en la PCB.
Voltaje del banco de 3.3V
Crear un puente de soldaduE/S número 3
ra entre los recuadros correspondiente para 3.3V
HSWAP
Soldar R205 = 0Ω. Esto habilita pull-ups en to(HSWAP = ’0’)
dos los pines de E/S durante la configuración del FPGA. HSWAP tiene un pullup interno durante la configuración, pero debe ser activamente comandado antes de
comenzar la configuración.
RS232 directo al PIC
NO. No soldar
Soldar solo para propósitos
de depuración. En este caso
debe asegurarse de que los
pines del FPGA conectados a
estas líneas están en modo de
alta impedancia.
Regulador lineal de NO. No soldar.
El regulador conmutado de
3.3V
3.3V se utiliza por defecto.
Chip USB en la cadena NO. Corto-circuitar los Para incluir el chip USB en
JTAG
pines 3 y 5.
la cadena cortocircuitar los
pines 1 con 2, 3 con 4, 5 con
6, 7 con 8, y TDI con TDO en
el conector JTAG.
Voltaje de la EEPROM VCC_USB = 5V. Sol- Sólo para depuración.
para el
dar R11 = 0Ω
chip USB.
124
Apéndice G: Estadísticas de trabajo
Costos de Desarrollo:
• Advanced Circuits: US $ 215
• Digikey: US $ 625
• TOTAL: US $ 840
Tiempo invertido:
• Desarrollo de la Plataforma: En promedio 4 horas, 4 días por semana durante 14
meses: ~1200 horas.
• Composición de la Memoria escrita: En promedio 10 horas semanales durante 12
meses: ~120 horas.
125
Descargar