Anda di halaman 1dari 9

UCP-8E-v2.

2 (reviso 1)
Uma UCP educacional de 8-bits
Copyleft 2009/10 Joel Guilherme da Silva Filho.
concedida a permisso para copiar, distribuir e modificar este documento sob os termos da Licena
para Documentao Livre GNU, GNU Free Documentation License (Copyleft), Verso 1.3 ou
subsequente, publicada pela Free Software Foundation. Uma cpia desta licena acompanha este
documento na forma do arquivo texto denominado Copiando(FDL).txt.

a. Objetivos:
Especificar uma UCP (Unidade Central de Processamento) de 8-bits para fins educacionais,
de forma a permitir sua implementao de diversas formas e em diversos ambientes, como, por
exemplo, na forma de um simulador em software ou em um ambiente de hardware simulado
como o MMLogic1 ou o Logisim2, ou mesmo em hardware real. Uma vez tendo-se uma
implementao desta UCP, a mesma pode ser utilizada em um curso de Arquitetura de
Computadores, no somente como exemplo, mas como um exemplo vivo que poder ser
totalmente manuseado pelo aluno, inclusive com alteraes do projeto e acrscimo de novas
funcionalidades.

b. Motivaes:
Em nossa experincia lecionando a disciplina de graduao Arquitetura de Computadores,
temos feito uso de diversos simuladores ou monitores para UCPs reais e virtuais como
ferramentas auxiliares para o ensino da disciplina, tanto como ferramenta de demonstrao, em
aulas tericas, quanto como ferramenta de trabalho em aulas prticas. Infelizmente nenhuma das
ferramentas que tivemos at hoje nossa disposio renem, simultaneamente, as caractersticas
de descreverem uma arquitetura simples porm representativa de uma arquitetura clssica tpica
de um modelo de von Neuman, facilidade de uso, possibilidade de visualizao e acompanhamento de todas fases de execuo de uma instruo, e facilidade de programao utilizando uma
ferramenta de montagem similar aos assemblers para UCPs reais.
Em funo desta experincia, julgamos que seria conveniente definirmos uma nova UCP,
com recursos suficientes para exemplificar as caractersticas bsicas e o modo de operao de
um pequeno processador, e com possibilidades de ser tambm implementada com facilidade,
tanto em software (simulador), quanto em hardware (simulado ou real), contemplando aquelas
caractersticas mencionadas para uma ferramenta educacional. Alm disto, procuramos deixar
amplo espao para que o projeto possa ser ampliado ou modificado, particularmente na forma de
exerccios e projetos prticos inseridos em uma disciplina que cubra este assunto nas reas de
engenharia ou cincia da computao.
Assim que nasceu este projeto, denominado CPU-8E (CPU Educacional de 8 Bits), do qual
este documento o documento central, onde so apresentadas as especificaes da UCP a nvel
de arquitetura, assim como a definio da Unidade de Controle (UC) a nvel de microoperaes.
Este projeto uma evoluo de uma experincia anterior nossa, em que alunos de nossa
disciplina no curso de Engenharia do IESB (Instituto de Educao Superior de Braslia) tiveram
excelente experincia no desenvolvimento de um projeto semelhante a este, embora menos
ambicioso. Para possibilitar plenamente o uso da CPU-8E como ferramenta educacional, fazem
parte deste pacote, juntamente com estas especificaes, um simulador (CUP8E Simulator) e um
assembler (ASM8E), para permitir o manuseio prtico da CPU-8E.
1

