Vous êtes sur la page 1sur 9

UCP-8E-v2.

2 Uma UCP educacional de 8-bits


Copyright 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 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 reunem, 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.

c. Especificaes Bsicas da CPU-8E:


Esta a verso 2.2 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
1

MMLogic (MultiMedia Logic), programa freeware e opensource da Softronix para simulao de circuitos lgicos digitais (http://www.softronix.com/logic.html).
Prof. Joel Guilherme UCP8E-V2.2 - 16/10/2010

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 8-bits, responsvel por manter o endereo da palavra em memria a ser acessada, para leitura ou escrita. MDR registrador de 8-bits, responsvel por receber os dados lidos da memria ou conter os dados a serem escritos na memria. PC 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 apenas para controle de chamada de procedimentos (subrotinas), quando o PC salvo no topo da pilha na execuo da instruo Call e recuperado na execuo da instruo Return. ACC registrador acumulador 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 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. RI registrador de instrues, de 8-bits, que armazena o OpCode da instruo presentemente sendo executada pela UCP. DI decodificador de instruo, composto pela lgica necessria para decodificar cada possvel instruo contida no RI.
Prof. Joel Guilherme UCP8E-V2.2 - 16/10/2010

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.0.

e. Conjunto de Instrues:
Na tabela-1 que se segue, a coluna Mnem indica o menmnico 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 SHR SRA ROL ROR 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 Halt Pra: 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. 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. End . D D D D D D I/D I/D I/D I/D I/D

Prof. Joel Guilherme

UCP8E-V2.2 - 16/10/2010

STO LOD CMP ADD SUB AND XOR ORL

2 2 2 2 2 2 2 2

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.2 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.

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: Atribuo 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.

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
2

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 - 16/10/2010

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 microperaes 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 instruco 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 I 7 ) (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 end. 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) RET t0: SP SP+1 t1: MAR SP
Prof. Joel Guilherme

; Negao Lgica do ACC ; Incrementa Stack Pointer ; Enderea ltimo elemento da pilha
UCP8E-V2.2 - 16/10/2010

t2: t3: JMP t0: JEQ t0Z: JGT t0[/(NZ)]: JGE t0[/(N)]: JCY t0C]: CAL t0: t1: t2: t3:

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

; L endereo de retorno ; Faz um jump de retorno ; Jump incondicional ; Salta se Z=1 ; Salta se N=0 e Z=0 ; Salta se N=0 ; Salta se C=1 ; Endereo de retorno ; Endereo da rotina chamada ; Enderea topo da pilha ; Salva endereo de retorno na pilha ; Nono topo da pilha ; Recupera endereo de retorno (Jump)

SHL t0: t1: t2: SHR t0: t1: t2: SRA t0: t1: t2: ROL t0: t1: t2: ROR t0: t1: t2: STO t0: t1:

MDR M[MAR] ; L contagem para o Shift A ACC B MDR ACC ULA(A,B,SHL) ; Deslocamento esquerda do ACC MDR [MAR] ; L contagem para o Shift A ACC B MDR ACC ULA(A,B,SHR) ; Deslocamento direita do ACC MDR [MAR] ; L contagem para o Shift A ACC B MDR ACC ULA(A,B,SRA) ; Deslocamento esquerda do ACC MDR [MAR] ; L contagem para o Rotate A ACC B MDR ACC ULA(A,B,ROL) ; Rotao esquerda do ACC MDR [MAR] ; L contagem para o Rotate A ACC B MDR ACC ULA(A,B,ROL) ; Rotao direita do ACC MDR ACC [MAR] MDR ; Operando o ACC ; ACC armazenado em memria
UCP8E-V2.2 - 16/10/2010

Prof. Joel Guilherme

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 [MAR] A MDR ACC ULA(A,B,A) MDR [MAR] A ACC B MDR ULA(A,B, ) MDR [MAR] A ACC B MDR ACC ULA(A,B,+) MDR [MAR] A ACC B MDR ACC ULA(A,B, )

; L operando ; Carrega A em ACC, via ULA ; L segundo operando

; Subtrai operandos, sem alterar ACC ; L segundo operando

; Soma operandos ; L segundo operando

; Subtrai operandos

MDR [MAR] ; L segundo operando A ACC B MDR ACC ULA(A,B,AND) ; E Lgico dos operandos MDR [MAR] ; L segundo operando A ACC B MDR ACC ULA(A,B,XOR) ; XOR Lgico dos operandos MDR [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 I I I I I HLT = 4 3 2 1 0 Operao Halt NOP = I 4 I 3 I 2 I 1 I 0 Operao NOP NOT = I 4 I 3 I 2 I 1 I 0 Operao NOT
Prof. Joel Guilherme UCP8E-V2.2 - 16/10/2010

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 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 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

A mquina de estados da UC ter o seguinte comportamento: Estado (S1S0) Entrada T1 = S 1 S 0 t 2 DW 00 T2 = S 1 S 0 t 2 DW 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 HLT t0 11 X XX RESET correspondendo seguinte mquina de estado: Reset T1 0 0 T3 T4 1 T5 X fgura 2: Mquina de Estados da UC.
Prof. Joel Guilherme

T2

UCP8E-V2.2 - 16/10/2010

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. Contribuiram para esta ampliao: - Anderson de S. Freitas (anderson.souza.freitas@gmail.com) - Daniel M. Vasconcelos (danielm.vasconcelos@gmail.com) Autor: Prof. Joel Guilhermeda Silva Filho e-mail: joel@joelguilherme.com Organizao: IESB Instituto de Educao Superior de Braslia Local: Braslia/DF Brasil

Prof. Joel Guilherme

UCP8E-V2.2 - 16/10/2010