Convierte de Binario a BCDs usando una GAL22V10
Transcripción
Convierte de Binario a BCDs usando una GAL22V10
Convierte de Binario a BCDs usando una GAL22V10 El proyecto que ahora se aborda es el de convertir una puntuación recibida en binario que toma valores de 0 a 49 representada con seis bits, a dos dígitos BCD (Decimal Codificado en Binario). Especificación del Diseño — BIN_BCD Para exhibir el escore, que aparece como salida de otra GAL, un convertidor de binario a BCD es implementado. La función del convertidor es aceptar las seis líneas de datos binarios generados por otra GAL y producir dos conjuntos de salidas con decimales codificados en binario para dos dispositivos exhibidores BCD; uno que muestre las unidades del escore actual, y el otro que muestre las decenas. Los cuatro bits de salida BCD1 (D3-D0) contienen las unidades del escore actual, y es conectado al dígito de de menor orden del display. Los tres bits de salida BCD2 (D6 – D4) contienen las decenas, y es alimentado al dígito de mayor orden del exhibidor. BIN_BCD también produce un par de salidas para iluminar LEDs de tiro BAJO y tiro ALTO. BAJO es encendido siempre que el escore es 27 o menos; mientras que ALTO se ilumina cuando el escore es 37 o mayor. Notar que existen 14 condiciones irrelevantes pues el máximo número de seis bits es 63. Método de Diseño — BIN_BCD El diseño de BIN_BCD es ilustrado en el archivo fuente de la Figura 1. El diseño del convertidor es fácilmente expresado con una tabla de verdad (truth_table) que liste el valor del escore (entradas S5 hasta S0 se declaran como escore) para valores de BCD1 y BCD2. BCD1 y BCD2 son conjuntos que definen las salidas que son alimentadas a los dispositivos de siete segmentos. Tal tabla de verdad lista valores del escore hasta el decimal 49. La tabla de verdad representa un método de expresar el diseño “manualmente.” Uno puede usar una macro para crear una tabla de verdad en la siguiente manera: limpia(binario); @repeat 49 { binario -> [binario/10,binario%10]; inc(binario);} Como se indica en la figura 1 (y se describe en “Vectores de Prueba — BIN_BCD”), tal macro es usada para generar los vectores de prueba para el convertidor. El file *.lst generado muestra la tabla de verdad creada desde la macro. El diseño BIN_BCD también provee las salidas LT28 y GT36 para controlar los LEDs BAJO y ALTO. Un par de ecuaciones generan una señal activa alta LT28 para encender el LED BAJO cuando el escore es menor que 28, y una señal activa alta GT36 para encender el LED ALTO cuando el escore es mayor que 36. Vectores de Prueba — BIN_BCD Los vectores de prueba que se muestran en la figura 1 verifican la operación de las salidas LT28 y GT36 del convertidor al asignar varios valores para escore y cotejar para las salidas correspondientes. Tales vectores de prueba para el convertidor binario a BCD se definen mediante la siguiente macro: test_vectors ( escore -> [BCD2,BCD1]) limpia(binario); @repeat 49 { binario -> [binario/10,binario%10]; inc(binario);} Prof. S. Saucedo 1 ICE/2007 Tal macro genera un vector para la simulación con la variable binario iniciada a 0 mediante la macro (a) {@const ?a=0}; (en el módulo binBCD del archivo fuente, dado en la figura 1), seguido de 49 vectores proporcionados mediante la directiva @repeat. estos 49 vectores se generan al incrementar el valor de la variable binario en la cantidad 1 para cada vector. Referirse a la línea con la macro inc (a) {@const ?a=?a+1;}; en figura 1. En el lado de la salida de los vectores de prueba, una division se usa para crear la salida para BCD2 (dígito de las decenas del display), mientras que el operador de residuo (módulo) se emplea para crear la salida para BCD1 (dígito para unidades en el display). MODULE binBCD TITLE 'Convierte binario de 6 bits a dos BCDs' " " " " " " " Un escore de 6 bits en binario (0 - 49) se convierte en dos salidas BCD. La division entera '/' y el operador de modulo '%' se usan para extraer los digitos individuales a partir del escore de dos digitos. 'Escore % 10' genera las 'unidades' y 'Escore / 10' produce las 'decenas' Las salidas 'GT36' y 'LT28' son para una segunda etapa S5..S0 pin 2..7; escore = [S5..S0]; " salidas LT28,GT36 pin istype 'com'; D6..D4 pin 14..16 istype 'com'; BCD2 = [D6..D4]; D3..D0 pin istype 'com'; BCD1 = [D3..D0]; " macros para separacion de Digitos binario = 0; " variable de trabajo limpia macro (a) {@const ?a=0}; inc macro (a) {@const ?a=?a+1;}; equations LT28 = (escore < 28); " BAJO GT36 = (escore > 36); " ALTO (maquina de estados). @DCSET " Condiciones 'no importa' Para ayudar a la optimizacion truth_table ( escore -> [BCD2,BCD1]) 0 -> [ 0 , 0 ]; 1 -> [ 0 , 1 ]; 2 -> [ 0 , 2 ]; 3 -> [ 0 , 3 ]; 4 -> [ 0 , 4 ]; 5 -> [ 0 , 5 ]; 6 -> [ 0 , 6 ]; 7 -> [ 0 , 7 ]; 8 -> [ 0 , 8 ]; 9 -> [ 0 , 9 ]; 10 -> [ 1 , 0 ]; 11 -> [ 1 , 1 ]; 12 -> [ 1 , 2 ]; 13 -> [ 1 , 3 ]; 14 -> [ 1 , 4 ]; 15 -> [ 1 , 5 ]; 16 -> [ 1 , 6 ]; 17 -> [ 1 , 7 ]; Prof. S. Saucedo 2 ICE/2007 " " " " 18 -> [ 1 , 8 ]; 19 -> [ 1 , 9 ]; 20 -> [ 2 , 0 ]; 21 -> [ 2 , 1 ]; 22 -> [ 2 , 2 ]; 23 -> [ 2 , 3 ]; 24 -> [ 2 , 4 ]; 25 -> [ 2 , 5 ]; 26 -> [ 2 , 6 ]; 27 -> [ 2 , 7 ]; 28 -> [ 2 , 8 ]; 29 -> [ 2 , 9 ]; 30 -> [ 3 , 0 ]; 31 -> [ 3 , 1 ]; 32 -> [ 3 , 2 ]; 33 -> [ 3 , 3 ]; 34 -> [ 3 , 4 ]; 35 -> [ 3 , 5 ]; 36 -> [ 3 , 6 ]; 37 -> [ 3 , 7 ]; 38 -> [ 3 , 8 ]; 39 -> [ 3 , 9 ]; 40 -> [ 4 , 0 ]; 41 -> [ 4 , 1 ]; 42 -> [ 4 , 2 ]; 43 -> [ 4 , 3 ]; 44 -> [ 4 , 4 ]; 45 -> [ 4 , 5 ]; 46 -> [ 4 , 6 ]; 47 -> [ 4 , 7 ]; 48 -> [ 4 , 8 ]; 49 -> [ 4 , 9 ]; Esta tabla de verdad se puede remplazar con la siguiente macro. limpia(binario); @repeat 49 { binario -> [binario/10,binario%10]; inc(binario);} " vectores de prueba editados... " Estos vectores de prueba demostraran el uso de la macro. test_vectors ( escore -> [BCD2,BCD1]) limpia(binario); @repeat 49 { binario -> [binario/10,binario%10]; inc(binario);} END Figura 1 Listado fuente del convertidor de binario de seis bits a dos dígitos BCD. Asignación de Pines La figura 2 ilustra como el software ispLEVER starter de Lattice distribuye las terminales Prof. S. Saucedo 3 ICE/2007 Figura 2 Asignación de patitas. Simulación de los Vectores La figura 3 exhibe el trazo en el tiempo de la simulación del JEDEC. Figura 3 Formas de onda de la simulación (Fragmento). Prof. S. Saucedo 4 ICE/2007