Práctica 7. Diseño en VHDL de un modulador PPM

Documentos relacionados
Práctica 8. Diseño en VHDL de un modulador BPSK

UNIVERSIDAD CARLOS III DE MADRID. Ejercicios de VHDL. Circuitos Integrados y Microelectrónica. Luis Entrena. Celia López.

DISEÑO DE PROCESADORES DEDICADOS. Práctica 6 LCD de Propósito General

MAQUINA DE ESTADO FINITO (FSM) Autómata finito

MAQUINA DE ESTADO FINITO (FSM) Autómata finito

Sistemas Electrónicos Digitales Curso de adaptación al Grado

1. Módulo de desarrollo Spartan 3 STARTER KIT con un FPGA xc3s200 ft Software de diseño XILINX ISE versión 10.1

Practica No. 5 Diseño de un Multiplicador

CONTADORES. Definición. Diseño y analisis de un contador binario hacia arriba de 3 bits con flip-flops JK. Otros contadores típicos.

INFORMÁTICA INDUSTRIAL. 3º INGENIERÍA TÉCNICA ELECTRÓNICA TRABAJO TUTORADO DE VHDL. Primer Cuatrimestre Curso 2005/2006.

Sistemas Electrónicos Digitales. PRACTICA nº 8

Tutorial de VHDL: Contadores y Simulación

DISEÑO DE SISTEMAS ELECTRÓNICOS DIGITALES AVANZADOS

Practica No. 8 Introducción a las Máquinas de Estados. 1. En la figura 1 se muestra el comportamiento de un robot que evade obstáculos.

Recursos y Metodologías. Función. Programas

VHDL: Código Secuencial. Arquitectura del Computador 2017

VHDL. Carlos Andrés Luna Vázquez. Lección 10 Problemas

Tutorial 2: Pasar de diagrama ASM a un circuito

Manual de referencia de la tarjeta BASYS 2

PRÁCTICA: LENGUAJE VHDL

LABORATORIO DE CIRCUITOS DIGITALES (2005-II) QUINTA CLASE DE VHDL

Hardware Libre: Clasificación y desarrollo de hardware reconfigurable en entornos GNU/Linux

Tema 3 - Modelado con HDL a nivel RTL

CIRCUITOS MULTIPLEXORES Y DEMULTIPLEXORES

DISEÑO DE PROCESADORES DEDICADOS. Práctica. No. 8 Circuitos de Barrido y Escaneo: Teclado Matricial de Propósito General y Matriz de LEDs

