You are on page 1of 9

Implementao da unidade de controle de um

processador
PREPARAO
HDL_3

OBJETIVOS
Conhecer as funes realizadas pela Unidade de Controle
Implementar uma unidade de controle para o datapath estudado, completando um
processador simples
Entender a codificao de instrues em campos de bits
Conhecer a sequncia bsica de execuo de instrues e os mecanismos que alteram
esta sequncia, como tambm como estes afetam a implementao do contador de
programa (PC)
Compreender a formao de sinais de controle a partir das instrues armazenadas
em memria
Implementar uma memria ROM completamente combinacional atravs de uma
descrio em Verilog
Verificar o funcionamento de um processador atravs da execuo de algumas
instrues

INTRODUO
Neste experimento ser implementada uma unidade de controle, que juntamente com
o datapath desenvolvido nos experimentos anteriores, define um processador MIPS bastante
simples, capaz de executar 10 instrues. Este processador, apesar de muito simples, possui
algumas caractersticas tpicas de projetos mais modernos, e servir como base para o estudo
de outros processadores existentes.

O funcionamento deste processador pode ser verificado manualmente, realizando-se


diversas instrues, atravs da aplicao dos sinais de controle e valores dos dados nas chaves
da placa DE2 e a observao dos resultados atravs dos LEDs e displays de 7 segmentos.
Tambm podemos armazenar um programa em uma memria de instrues. Esta memria
completamente combinacional pode ser criada em Verilog, utilizando um array de vetores de
bits, ou utilizando uma descrio em Verilog similar a um decodificador (opo que ser
implementada neste experimento).

UMA ARQUITETURA DE UM COMPUTADOR SIMPLES

Est sendo introduzida uma arquitetura de um computador simples para obter um


entendimento inicial sobre projeto de computadores e para ilustrar projetos de controle para
sistemas programveis. Em um sistema programvel, uma parte da entrada do processador
consiste de uma sequncia de instrues. Cada instruo especifica uma operao para o
sistema realizar, quais operandos usar para a operao, onde armazenar os resultados da
operao e/ou, em alguns casos, qual instruo executar em seguida. Para um sistema
programvel, as instrues so normalmente armazenadas em memria, que pode ser RAM
(memria de leitura e escrita) ou ROM (memria de leitura apenas). Para executar as
instrues em sequncia, necessrio fornecer o endereo na memria da instruo a ser
executada. Em um computador, este endereo vem de um registrador chamado de contador
de programa (PC, do ingls program counter). Como o nome sugere, o PC tem lgica que
permite que ele conte. Alm disso, para mudar a sequncia de operaes usando decises
baseadas em informaes de estado, o PC precisa de capacidade de carregamento paralelo.
Assim, no caso de sistemas programveis, a unidade de controle contm um PC e lgica de
deciso associados, como tambm a lgica necessria para interpretar as instrues para
poder execut-las. Executar uma instruo significa ativar a sequncia de microoperaes
necessria para efetuar a operao especificada pela instruo.

ARQUITETURA DO CONJUNTO DE INSTRUES

O usurio especifica as operaes a serem realizadas e sua sequncia usando um


programa, que uma lista de instrues. O processamento de dados realizado pelo
computador pode ser alterado ao especificar um novo programa com diferentes instrues ou
ao especificar as mesmas instrues com dados diferentes. Instrues e dados so
normalmente armazenados conjuntamente na mesma memria. Por meio de tcnicas como
memria cache, pode parecer que estes provm de memrias diferentes. A unidade de
controle l uma instruo da memria, decodifica e executa a instruo ao lanar uma
sequncia de uma ou mais microoperaes. A habilidade de executar um programa
proveniente da memria a propriedade singular mais importante de um computador de
propsito geral. A execuo de um programa armazenado em memria contrasta fortemente
com o controle feito com mquinas de estado usuais, que executam operaes seqenciadas
apenas pelas entradas e sinais de estado.

