Dise%F1o en VHDL de un modulador BPSK

Embed Size (px)

Citation preview

PRCTICA 8: DISEO EN VHDL DE UN MODULADOR BPSK

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

Prctica 8. Diseo en VHDL de un modulador BPSK8.1. Objetivos Disear un sistema de modulacin por desplazamiento de fase binaria (BPSK) mediante VHDL e implementarlo en una FPGA. Aprender a llevar a cabo la comunicacin con perifricos, en este caso el DAC LTC 2624. 8.2. Conversor digital a analgico LTC 2624 La tarjeta de desarrollo Spartan-3A/3AN Starter Kit Board dispone de un convertidor digital a analgico (DAC, Digital-to-Analog Converter) serie de cuatro canales y compatible con el bus SPI (Serial Peripheral Interface). Las cuatro salidas del DAC son accesibles en el conector J21, el cual se encuentra, junto con el DAC, justo al lado del conector RJ-45 de la tarjeta, tal como se puede observar en la figura.

Figura 8.1. Ubicacin del DAC LTC 2624 y del conector J21 en la tarjeta de desarrollo

El SPI es un bus sncrono full-duplex orientado a carcter que utiliza nicamente cinco lneas de comunicacin. En la figura se muestra la conexin de la FPGA con la interfaz del bus SPI y la de sta a su vez con el DAC.

Figura 8.2. Esquema de conexiones del convertidor digital-analgico

1/13

PRCTICA 8: DISEO EN VHDL DE UN MODULADOR BPSK

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

En la siguiente tabla se muestran las lneas de comunicacin utilizadas por el bus SPI, donde la FPGA acta como dispositivo maestro (master) de la comunicacin y el DAC acta como esclavo (slave). Las seales SPI_MOSI, SPI_SCK y DAC_OUT estn compartidas con otros dispositivos en la tarjeta, por lo que debe hacerse uso de la seal DAC_CS para indicar que la comunicacin que desea establecerse es con el DAC. La seal DAC_CLR es activa a baja y permite inicializar a cero la entrada del DAC.

Tabla 8.1. Seales de interfaz del DAC

El protocolo de comunicacin del bus SPI es el que se muestra en la figura siguiente, donde se observa que una vez se activa la seal DAC_CS a baja, a cada flanco de subida de la seal SPI_SCK, el dato enviado por la lnea SPI_MOSI es cargado en la memoria de entrada del dispositivo, en este caso el DAC. Asimismo, la lnea DAC_OUT devuelve los datos cargados en su memoria durante la comunicacin previa. Estos datos enviados desde el DAC pueden ignorarse en la mayora de las aplicaciones, pero sirven como mecanismo de control para comprobar que la comunicacin se est llevando a cabo de manera correcta.

Figura 8.3. Protocolo de comunicacin del bus SPI

En la figura 8.4 se muestra la estructura de datos que debe presentar la lnea SPI_MOSI para el caso de trabajar con el DAC LTC2624. Podemos observar que los primeros cuatro bits de datos son indiferentes (dont care), al igual que los ocho ltimos. Tngase en cuenta, sin embargo, que segn la figura precedente, los bits son enviados en orden descendente, desde el ms significativo hasta el menos significativo, por lo que los primeros bits en ser enviados seran los ocho bits dont care (desde el bit 31 hasta el 24). Los bits 23 a 20 contienen el comando que generalmente ser la palabra c3c2c1c0 = 0011, para indicar que la salida del DAC se actualice inmediatamente con la palabra recibida. Los bits 19 a 16 contienen la direccin del canal a utilizar tal como se indica en la tabla incluida en la figura, mientras que los bits 15 a 4 contienen la palabra de datos a cargar2/13

PRCTICA 8: DISEO EN VHDL DE UN MODULADOR BPSK

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

en el DAC desde el bit ms significativo al menos significativo. El valor de salida del DAC seleccionado por la direccin (ADDRESS) vendr dado por la siguiente expresin en funcin de la palabra de datos (DATA):

VOUT

DATA[11 : 0] VREF 4.096

Por tanto, el DAC slo trabaja con valores positivos (enteros sin signo), caracterstica que hemos de tener en cuenta a la hora de enviarle la palabra de datos a representar.

Figura 8.4. Protocolo de comunicacin con el DAC LTC2624

8.3. Realizacin prctica En esta prctica se pretende disear un modulador BPSK mediante VHDL constituido por un generador de datos pseudoaleatorios, el modulador BPSK propiamente dicho y el dispositivo de interfaz con el DAC, tal como se esquematiza en la figura 8.5. Como podemos apreciar en la figura, el generador de datos posee dos entradas (reloj y reset) y dos salidas (datos y sinc), mientras que el modulador BPSK posee tres entradas (reloj, reset y datos_serie) y tres salidas (clk_datos, clk_spi y datos). Asimismo, la salida clk_datos est realimentada a la entrada de reloj del generador de datos, mientras que la salida de datos del generador se conecta a la entrada de datos serie del modulador BPSK.

Figura 8.5. Esquema de bloques del sistema modulador BPSK

3/13

PRCTICA 8: DISEO EN VHDL DE UN MODULADOR BPSK

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

Dado que la salida del modulador BPSK debe ser de tipo analgica, se hace uso de la interfaz con el DAC a travs del bus SPI para conseguir dicho objetivo. El modulador BPSK debe suministrarle la seal de reloj de referencia al bus, as como los datos digitales a ser convertidos en un valor analgico. Por tanto, todo el sincronismo tanto del bus SPI como del generador de datos ser llevado a cabo por el dispositivo modulador BPSK. 8.3.1. Interfaz con el DAC El dispositivo de interfaz con el DAC tiene tres entradas (reset, reloj y datos) y cuatro salidas que se corresponden bsicamente con las lneas de comunicacin con el bus SPI (spi_mosi, spi_sck, dac_cs, dac_clr). A continuacin se va a disear una interfaz con el DAC que permita la representacin de una seal haciendo uso del canal DAC A. 1. Disear un cdigo en VHDL para la interfaz de conexin con el DAC a travs del bus SPI. Un posible ejemplo sera el siguiente:library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity com_dac is Port ( reloj : in STD_LOGIC; reset : in STD_LOGIC; dac_cs : out STD_LOGIC; dac_clr : out STD_LOGIC; spi_mosi : out STD_LOGIC; spi_sck : out STD_LOGIC; datos : in STD_LOGIC_VECTOR(11 downto 0); cuenta_sal : out std_logic_vector(6 downto 0)); end com_dac; architecture Behavioral of com_dac is signal memoria_dac : std_logic_vector(31 downto 0) := (others => '0'); begin process(reloj,reset) variable cuenta : natural range 0 to 100 := 0; begin if reset = '1' then -- Establece el comando por defecto memoria_dac(23 downto 20)