Prueba final y despedida
Para despedir este blog, cerraremos con la prueba del sistema final sobre el hardware.
Para la realización de dicha prueba se conectó a la placa el módulo con el convertidor analógico-digital y la VGA, y se programó. El resultado tras la depuración del fichero .ucf fue el correcto funcionamiento del sistema en modo simulación (podía verse la señal triangular en la pantalla), esto es, utilizando el modelo interno del ADC; sin embargo, hubo problemas con el convertidor externo (la señal que salía por pantalla permanecía a cero). El sistema no pudo depurarse completamente por falta de tiempo, y aunque las causas del fallo barajadas a priori eran problemas con el HW (cable mal conectado…) o problemas con la interfaz al ADC (pero en las simulaciones no se observaron problemas), un repaso de la documentación reveló la causa más probable, repasemos para ello el modelo del ADC (ver apartados interfaz e imperfecciones): http://osciloscopiodigital.wordpress.com/2008/04/20/modelo-del-adcs7476/
En el cronograma proporcionado por el fabricante vemos que la señal CS debe permanecer activa durante toda la adquisición de la muestra, y vemos que aunque habíamos previsto el problema, se diseñó la unidad de control de la unidad de adquisición como si el ADC comenzara la adquisición con el flanco descendente. Las soluciones posibles serían la modificación de la UC de la unidad de adquisición para que mantenga CS activa el tiempo necesario o colocar un bloque que prolongue la duración de la señal CS_OUT; en todo caso el fallo está localizado.
Nos despedimos finalmente de los que hayan podido interesarse por la aplicación comentada aquí, esperamos que haya sido de interés para los lectores.
Nuevas simulaciones y memorias del proyecto
Hemos colgado en la carpeta de Skydrive nuevas simulaciones del sistema completo (dentro del apartado simulaciones), así como la memoria del proyecto en formatos pdf y word 03 (en el archivo docs.zip que se puede encontrar en la carpeta raiz)
Simulaciones del sistema completo
Hemos colgado en la carpeta Skydrive, dentro del apartado SIMULACIONES, diversos ficheros wlf con los resultados de la simulación del sistema digital completo y algunos de sus componentes. Todas las simulaciones se han efectuado con la versión XEIII 6.2 g de ModelSim.
Los archivos se encuentran comprimidos en ficheros con formato 7z autoextraibles.
UNIDAD DE CONTROL GLOBAL
En esta publicación se detalla la implementación de la unidad del control del sistema completo. Los puntos que se comentarán serán la interfaz, la secuencia interna de operaciones de la FSM y la verificación de su funcionamiento mediante simulación.
INTERFAZ
A continuación se muestra una breve descripción de las señales de entrada y salida de la UC, siendo ésta superficial, aunque en el fichero vhdl pueden verse con detalle las funciones de cada señal:
El bloque diseñado dispone de las entradas típicas de reloj (clk) y de reset síncrono (reset). Una vez aplicada la señal de reset, la UC inicializa todos los circuitos del sistema final mediante dos señales de reset, una global (reset_out) y otra para el divisor de frecuencia (reset_clk_out). Se incluyeron además dos señales de salida para el control de dos leds (led_interfaz y led_funcionando), que indicarán respectivamente que se esperan las modificaciones pertinentes en la interfaz (amplitud: ampli_in; periodo: peri_in; modo simulación: simul_in) y consiguiente activación de la señal de comienzo (empieza), y estado de funcionamiento del osciloscopio. Además se incluye una señal de entrada (cambio) que lleva a la UC al estado “interfaz” (estado 6). Asimismo, la UC incluye salidas de control para todos los bloques (inicio_adq, inicio_pro, inicio_vga; simul_out, peri_out, ampli_out; sel_mux_adc, sel_mux_vga) y entradas de dichos bloques (fin_adq, fin_pro, fin_vga).
SECUENCIA INTERNA DE OPERACIONES
Puede verse a continuación el diagrama de secuencia de operaciones de la UC, aunque se obviaron las activaciones de señales permitiendo una visión de más alto nivel:

