Sei sulla pagina 1di 10

PRCTICA 7: DISEO EN VHDL DE UN MODULADOR PPM

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

Prctica 7. Diseo en VHDL de un modulador PPM


7.1. Objetivos Disear un sistema de modulacin por posicin de pulso (PPM) mediante VHDL e implementarlo en una FPGA. Aprender a utilizar las diferentes herramientas de simulacin e implementacin de circuitos lgicos mediante VHDL. 7.2. Conectores de expansin de la Spartan-3A/3AN Starter Kit Board La tarjeta de desarrollo Spartan-3A/3AN Starter Kit Board ofrece una serie de conectores de expansin para la comunicacin con otras tarjetas o simplemente para la visualizacin o introduccin de seales digitales. El conector ms verstil es el J17, que contiene 100 pines, donde un elevado porcentaje de los mismos son accesibles como puertos de entrada o salida de la FPGA. Otros conectores utilizables son los diferenciales de transmisin y recepcin a elevadas tasas de transferencia. En las siguientes figuras se muestran los puertos accesibles y su denominacin, tanto para el conector J17 como para los conectores diferenciales J2 y J15.

Tabla 7.1. Pines del conector J17

1/10

PRCTICA 7: DISEO EN VHDL DE UN MODULADOR PPM

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

Tabla 7.2. Pines del conector J17 (continuacin)

Tabla 7.3. Pines del conector J2 (cabecera de recepcin)

Tabla 7.4. Pines del conector J15 (cabecera de transmisin)

7.3. Realizacin prctica En esta prctica se pretende disear un modulador PPM mediante VHDL constituido por un generador de datos pseudoaleatorios y el modulador PPM en s mismo, tal como se esquematiza en la figura 7.1. 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 PPM posee tres entradas (reloj, reset y

2/10

PRCTICA 7: DISEO EN VHDL DE UN MODULADOR PPM

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

datos) y cuatro salidas (clk_datos, clk_ppm, salida y datos_par_sal). 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 del modulador PPM.

Figura 7.1. Esquema de bloques del sistema modulador PPM

7.3.1. Generador de datos En primer lugar vamos a disear el generador de datos pseudoaleatorio y comprobar su correcto funcionamiento de manera aislada, previamente a disear el modulador PPM y probar todo el sistema en conjunto. 1. Vamos a crear un paquete denominado constantes que contenga todas las constantes que vamos a utilizar durante el desarrollo de esta prctica. Realmente, para el generador de datos slo requeriremos de la constante N y de la funcin and_vector. El resto de constantes y funciones sern utilizadas por el bloque modulador PPM. El cdigo en VHDL sera el siguiente:
library IEEE; use IEEE.STD_LOGIC_1164.all; package constantes is constant N : positive := 4; constant M : positive := 4; constant L : positive := 2**M; function and_vector (vector : in std_logic_vector(0 to N-1)) return std_logic; function find_K (M,L : positive) return positive; constant K : positive := find_K(M,L); end constantes; package body constantes is function and_vector (vector : in std_logic_vector(0 to N-1)) return std_logic is variable resultado : std_logic; begin resultado := vector(0); for I in 1 to N-1 loop resultado := vector(I) and resultado; end loop; return resultado; end and_vector; function find_K (M,L : positive) return positive is variable K : positive; begin

3/10

PRCTICA 7: DISEO EN VHDL DE UN MODULADOR PPM

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

if ((M mod 2) = 1) then K := M*L; elsif ((M/2 mod 2) = 1) and (M /= 2) then K := (M/2)*L; else K := 2*L; end if; return K; end function find_K; end constantes;

Obsrvese que, aparte de la constante N que se referir a la longitud (nmero de registros) del generador de datos y de la funcin and_vector que determina la funcin y-lgica de un vector de datos, se definen tambin la constante M, la constante L como 2M, una funcin find_K y una constante K que se obtiene a partir de M y L haciendo uso de la funcin find_K previamente definida. La funcin find_K lo que hace bsicamente es determinar un mnimo comn mltiplo de M y L a fin de obtener un factor K como referencia para la generacin de las seales de reloj para el generador de datos y el generador de pulsos PPM. Ms adelante incidiremos nuevamente sobre esto. 2. El bloque generador de datos requiere de registros para su implementacin, por lo que habr que disear un componente que acte como un registro. Un posible cdigo VHDL sera el siguiente:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity registro is Port ( clk,preset,D : in STD_LOGIC; Q : out STD_LOGIC); end registro; architecture Behavioral of registro is begin process(clk,preset) begin if preset='1' then Q <= '1'; elsif clk'event and clk='1' then Q <= D; end if; end process; end Behavioral;