MMLogic (MultiMedia Logic), programa freeware e opensource da Softronix para simulao de circuitos lgicos
digitais (http://www.softronix.com/logic.html).
2
Logisim, ferramenta educacional freeware para o projeto e simulao de circuitos lgicos digitais
(http://sourceforge.net/projects/circuit/).
Prof. Joel Guilherme

UCP8E-V2.2-r1 - 09/01/2014

c. Especificaes Bsicas da CPU-8E:


Esta a verso 2.2-r1 da CPU-8E, que contem a primeira alterao efetiva de suas
especificaes, ampliando seu conjunto de instrues de 20 para 35 Opcodes distintos, desde a
verso 0.9 original de 01/02/2009.
Esta verso apresenta as seguintes especificaes bsicas:

palavras de 8-bits (Byte);


operao com Acumulador, ACC, obrigatoriamente fonte e destino de qualquer instruo
envolvendo operaes aritmticas/lgicas com a ULA (Unidade Lgica e Aritmtica);
ULA de 8 bits, operando com inteiros em complemento de 2 (-128 a +127);
Instrues de 1 ou 2 palavras:
o 1 palavra: a instruo contm apenas um OpCode de 8-bits;
o 2 palavras; a instruo contm um OpCode de 8-bits mais uma segunda palavra de 8
bits definindo um operando com endereamento imediato ou direto. O endereamento
direto permite acessar 256 palavras de 8-bits (Bytes) na memria principal.
Estrutura de pilha no topo da memria principal, para permitir chamadas de subrotinas, endereada por um Stack Pointer.

d. Diagrama de Blocos da CPU-8E:


Os seguintes blocos de componentes so utilizados para a construo desta verso da UCP-8E:
Memria Principal externa, com 256 Bytes, endereveis por um Barramento de Endereos (BE) de 8-bits e transferncia de dados por um Barramento de Dados (BD) tambm de
8-bits.
ULA Unidade Lgica e Aritmtica, implementando as operaes aritmticas de Soma e
Subtrao (em complemento de 2) e as operaes lgicas AND, OR, XOR, NOT, SHL,
SHR, SRA, ROL e ROR. Alm dos resultados das operaes, a ULA alimenta trs bits de
status: Z, indicativo de que a ltima operao deu um resultado nulo (zero); N, indicativo
que o resultado um nmero negativo; e C, indicativo de que ocorreu um carry do bit mais
significativo. Os bits de status permanecem vlidos enquanto no for realizada outra
operao envolvendo a ULA.
MAR Registrador de Endereamento da Memria (Memory Address Register), registrador
de 8-bits, responsvel por manter o endereo da palavra em memria a ser acessada, para
leitura ou escrita.
MDR Registrador de Dados da Memria (Memory Data Register), registrador de 8-bits,
responsvel por receber os dados lidos da memria ou conter os dados a serem escritos na
memria.
PC Contador de Progama (Program Counter), registrador de 8-bits, responsvel por conter
o endereo da prxima instruo a ser lida da memria. O PC opera normalmente como um
contador, podendo receber tambm um valor especfico, no caso de instrues do tipo Jump.
Na inicializao, o endereo contido no PC ser zero, que deve ser o endereo inicial do
programa em memria a ser executado.
SP Ponteiro da Pilha (Stack Pointer), aponta para a posio atual disponvel na pilha (topo
da pilha), que implementada na memria alta, sendo inicializado com o valor FF H. A pilha,
em conjunto com o SP, utilizada, no momento, apenas para controle de chamada de
procedimentos (sub-rotinas), quando o PC salvo no topo da pilha na execuo da instruo
Call e recuperado na execuo da instruo Return.
ACC Acumulador (Accumulator), registrador de 8-bits, que opera como destino dos
operandos lidos em memria e fonte dos operandos a serem escritos na memria. Nas
operaes lgicas e aritmticas tambm fonte de um dos operandos e destino do resultado.
A registrador de 8-bits que serve como armazenamento temporrio para o primeiro
Prof. Joel Guilherme

UCP8E-V2.2-r1 - 09/01/2014

operando (correspondente ao ACC) nas operaes com a ULA.


B registrador de 8-bits que serve como armazenamento temporrio para o segundo
operando nas operaes com a ULA e como contador nas operaes de Shifts e Rotates.
IR Registrador de Instrues (Instruction Register), registrador de 8-bits, que armazena o
OpCode da instruo presentemente sendo executada pela UCP.
ID Decodificador de Instrues (Instruction Decoder), composto pela lgica necessria
para decodificar cada possvel instruo contida no IR.
UC unidade de controle, composta pela lgica necessria para a gerao dos sinais de
controle apropriados para o sequenciamento das microoperaes que constituiro a execuo
de cada possvel instruo.
Clock gerador da temporizao primria para a UC.

Todas estas unidades so devidamente interconectadas por um barramento interno (BI) e os


necessrios sinais de controle que iro gerar a execuo das microoperaes descritas mais
adiante, que levaro execuo das instrues contidas em um programa armazenado em
memria. A figura 1 abaixo ilustra o diagrama de blocos de CPU.

figura 1. Diagrama de Blocos da CPU-8E-v2.2.

e. Conjunto de Instrues:
Na tabela-1 que se segue, a coluna Mnem indica o mnemnico da instruo; Bytes indica o
nmero de bytes que compem a instruo, sendo sempre o primeiro o OpCode, e o segundo, se
existente, especifica o operando; Descrio descreve a operao correspondente; e End
indica as opes de endereamento disponvel: I = imediato, D = direto.
Tabela-1: conjunto de instrues da CPU-8Ev2.2.
Mnem Bytes Descrio
HLT
NOP
NOT
RET
JMP
JEQ
JGT
JGE
JCY
CAL
SHL

1
1
1
1
2
2
2
2
2
2
2

Halt Para: interrompe a operao do processador.


No Operation Nenhuma Operao: nenhuma operao realizada.
NOT Negao: realiza o NOT lgico, bit-a-bit, do ACC.
Return Retorno de Procedimento: retorna de procedimento chamado
Jump Salto incondicional: salta para instruo especificada.
Jump if Equal Salte se Igual: salta para instruo especificada se Z = 1.
Jump if Greater Salte se Maior: salta se (N = 0) (Z = 0).
Jump IF Greater or Equal Salte se Maior ou Igual: salta se (N = 0).
Jump if Carry Salte se carry setado (C = 1).
Call Chamada de Procedimento: desvia para procedimento no endereo indicado
Shift-Left desloca ACC esquerda no de bits especificado pelo operando.

Prof. Joel Guilherme

End
.
D
D
D
D
D
D
I/D

UCP8E-V2.2-r1 - 09/01/2014

SHR
SRA
ROL
ROR
STO
LOD
CMP
ADD
SUB
AND
XOR
ORL

2
2
2
2
2
2
2
2
2
2
2
2

Shift-Right desloca ACC direita no de bits especificado pelo operando.


Shift-Right-Arithmetic desloca ACC direita em modo aritmtico (mantm sinal).
Rotate-Left rotaciona ACC esquerda no de bits especificado pelo operando.
Rotate-Right rotaciona ACC direita no de bits especificado pelo operando.
Store Armazena: armazena o ACC no endereo indicado em memria.
Load Carrega: carrega o ACC com o operando.
Compare Compara ACC com operando, setando flags de acordo. No altera ACC.3
Add Soma: soma o contedo do ACC com o operando.
Subtract Subtrai: subtrai o operando do ACC.
AND E: realiza o AND lgico, bit-a-bit, do ACC com o operando.
XOR XOR: realiza o XOR, bit-a-bit, do ACC com o operando.
OR OU: realiza o OR lgico, bit-a-bit, do ACC com o operando.

I/D
I/D
I/D
I/D
D
I/D
I/D
I/D
I/D
I/D
I/D
I/D

f. Cdigos de Operao (OpCodes)


Para simplificar a decodificao das instrues, as seguintes atribuies de bits foram feitas:
I7: Indica instruo de uma/duas palavras (0/1);
I6: Indica endereamento imediato/direto (0/1);
I5: No utilizados nesta verso;
I4-I0: Atribuio de cdigos individuais para cada instruo. As lacunas na sequncia de
codificao so propositais, para exerccios ou futuras expanses do conjunto de instrues
da CPU-8E.
A tabela a seguir ilustra a atribuio de cdigos para cada operao definida.
Tabela-2: Cdigos de Operao (OpCodes) para a CPU-8Ev2.2.

I7
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

I6
0
0
0
0
1
1
1
1
1
1
X
X
X
X
X
1
X
X
X
X
X
X
X

I5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

I4
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1

I3
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
0
0
0
0
0
1
1
1

I2
0
0
0
0
1
1
1
1
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1

I1
0
0
1
1
0
0
1
1
1
0
1
1
0
1
0
0
0
0
0
1
1
1
0

I0 OpCode
Hex
0
HLT
00
1
NOP
01
0
NOT
02
1
RET
03
0
JMP
C4
1
JEQ
C5
0
JGT
C6
0
JGE
C7
1
JCY
C8
1
CAL
C9
0
SHL
8A/CA
1
SHR
8B/CB
0
SRA
8C/CC
1
ROL
8D/CD
0
ROR
8E/CE
0
STO
D0
1
LOD
91/D1
0
CMP
94/D4
1
ADD
95/D5
0
SUB
96/D6
0
AND
9A/DA
1
XOR
9B/DB
0
ORL
9C/DC

Flags afetados
Z,N,C
Z,N,C
Z,N,C
Z,N,C
Z,N,C
Z,N,C
Z,N,C
Z,N,C
Z,N,C
Z,N,C
Z,N,C
Z,N,C

Realado em amarelo as novas instrues introduzidas nesta verso.


3

A operao compare realizada subtraindo-se do acumulador o valor do operando, afetando os bits de flag de
acordo com o resultado mas sem alterar o valor do acumulador.
Prof. Joel Guilherme

UCP8E-V2.2-r1 - 09/01/2014

Temos portanto 23 instrues e 35 opcodes distintos definidos, do total de 256 possveis, sendo 4
correspondentes a instrues de uma s palavra (HLT, NOP, NOT e RET), 7 instrues de duas
palavras com endereamento direto apenas (JMP, JEQ, JGT, JGE, JCY, CAL e STO), e 12
instrues de duas palavras que aceitam tanto endereamento direto quanto imediato (SHL,
SHR, SRA, ROL, ROR, LOD, CMP, ADD, SUB, OR, AND e XOR).
Obs.: Quando assinalado com X, o bit I6 indica que podemos ter endereamento imediato ou direto para
o operando na instruo em questo.

Como notao simblica para diferenciar os operandos com endereamento direto dos com
endereamento imediato sugerimos que estes ltimos sejam representados por X, indicando
que o valor do operando X e este segue o OpCode, enquanto os primeiros sero indicados por
[X], indicando que o valor X, contido na instruo, representa o endereo do operando em
memria. Como exemplo, poderamos ter
LOD 15
; indica o carregamento do acumulador com o valor imediato 15
LOD [15]
; indica o carregamento do acumulador com o valor contido no endereo
; de memria 15, ou seja M[15]

g. Ciclo de Instruo:
Com estas definies, podemos determinar as microoperaes necessrias para a execuo de
cada uma das instrues especificadas. Consideramos aqui que em uma primeira fase do ciclo de
instrues ser feito o fetch do OpCode, em uma segunda fase a obteno do endereo do
operando, se especificado, e em uma terceira fase, ou fase final, a execuo da instruo.
Instrues so dos tipos: Oper, Oper X, ou Oper [X], onde Oper indica uma das instrues definidas e X o operando ou o endereo do operando, se presente. As fases de processamento de uma instruo sero controladas por uma mquina de estados finitos de 4 (quatro),
designados por S. A sada de 2 (dois) Flip-Flops representaro os estados, como abaixo
indicados.
(S = 00) Busca (fetch) da Instruo (obtm o OpCode):
t0:
MAR PC
; Enderea a instruo
t1:
MDR M(MAR) ; L o OpCode
PC PC+1
; Aponta para a prxima palavra em memria
t2:
IR MDR
; IR contm agora o OpCode
S = (01I7) (10)
(S = 01) Obteno do endereo do operando
Se I7 = 1, operando especificado (2 palavras)
t0:
MAR PC
; MAR contm endereo do operando ou de seu
endereo (endereo da palavra que segue o OpCode)
t1:
PC PC+1
; Aponta para a prxima palavra em memria
t1I6:
MDR M(MAR) ; Se endereo Direto, carrega endereo do operando
t2I6:
MAR MDR
; MAR contm agora endereo do operando
S = 10
(S = 10) Execuo das Instrues:
HLT
t0:
STOP
NOP
t0:
NOT
t0:
A ACC
t1:
ACC ULA(A,NOT)
Prof. Joel Guilherme

; Negao Lgica do ACC


UCP8E-V2.2-r1 - 09/01/2014

RET
t0:
t1:
t2:
t3:
JMP
t0:
JEQ
t0Z:
JGT
t0[/(NZ)]:
JGE
t0[/(N)]:
JCY
t0C]:
CAL
t0:
t1:
t2:
t3:
SHL
t0:
t1:
t2:
SHR
t0:
t1:
t2:
SRA
t0:
t1:
t2:
ROL
t0:
t1:
t2:
ROR
t0:
t1:
t2:

Prof. Joel Guilherme

SP SP+1
MAR SP
MDR M[MAR]
PC MDR

; Incrementa Stack Pointer


; Enderea ltimo elemento da pilha
; L endereo de retorno
; Faz um jump de retorno

PC MAR

; Jump incondicional

PC MAR

; Salta se Z=1

PC MAR

; Salta se N=0 e Z=0

PC MAR

; Salta se N=0

PC MAR

; Salta se C=1

MDR PC
PC MAR
MAR SP
M[MAR] MDR
SP SP-1

; Endereo de retorno
; Endereo da rotina chamada
; Enderea topo da pilha
; Salva endereo de retorno na pilha
; Novo topo da pilha

MDR M[MAR]
; L contagem para o Shift
A ACC
B MDR
ACC ULA(A,B,SHL) ; Deslocamento esquerda do ACC
MDR M[MAR]
; L contagem para o Shift
A ACC
B MDR
ACC ULA(A,B,SHR) ; Deslocamento direita do ACC
MDR M[MAR]
; L contagem para o Shift
A ACC
B MDR
ACC ULA(A,B,SRA) ; Deslocamento esquerda do ACC
MDR M[MAR]
; L contagem para o Rotate
A ACC
B MDR
ACC ULA(A,B,ROL) ; Rotao esquerda do ACC
MDR M[MAR]
; L contagem para o Rotate
A ACC
B MDR
ACC ULA(A,B,ROL) ; Rotao direita do ACC
UCP8E-V2.2-r1 - 09/01/2014

STO
t0:
t1:
LOD
t0:
t1:
t2:
CMP
t0:
t1:
t2:
ADD
t0:
t1:
t2:
SUB
t0:
t1:
t2:
AND
t0:
t1:
t2:
XOR
t0:
t1:
t2:
ORL
t0:
t1:
t2:

MDR ACC
[MAR] MDR

; Operando o ACC
; ACC armazenado em memria

MDR M[MAR]
A MDR
ACC ULA(A,B,A)

; L operando

MDR M[MAR]
A ACC
B MDR
ULA(A,B,)

; L segundo operando

MDR M[MAR]
A ACC
B MDR
ACC ULA(A,B,+)

; L segundo operando

MDR M[MAR]
A ACC
B MDR
ACC ULA(A,B,)

; L segundo operando

; Carrega A em ACC, via ULA

; Subtrai operandos, sem alterar ACC

; Soma operandos

; Subtrai operandos

MDR M[MAR]
; L segundo operando
A ACC
B MDR
ACC ULA(A,B,AND) ; E Lgico dos operandos
MDR M[MAR]
; L segundo operando
A ACC
B MDR
ACC ULA(A,B,XOR) ; XOR Lgico dos operandos
MDR M[MAR]
; L segundo operando
A ACC
B MDR
ACC ULA(A,B,OR) ; OU Lgico dos operandos

Obs.: O estado seguinte ao trmino da execuo de qualquer instruo o estado S = 00, exceto pela instruo
Halt, que leva ao estado S = 11, do qual o sistema sair apenas por um Reset por hardware.

(S = 11) UCP parada (resultado de um Halt):


Nenhuma operao realizada, ficando a UCP indefinidamente neste estado at que um
Reset por hardware seja executado.

h. Detalhamento da Unidade de Controle e Decodificador de Instrues


O decodificador de instrues ter a seguinte lgica, de acordo com os cdigos atribudos:
DW = I7
Indica instruo de 2 palavras
ED = I6
Indica endereamento direto
Prof. Joel Guilherme

UCP8E-V2.2-r1 - 09/01/2014

HLT
NOP
NOT
RET
JMP
JEQ
JGT
JGE
JCY
CAL
SHL
SHR
SRA
ROL
ROR
STO
LOD
CMP
ADD
SUB
AND
XOR
ORL

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

I 4 I3 I 2 I1 I0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I 1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I1 I 0
I 4 I3 I 2 I 1 I 0
I4I3I2I1I0
I4I3I2I1I0
I 4 I 3 I 2 I1 I 0

Operao Halt
Operao NOP
Operao NOT
Operao RET
Operao Jump
Operao Jump if Equal
Operao Jump if Greater
Operao Jump if Greater or Equal
Operao Jump if Carry Set
Operao Call Routine
Operao Shift Left
Operao Shift Right
Operao Shift Right Arithmetic
Operao Rotate Left
Operao Rotate Right
Operao Store
Operao Load
Operao Load
Operao Add
Operao Subtract
Operao AND
Operao XOR
Operao OR

A mquina de estados da UC ter o seguinte comportamento:


Estado (S1S0)
Entrada
T1 = S 1 S 0t 2DW
00
T2 = S 1 S 0t 2DW
01
T3 = S 1 S 0 ( t 1 ED t 2 ED )
T4 = S 1 S 0 [(NOPJMPJEQJGTJGEJCY)t0
(LODSTONOT)t1(ADDSUBANDXOR)t2]
10
T5 = S 1 S 0 HLTt0
11
X
XX
RESET

Prximo Estado
01
10
10
00
11
11
00

correspondendo seguinte mquina de estado:


Reset
T1
0
1

0
0
T3

T2
T4

1
1

1
0
T5

X
Prof. Joel Guilherme

UCP8E-V2.2-r1 - 09/01/2014

figura 2: Mquina de Estados da UC.

i. Histrico

v0.9 de 01/02/2009 primeira verso implementada em um simulador por software,


acompanhada do correspondente assembler;
v1.0a de 04/02/2009 - primeira reviso, com pequenas correes;
v1.0b de 04/03/2009 - reviso da sequncia de controle;
v2.0 de 17/10/2010 - esta verso, com ampliao do conjunto de instrues.
Contriburam para esta ampliao:
- Anderson de S. Freitas
(anderson.souza.freitas@gmail.com)
- Daniel M. Vasconcelos
(danielm.vasconcelos@gmail.com)
v2.2-r1 de 08/01/2014 - reviso editorial do documento.
Autor: Prof. Joel Guilhermeda Silva Filho
e-mail: joel-iesb@joelguilherme.com
Organizao: IESB Instituto de Educao Superior de Braslia
http://www.iesb.br
Local: Braslia/DF Brasil

Prof. Joel Guilherme

UCP8E-V2.2-r1 - 09/01/2014