APLICACIÓN DE ANALIZADORES LÓGICOS EN EXPERIENCIAS DE LABORATORIO. TUTORIAL PARA EL USO DEL ANALIZADOR LÓGICO Resumen: El presente documento tiene como objetivo explicar qué es un analizador lógico, en que tipo de aplicaciones se utiliza y servir de tutorial para el usuario. Se espera que este material sea utilizado por alumnos que ya cursaron el laboratorio de sistemas digitales y que están cursando el laboratorio de estructura de computadores. Esto debido a que todos los comentarios y ejemplos introducidos en este apunte, pretenden ser un aporte a estos laboratorios y se desarrollaron utilizando las mismas herramientas de trabajo que se utilizan es ellos. 1.1 Introducción. El analizador lógico es un instrumento que permite capturar y desplegar un gran número de señales digitales al mismo tiempo. La mayoría de los usuarios de instrumentos de medición, elegiría un osciloscopio para analizar un sistema. Sin embargo, este instrumento presenta limitaciones en muchas aplicaciones. Por esto, es importante conocer las ventajas de los analizadores lógicos y saber en que tipo de aplicación es mejor utilizar uno u otro instrumento. A continuación se presentan algunas líneas generales para poder realizar esta discriminación. 1.2 lógico. Diferencias de uso entre un osciloscopio y un analizador Un osciloscopio se utiliza cuando se desea medir una pequeña excursión en la señal observada. figura 1: un osciloscopio se utiliza para medir pequeñas excursiones en la señal observada. También se utiliza cuando se necesita obtener información paramétrica como por ejemplo el tiempo entre dos puntos del canto de subida de un pulso. 1 figura 2: un osciloscopio se utiliza para medir este tiempo. En general, el osciloscopio se utilizará cuando se necesitan mediciones de voltaje o tiempo de gran precisión en señales analógicas. Un analizador lógico en cambio, se utiliza cuando se necesitan analizar muchas señales digitales al mismo tiempo, debido a que estos instrumentos permiten organizar y desplegar las señales de manera fácil y ordenada. También se utiliza cuando se necesitan ver las señales de un circuito de la misma manera que lo hace el sistema. Esto permite saber cuando ocurren transiciones en un bus, relativo a las transiciones en otros buses. Otra aplicación muy frecuente del analizador es cuando se necesita activar el disparo del instrumento con un patrón especifico de un bus en particular. 1.3 Vista general de un analizador lógico. La figura 3 muestra un diagrama general del instrumento estudiado. figura 3: diagrama general del analizador lógico. 2 El analizador temporal: es como un osciloscopio, pero con un bit de resolución, es decir, sólo se pueden desplegar dos estados (alto y bajo). Cualquier señal que se quiera muestrear que esté debajo del umbral especificado (threshold) será desplegada como un cero. Si la señal está por sobre este umbral, será desplegada como un uno. Esta parte del analizador muestrea señales de manera asincrónica y se utiliza por ejemplo para buscar relaciones temporales entre varias señales de entrada. Cuando el analizador temporal muestrea una señal de entrada y una muestra resulta estar en el estado alto o bajo y la siguiente muestra está en el estado opuesto, el analizador sabrá que se produjo el cambio en algún instante entre la toma de una muestra y la otra. Sin embargo, como no se sabe en que instante se produjo el cambio, este se representará en el instante en que se produce el muestreo. Esto acarreará un cierto grado de incerteza sobre el instante preciso en que se produce el cambio. figura 4 : se observa claramente la incerteza producida por el muestreo del analizador temporal. A mayor frecuencia de muestreo mayor será la resolución de la medición. Claramente existe un compromiso de diseño entre la resolución y la cantidad de información que se puede almacenar ya que cada punto muestreado ocupa un espacio en memoria. En algún punto de la medición, el analizador lógico debe comenzar a capturar o grabar los datos que serán almacenados en su memoria. Este punto es llamado ‘trigger point’ o punto de disparo. Una manera de disparar la toma de datos se logra configurando el analizador para que éste comience la toma de datos al encontrar un patrón predeterminado en un grupo de señales. Otra manera es programar el analizador para que éste se dispare al encontrar un canto de subida o bajada de una señal en particular. La configuración avanzada del trigger será discutida más adelante. El analizador de estados: utiliza una señal de reloj del sistema que se está analizando. Este dispositivo muestrea los datos de manera sincrónica con respecto al reloj que sincroniza los eventos del sistema estudiado. Por lo anterior podemos decir que la principal diferencia entre un analizador temporal y un analizador de estados, es que el primero tiene un reloj interno para controlar el 3 muestreo, de tal manera que muestrea el sistema estudiado de manera asincrónica. Por otro lado el analizador de estados utiliza un reloj que provee el sistema estudiado, como reloj de muestreo, lo que hace que sea un muestreo sincrónico. Esta característica del instrumento, lo transforma en un elemento muy usado en el mundo de los microcontroladores debido a que muy probablemente se tendrán datos y direcciones en el mismo bus. Para tomar los datos de interés correctamente, el analizador lógico deberá restringir la toma de datos a los tiempos en que sólo los datos de interés son validos y aparecen en el bus. Esto se hace tomando datos del mismo canal, pero con señales de reloj distintas. En la figura 5 observamos que para capturar las direcciones (VALID ADRESS), el analizador debe tomar muestras cuando la señal MREQ cambia a cero. Para capturar datos (VALID DATA), el analizador debe tomar muestras cuando la señal RD cambia a cero o cuando la señal WR cambia a cero. figura 5: diagrama de señales de un microprocesador. De este pequeño análisis podemos deducir que se utiliza un analizador de estados cuando se desea saber qué ocurre en un bus de datos del sistema, y se utiliza un analizador temporal cuando se desea saber cuándo ocurre algo en un bus de nuestro sistema. 4 2.1 Configuración del analizador lógico en modo analizador de estados (muestreo sincrónico) Este punto se desarrollará en base a un ejemplo. Se espera que el lector a través de éste, comprenda el funcionamiento básico del analizador lógico en modo analizador de estados. Luego le será fácil extender sus conocimientos para manejar el instrumento con aplicaciones más complejas. Se desarrolló una máquina secuencial que produce una salida alta cada vez que se detecta la secuencia 0101 en la entrada; y salida cero en el resto de los casos. 1/0 0/0 1/0 A 0/0 B B 1/0 C 0/0 D 1/1 0/0 figura 6: Máquina de estados reconocedora de secuencia. La siguiente secuencia de entrada produce las siguientes secuencias de salida y de transiciones de estados. Entrada Salida Estado 0 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0 B C D C A B B C A tabla 1: secuencia de salidas y de transiciones de estados. .... .... …. La máquina secuencial se programó en ABEL y se cargó en una CPLD implantada en una tarjeta de desarrollo estándar. El siguiente módulo describe el diagrama de estados. MODULE estado1 TITLE 'Diagrama de Estados. Modelo de Mealy' "Declaraciones q1, q0, zs, x pin 17,23,19,18 istype 'reg'; "Estado, Salida y entrada para la máq de estados Registrada clock, enab, reset pin 9,50,48; "Entradas z pin istype 'com'; "Salida Combinacional. sreg = [q1,q0]; "Valores de los estados A= 0; B= 1; C= 2; D= 3; equations [q1,q0,zs,x].clk= clock; when (x==0) then x:=1; when (x==1) then x:=0; 5 [q1,q0,zs].oe = !enab; [q1,q0,zs,x].ar = reset; "Con reset va a [0, 0](el estado A). state_diagram sreg; State A: zs := 0; if (!x) then B with z = 0; else A with z = 0; State B: if (!x) then B with z = 0; else C with z = 0; State C: if (!x) then D with z = 0; else A with z = 0; State D: if (!x) then B with z = 0; else C with {z = 1; zs := 1;} test_vectors ( [.c. [.c. [.c. [.c. [.c. [.c. [.c. [.c. [.c. [.c. [.c. , , , , , , , , , , , 0 0 0 0 0 0 0 0 0 0 0 [clock,enab,reset, x]->[sreg,zs]) , 1 , 0 ]->[A ,0]; , 0 , 1 ]->[A ,0]; , 0 , 0 ]->[B ,0]; , 0 , 1 ]->[C ,0]; , 0 , 0 ]->[D ,0]; , 0 , 1 ]->[C ,1]; , 0 , 1 ]->[A ,0]; , 0 , 0 ]->[B ,0]; , 0 , 0 ]->[B ,0]; , 0 , 1 ]->[C ,0]; , 0 , 1 ]->[A ,0]; END Código Abel de la máquina de estados de la figura 4. Del análisis del código se desprende que la máquina de estados, después de un tranciente, se quedará oscilando entre el estado C y D. Si sincronizamos debidamente el osciloscopio con las señales de interés obtendremos lo siguiente. figura 7: señales obtenidas de la oscilación de la máquina de estados. 6 Punta del oscil. señal D0 q0 D1 q1 D2 X D3 zs D4 clock D6 z tabla 2 : relación entre las señales del sistema estudiado y las puntas del osciloscopio. Lo anterior pretende ilustrar lo difícil que resulta capturar los estado por los que pasa una máquina secuencial con un osciloscopio. En este caso particular se debe utilizar el analizador lógico para poder visualizar claramente el paso de la máquina secuencial por todos los estados. En la figura 7, sólo se observa como la máquina pasa del estado 2 al 3, o bien del C al D. A continuación se ilustran los pasos que se deben seguir para lograr desplegar en el analizador lógico todos los estados por los que pasa la máquina. 1. Se deben conectar las puntas de prueba a las señales del dispositivo que se desea estudiar. 2. A continuación se debe especificar al analizador, que señales de prueba serán utilizadas y cómo se quieren agrupar en el analizador. Para esto, en la barra de menú se debe ir a Setup>Buses/Signals. figura 8: creación de buses y asignación de señales a cada uno de ellos. La figura 8 ilustra las señales utilizadas en nuestro ejemplo y como fueron agrupadas. En la tabla 3 se presentan las señales que se asociaron a las puntas del analizador lógico. 7 Señal del Punta del sistema analizador. estudiado. Pod1 0 q0 Pod1 1 q1 Pod1 2 zs Pod13 x Pod1 5 Z tabla 3 : relación entre las señales de la máquina de estados y las puntas de la máq. de estados. 3. Luego se debe setear el analizador en modo analizador de estados. Esto se logra haciendo clic en el recuadro Sampling de la figura 8, o bien desde la barra menú yendo a Setup>Timing/State (Sampling). figura 9: configuración del analizador lógico en modo analizador de estados. Luego se debe marcar la casilla que corresponde al modo State. Por defecto el modo del reloj está seteado en Master. Este es el método que se utiliza en el ejemplo que discutimos. Esto significa que sólo existe un reloj para muestrear las señales de interés. Cuando ocurre un canto de reloj se capturan los datos y se guardan como una muestra del analizador lógico. Existe otra manera de capturar datos, el modo Master/Slave/Demux . En este modo se pueden salvar datos en la memoria muestreados por distintos relojes. 8 figura 10 : esquema Master/Slave/Demux Como se muestra en la figura 10, cuando se produce un canto en el reloj slave los datos capturados por este reloj se guardan en un slave latch. Luego cuando se produce un canto en el reloj master, tanto la información capturada por el ‘Pod’ (se refiere a uno de los ramilletes de canales de entrada que tiene el intrumento) que utiliza el slave clock, como la información capturada por el ‘Pod’ que utiliza el master clock es guardada en memoria. Si se producen varios cantos del reloj slave, antes del próximo canto del reloj master, sólo la última información capturada por el ‘Pod’ del reloj slave es guardada en memoria. En caso de que se quiera demultiplexar información, primero se debe setear el analizador lógico en modo analizador de estados (State-Synchronous Sampling). Luego, en este mismo cuadro de diálogo se debe configurar el reloj (Clock Mode) en Master/Slave/Demux. A continuación se deben conectar correctamente los buses de los ‘Pod 1 y 2’ a las señales que se desean demultiplexar. Luego se deben elegir las señales que se utilizarán como relojes master y slave. La figura 10 entrega un diagrama de las conexiones. Después se debe ir al cuadro de configuración Buses/Signals y hacer ‘click’ en el botón de reloj (clock) que está debajo del encabezado de cada ‘Pod’. Para demultiplexar se debe poner el reloj en modo Demultiplex. Por ejemplo, si Ud. elige el ‘Pod 1’ para ser demultipexado, el ‘Pod 2’ desaparece y se verá una segunda columna del ‘Pod 1’. La primera columna será ‘Pod 1’ Master Clock, y la segunda ‘Pod 1’ Slave Clock. En la figura 9 se puede observar que el reloj utilizado en nuestro ejemplo se seteo en modo master. La punta del analizador lógico perteneciente a la ‘Pod 1’ rotulada como clock debe conectarse al reloj de la tarjeta de desarrollo para controlar sincrónicamente la toma de muestras. 4. Para obtener las formas de onda de interés del ejemplo que se está analizando, nos falta solamente configurar el disparo (trigger) de manera adecuada. Existen tres maneras de realizar esta acción. La primera y más simple, es utilizando el panel de configuración del trigger simple. Otra forma, es utilizando un trigger externo, sin embargo el método que más se utiliza cuando el analizador está en modo analizador de estados, es el trigger avanzado (advanced trigger). Para esto, en la barra de menú se debe ir a Setup>Advanced Trigger. Haciendo esto se accederá a un cuadro de dialogo diseñado para configurar el trigger, éste requiere que se cumplan 9 varias condiciones para que ocurra el disparo. La gran ventaja que presenta este modo de disparo es que ofrece una enorme cantidad de combinaciones y funciones prediseñadas para ser aplicadas en sistemas con distintas características. Además todas estas funciones son modificables, se les puede agregar o quitar partes e incluso conjugar o mezclar unas con otras. Cada modo de adquisición (temporal o estado) tienen su propia batería de funciones. Cada una de ellas está representada en cuadros azules que se arrastran hacia el cuadro de secuencias en el orden que se quiere que se ejecuten. figura 11 : cuadro de dialogo del trigger avanzado. La función del recuadro al lado izquierdo de la figura se toma y se arrastra al cuadro de secuencia. Cada función agregada a la secuencia de disparo conforma un trigger step. Cuando se cumple la condición programada en un step, se pasa al siguiente. El disparo ocurrirá cuado se halla cumplido completa la secuencia programada por el usuario. Cuando el analizador lógico está en modo analizador de estados se distinguen dos tipos de almacenamiento: default storage y sequense step storage . figura 12 : default storage y séquense sep storage. Default storage define lo que debe almacenarse mientras no se cumpla la condición programada en sequense step storage , es decir, es lo que se almacena antes del disparo. Si no se cumple nunca la condición de disparo y se acaba la memoria, el analizador desplegará lo almacenado por defecto. Si se cumple la secuencia de disparo se almacenarán en memoria nuevas muestras que sobre escribirán lo almacenado por default storage. 10 La figura 13 ilustra como deben configurarse las acciones que componen la secuencia de disparo. figura 13 : recuadros para configurar las secuencias de trigger. La figura 14 ilustra como agregar acciones o eventos a la secuencia de disparo. Los eventos se utilizan para definir que datos deben ser analizados y las acciones son utilizadas par comenzar procesos. figura 14 : recuadros para agregar acciones o eventos. Ahora que se ha introducido al lector en la configuración del modo de disparo avanzado, podemos explicar como se configuró éste para lograr visualizar todos los estados por los que pasa la máquina secuencial del ejemplo propuesto. Se agruparon las señales que definen el estado en que está la máquina secuencial (q0 y q1) en un bus llamado estados. Sabemos que éste tendrá el valor 0 (cero) al comenzar la ejecución de la máquina de estado y luego tomará el valor 1. Se buscó en las funciones de disparo del modo analizador de estados una función que accione el disparo del analizador cuando un cierto patrón (1) definido por el usuario sea seguido por otro patrón (2) también definido por el usuario. Esta función se llama “Too few states between Pattern1 and Pattern2” y se encuentra en uno de los cuadros azules 11 del cuadro de dialogo del modo disparo avanzado. Para que fuese más fácil adecuar esta función a nuestras necesidades se cambió la función al modo if/then como se ilustra en la figura 15. figura 15 : Cambio de la función al modo if/then. Los resultados de este cambio se encuentran en la figura 16, a partir de esta figura resulta simple comprender la función en cuestión. Se observa claramente que la condición de disparo permanecerá en el Step 1 hasta que no ocurra la condición especificada. Al ocurrir esta condición se pasará al Step 2, luego si se presenta el patrón esperado se producirá el disparo y se tomarán los datos esperados. 12 figura 16 : Cambio de la función al modo if/then. Se procedió a programar la función para que se produzca el disparo al cambiar el valor del bus estados de 0 a 1. El bus estados está constituido por los bits 0 y 1 del bus completo de señales. El resultado de lo anterior se presenta en la figura 17. figura 17 : función configurada. 13 En la figura 17 se puede observar que debido a la configuración del campo default storage, si no se produce nunca el disparo, al detenerse la toma de muestras se desplegará todo lo capturado. En este caso se desplegarán todas la señales del sistema estudiado en cero. Lo anterior debido a que al comenzar a medir, el sistema estará reseteado, es decir, todas las señales estarán es cero. Luego se cumplirá la condición impuesta al step 1 y se pasará al step 2. En el step 2 se espera que se pase al estado 1, es decir que el bit 1 se ponga en alto. Al sacar el reset del sistema, como la última entrada había sido un 0 (cero), se pasará al estado 1 cumpliéndose la condición del step 2. Esto traerá como consecuencia que se produzca el disparo. Las señales capturadas se muestran en la figura 18. figura 18 : formas de ondas de la máquina de estados. Nombre asociado a cada punta del analizador. Bus completo 0 Bus completo 1 Bus completo 2 Bus completo 3 Bus completo 5 Señal del sistema estudiado q0 q1 zs x Z tabla 4 : relación entre las señales de la máquina de estados y las señales desplegadas por el analizador. 14 2.2 Configuración del analizador lógico en modo temporal (muestreo asincrónico) Después de leer el punto 2.1 de este tutorial se espera que el lector ya esté familiarizado con el equipo. La configuración del analizador lógico en modo temporal es bastante similar a la configuración del analizador lógico en el modo analizador de estados. Este punto se desarrollará en base a un ejemplo. Se espera que el lector a través de éste, comprenda el funcionamiento básico del analizador lógico en modo temporal. Se quieren generar las siguientes formas de onda: figura 19 : formas de ondas que serán generadas. Se diseñó en Abel un módulo que cumpla con generar las 6 señales dadas en el esquema anterior. MODULE gensenal TITLE 'Generador de Formas de Ondas' "Constantes C,X = .c.,.x.; "Entradas reloj pin 9 ; "Reloj activo con cantos de subida RST pin 74; reset_uc pin 45; "Salidas Q4,Q3,Q2,Q1,Q0 pin 15,14,57,1,32 istype 'reg, buffer'; sec1..sec6 pin 72,58,56,54,55,53 istype 'com'; "Declaraciones de conjuntos Cuenta = [Q4,Q3,Q2,Q1,Q0]; 15 Equations reset_uc=1; Cuenta := (Cuenta + 1); "Cuenta ascendentemente en módulo 16 Cuenta.AR = RST; Cuenta.C = reloj; when (Cuenta==30) then RST=1; Truth_table( Cuenta -> [sec1,sec2,sec3,sec4,sec5,sec6]) 0-> [0,0,0,1,1,1]; 1-> [0,0,0,1,1,1]; 2-> [1,0,0,1,1,1]; 4-> [0,0,0,1,0,1]; 5-> [0,1,0,1,1,0]; 6-> [0,0,0,1,1,1]; 8-> [1,0,0,1,1,0]; 9-> [1,0,0,1,0,1]; 10-> [0,0,0,1,1,0]; 12-> [1,0,0,1,1,1]; 13-> [1,0,0,0,1,0]; 14-> [0,0,0,1,0,1]; 16-> [1,0,0,1,1,1]; 17-> [1,0,0,1,1,1]; 18-> [0,0,0,1,1,1]; 20-> [0,0,0,1,1,0]; 21-> [0,0,0,1,1,0]; 22-> [0,0,0,1,1,0]; 24-> [0,0,1,1,0,1]; 25-> [0,0,0,1,1,1]; 26-> [1,0,0,1,1,1]; 28-> [0,0,0,1,1,0]; 29-> [0,0,0,1,0,1]; 3-> [1,0,0,1,1,1]; 7-> [0,0,0,1,1,0]; 11-> [0,0,0,1,1,0]; 15-> [0,0,0,1,1,1]; 19-> [0,0,0,1,0,1]; 23-> [0,0,0,1,1,0]; 27-> [1,0,0,1,1,1]; END Código Abel del diseño que genera las señales de la figura 17. Se implementó el diseño en la tarjeta de desarrollo (CPLD). Para cumplir con el período de 3 [µs] debemos seter el clock de la tarjeta en 10 [MHz]. Para capturar las formas de onda con el analizador temporal se debe proceder de la siguiente manera. 1. Se deben conectar las puntas de prueba a las señales del dispositivo que se desea estudiar. 2. A continuación se debe especificar al analizador, qué señales de prueba serán utilizadas y cómo se quieren agrupar en el analizador. Para esto, en la barra de menú se debe ir a Setup>Buses/Signals. La figura 20 muestra como se asignaron las señales. figura 20: asignación de señales . 3. Luego se debe setear el analizador en modo analizador temporal. Esto se logra haciendo clic en el recuadro Sampling de la figura 20, o bien desde la barra menú yendo a Setup>Timing/State (Sampling). Luego se debe marcar la casilla que corresponde al modo temporal. A continuación se debe configurar la tasa de muestreo, lo cual es importante hacerlo en forma adecuada para aprovechar al máximo la memoria con que cuenta el equipo. 16 Primero se debe elegir la opción de muestreo (sample options) . Cada una de estas opciones ofrece distintas alternativas para la tasa de muestreo y cantidad de memoria destinada a cada canal. figura 21: elección de la opción de muestreo. En nuestro caso nos sirven las tres alternativas que se presentan, sin embargo elegiremos la primera porque ésta permite elegir cómodamente el período de muestreo y ofrece más memoria por canal que la tercera opción . En la figura 21 se ilustra la manera de optar una de estas alternativas. Al observar la figura 19 con detención, es posible darse cuenta que no se necesita gran resolución para capturar correctamente todas las señales. Las transiciones más rápidas se producen a una velocidad de 100 [ns], luego bastará con configurar la tasa de muestreo a esta velocidad (una muestra cada 100 [ns]) para capturar los pulsos más rápidos de la señales correctamente. Como se tienen 512 Kbit de memoria para cada canal y cada muestra se utiliza 1 bit se podrán almacenar aproximadamente 51 [ms]. figura 22: configuración del analizador lógico en modo analizador de estados y seteo de la tasa de muestreo. 17 En el laboratorio será posible experimentar más profundamente con las opciones de muestreo, lo cual será sin lugar a dudas enriquecedor para el usuario. 4. Para obtener las formas de onda buscadas, nos falta solamente configurar el disparo (trigger) de manera adecuada. En la figura 19 se puede observar claramente que las señales más lentas son la 2 y la 3, ambas de período 3[us]. Luego bastará con activar el disparo del instrumento con el canto de subida de una de estas señales. Esto se logra de manera muy sencilla en el cuadro de dialogo ‘simple trigger’ que se despliega en la interfase principal instrumento. En la figura 23 se despliegan las señales obtenidas con la configuración explicada. figura 23: señales pedidas. 3.1 Comentario final. A finalizar la lectura de este documento se espera que el lector esté capacitado para realizar mediciones con el analizador lógico en modo temporal y analizador de estados. Además a partir de los conocimientos adquiridos el usuario podrá explorar sin dificultad configuraciones más avanzadas del equipo para utilizarlo en aplicaciones más complicadas. 18