Académique Documents
Professionnel Documents
Culture Documents
Para facilitar las explicaciones, numeremos como sigue las instrucciones del pseudocdigo:
1: a <= 25;
2: For i in 0 to 4 loop
3:
For j in 0 to 4 loop
4:
If (i=j) then a <= a + 1;
5:
elsif (j = 4) then a <= a + 2;
6:
end if;
7:
end if;
8:
end loop;
9: end loop;
10: a <= a + 10;
Inicialmente a toma el valor 25 y los ndices i y j toman el valor 0:
a
25
i
0
j
0
Comentarios
i
0
0
0
j
0
0
1
Comentarios
i
0
0
0
j
0
0
1
26
Comentarios
Esta situacin se repite para j=3, pero cuando j=4 la condicin del elsif de la lnea 5 se
cumple y a se incrementa en 2:
a
25
26
26
i
0
0
0
j
0
0
1
26
Comentarios
26
28
0
0
3
4
En este punto se vuelve a ejecutar el loop del for de las lneas 2 a 9, incrementando i en 1;
y se vuelve inicializa de nuevo el forde la lnea 4 (j=0):
a
25
26
26
26
26
28
28
i
0
0
0
0
0
0
1
j
0
0
1
2
3
4
0
Comentarios
No se cumple ninguna de las condiciones de los ifs, de modo que a no cambia de valor y j
se incrementa en 1:
a
25
26
26
26
26
28
28
i
0
0
0
0
0
0
1
j
0
0
1
2
3
4
0
Comentarios
28
i
0
0
0
0
0
0
1
1
1
1
j
0
0
1
2
3
4
0
1
2
4
Comentarios
i
0
0
0
0
0
0
1
1
1
1
j
0
0
1
2
3
4
0
1
2
4
Comentarios
i
0
j
0
31
31
31
32
32
34
34
34
34
35
37
37
37
37
37
1
2
2
2
2
2
3
3
3
3
3
4
4
4
4
4
0
1
2
3
4
0
1
2
3
4
0
1
2
3
38
Comentarios
Finalmente se acaban ambos loops y a se incrementa en 10 (lnea 10), con lo que el valor
final de a que se pide es 48:
a
25
i
0
j
0
38
48
Comentarios
[Respuesta: 48]
EJERCICIO 2
Dados dos nmeros X e Y = y3103 + y2102 + y110 + y0, el producto P = XY se puede expresar
como P = (((y3X)10 + y2X)10 + y1X)10 + y0X, Cul o cules de los siguientes algoritmos
calcula/n P?
1)
P <=0;
for i in 0 to 3 loop
P <=(P*10) + (y(i)*X);
end loop;
2)
P <=0;
for i in 2 downto 0 loop
P <=(P*10) + (y(i)*X);
end loop;
3)
P <=0;
for i in 3 downto 0 loop
P <=(P*10) + (y(i)*X);
end loop;
4)
P <=y(3)*X;
for i in 2 downto 0 loop
P <=(P*10) + (y(i)*X);
end loop;
P
0
Comentarios
(P <= 0)
P
0
y3.X
Comentarios
(P <= 0)
Iteracin 1
P
0
y3.X
(y3.X).10 + y2.X
((y3.X).10 + y2.X).10 + y1.X
(((y3.X).10 + y2.X).10 + y1.X).10 + y0.X
Comentarios
(P <= 0)
Iteracin 1
Iteracin 2
Iteracin 3
Iteracin 4
Cada uno delos algoritmos puede analizarse de una manera similar. El algoritmo 1 realiza un
clculo parecido pero el valor de i va de 0 a 3, con lo que acaba generando la funcin
(((y0.X).10 + y1.X).10 + y2.X).10 + y3.X, mientras que el algoritmo 2 se olvida del trmino
y(3)*X, generando la funcin ((y2.X).10 + y1.X).10 + y0.X. Finalmente, el algoritmo 4 tambin es
correcto e incluso ms eficiente por cuanto comienza inicializando P al valor y3.X y requiere
ejecutar el for loop una vez menos que el algoritmo 3.
[Respuesta: 3 y 4]
EJERCICIO 3
Se desea disear un circuito que controle la apertura de una puerta de acceso de vehculos
cuando el conductor del mismo pulse un botn (REQ=1). El sistema a disear recibe 4 seales
de entrada:
a. REQ: Esta seal viene de un pulsador. REQ toma el valor 1 mientras el pulsador est
pulsado y 0 en caso contrario.
b. UPPER: Esta seal viene de un sensor colocado en la puerta y vale 1 cuando la puerta
est totalmente abierta (subida),
c. LOWER: Esta seal viene de un sensor colocado en la puerta y vale 1 cuando la puerta
est totalmente cerrada (bajada),
d. SENSORS: Esta seal viene de unos sensores colocados en el rea de puerta (ver
dibujo) y vale 0 cuando dicha rea est libre de vehculos.
Y genera dos seales de salidas que controlan el motor de la puerta:
a. ON/OFF: Vale 0 cuando el motor est apagado y 1 cuando est en marcha.
b. UP/DOWN: Indica la direccin de movimiento de la puerta.
Para abrir la puerta UP/DOWN=0 (y ON/OFF=1)
Para cerrar la puerta UP/DOWN=1 (y ON/OFF=1)
Escribe un algoritmo que realice la siguiente secuencia de operaciones:
1.
2.
3.
4.
5.
Veamos una posible solucin (la solucin no es nica): El algoritmo debe repetir continua e
indefinidamente los pasos 1 a 5, as que incluiremos dichas acciones dentro de un loop:
loop
(acciones 1 a 5)
end loop;
La accin 1 dice espera a que REQ=1. Esto lo podemos escribir de diversas maneras; una de
ellas es mediante la pseudo-instruccin wait until (condicin);. Otra manera sera dicindoles
no hagas nada hasta que mediante una instruccin while (condicin) loop noop;, donde
noop significa no-operacin, una forma comn de decir algortmicamente no hagas nada.
Fjate que la condicin sera distinta en cada caso: En el caso del wait la condicin sera
REQ=1 (espera hasta que haya una peticin de apertura de puerta), mientras que en el while
la condicin sera REQ=0 (no hagas nada mientras no hay peticin de apertura de puerta).
Nosotros utilizaremos la primera opcin:
loop
wait until REQ=1;
(acciones 2 a 5)
end loop;
Las acciones 2 y 3 abre la puerta completamente las describiremos diciendo que (i) abra la
puerta (ON/OFF=1 y UP/DOWN=0), (ii) espere a que el sensor UPPER detecte que la puerta
est totalmente abierta, y (iii) pare el motor cuando la puerta est totalmente abierta
(ON/OFF=0):
loop
wait until REQ=1;
ON/OFF <= 1 ; UP/DOWN <= 0 ;
wait until UPPER = 1;
ON/OFF <= 0;
(acciones 4 y 5)
end loop;
La accin 4, espera a que el rea de puerta est libre de vehculos y comienza a cerrar la
puerta los escribiremos como wait until SENSORS=0; y ON/OFF<=1, UP/DOWN<=1.
loop
wait until REQ=1;
ON/OFF <= 1; UP/DOWN <= 0;
wait until UPPER = 1;
ON/OFF <= 0;
wait until SENSORS = 0;
ON/OFF <= 1; UP/DOWN <= 1;
(accin 5)
end loop;
Finalmente la accin 5, espera a que la puerta est totalmente cerrada y vuelve al principio a
esperar una nueva seal de REQ la escribiremos diciendo que (i) espere a que la puerta est
totalmente cerrada wait until LOWER=1;, (ii) pare el motor de la puerta (ON/OFF=0) y (iii)
acabe el loop actual:
[Respuesta:]
loop
wait until REQ=1;
ON/OFF <= 1; UP/DOWN <= 0;
wait until UPPER = 1;
ON/OFF <= 0;
wait until SENSORS = 0;
ON/OFF <= 1; UP/DOWN <= 1;
wait until LOWER = 1;
ON/OFF <= 0;
end loop;
EJERCICIO 4
Escribe la tabla de entradas y salidas que define el funcionamiento del siguiente circuito:
Vdd1=V3 v.
VIN1
VIN2
VIN3
VOUT
VIN1
VIN2
VIN3
Gnd 0= V0 v.
Estudiemos qu pasa cuando alguna de las entradas VIN1, VIN2 o VIN3 est a 0 voltios:
1) Supongamos que inicialmente VOUT = 0v. Puesto que VIN1, VIN2 o VIN3 est a 0v., al menos
un transistor P se pone en conduccin, y al menos un transistor N se pone en corte. Se
dara una situacin como la mostrada en la siguiente figura, en la que se establece una
corriente I desde Vdd al nodo de salida VOUT a travs de todos aquellos transistores P que
estn en conduccin. Esta corriente acaba por subir la tensin de VOUT a un valor cercano
a la tensin de alimentacin (en este caso 3v), valor que se interpreta como un 1 lgico.
Elena Valderrama, Jean-Pierre Deschamps, Merc Rulln
2) Por otro lado, si inicialmente VOUT 3v, a pesar de estar algn transistor P en conduccin
el valor de la tensin de salida no se modificara puesto que la diferencia de tensin entre
Vdd y VOUT sera 0.
Tenemos pues el siguiente funcionamiento:
VIN1
0
0
0
0
1
1
1
VIN2
0
0
1
1
0
0
1
VIN3
0
1
0
1
0
1
0
VOUT
1
1
1
1
1
1
1
3) Cuando las tres entradas tienen el valor lgico 1, es decir, cuando las tensiones VIN1, VIN2 y
VIN3 tienen valores cercanos a Vdd, la situacin es la inversa: Los tres transistores P estn
en corte y los 3 transistores N estn en conduccin. Si VOUT est a 1 (VOUT 3v.) se
establece una corriente I que acaba por llevar VOUT a un valor cercano a Gnd (0 v.). De la
misma forma que en el caso anterior, si inicialmente VOUT 0v. no hay diferencia de
potencial entre VOUT y Gnd, y por tanto no se establece corriente alguna, conservando
VOUT su valor 0:
VIN1
1
VIN2
1
VIN3
1
VOUT
0
La tabla siguiente recoge los casos estudiados. Como puede verse, el circuito funciona como
una puerta NAND de 3 entradas.
[Respuesta:]
VIN1
0
0
0
0
1
1
1
1
VIN2
0
0
1
1
0
0
1
1
VIN3
0
1
0
1
0
1
0
1
VOUT
1
1
1
1
1
1
1
0