domingo, 15 de diciembre de 2013

MANUAL VISUALIZACION DINAMICA EN HANDEL-C


MANUAL
VISUALIZACION DINAMICA EN HANDEL-C




INTRODUCCION
Durante las últimas décadas, el desarrollo de las nuevas tecnologías de fabricación de circuitos integrados, junto con el significativo avance de los equipos informáticos, ha proporcionado la aparición de nuevos lenguajes de programación orientado al diseño de sistemas electrónicos.
Los lenguajes de programación durante años se han utilizado para resolver problemas, los cuales tienen reglas para formar instrucciones correctas, organizándolas en módulos y someterlas hacia un compilador , el cual traduce el código en un lenguaje comprensible para una máquina en particular, en el siguiente documento se encontrara una introducción sobre los lenguajes de programación pero se profundizara uno en específico llamado “Handel-C” el cual es un lenguaje de programación de alto nivel que se enfoca en hardware de bajo nivel, se quiere que el lector tenga al alcance una guia practica de facil entendimiento  sobre el lenguaje de programacion HANDEL-C, para esto  se realizará un ejemplo de visualización dinamica en este lenguaje el cual se montará el la FPGA para poder observar su funcionamiento.


HANDEL- C

Handel-C es un alto nivel de lenguaje de programación  Diseñado por Celoxica, el cual se enfoca en hardware de bajo nivel, más comúnmente utilizado en la programación de FPGAs;  este es un lenguaje para implementar algoritmos en hardware directamente de una representación en C. Para diseñar sistemas usando la herramienta de desarrollo DK Design Suite.

Handel-C  Es un rico subconjunto de C , con extensiones que no son estándar para el control de la creación de instancias de hardware con un énfasis en el paralelismo; la asignación y el comando de retardo tienen un ciclo. Todas las demás operaciones son "libres", esto permite a los programadores realizar manualmente las tareas y crear eficaces tuberías . Mediante la disposición de los bucles en paralelo con los retrasos correctos, las tuberías pueden aumentar enormemente el rendimiento de datos, a expensas de un mayor uso de recursos de hardware.

DK Design Suite

Handel-C en  síntesis con DK Design Suite (kit de diseño) ofrece un flujo de software para el desarrollo de algoritmos, optimización y aceleración en sistemas embebidos y  Con esto Validar el rendimiento y mejorar la calidad del producto en menos tiempo y con menor costo.

El DK Design Suite es muy adecuado para diseñadores de algoritmos que utilizan C y C + +, lo que requiere una plataforma de validación más rápido que una plataforma orientada al procesador (es decir, un ordenador portátil), pero no tienen experiencia herramienta de diseño HW(hardware) en profundidad de utilizar la lógica paralelo en FPGA de prototipos de hardware.
 La suite DK Design da la opción de  la compilación del algoritmo directamente a las placas FPGA dedicados para acelerar el rendimiento del sistema al tiempo que proporciona herramientas para la depuración y optimización.
Para los equipos de diseño de algoritmos, Handel-C permite la programación FPGA utilizando herramientas y flujos basados ​​en software. Los usuarios pueden comprobar los sistemas en las simulaciones de ciclo exacto, y compilar el código directamente en la lógica FPGA, la creación de archivos de un bit para programar juntas FPGA. Bibliotecas API permiten a los diseñadores de software para conectar procesadores y periféricos de mesa a la lógica FPGA, lo que permite una rápida exploración de HW y SW de aplicación compensaciones. El resultado final es un "banco de trabajo algoritmo" que permite la implementación rápida del sistema de software para las plataformas de hardware FPGA.
Algoritmos definen el valor de los sistemas integrados de hoy en día. Estos modelos complejos determinan el funcionamiento y rendimiento de los productos finales. Tiempos de ejecución resultantes de clásico SW compilación de una CPU pueden no ser lo suficientemente rápido. Verificación de mundo real la interacción de E / S puede ser necesaria para determinar la exactitud del algoritmo y funcionalidad. La suite DK Design ofrece una solución a este último por la compilación del algoritmo directamente a las placas FPGA dedicados para acelerar el rendimiento del sistema al tiempo que proporciona herramientas para la depuración y optimización.

