Sunteți pe pagina 1din 12

Prctica #4.

- Emulacin de un Microprocesador con Microcontrolador ARM o Arduino en


ambiente MBED
Prof. M. en C. Roberto Galicia Galicia

Resumen Se presenta el procedimiento para el Por otra parte, trabajar con un microcontrolador,
diseo de un emulador de un microprocesador no permitira manejar los conceptos de
basado en microcontroladores con procesador ARM o direccionamiento de memoria y puertos, debido
arduino, que permitir contar con una herramienta a que ya viene interconectada la memoria y los
didctica para el estudio y comprensin de los
puertos al microprocesador dentro del circuito
conceptos de la arquitectura de una computadora,
integrado, por tal motivo, se propone una
tales como ciclos de instruccin, los ciclos de
mquina, registros de propsito especial, as como los solucin intermedia, mediante una tarjeta de
registros de propsito general, que se muestran en desarrollo con Microcontrolador ARM actual,
una terminal con el fin de visualizar cmo se van para emular los canales de una
modificando. El diseo propone una tarjeta compatible microcomputadora(terminales) as como el
con arduino, que permite tener la interfaz necesaria funcionamiento del microprocesador, facilitando
para conectar a los puertos de un microcontrolador, la programacin con la plataforma MBED, que
que hace las funciones de los canales de direcciones, permite la edicin y compilacin en la nube,
datos y control. La programacin se realiza en
utilizando las clases y mtodos disponibles p. ej.
lenguaje C y se utiliza un editor y compilador en la
DigitalOut, BusIn, BusOut, Wait, etc. Asimismo,
nube, mediante la plataforma MBED.ORG.
sera muy fcil ejecutar el programa de forma
ms lenta o paso a paso, para poder visualizar
las seales de los canales y comprender de una
1 Introduccin forma directa, mediante el monitoreo en LCD,
Si se considera importante contar con los terminal y LEDs de la misma tarjeta de
principios y conceptos de una arquitectura de desarrollo o con circuitera adicional.
una computadora en base a un
Microprocesador, la enseanza debera
La decodificacin de circuitos de memoria o
realizarse con un microprocesador ARM actual,
puertos, se puede realizar con circuitos
sin embargo, el costo puede ser un
adicionales como el clsico 74HC138, con una
inconveniente y realizar un sistema mnimo
GAL, o realizar la decodificacin por programa y
requerira de tiempo o disear una tarjeta para
slo proporcionar las seales de seleccin de
armar este sistema.
circuito (CS0, CS1, etc.), como se hace en otros
dispositivos. Ver [2].
El diagrama de flujo UML general propuesto, Se proponen 2 tarjetas tipo shield para Arduino o
es el siguiente: compatibles: una tarjeta de un banco de 8
memorias y una tarjeta de un banco de 8
puertos.
+5V +3.3V
VCC VCC
U1 U2
18 24 1
CE/PROG VCC OC
20 21 11
OE VPP C R2 BAR1
8 9 2 19 1 16 1 24
A0 Q0 1D 1Q
7 10 3 18 2 15 2 23
A1 Q1 2D 2Q
+3.3V 6 11 4 17 3 14 3 22
A2 Q2 3D 3Q
M1 VCC 5 13 5 16 4 13 4 21
A3 Q3 4D 4Q
16 3 4 14 6 15 5 12 5 20
PTA0 VDD A4 Q4 5D 5Q
15 12 3 15 7 14 6 11 6 19
PTA1 PTE0 A5 Q5 6D 6Q
14 11 2 16 8 13 7 10 7 18
PTA2 PTE1 A6 Q6 7D 7Q
13 10 1 17 9 12 8 9 8 17
PTA3 PTE2 A7 Q7 8D 8Q
2 9 23 9 16
PTA4 PTE3 A8
1 8 22 74HC573 Res Pack3 10 15
PTA5 PTE4 A9
2 7 19 12 330 11 14
PTA6 PTE5 A10 GND
1 6 12 13
PTA7 PTE6 M2716-1F1
ARM M0+ 5
PTE7 LED_BAR12_R
12
PTB0
11 12
PTB1 PTD0
10 11
PTB2 PTD1
9 10
PTB3 PTD2
8 9
PTB4 PTD3
7 8
PTB5 PTD4
6 7
PTB6 PTD5
5 6
PTB7 PTD6
4 5
VSS PTD7
PTC0
PTC1
PTC2
PTC3
PTC4
PTC5
PTC6
PTC7
8