Julio. [ Programación en VHDL ] Guía rápida. [ h t t p : / / w w w. o p e n b o x e r m b. c o m / a s i g n a t u r a s / d s d.

ELECTRÓNICA DIGITAL 24-I Determinar el valor decimal de los números expresados en Complemento a 2. (0.25 puntos).

LABORATORIO DE CIRCUITOS DIGITALES (2005-II) SEGUNDA CLASE DE VHDL

6. Codificadores. Electrónica Digital. Tema

Generador de Secuencia Binaria Pseudo Aleatoria

VHDL. Lenguaje de descripción hardware Estructura Básica de diseño

LABORATORIO DE CIRCUITOS DIGITALES (2005-II) CUARTA CLASE DE VHDL

Arquitectura de Computadores. Práctica 1: Diseño Hardware de Procesadores. Práctica 1/1

5. Decodificadores. Salida _1= A A A A = m = M ... Electrónica Digital. Tema

CAPITULO 5 GENERADOR DIGITAL DE TREN DE PULSOS PROGRAMABLE

DISEÑO DE CIRCUITOS SECUENCIALES

Práctica I.- Introducción a los Sistemas Secuenciales

Electrónica Digital Departamento de Electrónica VHDL. Bioingeniería Facultad de Ingeniería - UNER

Sistemas Electrónicos Digitales. PRACTICA nº 3

Práctica I Modelado y simulación de una máquina expendedora de refrescos

VHDL Y FPGA LENGUAJE VHDL

Introducción al VHDL. VHDL orientado a la síntesis de circuitos en Dispositivo Lógicos Programables

Practica No. 1 Circuitos Secuenciales

Titulación: Ingeniería Informática Asignatura: Fundamentos de Computadores. Bloque 3: Sistemas secuenciales Tema 9: Módulos secuenciales básicos

Comparador de 1 bit Tabla de verdad y circuito lógico A B A > B A = B A < B

Tipos de datos en VHDL

SISTEMAS DIGITALES VHDL

Universidad Autónoma de Querétaro Facultad de Ingeniería

4. SUMADORES EN BINARIO PURO (I)

PARTE I. TÉCNICAS DE DISEÑO ELECTRÓNICO MEDIANTE LENGUAJES DE DESCRIPCIÓN HARDWARE

INGENIERÍA DE COMPUTADORES III. Solución al examen de Septiembre 2013

Práctica IV Procesador DLX con unidades de entrada/salida

Tema 2. Funciones Lógicas. Algebra de Conmutación. Representación de circuitos digitales. Minimización de funciones lógicas.

Tema 2. Funciones Lógicas. Algebra de Conmutación. Minimización de funciones Lógicas. Introducción al VHDL.

8. Multiplexores Digitales

DESCRIPCIÓN DE CIRCUITOS DIGITALES

Práctica 6. Diseño Lógico Digital mediante VHDL

GUÍA PRÁCTICA DEL SOFTWARE ACTIVE-HDL.

Electrónica Digital. Actividad Dirigida. Implementación de un Cronómetro Digital

Sistemas Digitales - Examen temas 1, 2 y 3 - (6 de Abril 2016)

Tutorial I Diseño de una máquina de refrescos utilizando el WebPack de XILINX TM

2. Escoja la ubicación y el nombre del proyecto. Seleccione la casilla Create project subdirectory.

Planificaciones Sistemas Digitales. Docente responsable: ALVAREZ NICOLAS. 1 de 5

+ Máquinas de Estado Finitas

Arquitectura de Computadoras Practica No. 1 Circuitos Secuenciales

Diseño electrónico digital integrado: Back to basics. Sep-2011 F.Barbero Escuela Politécnica Superior - Universidad Autónoma de Madrid

Tema 4 - Bloques combinacionales

Digital III. El Microprocesador i80c86

Introducción al VHDL

INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Junio de 2013

SISTEMAS ELECTRÓNICOS DIGITALES

LENGUAJE VHDL. Ing. Wilmer Naranjo 1

CONTADORES CONTADORES ASINCRONOS ASCENDENTE

Objetos de VHDL. Un objeto en VHDL es un elemento que contiene un valor de tipo específico de dato

^6+1 2^5+1 2^2+1 2^1+1 2^ ^6+1 2^0-65.

VI. Especificación del Comportamiento

Índice. VHDL Lección 2.9 Máquinas de Estados Finitos (FSM) 1

Sistemas Electrónicos Digitales

DESCRIPCIÓN DE CIRCUITOS DIGITALES

LECCIÓN Nº 06 DISEÑO DE CONTADORES SINCRONOS

ÍNDICE. Sistemas Electrónicos Digitales Práctica 2

Simulación avanzada con TestBench en HDL. Ing. Andrés Miguel Airabella. Ing. Facundo Aguilera.

Laboratorio de Arquitectura de Computadoras

4.5. Procedimiento de síntesis

INTRODUCCIÓN AL SOFTWARE ISE (Integrated Software Environment) DE XILINX

Segunda práctica de VHDL

Laboratorio de Arquitectura de Computadoras

Módulos aritméticos I

VHDL. Carlos Andrés Luna Vázquez. Lección 5. Sentencias concurrentes

Simulación y Síntesis con VHDL

2. Sumadores. Diagrama. Donde a y b son los bits a sumar, S el. resultado de la suma y C el acarreo generado. b EB. Circuito. Tabla de verdad.

Departamento de Ingeniería Electrónica. Universidad de Sevilla Asignatura: Laboratorio de Microelectrónica Digital. Escuela Superior de Ingenieros

5.1. Introducción a los sistemas digitales

Sumadores. Tipos de sumadores: Half-adder. Full-Adder. Carry-Look-Ahead. Carry-select.

FPGA: Herramientas de diseño

Tema 2 Descripción de VHDL (2/2)

Tema 7. Análisis de Circuitos Secuenciales

Sistemas Electrónicos Digitales. PRACTICA nº 7

Práctica III Introducción a la descripción VHDL del procesador DLX

Operadores y atributos en VHDL [1]

Transcripción:

Práctica 7. Diseño en VHDL de un modulador PPM 7.1. Objetivos Diseñar un sistema de modulación por posición de pulso (PPM) mediante VHDL e implementarlo en una FPGA. Aprender a utilizar las diferentes herramientas de simulación e implementación de circuitos lógicos mediante VHDL. 7.2. Conectores de expansión de la Spartan-3A/3AN Starter Kit Board La tarjeta de desarrollo Spartan-3A/3AN Starter Kit Board ofrece una serie de conectores de expansión para la comunicación con otras tarjetas o simplemente para la visualización o introducción de señales digitales. El conector más versátil 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 transmisión y recepción a elevadas tasas de transferencia. En las siguientes figuras se muestran los puertos accesibles y su denominación, tanto para el conector J17 como para los conectores diferenciales J2 y J15. Tabla 7.1. Pines del conector J17 1/10

Tabla 7.2. Pines del conector J17 (continuación) Tabla 7.3. Pines del conector J2 (cabecera de recepción) Tabla 7.4. Pines del conector J15 (cabecera de transmisión) 7.3. Realización práctica En esta práctica se pretende diseñar 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

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 diseñar el generador de datos pseudoaleatorio y comprobar su correcto funcionamiento de manera aislada, previamente a diseñar 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 práctica. Realmente, para el generador de datos sólo requeriremos de la constante N y de la función and_vector. El resto de constantes y funciones serán utilizadas por el bloque modulador PPM. El código en VHDL sería 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; 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; 3/10

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; return K; end function find_k; end constantes; Obsérvese que, aparte de la constante N que se referirá a la longitud (número de registros) del generador de datos y de la función and_vector que determina la función y-lógica de un vector de datos, se definen también la constante M, la constante L como 2 M, una función find_k y una constante K que se obtiene a partir de M y L haciendo uso de la función find_k previamente definida. La función find_k lo que hace básicamente es determinar un mínimo común múltiplo de M y L a fin de obtener un factor K como referencia para la generación de las señales de reloj para el generador de datos y el generador de pulsos PPM. Más adelante incidiremos nuevamente sobre esto. 2. El bloque generador de datos requiere de registros para su implementación, por lo que habrá que diseñar un componente que actúe como un registro. Un posible código VHDL sería 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 process(clk,preset) if preset='1' then Q <= '1'; elsif clk'event and clk='1' then Q <= D; end process; end Behavioral; Obsérvese que el registro responde a los cambios de las señales de entrada clk (señal de reloj) y preset (señal de set que pondrá el registro a nivel lógico 1 cuando se active a alta). Toda vez que se produzca un flanco de subida de la señal de reloj clk, el dato a la entrada D del registro pasará a la salida Q del mismo. 4/10

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 2 4 1 = 15. Figura 7.2. Estructura interna de un generador de datos pseudoaleatorio Obsérvese que la señal 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 estableciéramos todos los registros a cero, el generador se quedaría en ese estado indefinidamente y la salida siempre sería cero, por lo que se recurre al establecimiento de un set de los registros, lo que provocará la iniciación de una nueva secuencia pseudoaleatoria. Podemos comprobar que la entrada del primer registro se retroalimenta con la operación o-exclusiva de su propia salida y la del último registro. Con esta simple operación es posible obtener una señal 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 repetición de la secuencia que se pondrá a 1 siempre que todos los registros tengan sus salidas a nivel 1, lo que ocurre sólo una vez cada periodo de la secuencia pseudoaleatoria. Por tanto, dicha señal sirve como señal de sincronismo indicadora de la repetición de la secuencia, de ahí su nombre. Un posible código 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

signal sig_xor : std_logic; signal Q_int : std_logic_vector(0 to Nreg-1); 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)); Regs: if I>0 generate Reg: Registro port map (clk,reset,q_int(i-1),q_int(i)); 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 genérico Nreg para poder diseñar 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 función de su localización en la estructura. De igual forma, la salida del último registro es enviada a la salida datos del generador, mientras que la operación 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 función y-lógica de las salidas de todos los registros. Hay que indicar que sólo determinadas interconexiones mediante la función xor son válidas para obtener secuencias pseudoaleatorias de longitud 2 N 1, donde N es el número de registros del generador de datos. Por ese motivo, aunque aquí se ha utilizado un genérico para definir cualquier generador de longitud Nreg, el conectar las salidas del primer y último registro a la puerta xor de realimentación sólo 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 señal de datos se activa a alta la señal sinc? 7.3.2. Modulador PPM A continuación vamos a proceder al diseño 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 = 2 M. Asimismo, disponemos de una señal de reloj base de 50 MHz (E12) suministrada por la tarjeta de desarrollo. Supongamos en primer lugar un caso 6/10