EJEMPLO DE VISUALIZACION DINAMICA EN HANDEL-C

Línea 1: se declara la referencia de la FPGA, paquete y velocidad
Línea 2: se  declara la familia de la FPGA a utilizar
Línea 3: se define el reloj en pin B8 para FPGA spartan3e
Línea 4: se declara
-          a, b, c, d, e, f, g, variables correspondientes a cada uno de los leds de un display 7 segmentos
-          segmento, segmento1, segmento2, segmento3 para selecciona  los displays
Línea 5:declara las variables correspondientes a los 8 leds
Línea 6: asigna el switch dedicado a iniciar el funcionamiento
Línea 7: asigna el pulsador dedicado a la función reset
De la línea 12 a 30  llevamos a cabo la asignación de leds  y pines de los display 7 segmentos de la FPGA
Línea 32: se hace la declaración de un reloj de 5M
Línea 34-35: se hace el llamado de las variables a utilizar dentro de nuestro main
Línea 36: en esta línea hacemos la declaración de un while que siempre es verdadero  de acuerdo a las condiciones  internas del mismo.
Línea 38-66: hacemos la definición de del contador para cada una de las componentes (segundos, decenas de segundo, minuto, decenas de minuto). Estas componentes son dependientes de la menos significativa  que es decenas de segundo hasta minutos que sería la mas significativa
Figura 1.

Figura 2.
Figura 3.

Figura 4.
En la figuras 1,2,3,4 correspondientes a las líneas 77-177 se lleva a cabo la definición y asignación de la visualización dinámica de segundo , décimas de segundo, minuto  y decimas de minuto respectivamente usando las sentencia case  donde un 0 habilita  y un 1 inhabilita un determinado display correspondientes a  segmento, segmento1, segmento2, segmento3  para los cuales según sea el número del 1 al10  se le hace una determinada asignación de encendido u apagado para cada uno de los segmentos del display ( un 0 enciende un segmento del display y un 1 lo apaga).
Línea 205-207: se  definen las acciones tras accionar  el pulsador de reset  donde al estar en uno pone todos los contadores en 0.

·         Tras terminar  nuestro código de programación debemos compilar el programa para asegurarnos  de que no tenga ningún error y poder generar los archivos necesarios para poder hacer una posterior generación  e interpretación de archivos en Xilinx para poner en marcha nuestro proyecto sobre la FPGA.
Para compilar el proyecto seguiremos los siguientes pasos: build-> Rebuild All
Si todo está bien, nos aparecerá un mensaje “0 error, 0 warnings” y podremos proceder al montaje de archivos en Xilinx.
Crearemos un nuevo proyecto en Xilinx donde daremos un nombre, y las respectivas ubicaciones donde se guardara todo. En Top-level source type cambiaremos por EDIF y damos Next.
Ahora debemos seleccionar la ubicación del archivo .edf de nuestro proyecto generado por Dk desing y damos Next.
En esta ventana debemos configurar las las característica de la FPGA a utilizaren nuestro caso una basys2.
Family: Spartan3E
Device: XC3s100E
Package: CP132
Speed: -4
Después de tener configurado el proyecto de xilinx deberemos dar inicio a la verificación de sintaxis (1)  y luego damos clic en Generate Programing File (2) con lo cual se nos generara un archivo .bit el cual será el que usaremos para programas nuestra FPGA.

viernes, 13 de diciembre de 2013

UTILIZAR SIMULINK DE MATLAB PARA HACER UN MODULADOR QPSK

