1 APLICACIÓN DE ANALIZADORES LÓGICOS EN EXPERIENCIAS

Anuncio
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
Descargar