Obsrvese que el registro responde a los cambios de las seales de entrada clk (seal de reloj) y preset (seal de set que pondr el registro a nivel lgico 1 cuando se active a alta). Toda vez que se produzca un flanco de subida de la seal de reloj clk, el dato a la entrada D del registro pasar a la salida Q del mismo.

4/10

PRCTICA 7: DISEO EN VHDL DE UN MODULADOR PPM

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

3. En la figura 7.2 se muestra la estructura de un generador de datos pseudoaleatorio constituido por cuatro registros, lo que dar lugar a una secuencia pseudoaleatoria de longitud 24 1 = 15.

Figura 7.2. Estructura interna de un generador de datos pseudoaleatorio

Obsrvese que la seal de reset del sistema se utiliza para provocar un set (y no un reset) de los registros, estableciendo la salida de todos ellos a 1. Esto es debido a que si estableciramos todos los registros a cero, el generador se quedara en ese estado indefinidamente y la salida siempre sera cero, por lo que se recurre al establecimiento de un set de los registros, lo que provocar la iniciacin de una nueva secuencia pseudoaleatoria. Podemos comprobar que la entrada del primer registro se retroalimenta con la operacin o-exclusiva de su propia salida y la del ltimo registro. Con esta simple operacin es posible obtener una seal pseudoaleatoria a la salida del ltimo registro que se repite cada 15 bits. Por otro lado, se ha utilizado un puerta and como controladora de la repeticin de la secuencia que se pondr a 1 siempre que todos los registros tengan sus salidas a nivel 1, lo que ocurre slo una vez cada periodo de la secuencia pseudoaleatoria. Por tanto, dicha seal sirve como seal de sincronismo indicadora de la repeticin de la secuencia, de ah su nombre. Un posible cdigo en VHDL que nos permite implementar el generador de datos pseudoaleatorio de la figura 7.2 es el siguiente:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use work.constantes.ALL; entity gen_datos is generic (Nreg : positive := N); port (clk,reset : in STD_LOGIC; datos,sinc : out STD_LOGIC); end gen_datos;

architecture Behavioral of gen_datos is component registro is port (clk,preset,D : in std_logic; Q : out std_logic); end component registro;

5/10

PRCTICA 7: DISEO EN VHDL DE UN MODULADOR PPM

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

signal sig_xor : std_logic; signal Q_int : std_logic_vector(0 to Nreg-1); begin Generador_datos: for I in 0 to Nreg-1 generate Reg00: if (I=0) generate Reg0: Registro port map (clk,reset,sig_xor,Q_int(0)); end generate; Regs: if I>0 generate Reg: Registro port map (clk,reset,Q_int(I-1),Q_int(I)); end generate; end generate; datos <= Q_int(Nreg-1); sig_xor <= Q_int(0) xor Q_int(Nreg-1); sinc <= and_vector(Q_int); end Behavioral;

Podemos observar que se ha definido un genrico Nreg para poder disear cualquier generador de datos de la longitud que se desee, pero que se ha establecido al valor N, inicializado a cuatro en el paquete constantes. Se puede comprobar que se ha hecho uso de la sentencia generate para instanciar los diferentes registros que constituyen el generador, mientras una sentencia if determina las conexiones del mismo en funcin de su localizacin en la estructura. De igual forma, la salida del ltimo registro es enviada a la salida datos del generador, mientras que la operacin xor es llevada a cabo sobre las salidas del primer y ltimo registro, a la vez que se obtiene la salida de sincronismo (sinc) mediante la funcin y-lgica de las salidas de todos los registros. Hay que indicar que slo determinadas interconexiones mediante la funcin xor son vlidas para obtener secuencias pseudoaleatorias de longitud 2N 1, donde N es el nmero de registros del generador de datos. Por ese motivo, aunque aqu se ha utilizado un genrico para definir cualquier generador de longitud Nreg, el conectar las salidas del primer y ltimo registro a la puerta xor de realimentacin slo funcionar en principio para generadores de datos de 4 bits, como es el caso de este ejemplo. 4. Hacer uso del ISE Simulator, para comprobar el correcto funcionamiento del generador de datos. Qu longitud tiene la secuencia pseudoaleatoria? En qu momento del periodo de la seal de datos se activa a alta la seal sinc? 7.3.2. Modulador PPM A continuacin vamos a proceder al diseo del modulador PPM propiamente dicho. Pero, previamente a esto, vamos a considerar los requerimientos de sincronismo del sistema para un buen funcionamiento del mismo. En primer lugar, tenemos un generador de datos que sirve de entrada al modulador PPM. Por otro lado, tenemos un modulador que debe generar L chips durante el mismo periodo que el generador de datos le suministra M bits, siendo L = 2M. Asimismo, disponemos de una seal de reloj base de 50 MHz (E12) suministrada por la tarjeta de desarrollo. Supongamos en primer lugar un caso

