Está en la página 1de 8

Informe de Desarrollo 3 - Electrónica 2

2022-1
Dr.-Ing. Miguel Parada Contzen

Condiciones de Entrega
• Fecha final de entrega: 02/09/2022, a las 18:00:00 23:59:59hrs.
• Informes atrasados se recibirán pero descontando
6
D=
1 + e−2(t−60)/ε
puntos (de la escala de 1,0 a 7,0) por cada minuto t ∈ N de atraso, con ε = 20.
• El documento puede reenviarse cuantas veces se desee antes de la fecha final de
entrega. El último trabajo enviado se considerará como válido.
• El trabajo puede realizarse en grupos de hasta tres integrantes.
• Preguntas sin responder serán evaluadas con cero puntos.
• Informes deben ser entregados en formato digital como un único archivo .pdf y
enviados por correo electrónico institucional del profesor (mparada@ubiobio.cl).
• Cualquier formato digital distinto al pdf como .doc, .docx, .txt, .tex, .ps, .rar,
.zip, etc, será ignorado y el informe marcado como no recibido.
• El archivo debe ser nombrado según el formato

I3_ELN2_Apellido1_Apellido2_Apellido3.pdf

Archivos con otros nombres serán ignorados.


• No se aceptarán trabajos manuscritos, ni fotografiados, ni escaneados.
• Se descontarán puntos en casos que el informe, el texto, las figuras, o cualquier
otro componente sea ilegible, inentendible, borroso, excesivamente pixeleado,
etc.
• Copias y otros actos deshonestos similares se castigan con nota mínima de acuerdo
a lo declarado en los apuntes de la asignatura.
• En todas las preguntas, la justificación vale la mitad del puntaje.
• Si no se entrega el informe, el estudiante no cumple requisitos para aprobar la
asignatura.

MPC 2022-1 1 Electrónica 2


• Cada respuesta no puede exceder las 300 palabras.

• Se aceptará el uso de esquemas o croquis de ingeniería si el estudiante lo es-


tima pertinente. Puede utilizar todos los recursos que desee para responder las
preguntas. Sin embargo lo anterior, no se aceptarán párrafos o copias textuales
o levemente modificadas de alguna fuente. Las respuestas deben ser "en sus
propias palabras".

• Puede utilizar Matlab, SciLab, Octave, Mathcad, python, o cualquier otro soft-
ware de simulación numérica que tenga a su disposición.
• De existir códigos, estos deben incluirse como anexos o en el cuerpo del trabajo
según corresponda. Se podrán descontar puntos en caso contrario.

1 Problema 1: Micro-procesador uniciclo (2,0 puntos)


Para reducir el período de reloj del procesador uniciclo, se propone eliminar de la
dirección efectiva utilizada por las instrucciones lw la constante de desplazamiento
de 16 bits. Así, la dirección de memoria de datos utilizada por estas instrucciones
queda especificada únicamente por el contenido del registro rs. Explique los cambios
necesarios en la sección de datos y control para soportar esta modificación.
Adicionalmente, se desea agregar una instrucción para control de lazos iterativos
al procesador (que llamaremos loop). Esta instrucción decrementa el valor de un reg-
istro y salta si el valor después del decremento no es cero. El formato de la instrucción
es: loop $r, offset donde offset es una constante de 16 bits. Esto es:
loop: $r ←$r - 1
if $r != 0
PC←PC + 4 + offset
else
PC←PC + 4
La instrucción utiliza el formato tipo-I visto en clases, donde el registro $r corresponde
al campo rs de la instrucción y offset a la constante inmediata de 16 bits. Explique
los cambios necesarios en la sección de datos y control para soportar esta modificación.
Sugerencia: asuma que la ALU tiene una función dec que decrementa en uno el
valor de su entrada superior (busA) e ignora la entrada inferior. Además, cualquier op-
eración en la ALU requiere un tiempo de 250[ps]. De ser necesario, utilice el diagrama
al final de este documento para realizar ambas modificaciones.
R: Para modificar la instrucción de lw basta con llevar directamente el contenido
del registro apuntado por rs a la dirección de memoria, sin que pase por la ALU. De
esta manera, se evita el tiempo de retardo necesario para la estabilización de la ALU.
Para esto, basta con incluir un MUX a la salida de la ALU que sirva para decidir si la
señal que se transfiere hacia el puerto Adr de la memoria corresponde al contenido del
bus A ó a la salida de la ALU. Esto se muestra en el diagrama al final del documento.
Debido a la función dec de la ALU, no es necesario agregar ninguna unidad ar-
itmética adicional para implementar la instrucción loop. Ésta indica a la ALU que