Cabe resaltar que los flags a los que se refiere el diagrama son señales que permanecen activas tras la activación de las señales (biestables): cambio, empieza, y fin_vga. Cada una de las citadas señales tiene su flag, y nacen de la necesidad de memorizar la activación de dichas señales ya que ésta podría durar un único ciclo y la comprobación sólo se realiza en determinados estados.
Por ejemplo, la señal fin_vga se activa durante un ciclo de reloj tras la finalización de la representación, y si esto ocurre antes de la activación de la señal fin_adq, la FSM se quedará indefinidamente en el estado 7 esperando la activación de fin_adq, la cual no volverá a producirse. Así, se soluciona este problema introduciendo un biestable que se resetea tras su comprobación.
VERIFICACIÓN DE LA UC
En la siguiente figura pueden verse las simulaciones funcional y temporal de la UC diseñada. Cabe resaltar que para las señales fin_* , se utilizaron las señales inicio_* correspondientes retardadas cierto número de ciclos (no el que tardarían realmente, pero esto es indiferente para la verificación actual) con un retardo “tipo transporte” y no “tipo inercial” (tipo predeterminado), ya que éste último no sigue las variaciones.
Simulación funcional: En la primera gráfica se ve la inicialización y normal funcionamiento, y en la segunda se prueba el cambio en la interfaz.


Simulación temporal: Se incluye también un extracto de la simulación temporal, ya que no sería suficiente con la temporal para concluír un correcto funcionamiento. El estado indeterminado en las señales fin_* se deben como se comentó arriba al modelo transport del retardo utilizado para esas señales.

UNIDAD DE ADQUISICIÓN (cont.)
En esta publicación comentaremos los cambios realizados en la unidad de adquisición, así como su prueba conjunta con la BRAM.
CAMBIOS EN LA UNIDAD DE ADQUISICIÓN
Inicialmente se había realizado el modelo del ADC para un reloj de 25 MHz, cuando el ADC real trabaja como máximo a 20 MHz. Para la solución de este problema se planteaban dos posibles soluciones: introducir un bloque “gestor de reloj digital” (DCM) que generara una señal de 20 MHz o cambiar el divisor de frecuencia 1/2 por otro 1/10 (la implementación del divisor de frecuencia no aconseja la elección de un divisor 1/5, ya que al ser impar el número de ciclos de 10 ns necesarios para hacer un ciclo de 50 ns, el cambio de nivel alto a bajo debería hacerse por flanco descendente; además entre 5 y 10 MHz no llega a haber un orden de magnitud y al ser ésta una aplicación didáctica podemos permitirnos la consecuente pérdida de calidad del osciloscopio). Finalmente se optó por esta última opción por ser la más sencilla, aunque no se descarta la anterior si una vez terminado el proyecto sobra tiempo. Además se introdujo un contador en la unidad de control de esta unidad para mantener las señales necesarias para controlar el ADC activas durante 10 ciclos, ya que la UC trabaja con el reloj de 50 MHz y el ADC con el de 5 MHz.
En esta imagen puede verse un extracto de la simulación del ADC donde vemos un ciclo de muestreo:

Puede apreciarse además en las gráficas que se muestran a continuación que el tiempo total de operación, comprendido entre las activaciones de las señales “inicio_adq” y “fin_adq” se ve incrementado al hacerlo el período del reloj del ADC. Finalmente el período de muestreo es 4 μs (como es lógico resulta ser 4 veces el obtenido en simulaciones anteriores, dado que la nueva frecuencia de reloj es un cuarto de la anterior) y el tiempo total de operación es 2.564 ms, tiempos que no se ciñen a los estimados al inicio de este proyecto pues los cálculos se habían realizado con el reloj de 20MHz, pero por otra parte no se salen de las restricciones de tiempo real (el tiempo total de operación).

PRUEBA DE LA UNIDAD DE ADQUISICIÓN CON LA BRAM
Para la simulación conjunta de estos dos bloques, se han interconectado dentro de otro bloque. Aunque las simulaciones vistas arriba también se han realizado conjuntamente con la BRAM, ahora comentaremos sus implicaciones:

En la figura, se realiza dos veces la simulación y en la segunda el ADC vuelve a escribir los mismos datos (ya que se reinicializa, no así la BRAM), realizándose lecturas previas al establecer la dirección, pudiendo observarse los resultados esperados.