UTILIZAR SIMULINK DE MATLAB PARA HACER UN MODULADOR QPSK
Introducción.
La utilización de nuevas tecnologías nos obliga a realizar adaptaciones y acoplarnos a estas. En este sentido lo mejores hacer cada vez más fácil el  manejo e implementación de estas nuevas tecnologías. Con este objetivo día tras día se trabaja el hacer más fácil la programación de estas nuevas tecnologías para incentivar el mismo desarrollo.
La utilización de la modulación en señales es sobreponerlas con portadoras, de esta manera se aprovecha mejor el canal de comunicación, lo que nos ayuda a transmitir más información de una forma simultánea y sin mencionar la mejora contra ruidos e interferencias que se puedan presentar.
En este manual se mostrara la modulación digital especifica QPSK (cuadratura Phase Shift Keying); Se utilizara la herramienta “simulink” de Matlab para hacer la simulación de esta modulación. Explicando paso a paso la modulación y simulación de este.
Objetivos:
·         Familiarizarse con el entorno de la herramienta System Generator.
·         Conocer y utilizar la herramienta “simulink” de Matlab
·         Por medio de la práctica, reconocer algunas ventajas y debilidades de la herramienta para el diseño de soluciones.
·         Conocer los procedimientos para exportar, compilar y programar nuestro diseño en un kit de desarrollo de la Familia Spartan.
·         Realizar el montaje práctico del diseño y analizar los resultados con los elementos de medición disponibles en el laboratorio.
·         Comprender y analizar el funcionamiento de la modulación QPSK y su aplicativo en Matlab.



MODULACION
Modulación engloba el conjunto de técnicas que se usan para transportar información sobre una onda portadora, típicamente una onda sinusoidal. Estas técnicas permiten un mejor aprovechamiento del canal de comunicación lo que posibilita transmitir más información en forma simultánea además de mejorar la resistencia contra posibles ruidos e interferencias. Según la American National Standard for Telecommunications, la modulación es el proceso, o el resultado del proceso, de variar una característica de una portadora de acuerdo con una señal que transporta información. El propósito de la modulación es sobreponer señales en las ondas portadoras.
Básicamente, la modulación consiste en hacer que un parámetro de la onda portadora cambie de valor de acuerdo con las variaciones de la señal moduladora, que es la información que queremos transmitir.
Onda de baja frecuencia (portadora, las dos de abajo) puede modularse en amplitud (AM, varía la amplitud) o en frecuencia (FM, varía la frecuencia).
TIPOS DE MODULACION
Modulación Analógica
Las tres técnicas de modulación analógica básica son:
  • Modulación de la amplitud (AM o amplitud modulada).
  • Modulación de la frecuencia (FM o frecuencia modulada).
  • Modulación de la fase (PM o fase modulada).
La mayoría de los sistemas de comunicación utilizan alguna de estas tres técnicas de modulación básicas, o una combinación de ellas.
Modulación Digital
La función de una modulación digital es convertir los bits en señales adecuadas para su transmisión. La gran ventaja de las modulaciones digitales es que son más robustas frente al ruido, y además permiten regenerar la señal con mayor calidad que las modulaciones analógicas Los siguientes son algunas técnicas de modulación digital
  • Modulación por desplazamiento de amplitud (ASK, Amplitude Shift Keying)
  • Modulación por desplazamiento de frecuencia (FSK,Frecuency Shift Keying)
  • Modulación por desplazamiento de fase (PSK, Phase Shift Keying)
