Está en la página 1de 96

UNIVERSIDAD DE GUANAJUATO

DE INGENIERIAS
DIVISION
CAMPUS IRAPUATO-SALAMANCA

Sntesis digital y modulaci


on
de tonos de prueba para radio comercial

TESIS PROFESIONAL
QUE PARA OBTENER EL TITULO DE:

INGENIERO EN COMUNICACIONES Y ELECTRONICA

PRESENTA:

Mois
es Blas Granados Cruz

ASESOR:

Dr. Rene de Jes


us Romero Troncoso

SALAMANCA, GTO.

Abril, 2014

A mi padre, Antonio
A mi madre, Elva
A mi hermano, Rogelio

Agradecimientos
A mi padre, Antonio, por la vida, por ser mi primer maestro, por su gran
apoyo y generosidad a lo largo de todos mis a
nos de estudio. Espero empezar
a devolverte un poco de todo lo que me has dado.
A mi madre, Elva, por la vida, por su amor y sus cuidados. Porque siempre
has demostrado ser la persona que mas se interesa por m, en cada momento,
sin importar mis errores. Cada logro en mi vida es por y para ti. Te quiero
mucho.
A mi hermano, Rogelio, por su estmulo y generosidad. Me has ense
nado
mucho de la vida y siempre fuiste un motivador para superarme.
A mi asesor, Dr. Rene Romero Troncoso. A mis profesores: Dr. Vctor
Ayala, Dr. Antonio Vega, M.I. Rogelio Castro, Dr. Mario Ibarra, Dr. Sergio
Ledesma, Ing. Hector Turrubiates, M.I. Donato Hernandez, M.I. Gerardo Canedo, Ing. Manuel Vega, Ing. Jes
us Herrera. Gracias a todos por su ense
nanza
y sus consejos.
A mis compa
neros y amigos a lo largo de la carrera, con quienes compart muchas experiencias y aprend en clases y fuera de ellas: Jorge de Anda, Ivan Vera, Luis Sanchez, Marco Contreras, Carlos Lara, Federico Ramos, Cesar Garca, David Elvira, Francisco Salazar, Diego Mendoza, Alonso
Lopez, Jorge Barbosa, Miyuki Villalon, Magali Flores, Elizabeth Martnez,
etc.

ii

Indice general
1. Introducci
on
1.1. Antecedentes . . . . . . . . .
1.1.1. FPGA . . . . . . . . .
1.1.2. Sntesis digital directa
1.1.3. AM . . . . . . . . . . .
1.2. Descripcion del problema . . .
1.3. Planteamiento general . . . .
1.4. Objetivos . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

2. Fundamento te
orico
2.1. Amplitud modulada . . . . . . . . . . . . . . . . . . . . . .
2.2. Indice de modulacion . . . . . . . . . . . . . . . . . . . . . .
2.2.1. Sobremodulacion y distorsion . . . . . . . . . . . . .
2.3. Bandas laterales y el dominio de la frecuencia . . . . . . . .
2.3.1. Calculo de las bandas laterales . . . . . . . . . . . . .
2.3.2. Representacion de AM en el dominio de la frecuencia
2.4. Potencia de una se
nal de AM . . . . . . . . . . . . . . . . .
2.5. AM comercial . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6. Frecuencia Modulada . . . . . . . . . . . . . . . . . . . . . .
2.7. RS-232 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8. Sntesis digital directa . . . . . . . . . . . . . . . . . . . . .
2.8.1. Acumulador de fase . . . . . . . . . . . . . . . . . . .
2.8.2. Tabla de consulta . . . . . . . . . . . . . . . . . . . .
iii

.
.
.
.
.
.
.

1
1
1
2
4
5
5
6

.
.
.
.
.
.
.
.
.
.
.
.
.

9
9
12
13
14
14
16
18
19
21
21
23
23
25

2.9. Conversion digital-analogica . . . . . . . . . . . . . . . . . . . 26


3. Sistema digital
3.1. Comunicacion RS-232 . . . . . . . .
3.1.1. Programa para PC . . . . .
3.1.2. Conexion entre PC y tarjeta
3.2. FPGA . . . . . . . . . . . . . . . .
3.2.1. Recepcion RS-232 . . . . . .
3.2.2. Sintetizador de tonos . . . .
3.2.3. Sintetizador de portadora .
3.2.4. Modulacion en amplitud . .
3.2.5. Frecuencia modulada . . . .
3.3. Conversion digital-analogica . . . .
3.3.1. AD9752 . . . . . . . . . . .
4. Resultados
4.1. Comunicacion RS-232 . . . . . .
4.2. Sntesis digital de frecuencias .
4.2.1. Tonos . . . . . . . . . .
4.2.2. Portadoras . . . . . . . .
4.3. Modulacion en amplitud . . . .
4.4. Sistema final . . . . . . . . . . .
4.4.1. Imagenes de tonos . . .
4.4.2. Imagenes de portadoras
4.4.3. Imagenes de AM . . . .
4.5. Frecuencia modulada . . . . . .
4.6. Analisis de resultados . . . . . .
4.7. Perspectivas . . . . . . . . . . .
A. C
odigos VHDL

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

. . .
. . .
DE0
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

28
28
28
30
30
31
34
37
38
38
40
40

.
.
.
.
.
.
.
.
.
.
.
.

42
42
42
43
44
45
46
47
47
48
48
49
51
53

iv

Indice de figuras
1.1. Diagrama a bloques del sistema propuesto . . . . . . . . . . .

2.1. Modulacion en amplitud . . . . . . . . . . . . . . . . . . . .


2.2. Modulador de amplitud, mostrando sus entradas y salidas .
2.3. Se
nal distorsionada por sobremodulacion . . . . . . . . . . .
2.4. Componentes de una se
nal de AM . . . . . . . . . . . . . . .
2.5. Grafica en el dominio de la frecuencia de una se
nal de AM .
2.6. Relacion entre los dominios del tiempo y la frecuencia . . . .
2.7. Bandas laterales de una se
nal de voz modulada en amplitud
2.8. Se
nales de FM . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9. Trama RS-232 . . . . . . . . . . . . . . . . . . . . . . . . . .
2.10. Bloques de un sintetizador digital de frecuencia [1] . . . . . .
2.11. Acumulador de fase [1] . . . . . . . . . . . . . . . . . . . . .
2.12. Smbolo de un DAC . . . . . . . . . . . . . . . . . . . . . . .
2.13. Se
nales generadas por el sistema digital . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.

10
12
13
15
16
17
18
22
23
23
24
27
27

3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
3.7.
3.8.

.
.
.
.
.
.
.
.

29
30
31
32
35
37
39
39

Cable adaptador USB - serial . . . . .


Ventana principal de la aplicacion . . .
Diagrama de conexion del CI MAX232
Bloques del sistema receptor RS-232 .
Bloques de sintetizador de tonos . . . .
Bloques de sintetizador de portadoras .
Bloques de modulacion AM . . . . . .
Modulacion FM . . . . . . . . . . . . .
v

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

3.9. DAC AD9752 [18] . . . . . . . . . . . . . . . . . . . . . . . . . 41


4.1.
4.2.
4.3.
4.4.
4.5.

Acumulador de fase para 5 kHz . . . . . . . . . . . . . . . . .


Tono de 5 kHz . . . . . . . . . . . . . . . . . . . . . . . . . . .
Espectro del tono de 5 kHz . . . . . . . . . . . . . . . . . . . .
Espectro de una portadora de 540 kHz . . . . . . . . . . . . .
Portadora de 540 kHz modulada en amplitud por un tono de
5 kHz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6. Espectro de la se
nal modulada . . . . . . . . . . . . . . . . . .
4.7. Sistema final implementado . . . . . . . . . . . . . . . . . . .
4.8. Ejemplos de tonos generados. 100Hz, 1kHz y 5kHz . . . . . . .
4.9. Ejemplos de portadoras. 540kHz y 1MHz . . . . . . . . . . . .
4.10. Portadora de 540 kHz modulada por tonos de 100 Hz(izquierda)
y 1 kHz(derecha) . . . . . . . . . . . . . . . . . . . . . . . . .
4.11. Simulacion del sistema FM. Tono de 1 kHz, portadora de 10
kHz e ndice de modulacion de 4. . . . . . . . . . . . . . . . .
4.12. Espectro de la se
nal de FM obtenida . . . . . . . . . . . . . .

vi

43
43
44
44
45
46
46
47
47
48
49
49

Captulo 1
Introducci
on
En este captulo se presentan los antecedentes que sirven como base para
este trabajo de tesis, incluyendo trabajos previos, locales y externos, as como el planteamiento del problema que se aborda, la estrategia de solucion
propuesta y los objetivos que se pretenden cubrir.

1.1.

Antecedentes

Los conocimientos empleados en este trabajo de tesis corresponden principalmente a las areas de la Electronica Digital y los Sistemas de Comunicacion.
Conceptos como la Sntesis Digital Directa y la Modulacion en amplitud, que
son la base del sistema propuesto, se explican en m
ultiples libros de Ingeniera. En la Division de Ingenieras de la Universidad de Guanajuato, en
particular, varios trabajos de tesis se han basado en estas areas. A continuacion se citan algunos precedentes del trabajo actual.

1.1.1.

FPGA

Una de las areas de la electronica digital moderna mas desarrolladas en


la DICIS es el manejo de logica programable, especialmente utilizando el
lenguaje de descripcion VHDL y circuitos programables FPGA.
1

Un FPGA (del ingles Field Programmable Gate Array) es, como su nombre lo indica, un dispositivo semiconductor basado en bloques logicos que
pueden ser configurados de acuerdo a un lenguaje descriptivo como VHDL
(estandar IEEE, Very High-Speed Integrated Circuit Hardware Description
Language). La utilidad de los FPGA ha sido demostrada en los procesos de
dise
no y como primeras versiones de un sistema digital, antes de ser implementados utilizando ASIC(Application Specific Integrated Circuit).
Esta versatilidad permite implementar sistemas digitales en hardware de
forma sencilla. En la DICIS existen muchos trabajos de tesis que han sido
desarrollados utilizando esta tecnologa.
La mayor parte de la teora utilizada para este trabajo y la descripcion
de varios bloques logicos ha sido tomada del libro del Dr. Romero Troncoso,
publicado por la Universidad de Guanajuato [1].

1.1.2.

Sntesis digital directa

La sntesis digital directa (DDS por sus siglas en ingles) es una tecnica
que consiste en generar una o varias frecuencias derivadas de una misma base
de tiempo, de tal manera que la relacion entre la salida y la frecuencia de
referencia sea una fraccion racional[2].
Dicha tecnica ha sido cubierta ampliamente por diversos autores, siendo
algunos de los principales Kroupa[3] y Vankka[4] en sus respectivos libros. En
ellos se explica la teora relacionada con esta tecnica y diferentes formas de
implementarla. En captulos posteriores se profundizara mas en la materia.
En la Division de Ingenieras, la DDS tambien ha sido tratada en distintos
temas de tesis, siendo uno de los primeros el de Medina Rico[5], en 1990, en
el cual se construyo una tarjeta compatible con el bus de la microcomputadora IBM PC/XT capaz de proporcionar cuatro canales de salida analogicos,
controlar la amplitud de las se
nales y generar frecuencias hasta 1 MHz.
2

Posteriormente, Lopez Jaramillo [6] presento un sintetizador digital de


formas de onda basado en el microcontrolador MC6803, simplificando la implementacion del sistema y generando diferentes formas de onda con frecuencias hasta el rango de los MegaHertz.
Garca Perez [7], en 1992, aborda la sntesis digital utilizando PLL para
crear una base de tiempo de alta resolucion. El sistema propuesto en esa tesis
se basa en un microprocesador MC68000 de Motorola y consiste en sintetizar
frecuencias en el rango de 10 a 20 MHz con una resolucion de 1 Hz, para
posteriormente, utilizando escaladores de frecuencia, ampliar la gama desde
0.000625 Hz hasta 20 MHz.
En 1995, Laguna Valdes [8] propuso un sintetizador digital de frecuencia,
utilizando la arquitectura pipeline. Como se explica en este trabajo, el uso
de esta arquitectura permite reducir los retardos en el acumulador de fase,
con el objeto de que la velocidad de operacion del sintetizador sea mayor.
El trabajo mas reciente, fue presentado por Aguilera Gasca[9] en 2006. En
el, se implemento un generador de funciones utilizando VHDL sobre la tarjeta
de desarrollo Spartan-3 de Xilinx, basada en FPGA. En este trabajo, se
utilizaron muchos de los bloques que se retoman en esta tesis, principalmente
lo relacionado con el acumulador de fase, utilizando pipeline, y su aplicacion
para generar formas de onda, a traves de tablas de consulta (LUT). En
este trabajo, se generaban frecuencias de hasta 1 MHz, con formas de onda
sinusoidales, triangulares y cuadradas.
En este trabajo de tesis, se presenta un sistema capaz de sintetizar frecuencias puras (sinusoidales), en un rango de 1 Hz hasta 5 KHz, a manera
de tonos de prueba audibles, y por otro lado, frecuencias de 540 KHz hasta
1600 KHz, con intervalos de 10 KHz, de forma que puedan ser utilizados
como se
nales portadoras para la banda comercial de AM.

1.1.3.

AM

La modulacion por amplitud (AM) es la tecnica de modulacion mas temprana. Se invento a fines del siglo XIX y a principios del siglo XX fue ampliamente utilizada como solucion para transmision de audio de calidad a
traves de las lneas telefonicas. Posteriormente, se convirtio en el estandar
de difusion por ondas de radio. En la actualidad, aunque ha perdido terreno
ante nuevas formas de modulacion, sigue en uso debido a su sencillez.
Debido al amplio uso que tuvo durante el siglo XX y puesto que es la
tecnica de modulacion original, su teora se incluye com
unmente en textos
de Sistemas de Comunicacion. Como libros de consulta para esta tesis se
utilizaron las obras de Frenzel [10] y Lathi [11].
Dentro de la Universidad, se han realizado algunos trabajos basados en
el uso de AM. En 1994, por ejemplo, Herrera Cabral presento el dise
no de un
sintonizador digital para la banda de AM [12]. Para este proyecto se utilizo el
sintetizador de frecuencia de entrada serial MC145155. Con este circuito, se
generaron se
nales en el rango comercial de AM, de 550 KHz a 1600 KHz,
utilizando una frecuencia de referencia de 10 KHz.
Otro trabajo relacionado fue presentado en 1995 por Rojas Laguna y
Violante Gavira[13]. Ellos contruyeron un Receptor superheterodino de AM
basado en tecnicas de sntesis digital. En su trabajo usaron el microcontrolador MC6803 y el MC145155 para generar las se
nales que requiere el mezclador
del receptor.
En este trabajo de tesis se hace uso del lenguaje descriptivo VHDL para
crear los bloques de sntesis y modulacion por amplitud en un mismo sistema
embebido, utilizando los FPGAs.

1.2.

Descripci
on del problema

El esquema de modulacion por amplitud utiliza dos se


nales: el mensaje
(o envolvente) y la frecuencia portadora. Con el paso de los a
nos, la generacion de frecuencias se ha implementado de distintas formas. Debido a que la
transmision comercial de AM requiere de se
nales portadoras en el rango de
540 KHz a 1600 KHz, es necesario contar con un sistema capaz de generar
se
nales de alta frecuencia con una precision razonable, pues una variacion
pronunciada implicara una mala transmision del mensaje y ademas invadir
otros canales del espectro electromagnetico.
Las tecnicas de generacion de frecuencias basadas en componentes analogicos, si bien resultan economicas y apropiadas para la mayora de las aplicaciones, carecen de buena precision debido a la variacion que existe en el valor
nominal de componentes como resistores, capacitores e inductores, ademas
de que con el paso del tiempo, existe un deterioro normal que afecta el funcionamiento de estos sistemas.
Un sintetizador digital directo, en cambio, utiliza una base de tiempo
de alta precision, como un oscilador de cristal de cuarzo, para general otras
frecuencias de forma puramente digital, manteniendo la precision de la se
nal
original.
Contar con un dispositivo que genere frecuencias con una alta precision y
exactitud puede emplearse, por ejemplo, para calibrar otros dispositivos de
transmision y recepcion de radio.

1.3.

Planteamiento general

Una de las tendencias de la u


ltima decada en el area de las telecomunicaciones se conoce como Radio definido por software (Software-defined radio,SBR). Un SBR puede ser definido como un radio que utiliza tecnicas
de software en se
nales digitales de radio. El proposito fundamental de esta
5

tecnica es cambiar el enfoque tradicional basado en hardware de aplicacion


especfica para la implementacion de radio a un enfoque basado en software que realice las funciones de un radio sobre una plataforma de computo
[14]. Una de las tecnologas que permite aplicar esta tecnica son los FPGAs,
debido a su capacidad de realizar procesamiento en paralelo [15].
Se pretende crear un sistema capaz de generar frecuencias en dos rangos:
de 1 Hz a 5000 Hz como tonos de prueba, con resolucion de 1 Hz, y de 540
KHz a 1600 KHz a intervalos de 10 KHz, que son las frecuencias de portadora
que se manejan en la radio AM comercial. Dentro del mismo sistema se realizara la modulacion en amplitud utilizando ambas se
nales como envolvente
y portadora respectivamente.
El control de las frecuencias generadas se realizara desde una computadora, de manera que se creara un peque
no programa que sirva como interfaz
para el usuario, as como la comunicacion entre la computadora y la tarjeta
de desarrollo Altera DE0, en este caso a traves del protocolo RS-232.
A la salida de la tarjeta DE0 se obtiene la se
nal modulada en forma de
una palabra digital de 12 bits en paralelo. A fin de convertir tales se
nales a
una sola se
nal continua en el tiempo, como se requiere para la transmision,
se utiliza el convertidor Digital-Analogico AD9752 de Analog Devices. Este
es un convertidor con entrada digital de 12 bits en paralelo y una velocidad
de coversion de hasta 125 MSPS (millones de muestras por segundo).
El diagrama general a bloques del sistema es el que se muestra en la
Figura 1.1.

1.4.

Objetivos

El objetivo general de este trabajo de tesis es hacer un esfuerzo por abordar los Sistemas de Comunicacion desde la perspectiva de un sistema digital
reconfigurable. Como se menciono anteriormente, una de las tendencias en el
6

Figura 1.1: Diagrama a bloques del sistema propuesto


area de las telecomunicaciones es el de Radios basados en Software. Por ello,
este trabajo busca ser un primer acercamiento a esa area de investigacion.
Se desea crear una aplicacion para computadora que permita, mediante
el uso de la interfaz RS-232, la transmision de datos de la computadora al
FPGA, en este caso para especificar las frecuencias que se generaran en el
sistema.
Tambien se desea describir dos sintetizadores de frecuencia. El primero
en un rango de 1 a 5000 Hz, con resolucion de 1 Hz y el otro en la gama de
AM comercial, de 5400 a 1600 KHz, con intervalos de 10 KHz.
Otro de los objetivos sera crear un sistema que realice el proceso de modulacion en amplitud de forma digital dentro del mismo desarrollo en el FPGA.
Finalmente, se seleccionara e instrumentara un convertidor digital-analogico de alta velocidad, con los retos que estos supone en cuestion de susceptibilidad al ruido, niveles de voltaje, etc.
Es importante se
nalar que este sistema no pretende convertirse en una
alternativa a un transmisor AM de uso com
un, debido a que esta alternativa implica un proceso claramente mas complicado y mas costoso que un
transmisor analogico.
La utilidad de este sistema radica principalmente en la precision de las
frecuencias generadas, por lo que puede utilizarse como un sistema para calibracion de transmisores y receptores de radio. Por otro lado, los sistemas
7

basados en FPGA suelen ser utilizados en el proceso de dise


no de sistemas
de aplicacion especfica, pues mientras se realizan modificaciones, solo se requiere cambiar el codigo VHDL.
En las secciones siguientes se presenta el fundamento teorico y la descripcion del sistema implementado.

Captulo 2
Fundamento te
orico
En esta captulo se presenta la fundamentacion teorica detras del sistema
propuesto. Se explica el funcionamiento de la modulacion en amplitud y los
bloques que componen el dise
no digital.

2.1.

Amplitud modulada

Como el nombre sugiere, en AM, la se


nal de informacion vara la amplitud de la se
nal sinusoidal portadora. El valor instantaneo de amplitud de la
portadora cambia de acuerdo a las variaciones de amplitud y frecuencia de
la se
nal moduladora. La Figura 2.1 muestra una se
nal sinusoidal modulando
una se
nal portadora de mayor frecuencia. La frecuencia de la portadora permanece constante durante el proceso de modulacion, pero su amplitud vara
de acuerdo a la se
nal moduladora.
Una lnea imaginaria que conecta los picos positivos y los picos negativos
de la forma de onda de la portadora tendra la forma exacta de la se
nal de
informacion. Por ello, a la se
nal moduladora tambien se le llama envolvente.
Las se
nales mostradas en la Figura 2.1 estan en el dominio del tiempo.
Estas variaciones en el tiempo pueden ser observadas en un osciloscopio.
Usando funciones trigonometricas, se puede expresar la se
nal portadora
9

Figura 2.1: Modulacion en amplitud


(carrier) con la expresion
vc = Vc sin(2fc t)

(2.1)

En la Ecuacion 2.1, vc representa el valor instantaneo de la se


nal portadora, Vc es el valor maximo de amplitud negativa o positiva, fc es la frecuencia
de la portadora y t es un punto particular en el tiempo durante el ciclo de
la portadora.
Una se
nal moduladura sinusoidal puede ser expresada con una formula
similar:
vm = Vm sin(2fm t)

(2.2)

donde vm representa el valor instantaneo de la se


nal de informacion, Vm
es la amplitud de la se
nal y fm es la frecuencia de la se
nal moduladora.
La se
nal moduladora usa el valor pico de la portadora como su valor de referencia. La envolvente de la se
nal moduladora vara por encima y por debajo
del valor pico de amplitud de la portadora. Por esta razon, la relacion entre
las amplitudes de la se
nal moduladora y la portadora es muy importante. En
general, la amplitud de la se
nal moduladora debe ser menor que la amplitud
de la portadora. Cuando la amplitud de la envolvente es mayor se presenta
distorsion en el mensaje, por lo que se transmite informacion incorrecta. En
amplitud por modulacion, es particularmente importante que el valor pico

10

de la se
nal moduladora sea menor que el de la portadora. Matematicamente
se expresa en la Ecuacion 2.3.
Vm < Vc

(2.3)

Los valores de la se
nal portadora y moduladora pueden ser usados en
una formula para expresar la se
nal modulada. Primero, se debe considerar
que el valor pico de la se
nal portadora es el nivel de referencia de la se
nal
moduladora; el valor de la se
nal moduladora se suma o se resta del valor pico
de la portadora. El valor instantaneo de la envolvente puede calcularse de
acuerdo a la Ecuacion 2.4.
v1 = Vc + vm = Vc + Vm sin(2fm t)

(2.4)

La Ecuacion 2.4 expresa que el valor de la se


nal moduladora se suma
algebraicamente al valor pico de la portadora. Ahora se puede calcular el
valor instantaneo de la se
nal modulada completa v2 , sustituyendo v1 como el
valor pico de la se
nal portadora, Vc .
v2 = v1 sin(2fc t)

(2.5)

Ahora sustituyendo el valor de v1 y expandiendo, se obtiene la siguiente


expresion:

v2 = (Vc +Vm sin(2fm t) sin(2fc t)) = Vc sin 2fc t+(Vm sin 2fm t)(sin 2fc t)
(2.6)
En la Ecuacion 2.6, v2 es el valor instantaneo de la se
nal AM, Vc sin(2fc t)
es la portadora y (Vm sin 2fm t)(sin 2fc t) es la portadora multiplicada por
la se
nal moduladora. La segunda parte de la expresion es la caracterstica de
AM. Para poder realizar la Amplitud por Modulacion, el circuito debe ser
capaz de realizar la multiplicacion matematica de la portadora y la se
nal de
mensaje.

11

El circuito usado para producir AM es llamado modulador. Sus dos entradas, la portadora y la se
nal de mensaje, y su salida se presentan en la Figura
2.2.

Figura 2.2: Modulador de amplitud, mostrando sus entradas y salidas


Un circuito que desplaza una se
nal de baja frecuencia en banda base
a una frecuencia mas alta es llamado modulador. Por otro lado, al circuito
usado para recuperar la se
nal original a partir de una se
nal de AM es llamado
detector o demodulador.

2.2.

Indice de modulaci
on

Como se menciono antes, para que la modulacion en amplitud se realice


correctamente, la amplitud de la se
nal moduladora Vm debe ser menor que
la de la se
nal portadora Vc . Por lo tanto, la relacion entre estas dos se
nales
es muy importante. A esta relacion, se le llama ndice de modulacion (m) y
se representa en la Ecuacion 2.7.
Vm
(2.7)
Vc
Multiplicando el ndice de modulacion por 100 se obtiene el porcentaje de
modulacion. Por ejemplo, si la amplitud de la portadora es de 9 V y la se
nal
moduladora de 7.5 V, el ndice de modulacion es de 0.833 y su porcentaje de
modulacion es 83.3 %.
m=

12

2.2.1.

Sobremodulaci
on y distorsi
on

El ndice de modulacion debe ser un n


umero entre 0 y 1. Si la amplitud de la se
nal moduladora es mayor que la amplitud de la portadora, m
sera mayor que 1, causando distorsion en la se
nal modulada. Si la distorsion
es muy grande, la se
nal se vuelve inintelegible. La distorsion en se
nales de
audio produce sonidos molestos. En se
nales de video se traduce en imagenes
borrosas en la pantalla del televisor.

Figura 2.3: Se
nal distorsionada por sobremodulacion
La Figura 2.3 muestra un ejemplo de se
nal distorsionada. En el ejemplo,
la se
nal de mensaje esta modulando a la portadora. Sin embargo, debido a
que su ndice de modulacion es mucho mayor que 1, se presenta una condicion
llamada sobremodulacion. La se
nal recibida produce una salida con la misma
forma que la envolvente, que en este caso es una se
nal sinusoidal cuyos picos
negativos han sido recortados. Por otro lado si el ndice de modulacion se
mantiene entre 0 y 1, no existira distorsion. La condicion ideal para AM es
cuando Vm = Vc o m = 1. Esto resulta en la mayor potencia transmitida y
una mejor recepcion, sin distorsion.
La distorsion por sobremodulacion tambien produce interferencia en canales adyacentes. Esto es debido a que la distorsion produce que la envolvente
tenga secciones que no son sinusoidales. De acuerdo con la teora de Fourier,
estas secciones produciran armonicas de m
ultiples frecuencias. A su vez, estas
armonicas tambien modularan a la portadora y causaran interferencia con
13

otras se
nales o canales adayacentes a la portadora.

2.3.

Bandas laterales y el dominio de la frecuencia

Cuando una portadora es modulada por una se


nal de informacion, nuevas
se
nales se generan a diferente frecuencia como parte del proceso. Estas nuevas
frecuencias, llamadas frecuencias laterales o bandas laterales ocurren en el
espectro a frecuencias directamente por encima y por debajo de la frecuencia
de la portadora. Mas especficamente, las bandas laterales se presentan a
frecuencias que son la suma y la resta de la portadora y las frecuencias
moduladoras.

2.3.1.

C
alculo de las bandas laterales

Cuando se usa una se


nal moduladora de una sola frecuencia, el proceso de
modulacion genera dos frecuencias laterales. Si la se
nal moduladora es una
onda compuesta, tal como voz o video, todo un rango de frecuencias modula
a la portadora, y por lo tanto se generan dos rangos de frecuencias laterales.
La banda lateral superior y la banda lateral inferior se calculan como:
fU SB = fc + fm

(2.8)

fLSB = fc fm

(2.9)

donde fc es la frecuencia de portadora y fm es la frecuencia moduladora.


La existencia de las bandas laterales se puede demostrar matematicamente a partir de la Ecuacion 2.6, que describe una se
nal de AM.
Usando la identidad trigonometrica para el producto de dos sinusoidales
14

cos(A B) cos(A + B)

(2.10)
2
2
y sustituyendo en la Ecuacion 2.6, la amplitud instantanea de la se
nal se
convierte en
sin A sin B =

vAM = Vc sin 2fc t +

Vm
Vm
cos 2t(fc fm )
cos 2t(fc + fm )
2
2

(2.11)

donde el primer termino es la portadora, el segundo termino es la banda


lateral inferior y el tercer termino es la banda lateral superior.
Una se
nal de AM es realmente una se
nal compuesta por diferentes elementos: la se
nal portadora, la banda lateral superior y la banda lateral inferior,
como lo demuestra la ecuacion.

Figura 2.4: Componentes de una se


nal de AM

15

La Figura 2.4 ilustra graficamente como se forma una se


nal de AM. En
ella, a) es la se
nal del mensaje, b) es la banda lateral inferior, c)representa la
portadora y d) la banda lateral superior. La onda completa de AM se ilustra
en e).

2.3.2.

Representaci
on de AM en el dominio de la frecuencia

Otra forma de analizar las bandas laterales es graficando su amplitud


con respecto a la frecuencia. La Figura 2.5 muestra una grafica de este tipo. Un analizador de espectros es un instrumento que permite mostrar las
componentes de una se
nal en el dominio de la frecuencia.

Figura 2.5: Grafica en el dominio de la frecuencia de una se


nal de AM
La figura 2.6 muestra la relacion entre los dominios del tiempo y la frecuencia para una se
nal de AM. Los ejes del dominio y la frecuencia son
perpendiculares entre s. Las amplitudes mostradas son los valores pico de
las ondas de portadora y frecuencias laterales.
Cuando la se
nal moduladora es mas compleja que un simple tono, se producen m
ultiples bandas laterales en el proceso de modulacion. Por ejemplo,
16

Figura 2.6: Relacion entre los dominios del tiempo y la frecuencia


una se
nal de voz se compone de diferentes frecuencias mezcladas en un rango
de 300 a 3000 Hz. Por lo tanto, las se
nales de voz moduladas por AM generan
un rango de frecuencias superiores e inferiores a la frecuencia de la portadora. Estas bandas laterales consumen espacio en el espectro electromagnetico.
El ancho de banda total para una se
nal de AM se calcula obteniendo la
frecuencia maxima y mnima de las bandas laterales.
Por ejemplo, si la frecuencia de portadora es de 2.8 MHz, la frecuencia
maxima y mnima de las bandas laterales es fU SB = 2800 + 3 = 2803 kHz y
fLSB = 2800 3 = 2797 kHz.
El ancho de banda se calcula con la diferencia entre los extremos de las
bandas laterales: BW = fU SB fLSB = 2803 2797 = 6kHz.
De hecho, el ancho de banda de una se
nal AM es el doble de la frecuencia
mas alta de la se
nal moduladora:
BW = 2fm
17

(2.12)

Figura 2.7: Bandas laterales de una se


nal de voz modulada en amplitud
donde fm es la frecuencia mas alta de la se
nal de informacion.

2.4.

Potencia de una se
nal de AM

En la transmision por radio, la se


nal de AM se amplifica y se alimenta a
una antena con una impedancia caracterstica que idealmente sera puramente
resistiva. La potencia transmitida total PT es simplemente la suma de la
potencia de la portadora PC y las dos bandas laterales PU SB y PLSB :
PT = PC + PU SB + PLSB

(2.13)

Calculando la potencia de cada componente de la se


nal y expresando en
terminos de la potencia de la portadora, a traves del ndice de modulacion,
se obtiene la siguiente expresion para el calculo de la potencia transmitida
total:
m2
)
(2.14)
2
En la Ecuacion 2.14, m es el ndice de modulacion, de forma que el segundo termino dentro del parentesis expresa la potencia de las bandas laterales,
PT = PC (1 +

18

que son las que en realidad transmiten el mensaje. De esta expresion se puede ver una de las grandes desventajas de AM: la potencia que realmente se
aprovecha para transmitir el mensaje, en el mejor de los casos, con un ndice
de modulacion de 1, es de apenas la tercera parte de la potencia transmitida.
Si el ndice de modulacion es menor, la eficiencia decae a
un mas.
La potencia transmitida de cada banda lateral se expresa en la Ecuacion
2.15.
PLSB = PU SB = (

PC m2
)
4

(2.15)

Asumiendo un ndice de modulacion de 1, la potencia en cada banda


lateral es del 25 % de la potencia de la portadora. Dado que hay dos bandas
laterales, su potencia junta representa el 50 % de la potencia de la portadora.
La meta de AM es mantener el ndice de modulacion lo mas alto posible,
sin que haya sobremodulacion, para que la maxima potencia en las bandas
laterales sea transmitida.
La portadora por si sola no contiene informacion. La portadora puede ser
transmitida y recibida, pero a menos que haya modulacion, no se transmite
ninguna informacion. Cuando la modulacion ocurre, se producen las bandas
laterales. Por ello, es facil concluir que la informacion transmitida esta en
las bandas laterales. Solo la tercera parte de la potencia total esta disponible
para las bandas laterales y los dos tercios restantes se desperdician en la
portadora.
Sin embargo, la razon de transmitir la portadora radica en que facilita la
demodulacion de la envolvente en el receptor.

2.5.

AM comercial

En Mexico, las caractersticas de la transmision comercial de se


nales de
AM fueron reguladas por la Comision Federal de Telecomunicaciones (CO19

FETEL), de acuerdo a la Norma Oficial Mexicana NOM-01-SCT1-93: Especificaciones y Requerimientos para la Instalacion y Operacion de Estaciones
de Radiodifusion Sonora Moduladas en Amplitud [16]. A continuacion se citan algunas de las especificaciones relacionadas con los aspectos tecnicos que
se abordan en este trabajo.

CAPITULO 5. DISPOSICIONES PARA LA EMISION.

5.1 EN SISTEMAS MONOFONICOS.

5.1.1 CLASE DE EMISION.


Modulacion de amplitud, doble banda lateral con portadora completa; A3E [...].

5.1.2 ANCHURA DE BANDA DE LA EMISION.


Las estaciones deben utilizar una anchura de banda de emision
hasta 20 kHz, lo que permite obtener una anchura de banda de
audiofrecuencia de 10 kHz [...].
ENTRE CANALES.
5.1.3 SEPARACION
La separacion entre canales es de 10 kHz; las frecuencias portadoras deben ser m
ultiplos enteros de 10 kHz, de 540 a 1600 kHz.
DE CANALES.
5.1.4 IDENTIFICACION
Los 107 canales de la banda normal, se identifican por su frecuencia portadora.

5.1.5. PORCENTAJE DE MODULACION.


En ning
un caso debe exceder del 100 % en picos negativos y del
125 % en picos positivos.
Por lo anterior, el sistema propuesto en esta tesis genera portadoras con
separacion de 10 kHz en el rango de 540 a 1600 kHz. El porcentaje de modulacion utilizado es del 100 % y el tipo de se
nal es doble banda lateral con
portadora completa, A3E.

20

2.6.

Frecuencia Modulada

FM es un esquema de modulacion inventado y comercializado despues


que AM. Su principal ventaja es una mejor resistencia al ruido que AM.
En FM se desea variar la frecuencia de la portadora en proporcion con la
se
nal moduladora. Esto significa que la frecuencia de la portadora esta variando a cada instante.
La Formula general para FM es:
s(t) = A cos[c t + kf

Z t

m( )d ]

(2.16)

donde c es la frecuencia angular de la portadora, kf es el ndice de


modulacion y m( ) es la se
nal de mensaje.
Para aproximar la se
nal de FM a tiempo discreto, se sustituye la integral
por una suma. Y suponiendo que la se
nal de mensaje en simplemente un
tono, la Formula para FM en tiempo discreto es:
s(t) = A cos[c t + sin m t]

(2.17)

donde es el ndice de modulacion.

2.7.

RS-232

RS-232 es una interfaz que designa una norma para el intercambio de


datos binarios de forma serial entre dos equipos. Es el estandar utilizado
com
unmente en puertos de comunicacion serial.
Los puertos seriales R2-232 solan ser comunes en las computadoras personales para la conexion de distintos perifericos. Sin embargo, debido a su
baja velocidad de transmision, el Puerto Serial Universal (USB) ha terminado por reemplazarlo definitivamente. Debido a ello, para utilizar esta interfaz
21

Figura 2.8: Se
nales de FM
en una computadora personal, es necesario utilizar un cable convertidor USB
a RS-232. A pesar de esto, esta interfaz sigue siendo com
un en ambientes industriales o cientficos que requieran transmision de datos a baja velocidad.
El estandar define los niveles de voltaje que corresponden a 0 y 1 logicos.
Las se
nales validas estan en el rango de -3 a -15 V y 3 a 15 V. En transmision
de datos, el 0 corresponde al rango positivo y el 1 al voltaje negativo. A fin
de ajustar estos valores de voltaje para su uso con tecnologas TTL o CMOS,
suelen utilizarse controladores en circuito integrado como el MAX232.
Una trama de RS-232 contiene un bit de inicio, los bits de datos (normalmente 8), un bit opcional de paridad y uno o dos bits de paro. La Figura 2.8
ilustra una trama.
Antes de realizar una transmision de datos mediante esta interfaz, es necesario configurar los siguientes parametros: velocidad de transmision (9600
bit/s hasta 115,200 bit/s), n
umero de bits de datos, uso de paridad o no y el
n
umero de bits de paro (uno o dos).

22

Figura 2.9: Trama RS-232

2.8.

Sntesis digital directa

Como se explico en el Captulo 1, un sintetizador de frecuencia se define


como un sistema que genera una o muchas frecuencias derivadas de una
misma base de tiempo (frecuencia de referencia), de tal manera que la relacion
entre la salida y la frecuencia de referencia sea una fraccion racional [2].
La tecnica de sntesis que se utiliza en este trabajo es conocida como
Sntesis Digital Directa (DDS). Un sintetizador digital de frecuencia consiste
en los siguientes bloques basicos: un acumulador de fase, un convertidor de
fase a amplitud (tradicionalmente una tabla de consulta), un convertidor
digital-analogico y una seccion analogica de filtrado y amplificacion [4]. La
Figura 2.9 muestra la estructura basica de un DDS.

Figura 2.10: Bloques de un sintetizador digital de frecuencia [1]

2.8.1.

Acumulador de fase

El componente basico de un sintetizador digital de frecuencia es el acumulador de fase. El acumulador de fase es un sistema digital que a cada pulso

23

activo de reloj suma el valor de la fase P con el valor acumulado previamente


A y lo vuelve a almacenar en A para producir la salida Q.

Figura 2.11: Acumulador de fase [1]


El valor constante que se suma en cada ciclo de reloj determina la cantidad
de ciclos necesarios para alcanzar el desbordamiento del vector de salida Q y
con ello se obtiene un comportamiento de rampa proporcional a la frecuencia
de referencia. La Ecuacion 2.16 describe matematicamente un acumulador
de fase, donde n es el n
umero de bits del vector Q.
P
fCLK
(2.18)
2n
En este trabajo, sin embargo, se desea generar frecuencias que sean una
fraccion decimal de la frecuencia de entrada. Por ello, se usara un acumulador
de fase decimal. Su relacion se expresa en la Ecuacion 2.10, donde N es el
n
umero de dgitos decimales del acumulador.
fQ =

fQ =

P
fCLK
10N

(2.19)

Arquitectura pipeline
El acumulador de fase requiere realizar sumas de vectores de bits relativamente largos. Una tecnica algortmica que puede ayudar a reducir los
retardos es conocido como procesamiento en lnea de produccion o pipeline.
24

Esta tecnica consiste en fraccionar el problema en secciones para que diversas unidades trabajen en forma simultanea en cada uno de los segmentos del
proceso, como si se tratara de una lnea de produccion.
El procesamiento pipeline en rebanadas de bits consiste en segmentar un
proceso que involucra un calculo entre operandos con una longitud de palabra
muy grande, en peque
nos procesos con solo una fraccion de los bits totales.
En el caso del sumador, si se realiza mediante una de las tecnicas comunes, el
proceso resulta muy complejo y su eficiencia en velocidad decrece conforme
se aumenta el tama
no de las palabras binarias a sumar debido a las largas
cadenas combinacionales que incrementan los retardos internos. Sin embargo,
si se fracciona el sumador total en segmentos de unos cuantos bits, el retardo
se reduce.
Un bloque pipeline de n etapas va a requerir de n ciclos de reloj para
que los datos de entrada se presenten a la salida, sin embargo, dado su alto
paralelismo, el sistema es capaz de entregar un dato completo cada ciclo de
reloj, una vez que se llene la lnea. Este tiempo que tarda la entrada en ser
procesada de manera completa hasta que se encuentra disponible en la salida
se denomina latencia y es igual al n
umero de etapas pipeline.

2.8.2.

Tabla de consulta

El acumulador de fase genera una se


nal incremental semejante a una
diente de sierra, de la frecuencia deseada. Sin embargo, para general se
nales
sinusoidales es necesario convertir los valores de dicha se
nal en valores de una
onda sinusoidal. La forma mas sencilla es mediante una tabla de consulta
(look-up table, LUT).
Una tabla de consulta tiene basicamente la misma estructura que un
circuito codificador, con la diferencia de que una tabla de consulta suele ser
mucho mas grande. La Ecuacion 2.11 representa la conversion realizada por
la tabla de consulta.
25

P
)
(2.20)
2n
Debido al tama
no de una tabla de consulta, resulta inadecuado teclear cada una de sus lneas. Para este proceso lo conveniente es utilizar un programa
que genere automaticamente el codigo de conversion.
S = sin(2

Los vectores digitales a la salida de la LUT representan la amplitud de


una se
nal sinusoidal para los correspondientes valores de fase.

2.9.

Conversi
on digital-anal
ogica

Para efectos de procesamiento, transmision y almacenamiento, suele ser


conveniente representar se
nales analogicas en forma digital. Dados los efectos
de las no linealidades, el corrimiento, el envejecimiento, el ruido, los cableados
imperfectos y las interconexiones de componentes analogicos, la precision de
equipos analogicos es inferior a sistemas digitales.
Sin embargo, los procesos en el mundo real producen se
nales que varan
de forma continua, analogicas. Por ello, es necesario realizar conversiones
del dominio digital al analogico. Los dispositivos encargados de realizarla se
conocen como DACs (Digital-Analog Converters).
Un DAC acepta una palabra de entrada de n bits b1 , b2 , ..., bn con un valor
binario fraccional D1 , y produce una salida analogica proporcional a D1 . La
salida de voltaje de un DAC se obtiene como:
vo = KVREF D1 = VF SR (b1 21 + b2 22 + ... + bn 2n )

(2.21)

donde K es un factor de escala, VREF es un voltaje de referencia, bk


puede ser 0 o 1, dependiendo del nivel logico de entrada correspondiente y
VF SR = KVREF es el rango de escala completa. Los DACs tambien pueden
entregar como salida una corriente propocional a D1 . [17]

26

Figura 2.12: Smbolo de un DAC


Si el DAC se conecta a la salida del sistema digital propuesto, convertira los valores digitales de la LUT a voltajes proporcionales. La se
nal resultante sera una sinusoidal cuantizada. Para mejorar la calidad de la se
nal, es
necesario aplicar una etapa de filtrado. La Figura 2.12 muestra las se
nales
obtenidas en cada etapa del sistema.

Figura 2.13: Se
nales generadas por el sistema digital

27

Captulo 3
Sistema digital
Este captulo detalla cada bloque del sistema real implementado.

3.1.

Comunicaci
on RS-232

A fin de especificar la frecuencia de las se


nales generadas por el sistema,
se requiere un sistema que transmita al FPGA el valor de fase que utilizaran
los acumuladores. Debido a que se requiere un buen n
umero de bits para especificar n
umeros grandes de fase, sera complicado utilizar los interruptores
integrados en la tarjeta DE0. Por ello, se opto por utilizar una interfaz de
comunicacion que permita enviar de forma rapida los valores de fase.
La solucion propuesta es utilizar un programa de computadora que permita al usuario indicar las frecuencias deseadas y transmitirlas utilizando la
interfaz RS-232 a la tarjeta DE0.

3.1.1.

Programa para PC

Para permitir al usuario especificar las frecuencias de tono y portadora


que desea generar se creo una aplicacion sencilla que habilita la comunicacion
por medio de la interfaz RS-232.

28

Como se menciono en el captulo anterior, las computadoras mas recientes


han dejado de contar con puertos seriales fsicos. Para hacer uso de esta
comunicacion se requiere contar con un adaptador; lo mas sencillo es usar
un cable convertidor USB a RS-232. Una vez que se conecta este cable, el
sistema operativo lo asigna como un puerto serial virtual. A partir de esto,
el funcionamiento del sistema es identico a contar con un puerto serial fsico.

Figura 3.1: Cable adaptador USB - serial


La aplicacion se desarrollo utilizando el entorno de desarrollo Microsoft
Visual Studio 2010, como una aplicacion Visual C++. Este entorno permite
utilizar el puerto serial como una clase con metodos predefinidos para la
recepcion y transmision de datos.
El funcionamiento del programa es el siguiente:
Al ejecutarse, el programa busca y enlista los puertos seriales disponibles.
El usario selecciona de la lista el puerto serial que utilizara y presiona
el boton Open Port.
El usuario escribe los valores de las frecuencias deseadas para tono y
portadora.
Al presionar el boton Send, el programa calcula los valores de fase para
ambas frecuencias y los transmite uno tras otro en formato binario.
29

Figura 3.2: Ventana principal de la aplicacion


El sistema cuenta con restricciones y mensajes de advertencia para
asegurar la transmision correcta de los datos.

3.1.2.

Conexi
on entre PC y tarjeta DE0

La conexion entre la PC y la tarjeta DE0 se realiza mediante el cable


USB-Serial descrito antes y un circuito integrado MAX232. El MAX232 se
encarga de convertir los niveles de voltaje RS-232 proporcionados por el cable
a voltajes compatibles con tecnologa TTL.

3.2.

FPGA

El sistema digital se implemento en una tarjeta de desarrollo FPGA Altera DE0. Cada circuito del sistema se describe por medio de un codigo VHDL.
Los bloques principales del sistema son: Receptor RS-232, Sintetizador de tonos, Sintetizador de portadoras y Modulador AM. A continuacion se desglosa
y describe el funcionamiento de cada uno.
30

Figura 3.3: Diagrama de conexion del CI MAX232

3.2.1.

Recepcion RS-232

El sistema receptor implementado en el FPGA esta compuesto de los


siguientes bloques:
Base de tiempo
Maquina de estados para recepcion serial
Registro de desplazamiento de 8 bits
Registro de desplazamiento de 32 bits

Base de tiempo
La interfaz RS-232 permite varias velocidades de transmision de bits.
Puesto que no se requiere transmitir datos de forma continua, se utiliza una
velocidad relativamente baja, de 9600 kbps. La base de tiempo necesaria
para el bloque de recepcion se calcula a partir de este valor. Para lograr una
mejor sincrona de los datos, se utiliza una base de tiempo al cuadruple de
la velocidad de transmision, es decir, 38400 Hz.

31

Figura 3.4: Bloques del sistema receptor RS-232


La forma mas simple de obtener una base de tiempo a partir de una se
nal
de reloj principal es mediante un divisor de frecuencia. Su funcionamiento
consiste en incrementar o decrementar el valor de un registro con cada ciclo
de reloj, hasta alcanzar un valor de referencia. Mientras el valor de referencia
no se alcance, la salida de la base del tiempo se mantiene en estado bajo,
mientras que al alcanzarlo, la salida toma un estado alto, por un ciclo de
reloj. Una vez que se obtiene esta salida, se reinicia el contador. El resultado
es una se
nal que proporciona un pulso en alto a cada intervalo deseado.
Para el caso actual, se cuenta con una se
nal de reloj de 50 MHz, y se desea
obtener una frecuencia de 38400 Hz. El calculo del modulo para el divisor de
frecuencia se presenta en la Ecuacion 3.1.
Fin
50M Hz
=
1302
(3.1)
Fout
38400Hz
El codigo A.1 contiene la descripcion VHDL del divisor de frecuencia
implementado.
P =

M
aquina de estados del receptor
Para controlar el flujo de entrada de bits, se utiliza una maquina de
estados. Las entradas de ella son, ademas de la se
nal de Reloj principal (CLK)
y Reset (RST), la lnea de entrada de datos (Rx) y la Base de tiempo generada
32

en el bloque anterior (B). El sistema genera como salidas un indicador de fin


de lectura de la trama (EOR) y la se
nal que habilita el paso de cada bit a
un registro de desplazamiento (S).
La configuracion de la trama empleada contiene 8 bits de datos, 1 bit de
paro y no se utiliza paridad.
La maquina parte de un estado inicial donde se indica que no se estan
recibiendo datos y no se debe desplazar el dato de entrada. Cuando la entrada
Rx cambia a cero, significa que se ha iniciado la recepcion de datos y se avanza
al estado siguiente. Para asegurar la recepcion correcta de un bit, se utilizan
cinco estados. Los primeros dos, son estados de espera, donde el cambio de
uno a otro se produce cuando la base de tiempo (B) pasa a valer 1. Estos
estados permiten verificar que el dato a recibir es valido. Cuando se llega al
tercer estado, la se
nal de desplazamiento (S) pasa a valer 1 y se produce una
transicion incondicional al cuarto estado. Los estados cuatro y cinco tambien
son de espera, para garantizar que la salida del dato se produzca a la mitad
de la duracion del bit de entrada. Este grupo de cinco estados se repite para
cada bit de datos.
Despues de recibir los 8 bits de datos se requiere tambien detectar el bit
de paro. Para ello, se utilizan dos estados de espera y un tercer estado que
indica el fin de la recepcion de la trama, activando la se
nal EOR. Finalmente,
se regresa al estado inicial, en espera de otra trama.

Registro de 8 bits con desplazamiento


Para almacenar cada trama recibida por RS-232 se utiliza un registro con
desplazamiento. Ya que el orden de los bits de datos en la trama comienza con
el menos significativo y termina con el mas significativo, el desplazamiento es
hacia la derecha. El registro recibe como entradas, la lnea de recepcion (Rx)
y la se
nal de habilitacion del desplazamiento (S), generada en la maquina de
estados.
33

Cuando el registro recibe la se


nal de habilitacion de la maquina de estados,
el registro toma como el bit mas significativo el valor de Rx y desplaza los
bits restantes a la derecha, con la exepcion del menos significativo, que deja
de ser almacenado.
Registro de 32 bits con desplazamiento
Para almacenar temporalmente un grupo de 32 bits, que contienen los
valores recibidos para generar el tono y la portadora (16 bits cada uno),
se creo un registro con desplazamiento a la izquierda. Como entrada recibe
grupos de 8 bits, provenientes del registro anterior.
Su funcionamiento es similar al registro con desplazamiento de 8 bits, con
la diferencia de que el desplazamiento se hace a la izquierda y la se
nal que
habilita el desplazamiento es la que indica el fin de la recepcion de una trama
en la maquina de estados (EOR).
Bloque completo de receptor
Todos los componentes anteriores, se incluyen en la descripcion de un bloque de mayor jerarqua que recibe como entradas la se
nal del reloj principal
(CLK), reset (RST) y la lnea de entrada de datos (Rx). Esta entidad genera
las se
nales internas para cada componente y entrega como salidas el grupo de
32 bits con el valor de la fase para cada acumulador (Q) y ademas se muestra
el valor hexadecimal recibido, usando los exhibidores de 7 segmentos de la
tarjeta DE0.

3.2.2.

Sintetizador de tonos

Como se ha mencionado, se desea generar tonos de prueba en un rango de


1 a 5000 Hz, con una resolucion de 1 Hz. El sintetizador digital implementado
utiliza los siguientes componentes:
Base de tiempo de 100 KHz
34

Figura 3.5: Bloques de sintetizador de tonos


Acumulador de fase
Tabla de consulta
Base de tiempo de 100 KHz
Considerando que la frecuencia maxima de tono que se planea utilizar es
de 5 KHz, utilizar la se
nal de reloj de 50 MHz resulta ineficiente, pues exige
la implementacion de un acumulador de fase de un gran n
umero de bits. La
Ecuacion 3.2 muestra que el acumulador de fase decimal para alcanzar una
resolucion de 1 Hz a partir de una base de tiempo de 50 MHz, requiere de 8
dgitos decimales, es decir, 32 bits.
fCLK
50M Hz
= log10
= 7,7 8
(3.2)
R
1Hz
En cambio, utilizando una base de tiempo intermedia de 100 KHz, el
acumulador de fase requiere solo 20 bits, con lo cual se reduce el tama
no del
sumador y el consecuente retardo.
N = log10

fCLK
100KHz
= log10
=5
(3.3)
R
1Hz
El Codigo A.6 contiene la descripcion del divisor de frecuencia para 100
KHz.
N = log10

35

Acumulador de fase
El acumulador de fase requirio el uso de un sumador decimal de 4 bits.
El formato empleado es Binary Code Decimal (BCD), lo que significa que
cada digito decimal se representa con grupos de cuatro bits, que tienen como
valor maximo el 9.
El sumador decimal se compone de tres bloques: un sumador completo
de un bit, un bloque que distribuye el vector de entrada de 4 bits al sumador
de 1 bit y finalmente, el bloque superior que realiza las operaciones logicas
necesarias para obtener una suma en formato BCD.
Para implementar la arquitectura Pipeline, se fragmenta el vector de 20
bits de entrada en grupos de 4 bits, que pasan por el sumador completo
decimal. Se crearon Registros de 4 bits para almacenar las sumas parciales y
un Registro de 1 bit para almacenar los bits de acarreo. Cada uno de estos
registros, ademas requiere de un bit de habilitacion (E), el cual es generado
por el divisor de frecuencia, de forma que las sumas se realizan a 100 KHz.
Todos los bloques anteriores se incluyen en la descripcion del bloque de
mayor jerarqua, donde se incluyen se
nales internas y la estructura del sumador en pipeline.
A la salida del acumulador de tonos, se utiliza una tabla de consulta
con una resolucion de 12 bits para convertir la se
nal diente de sierra en una
sinusoidal. La LUT hace uso de una estructura CASE en la cual se asigna el
valor correspondiente de una se
nal sinusoidal por cada valor de entrada.
Para la sntesis del sistema en la tarjeta DE0, se redujo la tabla de consulta a una resolucion de 2500 puntos.
Debido al tama
no del archivo VHDL que describe la LUT, el codigo se
genera automaticamente mediante un script de MATLAB.

36

3.2.3.

Sintetizador de portadora

Figura 3.6: Bloques de sintetizador de portadoras


La se
nal de portadora se genera de forma analoga a los tonos. En este caso,
sin embargo, se utiliza como base de tiempo la frecuencia de reloj principal de
50 MHZ, pues el rango de portadoras es de 540 KHz a 1610 KHz, a intervalos
de 10 KHz.
El n
umero de cifras decimales necesarias para el acumulador de fase se
calcula en la Ecuacion 3.4.
fCLK
50M Hz
= log10
= 3,69 4
(3.4)
R
10KHz
As pues, el acumulador de fase para el sintetizador de portadora es de
16 bits.
N = log10

Los bloques principales son:


Acumulador de fase
Tabla de consulta
Acumulador de fase
En el acumulador de fase se utilizan los bloques de suma descritos en la
seccion anterior, en los Codigos A.7, A.8 y A.9.
37

Por otro lado, debido a que las sumas se realizan en base a la frecuencia
de 50 KHz, los registros que almacenan las sumas parciales y el acarreo no
requieren de una se
nal de habilitacion.
El Codigo A.15 contiene la descripcion de la entidad de mayor jerarqua
para el sintetizador de portadora. Se puede observar que su estructura es
semejante al generador de tonos, con la exepcion de que en este caso el
acumulador es de 16 bits, por lo que se reduce el n
umero de registros y
se
nales intermedias empleados.
La Look-Up Table utilizada en el sintetizador de portadora es la misma
que en el generador de tonos. Se realizaron los ajustes pertinentes con respecto al vector de entrada a la LUT, recortando la salida del acumulador de
fase, sin que esto represente una variacion de la frecuencia resultante. Por
otro lado, la resolucion de la se
nal sinusoidal se ve limitada por el n
umero de
bits de salida de la LUT, mas que por los acumuladores de fase.

3.2.4.

Modulaci
on en amplitud

La modulacion en amplitud se realizo a traves de un bloque puramente


combinacional. En el se usan las libreras aritmeticas estandar para multiplicar la se
nal de tono y la se
nal de portadora, y posteriormente adicionar la
amplitud de la portadora.
Todas las operaciones se realizan con signo, sin embargo, se ajusta la se
nal
de salida para que tome u
nicamente valores sin signo.

3.2.5.

Frecuencia modulada

El proceso de modulacion en frecuencia no se aborda ampliamente en este


trabajo, debido a que el rango comercial de FM se encuentra en el orden de
88 a 108 MHZ, muy por encima de la frecuencia de 50 MHz utilizada como
base para la sntesis de portadoras, por lo que es imposible alcanzar tales
frecuencias sin el uso de otra base de tiempo.
38

Figura 3.7: Bloques de modulacion AM

Figura 3.8: Modulacion FM


De cualquier manera, se puede demostrar el principio de modulacion por
frecuencia a frecuencias mas bajas. Por conveniencia, se utiliza el mismo
rango de tonos de prueba y portadoras que en el sistema de AM.
El proceso de sntesis digital para las frecuencias de tono y portadora no
cambia, con la exepcion de que se utilizan acumuladores de fase binarios,
para reducir el tama
no de la arquitectura pipeline.
El cambio mas significativo se presenta en el sintetizador de portadora.
En este caso, la salida del acumulador de fase no pasa por la LUT, debido a
que el proceso de modulacion FM requiere sumar el argumento de la funcion
sinusoidal de portadora con la amplitud instantanea del tono, para producir
la esperada variacion instantanea de frecuencia.
Una vez que se suma la salida del acumulador de fase y la salida de la
39

LUT del tono, la se


nal FM final se obtiene al pasar todo este argumento por
la tabla de consulta.

3.3.

Conversi
on digital-anal
ogica

El DAC utilizado debe tener una velocidad de conversion de al menos


50 MSPS (millones de muestras por segundo) y tener la mejor resolucion
posible, a un costo accesible.

3.3.1.

AD9752

El convertidor Digital-Analogico empleado en la implementacion del sistema es el AD9752 de Analog Devices. Sus caractersticas principales son:
Tasa de conversion: 125 MSPS
Resolucion de 12 bits
Salida diferencial de corriente: 2 mA a 20 mA
Interfaz digital compatible con CMOS: +2.7V a +5.5 V
Empaquetado SOIC de 28 pines
Costo: 15 USD (Tienda en lnea de Newark - element 14)
Como base de tiempo para el AD9752 se utilizo la se
nal de reloj maestra
invertida, para permitir que exista un ligero retardo entre las operaciones
realizadas por el FPGA y la conversion de datos.
Por otro lado, como referencia de voltaje para la interfaz digital, se utilizo un regulador LM3940 de National Semiconductor, que ajusta un voltaje
de 5V a 3.3V. Con ello, los niveles de voltaje empleados para los bits de
entrada son 0 y +3.3V de la tecnologa CMOS.
40

De acuerdo con la hoja de datos del fabricante, el AD9752 provee dos salidas complementarias de corriente, denominadas IOUTA e IOUTB. Cuando
todos los bits de entrada esten en alto, la salida IOUTA proporcionara la
maxima salida de corriente (IOUTFS ) y la salida complementaria IOUTB
no proveera ninguna corriente.

Figura 3.9: DAC AD9752 [18]

41

Captulo 4
Resultados
En este captulo se presentan los resultados obtenidos con el sistema final
implementado. Se demuestra que es posible realizar la generacion de frecuencias y modulacion por amplitud en el rango comercial. Tambien se presenta el
principio de un sistema de modulacion por frecuencia. Asimismo, se analizan
las principales carencias del sistema implementado y las posibles mejoras a
realizarse.

4.1.

Comunicaci
on RS-232

Se implemento una interfaz de comunicacion entre PC y tarjeta de desarrollo FPGA, haciendo uso del estandar RS-232. Con esta interfaz, el usuario
emplea un programa de computadora para enviar datos numericos a la tarjeta
de desarrollo, en este caso los valores de fase.

4.2.

Sntesis digital de frecuencias

El sistema final incorpora dos sintetizadores digitales de frecuencias. Uno


genera tonos en el rango de 1 a 5000 Hz, a partir de una base de tiempo
intermedia de 100 kHz, con resolucion de 1 Hz. El otro sintetiza las frecuencias

42

de portadora en el rango de 540 kHz a 1600 kHz, con resolucion de 10 kHz,


a partir del reloj principal de 50 MHz.

4.2.1.

Tonos

Para obtener la frecuencia se usa un acumulador de fase. La salida del


acumulador de fase, para un tono de 5 kHz se muestra en la Figura 4.1.

Figura 4.1: Acumulador de fase para 5 kHz


La se
nal generada por el acumulador de fase pasa por la tabla de consulta
con resolucion de 12 bits, lo cual produce la salida mostrada en la Figura 4.2.

Figura 4.2: Tono de 5 kHz


43

La pureza espectral de la se
nal generada se ve claramente afectada por
efecto de la cuantizacion y el muestreo. Sus componentes frecuenciales se
muestran en la Figura 4.3.

Figura 4.3: Espectro del tono de 5 kHz

4.2.2.

Portadoras

El proceso de sntesis de frecuencias de portadora es identico a la sntesis


de tonos. Por ello, a pesar de que la frecuencia fundamental de la se
nal es
precisa, el proceso de muestreo afecta la calidad espectral de la se
nal.

Figura 4.4: Espectro de una portadora de 540 kHz

44

4.3.

Modulaci
on en amplitud

El proceso de modulacion se realiza tambien en el sistema embebido en


la FPGA. Para ello, se multiplican las amplitudes instantaneas de tono y
portadora y se suma la portadora.
Este proceso se realiza utilizando las libreras aritmeticas de VHDL, tanto
para multiplicacion como para suma, por lo que no se tiene control sobre la
eficiencia de las operaciones.
La Figura 4.6 muestra la se
nal esperada, de acuerdo a la simulacion que
incorpora todos los pasos de la generacion de frecuencias y modulacion del
sistema implementado.

Figura 4.5: Portadora de 540 kHz modulada en amplitud por un tono de 5


kHz

La pureza espectral de la se
nal resultante evidentemente depende de la
calidad del tono y portadora. La Figura 4.6 presenta el espectro de la se
nal
modulada, donde se observan claramente la componente de portadora y las
bandas laterales.

45

Figura 4.6: Espectro de la se


nal modulada

4.4.

Sistema final

El sistema final se implemento utilizando la tarjeta de desarrollo DE0 de


Altera, equipada con un FPGA Cyclone III 3C16. Las descripciones VHDL
mencionadas en el captulo anterior se compilan, sintetizan y programan
utilizando el software Quartus II. [19]

Figura 4.7: Sistema final implementado

46

4.4.1.

Im
agenes de tonos

Figura 4.8: Ejemplos de tonos generados. 100Hz, 1kHz y 5kHz

4.4.2.

Im
agenes de portadoras

Figura 4.9: Ejemplos de portadoras. 540kHz y 1MHz

47

4.4.3.

Im
agenes de AM

Figura 4.10: Portadora de 540 kHz modulada por tonos de 100 Hz(izquierda)
y 1 kHz(derecha)

4.5.

Frecuencia modulada

Como se ha explicado, no es posible alcanzar las frecuencias de portadora


de una se
nal de FM comercial con la base de tiempo de la tarjeta de desarrollo
DE0. Sin embargo, se realizo la descripcion de un sistema FM que utiliza
frecuencias de portadora en el rango de los cientos de kHz. Se reportan los
resultados obtenidos de la simulacion.

48

Figura 4.11: Simulacion del sistema FM. Tono de 1 kHz, portadora de 10


kHz e ndice de modulacion de 4.

Figura 4.12: Espectro de la se


nal de FM obtenida

4.6.

An
alisis de resultados

El sistema de comunicacion RS-232 funciona correctamente para el proposito de transmitir datos numericos de una PC a la tarjeta de desarrollo FPGA.
49

Sin embargo, para transmitir cualquier tipo de dato, el sistema debe a


nadir
mayor versatilidad en el programa de PC que transmite los datos y en el
bloque receptor del FPGA.
Los acumuladores de fase fueron dise
nados de acuerdo a los requerimientos
de frecuencia para AM. El dise
no incluye acumuladores de fase decimales para
obtener frecuencias exactas en la escala de Hz y kHz. La arquitectura pipeline
realiza la suma de vectores de 20 y 16 bits de forma eficiente, disminuyendo
los retardos.
La tabla de consulta implementada tuvo que reducirse en varias ocasiones,
puesto que la sntesis del sistema requera mayores recursos que los proporcionados por la tarjeta DE0. El sistema final implementa una resolucion de 2500
puntos, por lo que se desperdicia buena parte de la resolucion del convertidor
digital-analogico.
El manejo de frecuencias relativamente altas resulto complicado en terminos de medicion y conversion de la se
nal. La mayora de los osciloscopios a
los que se tuvo acceso tienen un ancho de banda de 60 o 100 MHz, ademas de
que las puntas usadas para medir la se
nal se ven afectadas por la alta frecuencia. Por lo tanto, las mediciones realizadas no son completamente confiables,
aunque permiten ver de forma general la forma de onda y la frecuencia fundamental de las se
nales generadas.
Respecto a la conversion digital-analogica, puede decirse que fue una de
las partes mas complicadas de implementar, debido a que los DACs que
cumplen con las especificaciones deseadas no son faciles de conseguir en el
mercado regional, ademas de que son relativamente caros. Pero el mayor problema se tuvo para adaptar el empaquetado del circuito, debido a que todos
los DACs encontrados tienen un empaquetado SOIC o TSSOP de montaje
superficial. Al menos en un par de ocasiones se da
naron los circuitos, presumiblemente al soldarlos o con alguna conexion incorrecta. De hecho, inclusive el
DAC del sistema final presenta problemas con una de las salidas de corriente.
50

Los problemas presentados en la conversion digital-analogica complicaron


la implementacion de un transmisor, aunque lograron transmitirse tonos de
prueba y escucharse en el radio.
Como conclusion general queda demostrada la utilidad de sistemas de
hardware reconfigurables, particularmente FPGA para la implementacion de
sistemas de comunicacion. Sin embargo, particularmente para esquemas de
modulacion analogicos, como AM y FM, el proceso puede resultar muy complicado, al lado de implementaciones analogicas, aunque se obtienen ventajas
en terminos de precision, versatilidad y portabilidad.

4.7.

Perspectivas

El sistema actual puede ser mejorado con algunas optimizaciones en caso


de que se desee seguir trabajando con los mismps esquemas de modulacion.
Dentro del sistema embebido, en el bloque de modulacion AM se hace uso
de las libreras aritmeticas para sumas con signo y multiplicacion. Si bien,
esto reduce el trabajo de descripcion, puede resultar ineficiente en terminos
de los recursos empleados y retardos. Una optimizacion consistira en realizar
estas operaciones a mas bajo nivel.
Por otro lado, la multiplicacion de dos se
nales cuantizadas afecta la pureza de la se
nal modulada con efectos de aliasing y agregando componentes
frecuenciales indeseables. Una mejora necesaria consiste en filtrar las se
nales
intermedias y la se
nal final.
Finalmente, en cuanto a la parte analogica, se requiere manejar con mayor
cuidado el DAC y su instrumentacion para descartar posibles da
nos al mismo.
Ademas, falta trabajar en el dise
no correcto de un amplificador y transmisor
de la se
nal resultante.

51

Por otro lado, como metas futuras se pretende trabajar con esquemas de
modulacion modernos, puramente digitales, para obtener mejores resultados
y aplicaciones practicas del sistema de comunicacion.

52

Ap
endice A
C
odigos VHDL
Listing A.1: Divisor de Frecuencia para 38400 Hz
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

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity Base_tiempo is
port(
RST: in std_logic;
CLK: in std_logic;
B: out std_logic
);
end Base_tiempo;
architecture Interna of Base_tiempo is
signal Qn,Qp: std_logic_vector(10 downto 0);
begin
Combinacional: process(Qp)
begin
if(Qp="00000000000")then
B <= 1;
Qn <= "10100010110";
else
B <= 0;
Qn <= Qp - 1;
end if;
end process Combinacional;

53

29
30
31
32
33
34
35
36
37
38

Secuencial: process(RST,CLK)
begin
if(RST=0)then
Qp <= (others => 0);
elsif(CLK event and CLK=1) then
Qp <= Qn;
end if;
end process Secuencial;
end Interna;

54

Listing A.2: Maquina de estados de receptor RS-232


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

library IEEE;
use IEEE.std_logic_1164.all;
entity Maquina_FSMR is
port(
RST: in std_logic;
CLK: in std_logic;
Rx: in std_logic;
B: in std_logic;
EOR: out std_logic;
S: out std_logic
);
end Maquina_FSMR;
architecture Control of Maquina_FSMR is
signal Qn,Qp: std_logic_vector(5 downto 0);
begin
Combinacional:process(Qp,Rx,B)
begin
case Qp is
when "000000" =>
if(Rx=1)then
Qn <= Qp;
else
Qn <= "000001";
end if;
EOR <= 0;
S <= 0;
when "000001" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "000010";
end if;
EOR <= 0;
S <= 0;
when "000010" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "000011";
end if;
EOR <= 0;

55

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

S <= 0;
when "000011" =>
Qn <= "000100";
EOR <= 0;
S <= 1;
when "000100" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "000101";
end if;
EOR <= 0;
S <= 0;
when "000101" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "000110";
end if;
EOR <= 0;
S <= 0;
when "000110" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "000111";
end if;
EOR <= 0;
S <= 0;
when "000111" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "001000";
end if;
EOR <= 0;
S <= 0;
when "001000" =>
Qn <= "001001";
EOR <= 0;
S <= 1;
when "001001" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "001010";
end if;
EOR <= 0;

56

95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142

S <= 0;
when "001010" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "001011";
end if;
EOR <= 0;
S <= 0;
when "001011" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "001100";
end if;
EOR <= 0;
S <= 0;
when "001100" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "001101";
end if;
EOR <= 0;
S <= 0;
when "001101" =>
Qn <= "001110";
EOR <= 0;
S <= 1;
when "001110" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "001111";
end if;
EOR <= 0;
S <= 0;
when "001111" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "010000";
end if;
EOR <= 0;
S <= 0;
when "010000" =>
if (B=0) then
Qn <= Qp;

57

143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190

else
Qn <= "010001";
end if;
EOR <= 0;
S <= 0;
when "010001" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "010010";
end if;
EOR <= 0;
S <= 0;
when "010010" =>
Qn <= "010011";
EOR <= 0;
S <= 1;
when "010011" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "010100";
end if;
EOR <= 0;
S <= 0;
when "010100" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "010101";
end if;
EOR <= 0;
S <= 0;
when "010101" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "010110";
end if;
EOR <= 0;
S <= 0;
when "010110" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "010111";
end if;
EOR <= 0;

58

191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238

S <= 0;
when "010111" =>
Qn <= "011000";
EOR <= 0;
S <= 1;
when "011000" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "011001";
end if;
EOR <= 0;
S <= 0;
when "011001" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "011010";
end if;
EOR <= 0;
S <= 0;
when "011010" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "011011";
end if;
EOR <= 0;
S <= 0;
when "011011" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "011100";
end if;
EOR <= 0;
S <= 0;
when "011100" =>
Qn <= "011101";
EOR <= 0;
S <= 1;
when "011101" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "011110";
end if;
EOR <= 0;

59

239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286

S <= 0;
when "011110" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "011111";
end if;
EOR <= 0;
S <= 0;
when "011111" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "100000";
end if;
EOR <= 0;
S <= 0;
when "100000" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "100001";
end if;
EOR <= 0;
S <= 0;
when "100001" =>
Qn <= "100010";
EOR <= 0;
S <= 1;
when "100010" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "100011";
end if;
EOR <= 0;
S <= 0;
when "100011" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "100100";
end if;
EOR <= 0;
S <= 0;
when "100100" =>
if (B=0) then
Qn <= Qp;

60

287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334

else
Qn <= "100101";
end if;
EOR <= 0;
S <= 0;
when "100101" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "100110";
end if;
EOR <= 0;
S <= 0;
when "100110" =>
Qn <= "100111";
EOR <= 0;
S <= 1;
when "100111" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "101000";
end if;
EOR <= 0;
S <= 0;
when "101000" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "101001";
end if;
EOR <= 0;
S <= 0;
when "101001" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "101010";
end if;
EOR <= 0;
S <= 0;
when "101010" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "101011";
end if;
EOR <= 0;

61

335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382

S <= 0;
when "101011" =>
Qn <= "101100";
EOR <= 0;
S <= 1;
when "101100" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "101101";
end if;
EOR <= 0;
S <= 0;
when "101101" =>
if (B=0) then
Qn <= Qp;
else
Qn <= "101110";
end if;
EOR <= 0;
S <= 0;
when "101110" =>
if(B=0) then
Qn <= Qp;
else
Qn <= "101111";
end if;
EOR <= 0;
S <= 0;
when "101111" =>
if(B=0) then
Qn <= Qp;
else
Qn <= "110000";
end if;
EOR <= 0;
S <= 0;
when "110000" =>
Qn <="000000";
EOR <= 1;
S <= 0;
when others =>
Qn <= "000000";
EOR <= 0;
S <= 0;
end case;
end process Combinacional;

62

383
384
385
386
387
388
389
390
391

Secuencial: process(RST,CLK)
begin
if(RST=0)then
Qp <= (others => 0);
elsif(CLK event and CLK=0) then
Qp <= Qn;
end if;
end process Secuencial;
end Control;

63

Listing A.3: Registro de 8 bits con desplazamiento a la derecha


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
29
30
31
32
33
34
35
36
37
38

library IEEE;
use IEEE.std_logic_1164.all;
entity Registro_D is
port(
RST: in std_logic;
CLK: in std_logic;
Rx: in std_logic;
S: in std_logic;
R: out std_logic_vector(7 downto 0)
);
end Registro_D;
architecture Derecha of Registro_D is
signal Qn, Qp: std_logic_vector(7 downto 0);
begin
Combinacional: process(Qp,Rx,S)
begin
if(S=0)then
Qn <= Qp;
else
Qn <= Rx & Qp(7 downto 1);
end if;
R <= Qp;
end process Combinacional;
Secuencial: process(RST,CLK)
begin
if(RST=0) then
Qp <= (others => 0);
elsif (CLK event and CLK=1) then
Qp <= Qn;
end if;
end process Secuencial;
end Derecha;

64

Listing A.4: Registro de 32 bits con desplazamiento a la izquierda


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
29
30
31
32
33
34
35

library IEEE;
use IEEE.std_logic_1164.all;
entity Registro_32 is
port(
RST: in std_logic;
CLK: in std_logic;
E: in std_logic;
A: in std_logic_vector(7 downto 0);
B: out std_logic_vector(31 downto 0)
);
end Registro_32;
architecture Simple of Registro_32 is
signal Qp,Qn: std_logic_vector(31 downto 0);
begin
Combinacional: process(Qp,A,E)
begin
if(E=1)then
Qn <= Qp(23 downto 0)&A;
else
Qn <= Qp;
end if;
B <= Qp;
end process Combinacional;
Secuencial: process(RST,CLK)
begin
if(RST=0)then
Qp <=(others => 0);
elsif (CLK event and CLK=1) then
Qp <= Qn;
end if;
end process Secuencial;
end Simple;

65

Listing A.5: Bloque completo del receptor RS-232


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

library IEEE;
use IEEE.std_logic_1164.all;
entity Recepcion_RS232 is
port(
RST: in std_logic;
CLK: in std_logic;
Rx: in std_logic;
Q: out std_logic_vector(31 downto 0);
NUM: out std_logic_vector(1 to 28)
);
end Recepcion_RS232;
architecture Bloques of Recepcion_RS232 is
component Maquina_FSMR
port(
RST: in std_logic;
CLK: in std_logic;
Rx: in std_logic;
B: in std_logic;
EOR: out std_logic;
S: out std_logic
);
end component;
component Base_tiempo
port(
RST: in std_logic;
CLK: in std_logic;
B: out std_logic
);
end component;
component Registro_32
port(
RST: in std_logic;
CLK: in std_logic;
E: in std_logic;
A: in std_logic_vector(7 downto 0);
B: out std_logic_vector(31 downto 0)
);
end component;
component Registro_D
port(

66

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

RST: in std_logic;
CLK: in std_logic;
Rx: in std_logic;
S: in std_logic;
R: out std_logic_vector(7 downto 0)
);
end component;
component HEX_7Seg
port(
DL: in std_logic_vector(3 downto 0);
S: out std_logic_vector(1 to 7)
);
end component;
signal
signal
signal
signal

R: std_logic_vector(7 downto 0);


B,S: std_logic;
EOR: std_logic;
Fases: std_logic_vector(31 downto 0);

begin
Modulo1: Maquina_FSMR port map(RST,CLK,Rx,B,EOR,S);
Modulo2: Base_tiempo port map(RST,CLK,B);
Modulo3: Registro_D port map(RST,CLK,Rx,S,R);
Modulo4: Registro_32 port map(RST,CLK,EOR,R,Fases);
Q <= Fases;
Modulo5: HEX_7Seg port map(Fases(19 downto 16), NUM(1 to 7));
Modulo6: HEX_7Seg port map(Fases(23 downto 20), NUM(8 to 14));
Modulo7: HEX_7Seg port map(Fases(27 downto 24), NUM(15 to 21));
Modulo8: HEX_7Seg port map(Fases(31 downto 28),NUM(22 to 28));
end Bloques;

67

Listing A.6: Divisor de frecuencia para 100 KHz


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
29
30
31
32
33
34
35
36
37
38

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity Divisor is
port(
RST: in std_logic;
CLK: in std_logic;
E: out std_logic
);
end Divisor;
architecture Aritmetica of Divisor is
signal Qn,Qp: std_logic_vector(8 downto 0);
begin
combinacional:process(Qp)
begin
if(Qp="000000000")then
E <= 1;
Qn <= "111110100";
else
E <= 0;
Qn <= Qp-1;
end if;
end process combinacional;
secuencial: process(RST,CLK)
begin
if(RST=0)then
Qp <= "111110100";
elsif (CLK event and CLK=1)then
Qp <= Qn;
end if;
end process Secuencial;
end Aritmetica;

68

Listing A.7: Sumador completo de un bit


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

library ieee;
use ieee.std_logic_1164.all;
entity suma is
port(
X: in std_logic;
Y: in std_logic;
Ci:in std_logic;
S: out std_logic;
Co:out std_logic
);
end suma;
architecture Simple of Suma is
begin
S<=X XOR Y XOR Ci;
Co<=(X AND Y) OR (X AND Ci) OR (Y AND Ci);
end Simple;

69

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
29
30
31

library IEEE;
use IEEE.std_logic_1164.all;
BPA is
port(
A:in std_logic_vector(3 downto 0);
B:in std_logic_vector(3 downto 0);
CBA_in:in std_logic;
SBA:out std_logic_vector (3 downto 0);
CBA_out:out std_logic
);
end BPA;

entity

architecture Suma of BPA is


component Suma
port(
X: in std_logic;
Y: in std_logic;
Ci:in std_logic;
S: out std_logic;
Co:out std_logic
);
end component;
signal Ci:std_logic_vector(2 downto 0);
begin
FA0:suma port map(A(0),B(0),cba_in,sba(0),Ci(0));
FA1:suma port map(A(1),B(1),Ci(0),sba(1),Ci(1));
FA2:suma port map(A(2),B(2),Ci(1),sba(2),Ci(2));
FA3:suma port map(A(3),B(3),Ci(2),sba(3),cba_out);
end Suma;

Listing A.8: Suma de 4 bits

70

Listing A.9: Sumador completo decimal de 4 bits


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
29
30
31
32
33
34
35
36

library IEEE;
use IEEE.std_logic_1164.all;
entity Suma_Decimal is
port(
DA: in std_logic_vector(3 downto 0);
DB: in std_logic_vector(3 downto 0);
Ci: in std_logic;
Suma: out std_logic_vector(3 downto 0) ;
Co:out std_logic
);
end Suma_Decimal;
architecture Decimal of Suma_Decimal is
component BPA
port(
A:
in std_logic_vector(3 downto 0);
B:
in std_logic_vector(3 downto 0);
CBA_in: in std_logic;
SBA:out std_logic_vector (3 downto 0);
CBA_out:out std_logic
);
end component;
signal K:std_logic;
signal Z,Z1:std_logic_vector(3 downto 0);
signal C_Temp,CTC:std_logic;
begin
BPA0:BPA port map(DA,DB,Ci,Z1,C_Temp);
K<=C_Temp OR (Z1(3) AND Z1(2)) OR (Z1(3) AND Z1(1));
Z<=0&K&K&0;
BPA1:BPA port map(Z,Z1,0,Suma,CTC);
Co <= K;
end Decimal;

71

Listing A.10: Registro paralelo de 4 bits con habilitacion


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
29
30
31
32
33
34
35
36
37

library IEEE;
use IEEE.std_logic_1164.all;
entity Registro_E is
port(
CLK: in std_logic;
RST: in std_logic;
E: in std_logic;
D: in std_logic_vector(3 downto 0);
R: out std_logic_vector(3 downto 0)
);
end Registro_E;
architecture Simple of Registro_E is
signal Qp, Qn: std_logic_vector(3 downto 0);
begin
combinacional: process(E,Qp,D)
begin
if (E=0) then
Qn <= Qp;
else
Qn <= D;
end if;
R <= Qp;
end process combinacional;
secuencial: process(RST,CLK)
begin
if(RST=0) then
Qp <= (others => 0);
elsif (CLK event and CLK=1) then
Qp <= Qn;
end if;
end process secuencial;
end Simple;

72

Listing A.11: Flip-flop con habilitacion para acarreo


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
29
30
31
32
33
34
35
36

library IEEE;
use IEEE.std_logic_1164.all;
entity Carry_E is
port(
RST: in std_logic;
CLK: in std_logic;
E: in std_logic;
Co: in std_logic;
Ci: out std_logic
);
end Carry_E;
architecture Simple of Carry_E is
signal Qp, Qn: std_logic;
begin
combinacional: process(E,Qp,Co)
begin
if(E=0) then
Qn <= Qp;
else
Qn <= Co;
end if;
Ci <= Qp;
end process combinacional;
secuencial: process(RST,CLK)
begin
if(RST=0)then
Qp<=0;
elsif (CLK event and CLK=1) then
Qp <= Qn;
end if;
end process secuencial;
end Simple;

73

Listing A.12: Bloque superior de generador de tonos


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

library IEEE;
use IEEE.std_logic_1164.all;
entity Acumulador_tono is
port(
RST: in std_logic;
CLK: in std_logic;
P: in std_logic_vector(19 downto 0);
Q: out std_logic_vector(11 downto 0) --Salida de la LUT
);
end Acumulador_tono;
architecture Pipeline of Acumulador_Tono is
component Registro_E
port(
RST: in std_logic;
CLK: in std_logic;
E: in std_logic;
D: in std_logic_vector(3 downto 0);
R: out std_logic_vector(3 downto 0)
);
end component;
component Carry_E
port(
RST: in std_logic;
CLK: in std_logic;
E: in std_logic;
Co: in std_logic;
Ci: out std_logic
);
end component;
component Suma_Decimal
port(
DA: in std_logic_vector(3 downto 0);
DB: in std_logic_vector(3 downto 0);
Ci: in std_logic;
Suma: out std_logic_vector(3 downto 0) ;
Co:out std_logic
);
end component;
component Divisor
port(

74

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

RST: in std_logic;
CLK: in std_logic;
E: out std_logic
);
end component;
component LUT
port(
F: in std_logic_vector(13 downto 0);
S: out std_logic_vector(11 downto 0)
);
end component;
signal Aux: std_logic_vector(19 downto 0);
signal Seno: std_logic_vector(11 downto 0);
signal E: std_logic;
signal
signal
signal
signal
signal
signal
signal
signal
signal
signal

D11,D12,D13,D14,D15:
D21,D22,D23,D24,D25:
D31,D32,D33,D34,D35:
D41,D42,D43,D44,D45:
D51,D52,D53,D54,D55:
R11,R12,R13,R14,R15:
R21,R22,R23,R24,R25:
R31,R32,R33,R34,R35:
R41,R42,R43,R44,R45:
R51,R52,R53,R54,R55:

std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3

downto
downto
downto
downto
downto
downto
downto
downto
downto
downto

0);
0);
0);
0);
0);
0);
0);
0);
0);
0);

signal Co1,Co2,Co3,Co4,Co5: std_logic;


signal Ci1,Ci2,Ci3,Ci4,Ci5: std_logic;
signal R01: std_logic_vector(3 downto 0);
begin
Division: Divisor port map(RST,CLK,E);
R01
D12
D13
D14
D15

<=
<=
<=
<=
<=

P(3 downto 0);


P(7 downto 4);
P(11 downto 8);
P(15 downto 12);
P(19 downto 16);

Suma_1_1:
Regs_1_1:
Regs_1_2:
Regs_1_3:
Regs_1_4:
Regs_1_5:

Suma_Decimal port map(R01,R11,0,D11,Co1);


Registro_E port map(RST,CLK,E,D11,R11);
Registro_E port map(RST,CLK,E,D12,R12);
Registro_E port map(RST,CLK,E,D13,R13);
Registro_E port map(RST,CLK,E,D14,R14);
Registro_E port map(RST,CLK,E,D15,R15);

75

95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142

Carr_1_1: Carry_E port map(RST,CLK,E,Co1,Ci1);


D21 <= R11;
D23 <= R13;
D24 <= R14;
D25 <= R15;
Suma_2_2: Suma_Decimal port map(R12,R22,Ci1,D22,Co2);
Regs_2_1: Registro_E port map(RST,CLK,E,D21,R21);
Regs_2_2: Registro_E port map(RST,CLK,E,D22,R22);
Regs_2_3: Registro_E port map(RST,CLK,E,D23,R23);
Regs_2_4: Registro_E port map(RST,CLK,E,D24,R24);
Regs_2_5: Registro_E port map(RST,CLK,E,D25,R25);
Carr_2_2: Carry_E port map(RST,CLK,E,Co2,Ci2);
D31 <= R21;
D32 <= R22;
D34 <= R24;
D35 <= R25;
Suma_3_3: Suma_Decimal port map(R23,R33,Ci2,D33,Co3);
Regs_3_1: Registro_E port map(RST,CLK,E,D31,R31);
Regs_3_2: Registro_E port map(RST,CLK,E,D32,R32);
Regs_3_3: Registro_E port map(RST,CLK,E,D33,R33);
Regs_3_4: Registro_E port map(RST,CLK,E,D34,R34);
Regs_3_5: Registro_E port map(RST,CLK,E,D35,R35);
Carr_3_3: Carry_E port map(RST,CLK,E,Co3,Ci3);
D41 <= R31;
D42 <= R32;
D43 <= R33;
D45 <= R35;
Suma_4_4: Suma_Decimal port map(R34,R44,Ci3,D44,Co4);
Regs_4_1: Registro_E port map(RST,CLK,E,D41,R41);
Regs_4_2: Registro_E port map(RST,CLK,E,D42,R42);
Regs_4_3: Registro_E port map(RST,CLK,E,D43,R43);
Regs_4_4: Registro_E port map(RST,CLK,E,D44,R44);
Regs_4_5: Registro_E port map(RST,CLK,E,D45,R45);
Carr_4_4: Carry_E port map(RST,CLK,E,Co4,Ci4);
D51 <= R41;
D52 <= R42;
D53 <= R43;
D54 <= R44;
Suma_5_5:
Regs_5_1:
Regs_5_2:
Regs_5_3:
Regs_5_4:
Regs_5_5:

Suma_Decimal port map(R45,R55,Ci4,D55,Co5);


Registro_E port map(RST,CLK,E,D51,R51);
Registro_E port map(RST,CLK,E,D52,R52);
Registro_E port map(RST,CLK,E,D53,R53);
Registro_E port map(RST,CLK,E,D54,R54);
Registro_E port map(RST,CLK,E,D55,R55);

76

143
144
145
146
147
148
149
150
151

Carr_5_5: Carry_E port map(RST,CLK,E,Co5,Ci5);


Aux <= R55 & R54 & R53 &R52 &R51;
Senoidal: LUT port map(Aux(19 downto 6),Seno);
Q <= Seno;
end Pipeline;

77

Listing A.13: Registro paralelo de 4 bits sin habilitacion


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

library IEEE;
use IEEE.std_logic_1164.all;
entity Registro is
port(
CLK: in std_logic;
RST: in std_logic;
D: in std_logic_vector(3 downto 0);
R: out std_logic_vector(3 downto 0)
);
end Registro;
architecture Simple of Registro is
signal Qp, Qn: std_logic_vector(3 downto 0);
begin
process(RST,CLK)
begin
if(RST=0) then
R <= (others => 0);
elsif (CLK event and CLK=1) then
R <= D;
end if;
end process;
end Simple;

78

Listing A.14: Flip-flop para acarreo sin habilitacion


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

library IEEE;
use IEEE.std_logic_1164.all;
entity Carry1 is
port(
RST: in std_logic;
CLK: in std_logic;
Co: in std_logic;
Ci: out std_logic
);
end Carry1;
architecture Simple of Carry1 is
begin
process(RST,CLK)
begin
if(RST=0)then
Ci <= 0;
elsif (CLK event and CLK=1) then
Ci <= Co;
end if;
end process;
end Simple;

79

Listing A.15: Generador de portadora


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

library IEEE;
use IEEE.std_logic_1164.all;
entity Acumulador_portadora is
port(
RST: in std_logic;
CLK: in std_logic;
P: in std_logic_vector(15 downto 0);
Q: out std_logic_vector(11 downto 0)
);
end Acumulador_portadora;
architecture Pipeline of Acumulador_portadora is
component Registro
port(
RST: in std_logic;
CLK: in std_logic;
D: in std_logic_vector(3 downto 0);
R: out std_logic_vector(3 downto 0)
);
end component;
component Carry1
port(
RST: in std_logic;
CLK: in std_logic;
Co: in std_logic;
Ci: out std_logic
);
end component;
component Suma_Decimal
port(
DA: in std_logic_vector(3 downto 0);
DB: in std_logic_vector(3 downto 0);
Ci: in std_logic;
Suma: out std_logic_vector(3 downto 0) ;
Co:out std_logic
);
end component;
component LUT
port(
F: in std_logic_vector(13 downto 0);
S: out std_logic_vector(11 downto 0)

80

--Salida de la LUT

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

);
end component;
signal Aux: std_logic_vector(15 downto 0);
signal
signal
signal
signal
signal
signal
signal
signal