6/10

PRCTICA 7: DISEO EN VHDL DE UN MODULADOR PPM

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

simple como sera un modulador 16-PPM, que genera L = 16 chips (uno de ellos activa a alta), en el tiempo en que el generador de datos le suministra M = 4 bits. En este caso, requeriramos que el reloj del generador de datos fuera 4 veces ms lento que el del modulador PPM. Para ello se podra hacer uso de la propia seal de reloj de 50 MHz para el modulador PPM y de un contador que fuera generando un pulso cada cuatro flancos de la seal base para usar dicha seal como reloj del generador de datos. Otra posibilidad es utilizar dos contadores, uno para el modulador y otro para el generador, el primero que cuente desde 0 hasta 1, mientras que el segundo cuente desde 0 hasta 7, activndose ambos a nivel lgico 1 siempre que alcancen nuevamente el valor 0. En la siguiente figura se esquematiza este caso.

Obsrvese que, de esta manera, cada cuatro flancos del reloj del modulador PPM se produce un nico flanco del reloj de datos. Este caso sencillo no presenta problemas, pero supongamos que M = 3 bits, luego L = 23 = 8 chips. En este caso no es tan sencillo generar los relojes a partir del de mayor frecuencia, ya que ocho no es divisible por tres. En este caso, se requerira buscar algn mnimo comn mltiplo. Dado que 2, 3, 5, 7, 9, 11 y 13 son nmeros primos y difcilmente disearemos un modulador PPM de ms de 8 bits de datos, podemos aplicar como regla sencilla para determinar el mnimo comn mltiplo K = ML. Para M = 6 y M = 10, el mnimo comn mltiplo se obtendra mediante la expresin K = (M/2)L, mientras que para el resto de los casos L es divisible por M, por lo que podemos tomar como criterio K = 2L. La funcin find_K integrada en el paquete constantes, no hace ms que aplicar los criterios anteriores para determinar el factor K. 1. A continuacin se muestra un posible cdigo para el modulador PPM, donde la parte inicial se centra en la generacin de las seales de reloj:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use work.constantes.ALL; entity ppm is generic (nchips : positive := L; nbits : positive := M; factor : positive := K); Port ( clk,reset,datos : in STD_LOGIC; clk_datos,clk_ppm,salida : out STD_LOGIC; datos_par_sal : out std_logic_vector(nbits-1 downto 0));

7/10

PRCTICA 7: DISEO EN VHDL DE UN MODULADOR PPM


end ppm;

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

architecture Behavioral of ppm is signal datos_par,datos_serie : std_logic_vector(nbits-1 downto 0); signal clk_ppm_int,clk_datos_int,clk_par : std_logic; component Registro is Port ( clk,preset,D : in STD_LOGIC; Q : out STD_LOGIC); end component registro; signal cuenta_ppm : natural range 0 to nchips := 0; begin Gen_relojes: process(clk,reset) variable cuenta : natural range 0 to factor := 0; begin if reset = '1' then cuenta := 0; clk_datos_int <= '1'; clk_ppm_int <= '1'; clk_par <= '1'; elsif clk'event and clk='1' then cuenta := cuenta + 1; if cuenta = factor then cuenta := 0; clk_ppm_int <= '1'; clk_datos_int <= '1'; clk_par <= '1'; else clk_par <= '0'; if (cuenta mod (factor/nchips)) = 0 then clk_ppm_int <= '1'; else clk_ppm_int <= '0'; end if; if (cuenta mod (factor/nbits)) = 0 then clk_datos_int <= '1'; else clk_datos_int <= '0'; end if; end if; end if; end process Gen_relojes; clk_datos <= clk_datos_int; clk_ppm <= clk_ppm_int; Registro_paralelo: for I in 0 to nbits-1 generate Reg0: if I=0 generate Reg_0: Registro port map (clk_datos_int,reset,datos,datos_serie(0)); end generate; RegM: if I>0 generate Reg_in: Registro port map (clk_datos_int,reset,datos_serie(I-1),datos_serie(I)); end generate; Reg_par: Registro port map (clk_par,reset,datos_serie(I),datos_par(I)); end generate; Gen_ppm: process(clk_ppm_int,reset) begin if reset='1' then cuenta_ppm <= 0; elsif clk_ppm_int'event and clk_ppm_int='1' then if cuenta_ppm = nchips-1 then cuenta_ppm <= 0; else cuenta_ppm <= cuenta_ppm + 1;