Uma instruo uma coleo de bits que instrui o computador a realizar uma
operao especfica. Chamamos a coleo de instrues de um computador seu conjunto de
instrues e a descrio detalhada do conjunto de instrues a sua arquitetura do conjunto de
instrues (ISA, do ingls Instruction Set Architecture). Arquiteturas de conjunto de instrues
simples possuem trs componentes principais: os recursos de armazenamento, os formatos de
instrues e as especificaes das instrues.

RECURSOS DE ARMAZENAMENTO

Os recursos de armazenamento para um computador simples so representados pelo


diagrama da Figura 1. No diagrama colocada a estrutura do computador como vista por um
usurio que esteja programando em uma linguagem que especifique diretamente as
instrues a serem executadas. Note que a arquitetura inclui duas memrias, uma para
armazenar instrues e outra para armazenar os dados. Estas podem ser realmente memrias
diferentes ou podem ser a mesma memria, mas vistas como diferentes do ponto de vista da
CPU (devido ao uso de estruturas auxiliares, como memria cache). Tambm visvel ao
programador, no diagrama, um banco de registradores com oito registradores de 8 bits e um
contador de programa de 8 bits.
Figura 1. Diagrama com os Recursos de Armazenamento do Computador Simples

FORMATOS DE INSTRUO

O formato de uma instruo normalmente descrito por uma caixa retangular


simbolizando seus bits, como estas aparecem em palavras na memria ou em um registrador
de controle. Os bits so divididos em grupos ou partes denominadas campos. A cada campo
atribudo um item especfico, como o cdigo da operao, um valor constante ou um endereo
do banco de registradores. Os vrios campos especificam diferentes funes para as instrues
e, quando mostradas conjuntamente, constituem um formato de instruo.

O cdigo da operao de uma instruo, normalmente denominado de opcode (do


ingls, operation code), o grupo de bits que especifica uma operao, tal como somar,
subtrair, deslocar ou complementar. O nmero de bits requeridos pelo uma funo do
nmero total de operaes do conjunto de instrues. Ele deve consistir de pelo menos m bits
para at 2m operaes distintas. O projetista atribui uma combinao de bits (um cdigo) para
cada operao. O computador projetado para aceitar esta configurao de bits no momento
apropriado na sequncia de atividades e para fornecer uma sequncia de palavras de controle
(conjunto de sinais de controle) que executam a operao especificada. Como um exemplo
especfico, considere um computador com um mximo de 128 operaes distintas, uma delas
sendo uma operao de soma. O opcode atribudo para esta operao consiste de sete bits
0000010. Quando o opcode 0000010 detectado pela unidade de controle, uma sequncia de
palavras de controle aplicada ao datapath para realizar a soma pretendida.

O opcode de uma instruo especifica a operao a ser executada. A operao deve


ser realizada usando dados armazenados nos registradores do computador ou em memria (o
contedo de um dos recursos de armazenamento). Uma instruo, portanto, deve especificar
no apenas a operao, mas tambm os registradores ou posio de memria em que os
operandos so encontrados e onde o resultado dever ser salvo. Os operandos podem ser
especificados por uma instruo de duas formas:
Um operando dito ser especificado explicitamente se a instruo contm bits
determinados para sua identificao. Por exemplo, a instruo que realiza uma soma
pode conter trs nmeros binrios especificando os registradores que contm os dois
operandos e o registrador que recebe o resultado.

Uma operao dita como definida implicitamente se includa como parte da


definio da prpria operao, como representada pelo opcode, ao invs de ser dado
na instruo. Por exemplo, em uma operao de Incrementar Registrador, um dos
operandos implicitamente +1.

A arquitetura MIPS faz o compromisso de definir trs formatos de instruo: Tipo-R,


Tipo-I e Tipo-J. Esse pequeno nmero de formatos proporciona certa regularidade entre todos
os tipos e, portanto, um hardware mais simples

Tipo Registrador: Instrues tipo-R utilizam trs registradores como operandos: dois
como fonte e um como destino. A Figura 2 mostra o formato de instruo de mquina
tipo-R. a instruo de 32-bits possui seis campos: op, rs, rt, rd, shamt e funct. Cada
campo de cinco ou seis bits, como indicado.