MPC 2022-1 2 Electrónica 2


realice una operación de decremento y, si el contenido del registro después del decre-
mento es nulo, entonces se activará la señal Zero. Conectar directamente esta última
señal a la unidad de fetch (como en el ejemplo de clases), tendría el efecto contrario
al deseado, pues activaría un salto en el registro PC cuando el decremento se anula.
Por ello se considera una señal de control IsLoop que es alta cuando la instrucción
en ejecución es el nuevo bucle. El comportamiento deseado se detalla en la siguiente
tabla:
IsLoop Zero Z
0 0 0
0 1 1
1 0 1
1 1 0

Esto corresponde a un XOR entre ambas señales como puede verse en el diagrama al
final del documento. Además se requiere guardar el valor del decremento en el registro
apuntado por rs. Por lo tanto extenderemos el MUX asociado a la entrada RW de los
registros modificando también su señal de control RegDst.

MPC 2022-1 3 Electrónica 2


2 Problema 2: PIC (2,0 puntos)
Muestre el diagrama de flujo para implementar en un PIC16F84A una secuencia de
encendido de ocho LEDs. Si la señal de control Secuencia está en baja, los ocho
LEDs deben estar apagados. Si por el contrario, la señal Secuencia está en alta,
debe darse paso a una secuencia en la cual un único LED encendido vaya avanzando
circularmente en la dirección dada por una segunda señal de control Sentido. Si
ésta está en alta, entonces el LED encendido debe ir avanzando hacia la derecha, de
tal forma que se repita la secuencia LED0 → LED1 → LED2 → LED3 → LED4 →
LED5 → LED6 → LED7 → LED0 . . . . Si a señal Sentido está en baja, el LED
encendido debe avanzar hacia a la izquierda. Utilice una subrutina de retardo para
manipular la velocidad de la secuencia. (2,0 puntos)
R: Basado en el ejemplo mostrado en

Anónimo. Manual Teórico Práctico del microcontrolador PIC16F84A. In-


stituto Tecnológico de Orizaba, online, Sec. 5.3,

la implementación de lo requerido puede verse en el diagrama de flujo más ade-


lante. Existen múltiples formas de hacer lo requerido, pero el ejemplo mostrado utiliza
un registro auxiliar (AUX) para guardar la palabra que se quiere mostrar en los LEDs.
Después de configurar las variables y constantes necesarias, el programa pregunta si
la señal Secuencia (entrada A0 del PIC ) está en alta. De no ser el caso, entonces
el PIC escribe 0x00 (cero hexadecimal) en el puerto de salida para apagar todos los
LEDs conectados a él. Esto supone que los LEDs se encieden cuando la señal de salida
está en alta. El programa entonces cae en un bucle volviendo a preguntar sobre la señal
Secuencia.
Si esta señal está en alta, entonces el PIC escribe en el puerto de salida la palabra
guardada en AUX. Luego pregunta si la secuencia debe rotarse a la izquierda o a la
derecha (entrada A1 del PIC), actuando en consecuencia. Se utiliza después una rutina
de retardo para permitir que la configuración en los LEDs se pueda ver durante un
tiempo razonable. Posteriormente, el programa entra en un ciclo volviendo a preguntar
cómo debe proseguir.

MPC 2022-1 4 Electrónica 2


INICIO Subrutina Retardo

Configurar: Reg 1=Valor 1


puerto A = entradas

Reg 2=Valor 2
Configurar:
puerto B = salidas

Reg 3=Valor 3

AUX=0x01

Reg 3=Reg 3 - 1

A0 = 1?
Reg 3 = 0?

Puerto B=AUX Puerto B=0x00


Reg 2=Reg 2 - 1

A1 = 1?

Reg 2 = 0?

AUX shift right AUX shift left

Reg 1=Reg 1 - 1

Subrutina retardo

Reg 1 = 0?

Fin Subrutina

MPC 2022-1 5 Electrónica 2