9
8
7
6
5
11
10

16
15
14
13
12
11
10
9

ARM_M0+
R2
Res Pack3
1K
1
2
3
4
5
6
7
8
24
23
22
21
20
19
18
17
16
15
14
13

BAR2
LED_BAR12_R
1
2
3
4
5
6
7
8
9
10
11
12

El diagrama elctrico propuesto para las memorias, es el anterior.

Cuando las memorias de un banco son del mismo tamao, la decodificacin es sencilla, sin embargo, se
pueden combinar tamaos, de tal forma que mediante un circuito combinatorio se puedan seleccionar o
por medio de software. Ver [3]-[4].
BUS DATOS

Se pueden eliminar las compuertas y realizar la decodificacin por software (seleccin)


3. Diseo de un Conjunto de Instrucciones
Las instrucciones RISC son de tamao fijo, por ejemplo de 32 bits, utlizan del orden de 32 registros de
propsito general y funcionan con triadas en sus operandos, para este diseo se utlizarn 4 instrucciones
de 8 bits, de los cuales 2 bits son del tipo de instruccin(4). En algunos caso tendremos operandos de 2
bits(4 registros) y en otro caso 4 bits para datos inmediatos
Las instrucciones que se proponen de tipo RISC, son muy sencillas:
BIT 0

