Analizador Lógico y Generador de Patrones

Preguntas más frecuentes

                                   

 

12-12-2003 ¿Qué es eso del Generador de Patrones? 

El Generador de Patrones es una herramienta que permite poner datos (en nuestro caso de 8 bits) en la salida de un circuito. Esos datos podrán ser las señales de excitación de otro circuito, de forma que nos permita evaluar y comprobar el funcionamiento de ese circuito.

Suponer que queremos ver si una puerta AND funciona correctamente. Para ello basta con poner en sus entradas todas las combinaciones posibles y leer en cada caso la salida. Suponer que asociamos el canal 1 y el 2 del generador de patrones a cada una de las entradas de la puerta respectivamente. El fichero de muestras que cumple todas las combinaciones será (escrito en binario): xxxxxx00 xxxxxx01 xxxxxx10 xxxxxx11. El signo x representa cualquier valor (0 ó 1), pues los canales correspondientes no están conectados.

Los canales de entrada del Analizador Lógico los podemos conectar de la siguiente manera: Canal 1 y 2 a cada una de las entradas y canal 3 a la salida de la puerta AND.

Al entrar en funcionamiento el conjunto, lo primero que se hace es que el generador de patrones escribe el dato xxxxxx00, con lo que en cada entrada del circuito bajo prueba, la puerta AND, habrá un 0. Lo siguiente es que el analizador lógico hace una lectura, con lo que sabremos como responde la puerta a la entrada 00. En el siguiente instante el generador de muestras escribirá el siguiente dato, xxxxxx01, es decir, ahora en una entrada de la AND hay un 0 y en la otra un 1. De nuevo el analizador lógico hace otra lectura y así hasta terminar con todas las muestras.

Una vez detenido el analizador, bien porque se han acabado las muestras, bien porque el usuario ha detenido el proceso, el analizador presentará el resultado de la captura, con lo que podremos comprobar si el circuito bajo prueba funciona correctamente.

 

12-12-2003 ¿Cómo implemento eso del Generador de Patrones en mi práctica?

En primer lugar partimos de un fichero de muestras. Este fichero deberá ser creado en función del circuito que se quiera probar (ver ejemplo).  Para crear este fichero se puede usar un editor binario o hexadecimal, o bien escribir un sencillo programa en C que lo escriba directamente.

Desde el programa de aplicación se incluirá en el menú de configuración de canales la opción de leer un fichero de patrones de un máximo de 8 KBytes. Este fichero será leído y escrito en un buffer dentro del programa de aplicación. Al terminar de leer el fichero ya se podrá saber su tamaño, ese tamaño se incluirá en el buffer, en forma de palabra de 16 bits, en las dos primeras posiciones del buffer. El primer byte será el byte alto de la palabra y el segundo byte del buffer será el byte bajo de la palabra.

La configuración del driver en este caso incluirá la dirección de comienzo del buffer de muestras, según se indica en las especificaciones del driver. De esta manera, el driver podrá conocer el tamaño del fichero de muestras y sabrá cuando ha terminado de sacar muestras, bien para terminar o bien para empezar de nuevo, lo que haya elegido el usuario.

 

15-12-2003 ¿Cómo se maneja de forma sencilla el buffer cíclico del driver?

A continuación se muestra un listado de un código que podéis usar en el diseño del driver. En él se muestra cómo manejar tanto la lectura como la escritura en un buffer cíclico. El alumno debe leerlo con detenimiento y entenderlo antes de poder utilizarlo.

Rutinas buffer ciclico.
 

BUFFLEN EQU 4096   ;  must be power of 2
BUFFER DB BUFFLEN DUP (?)
ENDBUF EQU $
HEAD  DW 0
TAIL  DW 0

Escribir en el Buffer 

;; Input AL - byte a salvar
;; Output   - CY = 1 overrun (CY es el bit de Carry)
;;            CY = 0 OK
;; Efecto colateral: elregistro bx se borra
save_in_buffer proc
 mov bx,head  ; salva el siguiente byte
 mov buffer[bx],al
 inc bx
 and bx,bufflen-1
 cmp bx,tail
 je overrun
 mov head,bx
 clc
 ret
overrun:
 stc
 ret
save_in_buffer endp

Leer del Buffer

;; Input AL - byte a leer
;; Output   - CY = 1 buffer vacio
;;            CY = 0 OK. AL = byte leído
;; Efecto colateral: bx se borra
get_from_buffer proc
 mov bx,tail
 cmp bx,head
 je buffer_empty
 mov al,buffer[bx]
 inc bx
 and bx,bufflen-1
 mov tail,bx
 clc
 ret
buffer_empty:
 stc
 ret
get_from_buffer endp

 


Página editada y mantenida por Guillermo Glez. de Rivera
  Volver atrás