3 Problema 3: Arduino (2,0 puntos)
Escriba un programa Arduino para implementar una secuencia de encendido de ocho
LEDs. Si la señal de control Secuencia está en baja, los ocho LEDs deben estar
apagados. Si por el contrario, la señal Secuencia está en alta, debe darse paso a
una secuencia en la cual un único LED encendido vaya avanzando circularmente en
la dirección dada por una segunda señal de control Sentido. Si ésta está en alta,
entonces el LED encendido debe ir avanzando hacia la derecha, de tal forma que se
repita la secuencia LED0 → LED1 → LED2 → LED3 → LED4 → LED5 → LED6 →
LED7 → LED0 . . . . Si a señal Sentido está en baja, el LED encendido debe avanzar
hacia a la izquierda. (2,0 puntos)
R: Siguiendo el diagrama de flujo de la pregunta anterior, es posible hacer un pro-
grama Arduino sencillo para hacer lo requerido. Un ejemplo de implementación se
muestra más abajo.

1 // pines de entrada
2 int portSecuencia = 0;
3 int portSentido = 1;
4 // pines de salida directo a LEDs
5 int b0 = 2;
6 int b1 = 3;
7 int b2 = 4;
8 int b3 = 5;
9 int b4 = 6;
10 int b5 = 7;
11 int b6 = 8;
12 int b7 = 9;
13 // Constantes y auxiliares
14 byte AUX=0x00;
15
16 void setup() {
17 //definir pines de entrada
18 pinMode(portSecuencia,INPUT);
19 pinMode(portSentido,INPUT);
20
21 //definir pines de salida
22 pinMode(b0,OUTPUT);
23 pinMode(b1,OUTPUT);
24 pinMode(b2,OUTPUT);
25 pinMode(b3,OUTPUT);
26 pinMode(b4,OUTPUT);
27 pinMode(b5,OUTPUT);
28 pinMode(b6,OUTPUT);
29 pinMode(b7,OUTPUT);
30

MPC 2022-1 6 Electrónica 2


31 //valor de constante aux
32 AUX = 0x01; //AUX = 0b00000001
33 }
34
35 void loop() {
36 //leer secuencia y actuar
37 if(digitalRead(portSecuencia)){
38 // si muestra secuencia
39 // escribir salida bit a bit
40 digitalWrite(b0, bitRead(AUX,0));
41 digitalWrite(b1, bitRead(AUX,1));
42 digitalWrite(b2, bitRead(AUX,2));
43 digitalWrite(b3, bitRead(AUX,3));
44 digitalWrite(b4, bitRead(AUX,4));
45 digitalWrite(b5, bitRead(AUX,5));
46 digitalWrite(b6, bitRead(AUX,6));
47 digitalWrite(b7, bitRead(AUX,7));
48
49 //leer sentido
50 if(digitalRead(portSentido)){
51 //shift a la derecha
52 AUX = AUX>>1;
53 }else{
54 //shift a la izquierda
55 AUX = AUX<<1;
56 }
57
58 delay(500);//pausa de medio segundo
59 }else
60 // si NO muestra secuencia
61 // escribir salida bit a bit
62 digitalWrite(b0, LOW);
63 digitalWrite(b1, LOW);
64 digitalWrite(b2, LOW);
65 digitalWrite(b3, LOW);
66 digitalWrite(b4, LOW);
67 digitalWrite(b5, LOW);
68 digitalWrite(b6, LOW);
69 digitalWrite(b7, LOW);
70 }
71 }

MPC 2022-1 7 Electrónica 2


instruction word <31:00>
nPCsel

<25:21>

<20:16>

<15:11>

<15:00>
Instruction
Fetch Unit
CLK

Z rt rs rd imm16

rt rd rs
IsLoop
RegDst MUX
rs rt
RegWr
ALUctr Zero
RW RA RB ByPassALU
Bus W Bus A

32 32-bits
ALU

MUX
Registers
Bus B

MUX
CLK
MUX
SignExt

MemWr
MemToReg
ALUSrc
imm16
WrEn Adr

ExtOp Data In
Data memory

CLK
Adder

instruction
Instruction
MUX

word <31:0>
PC

4 Memory
Adder
SignExt

imm16
CLK

Z nPCsel

MPC 2022-1 8 Electrónica 2

También podría gustarte