Está en la página 1de 5

Codificador de Prioridad que Detecta segunda Prioridad

El proyecto que ahora se propone es el diseño de un codificador de prioridad con la capacidad de codificar,
además de la prioridad más alta, la siguiente prioridad que ocurre. Las ocho líneas a las que se les asigna
prioridad son Y7, Y6, …, Y0, donde Y7 tiene la máxima prioridad, seguida de Y6, etc., hasta Y0, que tiene
la prioridad mínima. Esas ocho señales son activas altas, es decir, Y7 estará activa cuando se encuentre en el
nivel lógico 1 y así con las otras siete. Existe un entrada más, Gi, que habilita al codificador cuando está en
el nivel bajo. Se debe usar la GAL22V10 y ABEL-HDL.

Las salidas son ocho, todas activas en alto, subdivididas en dos grupo: el primer grupo son las salidas V2, V1
y V0 a las que designamos con el nombre V y que codifican el número que identifica a la entrada en 1 lógico
(de 0 a 7) que tiene la prioridad mayor. La otra señal de este grupo es G1 que cuando está en 1 indica que si
hay una entrada activa por lo menos.

El segundo grupo estará formado por las salidas W2, W1 y W0 al que designamos con el nombre W y que
codifican a la línea activa con el segundo valor de prioridad. La otra señal del segundo grupo es G0 que
cuando está en alto indica que se detectó una segunda línea activa. Si el permisivo de entrada Gi está en alto
las ocho salidas deben tomar el nivel bajo.

La figura exhibe el diagrama a bloques que permite conexión en cascada.

Figura 1 Diagrama a bloques del codificador de prioridad doble.

Fragmento de la tabla de verdad de especificación del diseño. X = “no importa”


Gi Y7.Y6 Y5 Y4..Y0 V G1 W G0
1 X X X X X X X X 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 1 X X X X X 7 1 5 1
0 1 0 0 0 1 X X X 7 1 3 1
0 0 0 1 0 0 0 0 0 5 1 0 0
0 0 1 0 0 0 1 X X 6 1 2 1
0 0 0 0 0 0 1 0 1 2 1 0 1
Enseguida se da un primer intento con el lenguaje ABEL, pero se simularon 22 vectores, ninguno
de ellos con error. Revisar si los vectores están mal especificados y de no ser así corregir la tabla de
verdad para que pasen correctamente.

Prof. S. Saucedo Grupo 5CM7 ICE/2009


MODULE prio2niv
MODULE prio2niv

TITLE 'Detecta segunda prioridad'

X = .x.;
" entradas

Gi,Y7..Y0 pin 9,8..1; " Y7 tiene maxima prioridad seguido de Y6..


Y = [Y7..Y0];
" salidas
V2..V0,G1,W2..W0,G0 pin 23..21,19,16..14,13 istype 'com';
V = [V2..V0]; " codifica prioridad maxima
W = [W2..W0]; " codifica sgte prioridad

truth_table
([Gi,Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0]->[V,G1,W,G0])
[1, X, X, X, X, X, X, X, X]->[0,0,0,0]; " 512
[0, 1, 1, X, X, X, X, X, X]->[7,1,6,1]; " 64
[0, 1, 0, 1, X, X, X, X, X]->[7,1,5,1]; " 32
[0, 1, 0, 0, 1, X, X, X, X]->[7,1,4,1]; " 16
[0, 1, 0, 0, 0, 1, X, X, X]->[7,1,3,1]; " 8
[0, 1, 0, 0, 0, 0, 1, X, X]->[7,1,2,1]; " 4
[0, 1, 0, 0, 0, 0, 0, 1, X]->[7,1,1,1]; " 2
[0, 1, 0, 0, 0, 0, 0, 0, 1]->[7,1,0,1]; " 1
[0, 0, 1, 1, X, X, X, X, X]->[6,1,5,1]; " 32
[0, 0, 1, 0, 1, X, X, X, X]->[6,1,4,1]; " 16
[0, 0, 1, 0, 0, 1, X, X, X]->[6,1,3,1]; " 8
[0, 0, 1, 0, 0, 0, 1, X, X]->[6,1,2,1]; " 4
[0, 0, 1, 0, 0, 0, 0, 1, X]->[6,1,1,1]; " 2
[0, 0, 1, 0, 0, 0, 0, 0, 1]->[6,1,0,1]; " 1
[0, 0, 0, 1, 1, X, X, X, X]->[5,1,4,1]; " 16
[0, 0, 0, 1, 0, 1, X, X, X]->[5,1,3,1]; " 8
[0, 0, 0, 1, 0, 0, 1, X, X]->[5,1,2,1]; " 4
[0, 0, 0, 1, 0, 0, 0, 1, X]->[5,1,1,1]; " 2
[0, 0, 0, 1, 0, 0, 0, 0, 1]->[5,1,0,1]; " 1
[0, 0, 0, 0, 1, 1, X, X, X]->[4,1,3,1]; " 8
[0, 0, 0, 0, 1, 0, 1, X, X]->[4,1,2,1]; " 4
[0, 0, 0, 0, 1, 0, 0, 1, X]->[4,1,1,1]; " 2
[0, 0, 0, 0, 1, 0, 0, 0, 1]->[4,1,0,1]; " 1
[0, 0, 0, 0, 0, 1, 1, X, X]->[3,1,2,1]; " 4
[0, 0, 0, 0, 0, 1, 0, 1, X]->[3,1,1,1]; " 2
[0, 0, 0, 0, 0, 1, 0, 0, 1]->[3,1,0,1]; " 1
[0, 0, 0, 0, 0, 0, 1, 1, X]->[2,1,1,1]; " 1
[0, 0, 0, 0, 0, 0, 1, 0, 1]->[2,1,0,1]; " 1
[0, 0, 0, 0, 0, 0, 0, 1, 1]->[1,1,0,1]; " 1
[0, 1, 0, 0, 0, 0, 0, 0, 0]->[7,1,0,0]; " 1
[0, 0, 1, 0, 0, 0, 0, 0, 0]->[6,1,0,0]; " 1
[0, 0, 0, 1, 0, 0, 0, 0, 0]->[5,1,0,0]; " 1
[0, 0, 0, 0, 1, 0, 0, 0, 0]->[4,1,0,0]; " 1
[0, 0, 0, 0, 0, 1, 0, 0, 0]->[3,1,0,0]; " 1
[0, 0, 0, 0, 0, 0, 1, 0, 0]->[2,1,0,0]; " 1
[0, 0, 0, 0, 0, 0, 0, 1, 0]->[1,1,0,0]; " 1
[0, 0, 0, 0, 0, 0, 0, 0, 1]->[0,1,0,0]; " 1
[0, 0, 0, 0, 0, 0, 0, 0, 0]->[0,0,0,0]; " 1
END