MODULACIÓN PSK
La modulación por desplazamiento de fase o PSK (Phase Shift Keying) es una forma de modulación angular que consiste en hacer variar la fase de la portadora entre un número de valores discretos. La diferencia con la modulación de fase convencional (PM) es que mientras en ésta la variación de fase es continua, en función de la señal moduladora, en la PSK la señal moduladora es una señal digital y, por tanto, con un número de estados limitado.
La modulación PSK se caracteriza porque la fase de la señal portadora representa cada símbolo de información de la señal moduladora, con un valor angular que el modulador elige entre un conjunto discreto de "n" valores posibles.
Dependiendo del número de posibles fases a tomar, recibe diferentes denominaciones. Dado que lo más común es codificar un número entero de bits por cada símbolo, el número de fases a tomar es una potencia de dos. Así tendremos BPSK con 2 fases (equivalente a PAM), QPSK con 4 fases (equivalente a QAM), 8-PSK con 8 fases y así sucesivamente. A mayor número de posibles fases, mayor es la cantidad de información que se puede transmitir utilizando el mismo ancho de banda, pero mayor es también su sensibilidad frente a ruidos e interferencias.
Se puede modelar como la conmutación de dos señales sinusoidales de características similares pero desfasadas 180°, definidas mediante las siguientes expresiones:
f1(t) = Asen(wct) (equivalente al 1 binario)
f2(t) = -Asen(wct) (equivalente al 0 binario)

Existen dos tipos de modulación PSK: BPSK con 2 fases y  QPSK con 4 fases.
BPSK (PSK Binario)
Este esquema es la modulación de desplazamiento de fase de 2 símbolos. Es el más sencillo de todos, puesto que solo emplea 2 símbolos, con 1 bit de información cada uno. Es también la que presenta mayor inmunidad al ruido, puesto que la diferencia entre símbolos es máxima (180º). Dichos símbolos suelen tener un valor de salto de fase de 0º para el 1 y 180º para el 0, como se muestra en un diagrama de constelación. En cambio, su velocidad de transmisión es la más baja de las modulaciones de fase.
Descripción: http://upload.wikimedia.org/wikipedia/commons/thumb/4/41/BPSK_Gray_Coded.svg/175px-BPSK_Gray_Coded.svg.png
Diagrama de constelación para BPSK.
QPSK (Quadrature Phase-Shift Keying)
Esta modulación digital es representada en el diagrama de constelación por cuatro puntos equidistantes del origen de las coordenadas. Con cuatro fases, QPSK puede codificar dos bits por cada símbolo. La asignación de bits a cada símbolo suele hacerse mediante el código Gray, que consiste en que, entre dos símbolos adyacentes, los símbolos solo se diferencian en 1 bit, con lo que se logra minimizar la tasa de bits erróneos, se dividen en grupos de dos (11, 10, 01 o 00) y a cada posible par de bits se le  asigna una forma de onda.
Descripción: http://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/QPSK_Gray_Coded.svg/200px-QPSK_Gray_Coded.svg.png
Diagrama de constelación para QPSK con código Gray.
El "PSK" en QPSK se refiere al uso de phased Shift Keying. Shift Keying etapas es una forma de modulación de fase que se logra mediante el uso de un discreto número de estados. QPSK se refiere a PSK con 4 estados.
Desplazamiento de fase de 4 símbolos, desplazados entre sí 90º. Normalmente se usan como valores de salto de fase 45º, 135º, 225º, y 315º. Cada símbolo aporta 2 bits. Suele dividirse el flujo de cada bit que forman los símbolos como I y Q.




Primero que todo se tiene que verificar que el software xilinx este asociado con  Matlab
Si estamos en W7 debemos dar clic derecho en System Generator MATLAB Configurator e ejecutar como administrador .


Seleccionamos nuestra versión de Matlab y damos Apply

El siguiente esquema de bloques representa en funcionamiento de un modulador QPSK, el cual implementaremos durante el desarrollo del manual.
Modulador QPSK. El flujo binario es dividido dos componentes, denominados canales I (inphase, en fase) y Q (quadrature, en cuadratura) que modulan independientemente a dos portadoras ortogonales entre sí. Después, las dos señales se superponen, y la señal resultante es la señal QPSK. En la figura se muestran dos codificadores (NRZ Encoder) que se pueden colocar antes de la entrada del flujo de datos binario, aunque han sido colocados después para ilustrar la diferencia conceptual entre señales digitales y analógicas involucradas en la modulación digital. La implementación es semejante al modulador de QAM digital.
Después de iniciar Matlab, para llamar la herramienta simulink simplemente escribimos simulink en la consola y damos enter