A operao que a instruo realiza codificada nos dois campos destacados em azul:
op (tambm chamado opcode, ou cdigo de operao) e funct (tambm chamado de
funo). Todas as instrues tipo-R possuem um opcode de 0. A operao especfica
tipo-R determinada pelo campo field. Por exemplo, os campos opcode e funct para a
instruo add so 0 (0000002) e 32 (1000002), respectivamente. Similarmente, a
instruo sub possui os campos opcode e funct de 0 e 34.

Os operandos so codificados em trs campos: rs, rt e rd. Os primeiros dois


registradores, rs e rt, so os registradores fonte; rd o registrador de destino.

Figura 2. Instruo do tipo R

Tipo Imediato: Instrues tipo-I utilizam dois operandos registradores e um operando


imediato. A Figura 3 mostra o formato de instruo de mquina tipo-I. A instruo de
32-bits possui quatro campos: op, rs, rt e imm. Os primeiros trs campos, op, rs e rt,
so como aquelas instrues do tipo-R. o campo imm mantm um imediato de 16 bits.

A operao determinada exclusivamente pelo opcode, destacado em azul. Os


operandos so especificados em trs campos, rs, rt e imm. rs e imm so sempre
utilizados como operandos fonte. rt utilizado como destino por algumas instrues
(como addi e lw), mas tambm como outra fonte por outras (como sw).
Figura 3. Instruo do tipo I

Tipo Jump: O nome tipo-J uma abreviao para tipo salto (jump). Esse formato
de instruo utiliza um nico operando de endereo de 26-bits, addr, como mostrado
na Figura 4. Assim como outros formatos, as instrues tipo-J iniciam-se com um
opcode de 6 bits. Os bits remanescentes so utilizados para especificar o endereo,
addr.

Em contraste com os outros dois formatos, instrues do tipo J no modificam


nenhum contedo do banco de registradores ou da memria. Em vez disso, alteram a
ordem em que as instrues so buscadas da memria, por meio da escrita no PC.

Figura 4. Instruo do tipo J

LINGUAGEM ASSEMBLY

A linguagem assembly a representao legvel para humanos da linguagem nativa


dos computadores. Cada instruo da linguagem assembly especifica tanto a operao a ser
realizada quanto o operando sobre o qual opera. Para cada instruo, o opcode dado
juntamente com um nome abreviado chamado de mnemnico, que indica a finalidade da
instruo. O conjunto bsico de instrues que sero implementadas no laboratrio est
especificado na Tabela 1

Instruo Descrio Algoritmo


ADD $X, $Y, $Z Adicionar $X = $Y + $Z
SUB $X, $Y, $Z Subtrair $X = $Y - $Z
AND $X, $Y, $Z AND Bit a bit $X = $Y & $Z
OR $X, $Y, $Z OR Bit a bit $X = $Y | $Z
SLT $X, $Y, $Z Menor que $X = 1 se $Y < $Z e 0 c.c.
LW $X, i($Y) Carregar da memria $X <= Cont. do end. ($Y+ i)
SW $X, i($Y) Armazenar na memria End. ($Y+ i) <= $X
BEQ $X, $Y, i Desviar se igual Se $X == $Y, PC = PC + 1 + i
ADDi $X, $Y, i Adicionar Imediato $X = $Y + i
Ji Desvio incondicional PC = i

Tabela 1. Conjunto bsico de instrues MIPS.


MEMRIA

Sero implementadas duas memrias distintas nessa atividade de laboratrio. Uma


memria de instrues de 32-bits e uma memria de dados de 8-bits

A memria de instruo tem uma nica porta de leitura. Recebe uma entrada de
endereo de 8-bits, A, e escreve as instrues de 32 bits na sada de dados de leitura, RD.
ilustrado na Figura 5 um exemplo de programa armazenado em uma memria de instrues.
Perceba que o cdigo assembly convertido para cdigo de mquina antes de ser
armazenado.

