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
UCP8E-V2.2-r1 - 09/01/2014
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
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
I/D
I/D
I/D
I/D
D
I/D
I/D
I/D
I/D
I/D
I/D
I/D
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
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
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:
SP SP+1
MAR SP
MDR M[MAR]
PC MDR
PC MAR
; Jump incondicional
PC MAR
; Salta se Z=1
PC MAR
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
; 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.
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
Prximo Estado
01
10
10
00
11
11
00
0
0
T3
T2
T4
1
1
1
0
T5
X
Prof. Joel Guilherme
UCP8E-V2.2-r1 - 09/01/2014
i. Histrico
UCP8E-V2.2-r1 - 09/01/2014