simple como sería 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, requeriríamos que el reloj del generador de datos fuera 4 veces más lento que el del modulador PPM. Para ello se podría hacer uso de la propia señal de reloj de 50 MHz para el modulador PPM y de un contador que fuera generando un pulso cada cuatro flancos de la señal base para usar dicha señal 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, activándose ambos a nivel lógico 1 siempre que alcancen nuevamente el valor 0. En la siguiente figura se esquematiza este caso. Obsérvese 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 = 2 3 = 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 requeriría buscar algún mínimo común múltiplo. Dado que 2, 3, 5, 7, 9, 11 y 13 son números primos y difícilmente diseñaremos un modulador PPM de más de 8 bits de datos, podemos aplicar como regla sencilla para determinar el mínimo común múltiplo K = M L. Para M = 6 y M = 10, el mínimo común múltiplo se obtendría mediante la expresión 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 función find_k integrada en el paquete constantes, no hace más que aplicar los criterios anteriores para determinar el factor K. 1. A continuación se muestra un posible código para el modulador PPM, donde la parte inicial se centra en la generación de las señales 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

end ppm; 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; Gen_relojes: process(clk,reset) variable cuenta : natural range 0 to factor := 0; 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'; if (cuenta mod (factor/nbits)) = 0 then clk_datos_int <= '1'; else clk_datos_int <= '0'; 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)); RegM: if I>0 generate Reg_in: Registro port map (clk_datos_int,reset,datos_serie(i-1),datos_serie(i)); Reg_par: Registro port map (clk_par,reset,datos_serie(i),datos_par(i)); Gen_ppm: process(clk_ppm_int,reset) 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

end process Gen_ppm; salida <= '1' when (std_logic_vector(conv_unsigned(cuenta_ppm,nbits)) = datos_par) else '0'; datos_par_sal <= datos_par; end Behavioral; La librería de IEEE STD_LOGIC_UNSIGNED ha sido incluida para poder operar con la función conv_unsigned que convierte un número entero o natural en un unsigned con el número de bits indicado. El proceso que se encarga de la generación de las señales 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 señales 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 también una señal 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 continuación se muestra un posible código en VHDL que integre todos los bloques diseñados 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

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; 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; Obsérvese (véase código de la entidad ppm) que la generación de la señal PPM se realiza mediante la comprobación de una señal de cuenta (cuenta_ppm) y los datos paralelos (datos_par). En el momento que coinciden ambas cantidades, la señal de salida PPM se activa a alta, por lo que se envía en la posición 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 diseño en el que M = 3 bits. Qué ocurre en dicho caso? Cómo se podría solucionar? 5. Implementar en la FPGA un diseño en el que M = 4 bits. Observar las señales de salida haciendo uso de un analizador lógico. A continuación se muestra una posible configuración para los pines de entrada/salida a la FPGA: NET "reset" LOC = T15; NET "reloj" LOC = E12; NET "datos" LOC = A13; NET "sinc" LOC = B13; NET "salida_ppm" LOC = A14; NET "datos_par<0>" LOC = B15; NET "datos_par<1>" LOC = A15; NET "datos_par<2>" LOC = A16; NET "datos_par<3>" LOC = A17; 10/10