A memria de dados tem uma nica porta de leitura/escrita. Se o enable de escrita,


WE, estiver em 1, escreve os dados WD no endereo A na subida do clock. Se o enable de
escrita estiver em 0, ele l o endereo A para RD.

Figura 5. Programa armazenado em uma memria de instrues.

Neste ponto, vital reconhecer a diferena entre uma operao do computador e uma
microoperao do hardware. Uma operao especificada por uma instruo armazenada em
binrio na memria do computador. A unidade de controle do computador utiliza o endereo
ou endereos fornecidos pelo contador de programa para recuperar a instruo da memria.
Ela ento decodifica os bits do opcode e outras informaes na instruo para realizar as
microoperaes necessrias para a execuo da instruo. Diferentemente, uma
microoperao especificada pelos bits que formam uma palavra de controle, que
determinar ao hardware do computador as aes que devem ser implementadas para
executar a microoperao. A execuo de uma operao do computador normalmente requer
uma sequncia ou programa de microoperaes no lugar de uma nica microoperao.

CONTROLE EM LGICA PARA CICLO NICO

O diagrama de blocos de um processador MIPS de ciclo nico ilustrado na Figura 6.


Em outras palavras, o processador busca e executa uma instruo em um nico ciclo de clock.
A unidade de controle o elemento que faltava para enfim completarmos a CPU do
laboratrio.
Control Unit
Jump
MemtoReg
OP OP MemWrite
Branch
Funct Funct ALUControl
ALUSrc
RegDst
RegWrite

clk

rs ra1 we3
rd1 SrcA clk
clk
0 rt ra2 Z
1
0
PC PC PC A
Inst.
RD
Register ULA we
1 Mem. wa3 File ULAResult A 0
MuxPCSrc Data
MuxJump rd2 0 RD 1
wd3 1
SrcB Mem.
WD
Imm MuxULASrc
MuxDDest
Adder 1

1'b1 rt 0
rd 1
Branch
Adder

MuxWR

Imm

Figura 6. Diagrama de Blocos de um processador MIPS de Ciclo nico

Como discutido previamente, o PC fornece o endereo da instruo para a memria de


instrues e a sada de instrues da memria vai para a lgica de controle, que neste caso o
decodificador de instrues.

O PC atualizado em cada ciclo de clock. O comportamento do PC, que um


registrador complexo, determinado pelo opcode, e pelo bit de estado Z. O PC opera como
contador com carga de valor inicial. Se ocorre um salto, o novo PC torna-se o valor do campo
imediato da instruo. Se um desvio implementado, ento o novo valor do PC a soma do
PC anterior e o deslocamento de endereo com sinal (representao em complemento de 2)
acrescido de 1. Caso contrrio, o PC somente incrementado de 1.

Observe que no h lgica seqencial na parte de controle alm do PC. Logo, afora
fornecer o endereo para a memria de instrues, a lgica de controle combinacional. Este
fato, combinado com a estrutura do datapath e o uso de memrias de instrues de dados
separadas, permitem que o computador de ciclo nico obtenha e execute uma instruo da
memria de instrues, tudo em um nico ciclo de clock.

DECODIFICADOR DE INSTRUES

O decodificador de instrues (unidade de controle) um circuito combinacional que


fornece todas as palavras de controle para o datapath, baseado nos contedos dos campos da
instruo. ilustrado na Tabela 2 o valor dos bits de controle para cada instruo (conjunto OP
+ Funct)
Instr OP Funct RegWrite RegDst ULASrc ULAControl Branch MemWrite MemtoReg Jump
ADD 000000 100000 1 1 0 010 0 0 0 0
SUB 000000 100010 1 1 0 110 0 0 0 0
AND 000000 100100 1 1 0 000 0 0 0 0
OR 000000 100101 1 1 0 001 0 0 0 0
SLT 000000 101010 1 1 0 111 0 0 0 0
LW 100011 000000 1 0 1 010 0 0 1 0
SW 101011 000000 0 x 1 010 0 1 x 0
BEQ 000100 000000 0 x 0 110 1 0 x 0
ADDi 001000 000000 1 0 1 010 0 0 0 0
J 000010 000000 0 x x xxx x x x 1