En la herramienta de simulink encontramos gran variedad de toolbox, estas son librerías que  contienen Blocksets. Si requerimos de una herramienta damos clic en nuevo y se abre una nueva ventana donde se puede arrastrar los Blocksets e interconectarlos como se ve en la siguiente imagen.                 
Para el desarrollo de este modulador QPSK es importante simular una sucesión de bits para el ingreso de datos del modulador para ello debemos arrastrar la siguiente Blocksets, el generador de Bernoulli que se encuentra en el toolbox communications system, este genera un vector de bits aleatoriamente.
Para la configuración del Blocksets damos doble clic en la Blocksets y observamos las opciones que nos ofrece el Blocksets, pero para el caso del generador de Bernoulli se deja predeterminado.
Este modulador debe estar sincronizado con el tiempo para ello debemos generar un reloj, esto se hace con el Blockset Pulse generator que se encuentra en el toolbox simulink, este Blockset nos genera una onda cuadrada y con ello simulamos el tiempo del modulador, para configurar el tiempo debemos calcular la frecuencia que necesitamos y para ello configuramos en el periodo


Luego debemos incluir un NRZ encoder, este encoder convierte los bits generados por el generador de Bernoulli en una onda de pulsos como un PWM. Para esto se necesita la Blockset convert que se encuentra en la toolbox simulink.
Ingresamos a la configuracion y selecionamos en output data type y seleccionamos boolean como se ve en la siguiente imagen, esto se debe a que es un circuito digital entonces es necesario obtener numeros booleanos.

Luego debemos demultiplexar la señal de entrada para ello se implementa un circuito lógico combinacional
Para el desfase de la señal debemos llamar el Blockset logic que nos permite negar o invertir la señal de entrada.
Para configurarlo debemos establecer los elementos del vector pues ya que esto funciona con la tabla de verdad de la negadora de un modo implícito.
Luego debemos incluir compuertas AND, estas están definidas en el Blockset logical operator que  se pueden encontrar en el toolbox simulink





Su configuración queda predeterminada.
Luego incluimos constantes para el funcionamiento de los flip-flops tipo D según la tabla de verdad
Su configuración la debemos hacer en el atributo de la señal, como estamos trabajando en circuito lógico requerimos de datos booleanos, modificaremos en output data type

 Los flip flops tipo D se dejan predeterminados.
Luego debemos convertir la señal unipolar a bipolar, para ello se necesita multiplicar la señal en 2 veces, incluiremos los Blocksets constant y product del toolbox simulink.
La configuración de las 4 constantes radica en el principal tenemos constantes de 1 y 2 para la multiplicación, en signal attributes esta predeterminada.
Luego la señales resultantes se suman con constantes para ello se debe incluir el Blockset ADD de la toolbox simulink

Debemos configurar la señal  como un amplificador operacional con entradas inversoras y no inversoras

Se procede luego a multiplicar las señales, se necesita una señal portadora que se encuentre en fase para ello incluimos la Q seno
 Para generar nuestras componentes i-coseno y q-seno introducimos para cada una, una señal seno con las siguientes configuraciones

Para i-coseno
Debemos introducir la frecuencia que es 2*pi*4 y luego la desfasamos en pi/2 y las muestras del tiempo deben ser por 0.01

Para q-seno: Debemos introducir la frecuencia que es 2*pi*4 y luego la para la fase debe estar en   pi y las muestras del tiempo deben ser por 0.01

Los product y el add siguientes a la conexión   se dejan con la configuración predeterminada
Uniendo todos los Blocksets debemos tener el siguiente esquema
Para comprobar si el esquema está funcionando, incluiremos de la toolbox de simulink el Blockset scope.
Con esta herramienta observaremos la señal modula del modulador QPSK, procedemos a dar play en simulink y damos doble clic en scope y podemos ver la señal modulada
Se puede ver claramente que por cada uno o cero la señal se desfasada

Conclusiones: