Laboratorio de Diseño de Circuitos y Sistemas Electrónicos INGENIERÍA ELECTRÓNICA PRÁCTICA FINAL OSCILOSCOPIO DIGITAL CON INTERFAZ USB Dpto. Electrónica Curso 2008/2009 1. Introducción La siguiente práctica tiene como objetivo el desarrollo de un sistema digital descrito mediante VHDL e implementado sobre una FPGA. Con ella se pretenden cubrir todas las fases que aparecen en el flujo de diseño: modelado, simulación, síntesis e implementación. Concretamente el sistema a desarrollar consiste en un osciloscopio digital de 100 MHz dotado de una interfaz USB que permite conectarlo a un ordenador personal. Para su implementación se utilizará la tarjeta de pruebas del laboratorio, basada en una FPGA de la familia Spartan3 de Xilinx. La Figura 1 ilustra lo expuesto. TARJETA EVALUACI ÓN FPGA Spartan3 BLOQUE ADC Puerto USB Figura 1. Diagrama de bloques del sistema completo. 2. Descripción del diseño Se pretende diseñar un osciloscopio digital de un solo canal, con una frecuencia máxima de adquisición de 100 MS/s y conectable a un ordenador personal mediante un enlace USB. A través de este enlace se fijarán los parámetros que controlan el funcionamiento del sistema y se recibirán las muestras adquiridas para su posterior representación en el ordenador. El elemento central del osciloscopio es una FPGA Spartan 3 1000-4 que incluye toda la lógica necesaria para el control del sistema. La FPGA recibe las muestras de conversor A/D externo LTC2217 (16 bits, 100 MS/s), almacenándolas en una memoria de adquisición implementada mediante BRAMs hasta el momento de ser transferidas al PC a través del enlace USB. Para dotar de conectividad USB al osciloscopio el sistema incluye un controlador CY7C681013A. Este dispositivo dispone una interfaz genérica programable (GPIF) que puede configurarse para operar como una gran variedad de interfaces: ATA, EPP, PCMCIA, buses de procesador. En el caso considerado se ha optado por esta última posibilidad de forma que el controlador USB se comporta como maestro de bus que se conecta a la FPGA, la cual se aparece como un mero periférico asociado a este controlador. La interfaz de bus considerada se compone de las siguientes señales: • addr[3:0] Bus de direcciones • data[15:0] Bus de datos • rd_n Señal de comando de lectura • wr_n Señal de comando de escritura Esta interfaz utiliza un protocolo similar el empleado por los micros de Intel. En dicho protocolo las señales de comandos (rd_n, wr_n) actúan como elementos de validación de la dirección depositada en el bus. Según esto, sólo cuando alguna de estas señales esté activa (parte activa del ciclo de acceso) puede darse por valido el contenido del bus de direcciones. Esta apreciación ha de tomarse en consideración durante el diseño de la 2 lógica de control con el interfaz USB. La figura 2 muestra los cronogramas de los accesos generados por el citado controlador. La señal de reloj mostrada en estos cronogramas es una señal interna del controlador utilizada para sincronizar su operación interna y que se ha incluido únicamente a efectos informativos (no se conecta a la FPGA). CICLO DE LECTURA clk addr Ax rd_n wr_n rdy data Dx CICLO DE ESCRITURA clk addr Ax rd_n wr_n rdy data Dx Figura 2. Cronogramas de acceso del controlador USB. Además de estas líneas, el controlador USB dispone de una entrada de interrupción controlada desde la FPGA que será utilizada para indicar cuándo se ha completado una secuencia de adquisición. En lo que respecta a la conexión del conversor LTC2217 a la FPGA, tal y como muestra el diagrama de bloques que aparece en la figura 3, este dispositivo dispone de un bus de datos de salida de 16 bits. Las señales de datos pueden configurarse en modo diferencial o en modo simple, siendo esta última la configuración elegida para el diseño planteado. No obstante, la señal de reloj empleada sí es diferencial (terminales ENC+ y ENC-) siendo generada por la propia FPGA. Además de los citados, el conversor dispone de una serie de entradas digitales que controlan su operación: • • SHDN: Paso a modo de bajo consumo (Shutdown). Controlado por la FPGA. DITH: Habilitación del circuito de dither interno. Controlado por la FPGA. 3 • • • MODE: Formato de salida y control del módulo de estabilización del ciclo de trabajo del reloj de conversión. El nivel de este terminal se ha fijado en la placa PCB para obtener las muestras de salida en complemento a 2. LVDS: Selecciona el modo de los terminales de datos: simple o diferencial. El nivel de este terminal se ha fijado en la placa PCB para que opere en modo simple. RAND: Habilitación del módulo de aleatorización de los datos de salida para reducir las interferencias EMC generadas por el bus de datos. Controlado por la FPGA. Las señales de la lista anterior para las que se ha establecido que su control lo realizará la FPGA se conectarán a ciertos terminales de esta última. Su nivel lógico se fijará mediante un registro interno en función de los parámetros recibidos desde el ordenador personal. Figura 3. Diagrama de bloques del conversor A/D LTC2217. La siguiente figura muestra el diagrama de bloques de la lógica a implementar en la FPGA. La FPGA recibe una señal de reloj externa denominada sys_clk. A partir de esta señal de 50 MHz se generan mediante un DCM dos señales internas de 50 y 100 MHz, denominadas respectivamente clk_1x y clk_2x. La señal clk_2x se utilizará para sincronizar la operación de todos los módulos relacionados con la adquisición y procesamiento de la señal de entrada. Por otro lado, la lógica relacionada con el interfaz USB, que presenta una temporización menos crítica se sincronizará con el reloj clk_1x. El módulo de control del ADC es el encargado de generar la señal de conversión y captura los datos provenientes de este dispositivo. Este módulo incluye un módulo de ‘descrambling’ para recuperar los valores originales cuando el modo de aleatorización está activado. Además, este módulo genera las señales de control de los modos de operación del ADC. Dado que el ADC siempre opera a la máxima frecuencia (100 MHz), para ajustar la frecuencia de adquisición del sistema se aplican técnicas de diezmado. El módulo de diezmado recibe el caudal de muestras del módulo de control del ADC proporcionando a su salida una de cada N muestras de entrada, donde N es el factor de diezmado. Dicho 4 factor se fija mediante un registro interno de 8 bits denominado decimate_reg, siendo la frecuencia de adquisición efectiva resultante: Diezmado Filtro Memoria adquisición 4Kx16 Generación de reloj clk_1x (50 MHz) clk_2x (100 MHz) Control de disparo CY7C681013A Control ADC f SAMPLING (100MHz) 1 + decimate _ reg Interface USB LTC2217 f ACQUISITION = sys_clk (50 MHz) Figura 4. Diagrama de bloques de la lógica interna de la FPGA. La salida del módulo de diezmado se aplica a un filtro FIR de hasta 48 coeficientes simétricos. El orden de este filtro viene limitado por el número de multiplicadores hardware de que dispone la FPGA empleada. Debido a la elevada frecuencia de operación del sistema se ha de optar por una arquitectura completamente paralela para este filtro, utilizando un multiplicador para realizar el producto de dos muestras simétricas. Los valores de los coeficientes del filtro se fijarán mediante un conjunto de registros controlados desde la interfaz con el controlador USB. El resto de la cadena de procesamiento está compuesta por la memoria de adquisición y el bloque de control de disparo. En el diseño planteado es posible seleccionar si se desea adquirir la señal original o su versión filtrada, utilizando para ello el multiplexor mostrado en la figura. La señal de selección de este multiplexor se controla mediante uno de los bits de los registros de control asociados al bloque de interfaz con el controlador USB. La memoria de adquisición se implementa mediante BRAMs, y tiene una capacidad de 4Ksamples. Su funcionamiento se controla desde el módulo de control de disparo, tal y como se describirá a continuación. Para poder iniciar una secuencia de adquisición es preciso rearmar el circuito de disparo. El diseño planteado ha de permitir configurar la profundidad de pretrigger mediante un registro interno, lo que obliga a gestionar la memoria de adquisición como una FIFO. Una vez rearmado el circuito de disparo, el sistema de adquisición comienza a llenar la memoria de adquisición hasta alcanzar el nivel de pretrigger PR. En ese momento se inicia la búsqueda de la condición de disparo, durante la cual, por cada escritura realizada para almacenar una nueva muestra entrante, se realiza una lectura para descartar la muestra más antigua. Esto permite mantener en la FIFO las PR muestras más recientes hasta el momento de detectarse la condición de disparo. Una vez detectada la condición de disparo se detiene el citado 5 descarte, es decir, cesan las lecturas sobre la FIFO y sólo se realizan escrituras hasta completar su llenado. Una vez llena se detienen las escrituras dando por concluida la secuencia de adquisición, no iniciándose una nueva secuencia hasta que no se vuelva a rearmar el circuito de disparo La condición de disparo viene determinada cuando la señal que llega al módulo de adquisición supera un determinado umbral con una determinada pendiente (ascendente o descendente). El nivel de disparo se fija mediante el registro interno trigger_level, mientras que el flanco se fija mediante el bit trigger_edge del registro de control. Ambos registros se controlan desde el módulo de interfaz con el controlador USB. Una vez concluida la secuencia de adquisición las muestras almacenadas en la memoria FIFO estarán listas para ser transferidas al PC. Este hecho vendrá señalado por la activación de la entrada de interrupción del controlador USB. Finalmente el módulo de interfaz con el controlador USB incluye un conjunto de registros utilizados para controlar la operación del osciloscopio así como la lógica necesaria para gestionar los accesos a dichos registros. La tabla 1 describe estos registros así como la dirección base que ocupa cada uno de ellos. Todos ellos son registros de 16 bits, aunque en algunos casos no se utilicen todos ellos Tabla 1: Registros internos del osciloscopio. Dirección Nombre 0 1 2 3 4 5 6 7-15 ctrl_reg decimate_reg coef_idx_reg coef_data_reg trigger_level_reg pretrigger_reg sample_data_reg - Descripción Registro de control global del sistema (R/W) Registro de factor de diezmado (R/W) Registro de indice de coeficiente (W) Registro de datos de coeficiente (W) Registro de nivel de disparo (R/W) Registro de profundidad de pretrigger (R/W) Salida de la FIFO de adquisición (R) Reservados La tabla 2 muestra la descripción de los bits del registro de control. El bit de enable habilita la operación del sistema. Cuando está desactivado no se permite adquisición de señales. El bit rearm se utiliza para rearmar el circuito de disparo. Se trata de un bit no persistente, es decir, para rearmar el circuito de disparo es preciso realizar una escritura sobre el registro de control con este bit a 1. En estas condiciones, al concluir el ciclo de escritura se genera un pulso de un ciclo de clk_1x con el que se rearma el circuito de disparo. Esto mismo es aplicable para el bit de borrado de interrupciones int_clear. 6 Tabla 2: Registro de control global. Bit Nombre 0 1 enable rearm 2 trigger_edge 3 searching 4 data_ready 5 6 7 int_enable int_clear adc_shutdown 9 adc_rand 9-15 - Descripción Habilita el funcionamiento del sistema Rearmado del ciruito de disparo (no persistente) Establece el flanco de disparo: 1 ascendente, 0 descendente Se activa al rearmar el circuito de disparo y se desactiva al detectarse la condición de disparo Se desactiva al iniciarse una secuencia de adquisición (rearmado) y se activa una vez completada Habilitación de interrupciones Borrado de interrupciones. Control de bajo consumo del ADC Habilitación del modo aleatorio de la salida de datos del ADC Reservados (fijos a 0) En el registro de factor de diezmado sólo se utilizan los 8 bits de menor peso. Como se ha comentado, el filtro FIR admite 24 coeficientes (uno por cada multiplicador hardware de que dispone la FPGA). Cada uno de estos coeficientes se almacena en un registro interno del filtro. Puesto que con un bus de direcciones de 4 líneas no es posible direccional tal cantidad de registros se utilizará técnica de pasarela. Según esta aproximación, para fijar un nuevo valor se escribe el índice del coeficiente en el registro coef_idx_reg del interfaz con el controlador USB. A continuación se realizará una escritura sobre el registro coef_data_reg, mediante la cual se transferira el dato recibido del controlador en el registro de coeficiente del filtro. En el registro de índices de coeficientes sólo se emplean los 5 bits de menor peso, mientras que el de datos es un registro de 16 bits. El comportamiento de los restantes registros del sistema queda completamente descrito con la información incluida en la tabla 1 y los textos previos. 7 3. Desarrollo de la práctica Con el desarrollo de la práctica se pretenden abordar tanto aspectos de modelado en VHDL para síntesis como para simulación. Para ello se ha dividido en una serie de apartados de dificultad progresiva que lleven a la consecución del diseño final. Para cada uno de los apartados se indica la nota máxima que aporta (sobre un total de 10 puntos), pudiéndose modificar dicha nota a la baja en función del examen de laboratorio. Todos los apartados deben realizarse en el orden en que se enumeran a continuación; aquellas modificaciones que se salten desarrollos previos no serán tenidas en cuenta durante la evaluación. 3.1. Apartado 1 La puntuación máxima proporcionada por este apartado es de 0.5 puntos. Se trata de un apartado básico que permita al alumno familiarizarse con el protocolo utilizado por el controlador USB mediante un diseño sencillo. El diseño desarrollado servirá como base para posteriores apartados. Dicho diseño consistirá en la implementación de dos registros de I/O de 8 bits en la FPGA. Éstos estarán ubicados en las direcciones 8 y 9. A efectos de depuración, el dato almacenado durante una escritura en el registro 8 se representará en la salida denominada LEDS. La declaración de la entidad del diseño se debe ajustar a la siguiente definición: entity usb_oscilloscope is port ( sys_clk : in std_logic; sys_rst_n : in std_logic; --usb_addr : in std_logic_vector(3 downto 0); usb_rd_n : in std_logic; usb_wr_n : in std_logic; usb_data : inout std_logic_vector(15 downto 0); --switches : in std_logic_vector(7 downto 0); leds : out std_logic_vector(7 downto 0)); end usb_oscilloscope; Para facilitar el desarrollo de este apartado se proporciona una serie de ficheros fuente VHDL. El fichero ap1.vhd (entidad usb_oscilloscope) contiene el diseño a desarrollar. Los ficheros usb_bfm.vhd y ap1_tb.vhd (entidad usb_oscilloscope_tb) se utilizan únicamente para validar el diseño mediante simulación. El primero de ellos es un modelo funcional de bus o BFM del controlador USB. Dispone de una serie de procedimientos que facilitan la simulación de accesos a un periférico externo mediante el protocolo descrito. Los comentarios incluidos el código fuente son lo suficientemente explicativos como para no entrar en detalles de su 8 funcionamiento. El fichero ap1_tb.vhd contiene un banco de pruebas para validar el sistema completo (diseño de la interfaz controlador USB + BFM del cotrolador). Tal y como muestra la figura 5, el banco de pruebas se limita a instanciar los dos componentes citados y a generar la señal sys_clk (señal de reloj de 50MHz del oscilador externo de la placa de desarrollo). La señal de reloj patrón será regenerada dentro de la FPGA mediante la inclusión del gestor de relojes (DCM) de la arquitectura Spartan3. usb_oscilloscope_tb sys_rst_n usb_bfm rst_n addr[3:0] rd_n wr_n data[15:0] int_n usb_oscilloscope sys_rst_n usb_addr[3:0] usb_rd_n usb_wr_n usb_data[15:0] leds[7:0] switches[7:0] usb_int_n Figura 5. Estructura del banco de pruebas. Este apartado se dará por válido únicamente si se realizan todas las fases que componen el flujo de diseño en VHDL (simulación funcional, síntesis del diseño, implementación y simulación temporal). 3.2. Apartado 2 La puntuación máxima proporcionada por este apartado es de 1.5 puntos. El osciloscopio propuesto, cuya implementación se llevará a cabo sobre una FPGA Spartan3 requiere de un dispositivo ADC externo. Para ello, se va a emplear el circuito de LTC2217 de Linear Technology, cuyas hojas de características se adjuntan como anexo al final de este documento. Para la simulación de las distintas etapas en el desarrollo del osciloscopio, es necesario disponer de un modelo de simulación que permita llevar a cabo la validación del diseño realizado. Por ello, en este apartado, se pide desarrollar el modelo de simulación del mencionado componente, teniendo en cuenta no sólo las características funcionales de cada uno de sus terminales, sino también su comportamiento temporal (retardos especificados por el fabricante). Las muestras proporcionadas por este modelo se obtendrán de un fichero binario que contiene una secuencia de enteros de 32 bits (formato utilizado internamente por Modelsim para representar los tipos integer VHDL). Junto con el resto de los ficheros se suministrará un script de Matlab para generar dicho fichero. Este apartado se dará por válido únicamente si, mediante simulación funcional, se demuestra el correcto funcionamiento del modelo para la correcta excitación de las entradas del ADC. 9 3.3. Apartado 3 La puntuación máxima proporcionada por este apartado es de 4 puntos. En este apartado se desarrollará la lógica interna de la FPGA que aparece en el diagrama de bloques de la figura 4 exceptuando el bloque de correspondiente al filtro digital. En este apartado dicho bloque consistirá en un mero registro que transfiere a su salida las muestras que recibe a su entrada. Este apartado se dará por válido únicamente si se realizan todas las fases que componen el flujo de diseño en VHDL (simulación funcional, síntesis del diseño, implementación y simulación temporal). La calificación máxima sólo se podrá alcanzar si el sistema funciona a 100 MHz. Una disminución de la frecuencia de operación supondrá una menor puntuación en este apartado. 3.4. Apartado 4 La puntuación máxima proporcionada por este apartado es de 2 puntos. En este apartado se abordará el diseño del filtro digital. Para validar dicho bloque se una señal compuesta por sendos tonos de 10 y 40 MHz, calculándose los coeficientes del filtro mediante un script de matlab que se suministrará a tal efecto. 3.5. Apartado 5 La puntuación máxima proporcionada por este apartado es de 2 puntos. En este apartado se llevará a cabo la integración del filtro desarrollado en el apartado anterior con el resto del sistema, validando el diseño completo. Este apartado se dará por válido únicamente si se realizan todas las fases que componen el flujo de diseño en VHDL (simulación funcional, síntesis del diseño, implementación y simulación temporal). 4. Evaluación de la práctica Cada puesto de trabajo deberá entregar una memoria al profesor del laboratorio con fecha límite el viernes de la penúltima semana de clase (véase la página web de la asignatura en las fechas correspondientes). La memoria deberá contener los siguientes apartados: • Para cada uno de los apartados abordados una breve descripción del diseño realizado que facilite la interpretación del código fuente VHDL. 10 • Listados del código fuente VHDL desarrollado. • Cronogramas de la simulación temporal que ilustren el correcto funcionamiento del diseño realizado. Para el caso del apartado 3 no es necesario. • Si el diseño contiene máquinas de estados, se incluirá el diagrama de estados. Asimismo, se entregará un disco o CD con todos los ficheros del diseño (ficheros fuente VHDL, scripts de simulación y síntesis, ficheros ucf, etc). Finalmente, se realizará un examen de la práctica desarrollada en el laboratorio en las fechas que se establezcan para ello (véase la página web de la asignatura). El examen se realizará de forma individual y el alumno deberá responder a las preguntas realizadas por el profesor sobre el funcionamiento del sistema, así como simular, sintetizar o demostrar el funcionamiento real de las partes que se le pidan. 11
© Copyright 2024 ExpyDoc