Beruflich Dokumente
Kultur Dokumente
DE INGENIERIAS
DIVISION
CAMPUS IRAPUATO-SALAMANCA
TESIS PROFESIONAL
QUE PARA OBTENER EL TITULO DE:
PRESENTA:
Mois
es Blas Granados Cruz
ASESOR:
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . .
. . .
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 . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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.
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
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
1.3.
Planteamiento general
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
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
(2.1)
(2.2)
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)
(2.5)
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.
2.2.
Indice de modulaci
on
12
2.2.1.
Sobremodulaci
on y distorsi
on
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.
2.3.1.
C
alculo de las bandas laterales
(2.8)
fLSB = fc fm
(2.9)
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 =
Vm
Vm
cos 2t(fc fm )
cos 2t(fc + fm )
2
2
(2.11)
15
2.3.2.
Representaci
on de AM en el dominio de la frecuencia
(2.12)
2.4.
Potencia de una se
nal de AM
(2.13)
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)
2.5.
AM comercial
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.
20
2.6.
Frecuencia Modulada
Z t
m( )d ]
(2.16)
(2.17)
2.7.
RS-232
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
2.8.
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
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
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
2.9.
Conversi
on digital-anal
ogica
(2.21)
26
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
3.1.1.
Programa para PC
28
3.1.2.
Conexi
on entre PC y tarjeta DE0
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
3.2.1.
Recepcion RS-232
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
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
3.2.2.
Sintetizador de tonos
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
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
3.2.5.
Frecuencia modulada
3.3.
Conversi
on digital-anal
ogica
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.
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.
42
4.2.1.
Tonos
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.
4.2.2.
Portadoras
44
4.3.
Modulaci
on en amplitud
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
4.4.
Sistema final
46
4.4.1.
Im
agenes de tonos
4.4.2.
Im
agenes de portadoras
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
48
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
4.7.
Perspectivas
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
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
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
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
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
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
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
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
70
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
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
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
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);
<=
<=
<=
<=
<=
Suma_1_1:
Regs_1_1:
Regs_1_2:
Regs_1_3:
Regs_1_4:
Regs_1_5:
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
76
143
144
145
146
147
148
149
150
151
77
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
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
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
<=
<=
<=
<=
81
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
82
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
84
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;
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
89