Prof. S. Saucedo Grupo 5CM7 ICE/2009


TEST_VECTORS
([Gi,Y ] -> [V,G1,W,G0])
[0, 0 ] -> [0, 0,0, 0]; " ninguna señal activa
[0,^h80] -> [7, 1,0, 0]; " solo Y7 activa
[0,^h84] -> [7, 1,2, 1]; " Y7 y Y2 activas
[0,^h60] -> [6, 1,5, 1]; " Y6 y Y5 activas
[0,^h88] -> [7, 1,3, 1];
[0,^h24] -> [5, 1,2, 1];
[0,^h44] -> [6, 1,2, 1];
[0,^h25] -> [5, 1,2, 1];
[0,^h18] -> [4, 1,3, 1];
[0,^hC4] -> [7, 1,6, 1];
[0,^hB3] -> [7, 1,5, 1];
[0,^h5E] -> [6, 1,4, 1];
[0,^h21] -> [5, 1,0, 1];
[0,^h0C] -> [3, 1,2, 1];
[0,^h0B] -> [3, 1,1, 1];
[0,^hA3] -> [7, 1,5, 1];
[0,^h2D] -> [5, 1,3, 1];
[0,^h06] -> [2, 1,1, 1];
[0,^h10] -> [4, 1,0, 0];
[0,^h82] -> [7, 1,1, 1];
[0,^h81] -> [7, 1,0, 1];
[0,^h41] -> [6, 1,0, 1];

Prof. S. Saucedo Grupo 5CM7 ICE/2009


Existe la alternativa de usar la directiva equations en lugar de la tabla de verdad dada:
equations
when !Gi then
{
when Y7==1 then V = 7;
else when Y6==1 then V = 6;
else when Y5==1 then V = 5;
else when Y4==1 then V = 4;
else when Y3 == 1 then V = 3;
else when Y2 == 1 then V = 2;
else when Y1 == 1 then V = 1;
else when Y0 == 1 then V = 0;
G1 = ([Y0..Y7] != 0);

when (Y6 == 1) & (V != 6) then W = 6;


else when (Y5 == 1) & (V != 5) then W = 5;
else when (Y4 == 1) & (V != 4) then W = 4;
else when (Y3 == 1) & (V != 3) then W = 3;
else when (Y2 == 1) & (V != 2) then W = 2;
else when (Y1 == 1) & (V != 1) then W = 1;
else when (Y0 == 1) & (V != 0) then W = 0;
G0 = (Y6 == 1) & (V != 6) # (Y6 == 5) & (V != 5)
# (Y4 == 1) & (V != 4) # (Y3 == 1) & (V != 3)
# (Y2 == 1) & (V != 2) # (Y1 == 1) & (V != 1)
# (Y0 == 1) & (V != 0);
}
else { V = 0; G1 = 0; W = 0; G0 = 0;}

En la práctica 5 se deben conectar dos GALs en cascada para detectar prioridad en doce líneas,
según se ilustra en la figura siguiente.

Grabar JED en ambas GALs

Prof. S. Saucedo Grupo 5CM7 ICE/2009


Simulación de vectores de prueba:

Prof. S. Saucedo Grupo 5CM7 ICE/2009

También podría gustarte