8/10

PRCTICA 7: DISEO EN VHDL DE UN MODULADOR PPM


end if; end if; end process Gen_ppm;

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

salida <= '1' when (std_logic_vector(conv_unsigned(cuenta_ppm,nbits)) = datos_par) else '0'; datos_par_sal <= datos_par; end Behavioral;

La librera de IEEE STD_LOGIC_UNSIGNED ha sido incluida para poder operar con la funcin conv_unsigned que convierte un nmero entero o natural en un unsigned con el nmero de bits indicado. El proceso que se encarga de la generacin de las seales de reloj hace uso de un contador y una serie de sentencias if que van controlando si la variable de tipo natural cuenta pasa por unos valores determinados para activar las seales del reloj de datos (clk_datos_int) y del reloj del modulador PPM (clk_ppm_int), en base a las consideraciones dadas anteriormente. Asimismo, cada ciclo de la variable cuenta (que va desde 0 hasta K 1) se activa tambin una seal de reloj para el registro paralelo que se encarga de trasvasar a los registros de salida los datos que ha ido cargando en serie en los registros de entrada. En la figura siguiente se muestra la estructura de un registro serie a paralelo de 4 bits.

2. Haciendo uso del ISE Simulator, comprobar el correcto funcionamiento del generador de relojes para M = 2 y M = 3 bits. 3. A continuacin se muestra un posible cdigo en VHDL que integre todos los bloques diseados anteriormente:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use work.constantes.ALL; entity sistema is Port ( reloj,reset : in

STD_LOGIC;

9/10

PRCTICA 7: DISEO EN VHDL DE UN MODULADOR PPM

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

datos,sinc,salida_ppm : out STD_LOGIC; datos_par : out std_logic_vector(M-1 downto 0)); end sistema; architecture Behavioral of sistema is component gen_datos is generic (Nreg : positive); port(clk,reset : in STD_LOGIC; datos,sinc : out STD_LOGIC); end component gen_datos; component ppm is generic (nchips : positive; nbits : positive; factor : positive); Port ( clk,reset,datos : in STD_LOGIC; clk_datos,clk_ppm,salida : out STD_LOGIC; datos_par_sal : out std_logic_vector(M-1 downto 0)); end component ppm; signal datos_int,clk_datos,clk_ppm : std_logic; begin Gen_datos0: gen_datos generic map (N) port map (clk_datos,reset,datos_int,sinc); Gen_ppm: ppm generic map (L,M,K) port map (reloj,reset,datos_int,clk_datos,clk_ppm,salida_ppm,datos_par); datos <= datos_int; end Behavioral;

Obsrvese (vase cdigo de la entidad ppm) que la generacin de la seal PPM se realiza mediante la comprobacin de una seal de cuenta (cuenta_ppm) y los datos paralelos (datos_par). En el momento que coinciden ambas cantidades, la seal de salida PPM se activa a alta, por lo que se enva en la posicin correspondiente al valor almacenado en datos_par. Comprobar el correcto funcionamiento del sistema total mediante el ISE Simulator. 4. Intentar implementar en la FPGA un diseo en el que M = 3 bits. Qu ocurre en dicho caso? Cmo se podra solucionar? 5. Implementar en la FPGA un diseo en el que M = 4 bits. Observar las seales de salida haciendo uso de un analizador lgico. A continuacin se muestra una posible configuracin para los pines de entrada/salida a la FPGA:
NET NET NET NET NET NET NET NET NET "reset" LOC = T15; "reloj" LOC = E12; "datos" LOC = A13; "sinc" LOC = B13; "salida_ppm" LOC = "datos_par<0>" LOC "datos_par<1>" LOC "datos_par<2>" LOC "datos_par<3>" LOC

A14; = B15; = A15; = A16; = A17;

10/10

Potrebbero piacerti anche