Documentos de Académico
Documentos de Profesional
Documentos de Cultura
-Cada bit de información está codificado mediante un nivel bajo y un nivel alto: Un "0" está
codificado con un nivel bajo y alto de duración T respectivamente, y un "1" está codificado
con un nivel bajo de duración T y un nivel alto de duración 2T. Cada “T” tiene una duración
de 600us (el reloj principal, es decir, CLK, tiene un periodo de 1us).
La trama de bits generada al pulsar una tecla en el mando tiene el siguiente formato:
Primero se transmite una cabecera, que consiste en el llamado bit START con una duración
a nivel alto de 3T (1800 us); seguidamente se transmiten 8 Bits que contienen dato a
transmitir iniciando con el LSB. Si por ejemplo en IN_IR está el dato “00000101” (decimal
’5’), la forma de onda que se aplicará a la entrada del circuito integrado será:
La entrada CLK tiene un periodo de 1ns. La entrada Amp controlará la amplitud de la forma
de onda de salida, así:
01->periodo de 128ns
10->periodo de 256ns
11->periodo de 512 ns
00->seno
01->cuadrada
10->triangular
11->diente de sierra.
Las señales tendrán 64 muestras. Debido a que la salida es un vector, es necesario habilitar
la vista de señales analógicas en Quartus. Explicación:
¿Cómo genero una señal analógica dentro de un dispositivo digital? La respuesta es sencilla,
esto NO se puede, pero si puedo obtener una versión DISCRETA de esa señal analógica. La
técnica se explica a continuación:
Una señal senoidal puede ser implementada en una FPGA a través de una LUT (Look-Up Table)
que no es más que la equivalencia de una tabla en un microcontrolador.
Cómo se obtienen las muestras de la señal seno para poder incluirlas en la LUT?
Una de las primeras confusiones es como generar la tabla de senos que encontramos en muchos
programas y cuáles son sus distintas variantes. Lo primero que debemos determinar es la
resolución en bits de la onda analógica. Esto determinará la calidad de la misma. Por simplicidad
vamos a trabajar a 8 bits por lo que aplicando la siguiente fórmula será posible obtener las
muestras de nuestra onda seno:
para 0 ≤ N ≤ 255
Al ir calculando los datos obtendremos unos valores que debemos redondear a entero si es el
caso, cada uno de estos valores representará una muestra de la onda seno y por lo tanto un dato
de la LUT. Los cálculos pueden hacerse con calculadora o si lo prefiere puede utilizar un software
especializado como Matlab. Calculemos algunos valores representativos:
Para N=0
Para N=64
Para N=127
Observe que el efecto de sumar 128 es que en la tabla solo se obtengan números positivos, esto
facilita el diseño mucho.
Implementación de la LUT
Para implementar la LUT en VHDL se debe crear un tipo de datos que me permita almacenar
valores de 8 bits. Inmediatamente podemos inferir que se debe crear un vector 1Dx1D y declarar
una CONSTANTE de este tipo que contenga las muestras calculadas. Se debe declarar CONSTANT
(constante) ya que las muestras son valores fijos y no cambian. Recuerde que la creación del
tipo de datos y la declaración de esta señal se hacen en la zona declarativa de la arquitectura.
Aquí hay un ejemplo:
BEGIN
Acceder a los valores dentro de la tabla no tiene mayor misterio, simplemente puedo acceder a
cada valor así: (esto es un ejemplo)
Para aumentar o disminuir la frecuencia de la señal senoidal discretizada bastará con variar
el tiempo en que demoramos accediendo a cada uno de los datos (muestras) de la tabla.
La salida será un bus de 8 bits que contiene las muestras de la señal modulada, así que
físicamente se verá como un número binario de 8 bits. Pero el QUARTUS 6.1 o superior permite
ajustar entre las propiedades de la señal en la simulación obtener una versión analógica de una
señal de salida por lo que será posible ver la salida modulada como si se tratase de una señal
analógica. Lo que hace QUARTUS es “pasar” esa señal a través de un DAC para que podamos
verla como analógica.
A continuación se explicará cómo hacerlo por medio de un ejemplo sencillo:
EJEMPLO:
Se desea diseñar un generador de diente de sierra. Este tipo de señal es analógica pero puede
ser implementada digitalmente por medio de un contador ascendente de 8 bits. El código es
muy simple:
Puede verse que simplemente se trata de un contador ascendente. Pero si damos click izquierdo
sobre la señal “sierra” para que se seleccione y luego click derecho para que se expanda el menú
como se ve en la figura podemos seleccionar en Display Format la opción Analog Waveform:
Al dar click en esta opción entonces aparecerá posiblemente el siguiente mensaje,
seleccionamos como indica la figura:
Luego nuevamente damos click sobre la señal para seleccionarla, después click derecho y
nuevamente seleccionamos analog waveform y sale la siguiente ventana:
Seleccionamos las opciones como se muestran y click ok. Y allí tenemos nuestra onda:
Como puede verse la forma de onda es la representación analógica del contador ascendente.