BIT 1 ST LDR #
01 00
SUB ADD
11 10
La instruccin de Carga inmediata (LDR #) se define por los dos bits menos significativos, los siguientes
2 bits permiten seleccionar el registro de destino (R0-R3) y los 4 bits ms significativos corresponden al
dato inmediato.
Para la instruccin de suma (ADD), los dos bits menos significativos de acuerdo a la tabla de bit0 y bit1
nos indican que es una suma, los dos bits siguientes permiten seleccionar el registro fuente1 (R0-R3), los
2 bits siguientes corresponden al segundo registro fuente2 (R0-R3) y los 2 bits ms significativos
corresponden al registro destino (R0-R3). Ver [5].
Un ejemplo de programa a comprobar sera:
; Opcodes:
Datoi reg ldr
LDR R0,#6 ; 0110 00 00 0x60
LDR R1,#7 ; 0111 01 00 0x74
;R2 R1 R0 ADD
ADD R2,R1,R0 ; 10 01 00 10 0x92
END

El programa fuente en lenguaje C, es el siguiente:


#include "mbed.h"
BusOut adress(D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15);
BusIn data(PTC7,PTC0,PTC3,PTC4,PTC5,PTC6,PTC10,PTC11);
DigitalOut OC(PTC13);
Serial terminal (USBTX, USBRX); // tx, rx (UART0)
char i=0;
int PC=0;
int IR[8]={0x60,0x74,0x92,0x00,0x00,0x00,0x00,0x00};
char regis[4]={0,0,0,0};
class process {
public:
void deco(void)
{ char inst;
char regs1,regs2,regd;
char datoi;
inst=IR[i]&0x03;
switch (inst)
{ case 0: //LDR
{ regd=IR[i]&0X0C;
regd=regd>>2;
datoi=IR[i]&0XF0;
datoi=datoi>>4;
regis[regd]=datoi;
break; }
case 1:
{break;}
case 2: //ADD
{
regs1=IR[i]&0X0C;
regs1= regs1>>2;
regs2=IR[i]&0X30;
regs2= regs2>>4;
regd=IR[i]&0XC0;
regd= regd>>6;
regis[regd]= regis[regs1] + regis[regs2];
break; }
case 3:
{break;} }
terminal.printf("\n\r inst=%d regd=%d datoi=%d %d\n\r",inst,regd,datoi,regis[regd]); }};
int main(){
OC=0; //Seal de lectura habilitada(Memorias ROM)
terminal.printf(" Registros \n\r");
terminal.printf("PC IR RO R1 R2 R3 \n\r");
while(1) { data= PC;
terminal.printf("%04X ",PC);
terminal.printf("%02X %02X %02X %02X %02X\r",IR[i],
regis[0],regis[1],regis[2],regis[3]);
adress = PC++;
process myprocess;
myprocess.deco();
i++; wait(3);
} }
Decodificacin y Ejecucin (Diagramas de flujo)
Pipeline [6]:
Monitoreo en barras de LEDs, LCD de segmentos y una terminal virtual
Interfaz grfica para monitorear memoria y registros.
Imgenes de MBED y ejecutando programa
Se puede tomar el lenguaje ensamblador de algn microprocesador para verificar los ciclos de mquina,
los ciclos instruccin, el ciclo de bsqueda, la decodificacin, el pipeline, as como la ejecucin, sin
embargo, el potencial del emulador se puede aprovechar para disear un lenguaje propio con
instrucciones RISC o CISC, para comprender mejor los concepto y sus diferencias.
Conclusiones

1.-El uso de esta herramienta facilita la explicacin de conceptos y la realizacin de prcticas con el uso
de los canales de una computadora, que son emulados en un microcontrolador.

2.-Cuando el alumno toma el control de la parte interna de un procesador, permite que no tan slo pueda
introducir los cdigos que el microprocesador deba interpretar, sino que l mismo pueda realizar las
funciones de decodificacin y ejecucin, as como disear su propio procesador e instrucciones, lo que le
proporciona una formacin de arquitecto de computadoras.

3. El rendimiento debe medirse en trminos del promedio de ciclos ARM de reloj por operacin emulada y
velocidad sobre el emulador original.

Referencias

[1] http://emulator101.com/
[2] http://wiki.qemu.org/Main_Page
[3] http://www.nand2tetris.org/tutorials/PDF/CPU Emulator Tutorial.pdf

[4] http://en.wikipedia.org/wiki/Emulator
[5] Antulio Morgado et al Propuestas para Cursos de Circuitos Digitales y de Microcontroladores en ICE-ESIMEz,
(EDU-15) RVP-AI/2013 del IEEE seccin Mex.
[6] http://fms.komkon.org/EMUL8/HOWTO.html
[7] Llus Ribas-Xirgo,"Yet Another Simple Processor (YASP) for Introductory Courses on Computer Architecture",
Member IEEE; IEEE TRANSACTIONS ON INDUSTRIAL ELECTRONICS, VOL. 57, NO. 10, OCTOBER 2010.
[8] Michel Kinsy et al "Time-Predictable Computer Architecture for Cyber-Physical Systems: Digital Emulation of
Power Electronics Systems" 2011 32nd IEEE Real-Time Systems Symposium.
[9] FANG Ming, et al "High Performance X86 Emulation IO Architecture on Heterogeneous Processor Platform", 2010
International Conference on Computational and Information Sciences, IEEE.
3. Diseo de un Conjunto de Instrucciones
Las instrucciones RISC son de tamao fijo, por ejemplo de 32 bits, utlizan del orden de 32 registros de
propsito general y funcionan con triadas en sus operandos, para este diseo se utlizarn 4 instrucciones
de 8 bits, de los cuales 2 bits son del tipo de instruccin(2 2=4 instrucciones). En algunos caso tendremos
operandos de 2 bits(22=4 registros) y en otro caso 4 bits para datos inmediatos(2 4=16 valores)
Las instrucciones que se proponen de tipo RISC, son muy sencillas:
Criterios de diseo:

RISC/CISC

Longitud de palabra del procesador

Nmero de registros

Tamao de los registros

Nmero de instrucciones

Tamao de las instrucciones

Matriz de instrucciones
RISC
Longitud de palabra del procesador 32 4

Nmero de registros 32 4

Tamao de los registros 32 32

Nmero de instrucciones 50 4

Tamao de las instrucciones 32 8

Matriz de instrucciones
U1
18
CE/PROG VCC
20