D11,D12,D13,D14:
D21,D22,D23,D24:
D31,D32,D33,D34:
D41,D42,D43,D44:
R11,R12,R13,R14:
R21,R22,R23,R24:
R31,R32,R33,R34:
R41,R42,R43,R44:

std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3
std_logic_vector(3

signal
signal
signal
signal

Co1,Co2,Co3,Co4: std_logic;
Ci1,Ci2,Ci3,Ci4: std_logic;
R01: std_logic_vector(3 downto 0);
Seno:std_logic_vector(11 downto 0);

downto
downto
downto
downto
downto
downto
downto
downto

0);
0);
0);
0);
0);
0);
0);
0);

begin
R01
D12
D13
D14

<=
<=
<=
<=

P(3 downto 0);


P(7 downto 4);
P(11 downto 8);
P(15 downto 12);

Suma_1_1: Suma_Decimal port map(R01,R11,0,D11,Co1);


Regs_1_1: Registro port map(RST,CLK,D11,R11);
Regs_1_2: Registro port map(RST,CLK,D12,R12);
Regs_1_3: Registro port map(RST,CLK,D13,R13);
Regs_1_4: Registro port map(RST,CLK,D14,R14);
Carr_1_1: Carry1 port map(RST,CLK,Co1,Ci1);
D21 <= R11;
D23 <= R13;
D24 <= R14;
Suma_2_2: Suma_Decimal port map(R12,R22,Ci1,D22,Co2);
Regs_2_1: Registro port map(RST,CLK,D21,R21);
Regs_2_2: Registro port map(RST,CLK,D22,R22);
Regs_2_3: Registro port map(RST,CLK,D23,R23);
Regs_2_4: Registro port map(RST,CLK,D24,R24);
Carr_2_2: Carry1 port map(RST,CLK,Co2,Ci2);
D31 <= R21;
D32 <= R22;
D34 <= R24;
Suma_3_3: Suma_Decimal port map(R23,R33,Ci2,D33,Co3);
Regs_3_1: Registro port map(RST,CLK,D31,R31);

81

95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115

Regs_3_2: Registro port map(RST,CLK,D32,R32);


Regs_3_3: Registro port map(RST,CLK,D33,R33);
Regs_3_4: Registro port map(RST,CLK,D34,R34);
Carr_3_3: Carry1 port map(RST,CLK,Co3,Ci3);
D41 <= R31;
D42 <= R32;
D43 <= R33;
Suma_4_4:
Regs_4_1:
Regs_4_2:
Regs_4_3:
Regs_4_4:
Carr_4_4:

Suma_Decimal port map(R34,R44,Ci3,D44,Co4);


Registro port map(RST,CLK,D41,R41);
Registro port map(RST,CLK,D42,R42);
Registro port map(RST,CLK,D43,R43);
Registro port map(RST,CLK,D44,R44);
Carry1 port map(RST,CLK,Co4,Ci4);

Aux <= R44&R43&R42&R41;


Senoidal: LUT port map (Aux(15 downto 2),Seno);
Q <= Seno;
end Pipeline;

82

Listing A.16: Modulador por amplitud


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity AM is
port(
RST: in std_logic;
CLK: in std_logic;
Fase_tono: in std_logic_vector(19 downto 0);
Fase_portadora: in std_logic_vector(15 downto 0);
Salida: out std_logic_vector(11 downto 0)
);
end AM;
architecture Completa of AM is
component Acumulador_tono
port(
RST: in std_logic;
CLK: in std_logic;
P: in std_logic_vector(19 downto 0);
Q: out std_logic_vector(11 downto 0) --Salida de la LUT
);
end component;
component Acumulador_portadora
port(
RST: in std_logic;
CLK: in std_logic;
P: in std_logic_vector(15 downto 0);
Q: out std_logic_vector(11 downto 0)
);
end component;
signal Q_tono,Q_portadora: std_logic_vector(11 downto 0);
signal Producto: std_logic_vector(11 downto 0);
signal Modulada: std_logic_vector(11 downto 0);
begin
Tono: Acumulador_tono port map(RST,CLK,Fase_tono,Q_tono);
Portadora: Acumulador_portadora port map (RST,CLK,Fase_portadora,
Q_portadora);
process(Q_tono,Q_portadora,Producto,Modulada)

83

46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

variable MUU: signed(23 downto 0);


variable Suma: signed(11 downto 0);
begin
MUU:= signed(Q_tono) * signed(Q_portadora);
Producto <= std_logic_vector(MUU(23 downto 12));
if (Q_portadora(11)=1) then
Suma:= signed(Producto)+signed("11" & Q_portadora(10
downto 1));
else
Suma:= signed(Producto) + signed("00" & Q_portadora(10
downto 1));
end if;
Modulada <= std_logic_vector(Suma);
Salida <= NOT(Modulada(11))& Modulada(10 downto 0); --Ajuste de
complemento 2 a unsigned
end process;
end Completa;

84

Listing A.17: Modulacion FM


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity FM is
port(
RST: in std_logic;
CLK: in std_logic;
Fase_tono: in std_logic_vector(19 downto 0);
Fase_portadora: in std_logic_vector(15 downto 0);
Salida: out std_logic_vector(11 downto 0)
);
end FM;
architecture Completa of FM is
component Acumulador_tono
port(
RST: in std_logic;
CLK: in std_logic;
P: in std_logic_vector(19 downto 0);
Q: out std_logic_vector(11 downto 0) --Salida de la LUT
);
end component;
component Acumulador_portadora
port(
RST: in std_logic;
CLK: in std_logic;
P: in std_logic_vector(15 downto 0);
Q: out std_logic_vector(15 downto 0)
);
end component;
component LUTFM
port(
F: in std_logic_vector(11 downto 0);
S: out std_logic_vector(11 downto 0)
);
end component;

signal Q_tono: std_logic_vector(11 downto 0);


signal Q_portadora:std_logic_vector(15 downto 0);
signal Modulada: std_logic_vector(11 downto 0);

85

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

begin
Tono: Acumulador_tono port map(RST,CLK,Fase_tono,Q_tono);
Portadora: Acumulador_portadora port map (RST,CLK,Fase_portadora,
Q_portadora);
process(Q_tono,Q_portadora,Modulada)
variable Suma: unsigned(11 downto 0);
begin
if (Q_tono(11)=1)then
Suma:= unsigned(Q_portadora(15 downto 4))+unsigned(Q_tono
(10 downto 0)&0)+"010000000000";
else
Suma:= unsigned(Q_portadora(15 downto 4))-"101111111111"+
unsigned(Q_tono(10 downto 0)&0);
end if;
Modulada <= std_logic_vector(Suma);
end process;
LUT: LUTFM port map (Modulada,Salida);
end Completa;

86

Bibliografa
de Jesu
s
[1] Romero Troncoso, Rene
Electronica digital y logica programable
Universidad de Guanajuato, 2007.
[2] Goldberg, Bar-giora
Digital Frequency Synthesis Demystified
LLH Technology Publishing, 1999
[3] Kroupa, Venceslav F.
Direct Digital Frequency Synthesizers
Wiley-IEEE Press, 1998.
[4] Vankka, Joukko
Digital Synthesizers and Transmitters for Software Radio
Helsinki University, Springer, 2005.
Antonio
[5] Medina Rico, Jose
Sintetizador digital de formas de onda
Tesis, Universidad de Guanajuato, 1990
pez Jaramillo, J. Cruz
[6] Lo
Sintetizador digital de formas de onda basado en microcontrolador
Tesis, Universidad de Guanajuato, 1991

87

rez, Arturo
[7] Garca Pe
Base de tiempo de alta resolucion por sntesis digital PLL
Tesis, Universidad de Guanajuato, 1992
s, Jose
Ramo
n
[8] Laguna Valde
Sintetizador digital de frecuencia por acumulacion de fase con arquitectura pipeline
Tesis, Universidad de Guanajuato, 1995
[9] Aguilera Gasca, Alejandro
Generador de Funciones Implementado en un FPGA usando Sntesis
Digital Directa y la Tecnica de Compresion Sunderland
Tesis, Universidad de Guanajuato, 2006
[10] Frenzel Jr., Louis E.
Principles of Electronic Communication Systems
Mc-Graw Hill, 2007.
[11] Lathi, B.P y Ding, Zhi
Modern Digital and Analog Communication Systems
Oxford University Press, 2010.
[12] Herrera Cabral,Joel
Dise
no de un sintonizador digital para la banda de AM
Tesis, Universidad de Guanajuato, 1994
[13] Rojas Laguna, Roberto y Violante Gavira, Gabriela
Receptor de AM utilizando tecnicas de sntesis digital
Tesis, Universidad de Guanajuato, 1995
[14] Tuttlebee, Walter
Software defined radio: enabling technologies
Wiley,2002

88

[15] Cummings, M. y Haruyama, S.


FPGA in the Software Radio
Communications Magazine, IEEE, 1999.
[16] NORMA Oficial Mexicana NOM-01-SCT1-93
Diario Oficial de la Federacion, 10 de Noviembre de 1993.
[17] Franco, Sergio
Dise
no con Amplificadores Operacionales y Circuitos Integrados Analogicos
McGraw-Hill, 2005
[18] Analog Devices
Hoja de Datos AD9752
[19] Altera Corporation
DE0 User Manual 2012

89

También podría gustarte