Tabela 2. Tabela do decodificador de instrues.

IMPLEMENTAO EM VERILOG

A implementao em HDL do circuito da unidade de controle pode ser realizada de


diversas formas. Mantendo o alto nvel de abstrao a unidade de controle deve ser codificada
de maneira trivial por meio de um case.

O mdulo do PC um circuito sequencial que guarda um vetor de 8 bits cada vez que
uma borda de subida do clock detectada. Usar always @(posedge clock).

Todos os outros elementos da CPU j foram implementados em aulas passadas e


devem ser reaproveitados.

MEMRIA COMBINACIONAL

Para que este processador opere com um nico ciclo de clock, necessrio que a
memria de instrues se comporte como um circuito puramente combinacional. Neste
experimento, isto exatamente o que vai ser feito. Uma memria de apenas leitura
combinacional basicamente um decodificador que tem os endereos como entrada e os
dados como sada. A sua implementao feita da mesma forma que o decodificador de sete
segmentos implementado nos experimentos anteriores. Deve-se lembrar que, como o nmero
de bits de endereo muito grande (16) havero diversos cdigos no definidos, que precisam
ter valor default.

Esta memria deve ser definida como um mdulo separado porque nos prximos
experimentos ela ser implementada usando uma ferramenta especfica do Quartus. Para isto,
preciso tambm que o mdulo da CPU possua uma sada adicional de endereos (Code Addr)
e uma entrada para as instrues (Inst In).

MODULARIDADE E INSTANCIAO

Como explicado nos experimentos anteriores, o mdulo Mod_Teste, que o mdulo


TOP, deve ser reservado para os testes na placa. Ele no faz parte da definio da CPU. Ele
instancia a CPU e as outras partes necessrias para o teste desta. Deve-se implementar a CPU
de forma que ela tenha todas as suas partes constituintes instanciadas internamente. Esta CPU
ter como interface com o mundo exterior os sinais de CLOCK, RESET e os Sinais de interface
com as memrias. Outras portas podem ser acrescentadas apenas para depurao, como por
exemplo, portas que permitam a visualizao dos registradores.

O mdulo TOP (Mod_Teste) o nico que deve conhecer detalhes da placa, ou seja,
nomes de chaves e de LEDs. Este mdulo instancia a CPU, a memria e os circuitos de teste e
os conecta nestas interfaces da placa.

Questes de Preparao

1. Quais as conexes que devem ser feitas entre a unidade de controle e o datapath, de
acordo com a Figura 6?
2. Implemente em Verilog o decodificador de instrues da Figura 6. Este decodificador
transforma os 32 bits de uma instruo nos 10 bits da palavra de controle.
3. Determine o cdigo binrio do conjunto de instrues abaixo:
ADD $2, $0, $1 SUB $3, $2, $1 AND $2, $1, $3
OR $2, $1, $3 SLT $1, $0, $2 LW $1, 9($0)
SW $1, 9($0) BEQ $X, $Y, i ADDi $2, $0, 7
J6

4. Descreva em Verilog uma memria de instrues de 256 posies. Deve existir uma
entrada de endereos e uma sada de instrues de 32 bits.
5. Analise o seguinte trecho de cdigo e informe o valor dos registradores $1 e $2
quando PC = 5:

Posio Instruo
0000 ADDi $1, $0, 5
0001 ADDi $2, $0, 0
0002 ADDi $2, $2, 1
0003 BEQ $1, $2, 1
0004 J2
0005 FIM

6. Escreva um programa de teste para esta CPU e converta cada instruo para o
equivalente em binrio. Este programa deve testar as diversas classes de instruo da
CPU. Por exemplo, uma instruo para teste de operaes com registradores e
operaes de desvio e jump;

You might also like