Você está na página 1de 0

LEONARDO AUGUSTO CASILLO

Projeto e implementao em FPGA de um


processador com conjunto de instruo
recongurvel utilizando VHDL

Natal-RN
Maio de 2005

LEONARDO AUGUSTO CASILLO

Projeto e implementao em FPGA de um


processador com conjunto de instruo
recongurvel utilizando VHDL
Dissertao de mestrado apresentada banca
examinadora do Programa de Ps-Graduao
em Sistemas e Computao da Universidade
Federal do Rio Grande do Norte, como requisito para a obteno do ttulo de Mestre em Sistemas e Computao.

Orientador:

Prof. Dr. Ivan Saraiva Silva

Natal-RN
Maio de 2005

LEONARDO AUGUSTO CASILLO


Projeto e implementao em FPGA de um processador com conjunto de instruo
recongurvel utilizando VHDL
Dissertao de mestrado apresentada banca examinadora do Programa de Ps-Graduao
em Sistemas e Computao da Universidade Federal do Rio Grande do Norte, como requisito
para a obteno do ttulo de Mestre em Sistemas e Computao.
BANCA EXAMINADORA

Prof. Dr. Ivan Saraiva Silva


DIMAp - UFRN

Prof. Dr. Marcelo Alves Barros


UFCG - PB

Prof. Dr. David Paul Boris Dharbe


DIMAp - UFRN

Prof. Dr. Eduardo Brulio Wanderley Netto


CEFET - RN

Agradecimentos
Agradeo primeiramente a Deus por ter dado sade e fora a mim e a minha famlia para
enfrentar as diculdades impostas durante esta caminhada.
Aos meus pais Francisco e Cristina por serem os principais responsveis por ter chegado
aonde cheguei. Pelo amor e carinho, cuidado, pacincia, fora, e paitrocnio.
A minha namorada, amiga, companheira, entre outros adjetivos, Danielle, por todo amor
e ajuda. Obrigado por ter tido pacincia durante todas as crises de stress obtidas durante este
perodo de mestrado.
Ao meu orientador Ivan Saraiva, por todas as timas conversas sobre futebol, poltica, religio, entre outros assuntos relevantes e irrelevantes, e pela orientao durante este mestrado.
Ao professor Galileu Batista de Souza, por me ajudar em vrias questes essenciais para o
desenvolvimento deste projeto.
Aos amigos e colegas de sofrimento do Programa de Ps Graduao em Sistemas e Computao da UFRN: Adriana (Takahashi), Adriano (F), Augusto (Mancha), Anglica (Keka),
Camilinha, Glaucia (Legauzinha), Joseane (Jou), Macilon (Makz), Michael (Schuenk), Stiff e
Thais (Tat). O apoio que demos um ao outro foi importante para que todos ns juntos atingssemos nossas metas.
Ao grupo de pesquisa em Arquitetura e Sistemas Integrados: Linria, Rodrigo, Daniel (Dr.
Amaral), Mnica, Slvio, Diego (Tomate), Tssia e Gustavo Giro.
Ao Programa Nacional de Microeletrnica (PNM), por nanciar meus estudos.
As professoras e amigas Ndja R. Santiago e Karla Darlene, que prestaram um auxlio
fundamental para que conseguisse terminar este projeto.
E a todos que ajudaram diretamente ou indiretamente para a realizao deste objetivo...

MUITO OBRIGADO!

"Que as palavras que eu falo no sejam ouvidas como prece nem repetidas com
fervor, Apenas respeitadas como a nica coisa que resta a um homem inundado de sentimento.
Porque metade de mim o que eu ouo, mas a outra metade o que calo."
Oswaldo Montenegro

Resumo
A Computao Recongurvel uma soluo intermediria na resoluo de problemas
complexos, possibilitando combinar a velocidade do hardware com a exibilidade do software.
Uma arquitetura recongurvel possui vrias metas, entre estas o aumento de desempenho.
Dentre os vrios segmentos em relao s arquiteturas recongurveis, destacam-se os Processadores Recongurveis. Estes processadores combinam as funes de um microprocessador com uma lgica recongurvel e podem ser adaptados depois do processo de desenvolvimento. Processadores com Conjunto de Instrues Recongurveis (RISP - Recongurable
Instruction Set Processors) so um subconjunto dos processadores recongurveis, que visa
como meta a recongurao do conjunto de instrues do processador, envolvendo caractersticas referentes aos padres de instrues como formatos, operandos, e operaes elementares.
Este trabalho possui como objetivo principal o desenvolvimento de um processador RISP,
combinando as tcnicas de congurao do conjunto de instrues do processador executadas
em tempo de desenvolvimento, e de recongurao do mesmo em tempo de execuo. O projeto
e implementao em VHDL deste processador RISP tem como intuito provar a aplicabilidade
e a ecincia de dois conceitos: utilizar mais de um conjunto de instruo xo, com apenas
um ativo em determinado momento, e a possibilidade de criar e combinar novas instrues,
de modo que o processador passe a reconhec-las e utiliz-las em tempo real como se estas
existissem no conjunto de instruo xo.
A criao e combinao de instrues realizada mediante uma unidade de recongurao
incorporada ao processador. Esta unidade permite que o usurio possa enviar instrues customizadas ao processador para que depois possa utiliz-las como se fossem instrues xas do
processador.
Neste trabalho tambm encontram-se simulaes de aplicaes envolvendo instrues xas
e customizadas e resultados das comparaes entre estas aplicaes em relao ao consumo de
potncia e ao tempo de execuo que conrmam a obteno das metas para as quais o processador foi desenvolvido.
Palavras-Chave: processadores recongurveis, RISP, VHDL, conjunto de instruo.

Abstract
The Recongurable Computing is an intermediate solution at the resolution of complex problems, making possible to combine the speed of the hardware with the exibility of the software.
An recongurable architecture possess some goals, among these the increase of performance.
The use of recongurable architectures to increase the performance of systems is a well known
technology, specially because of the possibility of implementing certain slow algorithms in the
current processors directly in hardware.
Amongst the various segments that use recongurable architectures the recongurable processors deserve a special mention. These processors combine the functions of a microprocessor
with a recongurable logic and can be adapted after the development process. Recongurable
Instruction Set Processors (RISP) are a subgroup of the recongurable processors, that have as
goal the reconguration of the instruction set of the processor, involving issues such formats,
operands and operations of the instructions.
This work possess as main objective the development of a RISP processor, combining the
techniques of conguration of the set of executed instructions of the processor during the development, and reconguration of itself in execution time. The project and implementation in
VHDL of this RISP processor has as intention to prove the applicability and the efciency of
two concepts: to use more than one set of xed instructions, with only one set active in a given
time, and the possibility to create and combine new instructions, in a way that the processor
pass to recognize and use them in real time as if these existed in the xed set of instruction.
The creation and combination of instructions is made through a reconguration unit, incorporated to the processor. This unit allows the user to send custom instructions to the processor,
so that later he can use them as if they were xed instructions of the processor.
In this work can also be found simulations of applications involving xed and custom instructions and results of the comparisons between these applications in relation to the consumption of power and the time of execution, which conrm the attainment of the goals for which
the processor was developed.
Keywords: Recongurable Processor, RISP, VHDL, instruction set.

Lista de Figuras
1

Acoplamento atravs do barramento de E/S . . . . . . . . . . . . . . . . . .

p. 10

Acoplamento atravs de um coprocessador . . . . . . . . . . . . . . . . . . .

p. 10

Acoplamento atravs de uma RFU . . . . . . . . . . . . . . . . . . . . . . .

p. 10

Codicao de instrues por meio do CodOp . . . . . . . . . . . . . . . . .

p. 11

Codicao de instrues mediante um identicador . . . . . . . . . . . . .

p. 12

Codicao hardwired . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 13

Codicao xa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 13

Codicao exvel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 14

Caminho de dados do PRISC . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 16

10

Formato de instruo do PRISC . . . . . . . . . . . . . . . . . . . . . . . .

p. 17

11

Arquitetura do Chimaera . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 19

12

Bloco Lgico do Chimaera . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 20

13

Arquitetura do GARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 20

14

Arquitetura da RFU do OneChip . . . . . . . . . . . . . . . . . . . . . . . .

p. 21

15

Processador CRISP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 23

16

Processador XiRISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 23

17

Formato de instruo do VISC . . . . . . . . . . . . . . . . . . . . . . . . .

p. 24

18

Sinais OCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 25

19

Temporizao OCP envolvendo operaes de escrita e leitura . . . . . . . . .

p. 27

20

Temporizao OCP com controle de uxo . . . . . . . . . . . . . . . . . . .

p. 29

21

Temporizao OCP com latncia de leitura . . . . . . . . . . . . . . . . . . .

p. 30

22

Unidades constituintes do processador . . . . . . . . . . . . . . . . . . . . .

p. 33

23

Unidade Operativa do processador . . . . . . . . . . . . . . . . . . . . . . .

p. 34

24

Representao das unidades adaptadas ao padro OCP . . . . . . . . . . . .

p. 36

25

Conjunto de estados do CodOp 05H . . . . . . . . . . . . . . . . . . . . . .

p. 38

26

Conjunto de estados da instruo LODD . . . . . . . . . . . . . . . . . . . .

p. 39

27

Diagrama de estados do processo de execuo de instrues xas . . . . . . .

p. 42

28

Implementao da instruo LOCO . . . . . . . . . . . . . . . . . . . . . .

p. 43

29

Unidade de recongurao . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 44

30

Diagrama de estados do processo de recongurao . . . . . . . . . . . . . .

p. 45

31

Exemplo de funcionamento da Lpm_ram de vericao. (a) nova instruo.


(b) continuao da instruo. (c) trmino da instruo. (d) erro de recongurao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 47

32

Exemplo de funcionamento da tabela de endereos para um novo CodOp. . .

p. 49

33

Exemplo de funcionamento da tabela de endereos para um mesmo CodOp. .

p. 50

34

Processo de recongurao de um novo CodOp . . . . . . . . . . . . . . . .

p. 51

35

Continuao do processo de recongurao de um CodOp . . . . . . . . . .

p. 52

36

Diagrama de estados do processo de execuo de instrues reconguradas .

p. 53

37

Processo de recongurao de um novo CodOp . . . . . . . . . . . . . . . .

p. 54

38

Continuao do processo de recongurao de um CodOp . . . . . . . . . .

p. 55

39

Disposio dos bits da palavra de recongurao . . . . . . . . . . . . . . .

p. 55

40

Viso geral da simulao de alternncia de conjuntos de instrues . . . . . .

p. 62

41

Simulao da instruo muda_modo . . . . . . . . . . . . . . . . . . . . . .

p. 62

42

Simulao da instruo LOCO 1AH . . . . . . . . . . . . . . . . . . . . . .

p. 63

43

Simulao da instruo IR = 0D084200H do conjunto 1 . . . . . . . . . . . .

p. 64

44

Simulao da alterao do conjunto de instruo 1 para 2 . . . . . . . . . . .

p. 64

45

Simulao da instruo IR = 0D084200H do conjunto 2 . . . . . . . . . . . .

p. 65

46

Simulao da alterao do conjunto de instruo 2 para 3 . . . . . . . . . . .

p. 65

47

Simulao da instruo IR = 0D084200H do conjunto 3 (a) . . . . . . . . . .

p. 66

48

Simulao da instruo IR = 0D084200H do conjunto 3 (b) . . . . . . . . . .

p. 66

49

Diagrama de estados do CodOp . . . . . . . . . . . . . . . . . . . . . . . .

p. 67

50

Simulao do processo de recongurao (b) . . . . . . . . . . . . . . . . .

p. 68

51

Simulao do processo de recongurao (a) . . . . . . . . . . . . . . . . .

p. 68

52

Simulao do processo de obteno de valores . . . . . . . . . . . . . . . . .

p. 69

53

Simulao do processo de execuo da instruo recongurada . . . . . . . .

p. 69

54

Simulao do processo de execuo das instrues MAC e LDR . . . . . . .

p. 70

55

Viso geral da simulao do Fatorial utilizando instrues xas . . . . . . . .

p. 73

56

Execuo das operaes durante a simulao do Fatorial . . . . . . . . . . .

p. 73

57

Trmino da execuo do Fatorial . . . . . . . . . . . . . . . . . . . . . . . .

p. 74

58

Viso geral da simulao do Fatorial utilizando instrues INC R e REC R . .

p. 75

59

Execuo das instrues INC R e REC R . . . . . . . . . . . . . . . . . . .

p. 76

60

Repetio do processo de fatorial sem recongurao de INC e DEC . . . . .

p. 76

61

Repetio do processo de fatorial sem recongurao de FAT . . . . . . . . .

p. 78

Lista de Tabelas
1

Codicao dos comandos MCmd . . . . . . . . . . . . . . . . . . . . . . .

p. 26

Codicao dos comandos SResp . . . . . . . . . . . . . . . . . . . . . . .

p. 26

Conjuntos de instrues do processador . . . . . . . . . . . . . . . . . . . .

p. 41

Composio da palavra de congurao . . . . . . . . . . . . . . . . . . . .

p. 56

Valores obtidos na compilao do processador . . . . . . . . . . . . . . . . .

p. 60

Valores obtidos para cada conjunto de instruo . . . . . . . . . . . . . . . .

p. 61

Execuo do fatorial utilizando apenas instrues xas . . . . . . . . . . . .

p. 72

Execuo do fatorial utilizando instrues reconguradas . . . . . . . . . . .

p. 75

Informaes adicionais das instrues reconguradas . . . . . . . . . . . . .

p. 75

10

Execuo do fatorial utilizando instrues reconguradas com mais de uma


operao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

p. 77

Informaes adicionais das instrues reconguradas . . . . . . . . . . . . .

p. 78

Lista de Siglas e Abreviaturas


FPGA (Field Programmable Gate Array), p. 2
RTR (Run-Time Reconguration), p. 2
SRAM (Static Random Access Memory), p. 3
RISP (Recongurable Instruction Set Processors), p. 4
OCP (Open Core Protocol), p. 6
ASICs (Aplication Specic Integrated Circuits), p. 7
ASIPs (Specic Instruction Set Processors), p. 7
RPU (Recongurable Processing Unit), p. 9
PCI (Peripheral Component Interconnect), p. 9
RFU (Recongurable Functional Unit), p. 10
CodOp (Cdigo da Operao), p. 11
LUT (Lookup Tables), p. 14
ULA (Unidade Lgica Aritmtica), p. 15
NOC - Network On Chip), p. 15
PRISM (Processor Recongurable through Instruction-Set Metamorphosis), p. 16
PRISC (PRogrammable Instruction Set Computer), p. 16
RISC (Reduced Instruction Set Computer), p. 16
PFUs (Programmable Functional Units), p. 16
SoC (System-on-a-Chip), p. 17
DISC (Dynamic Instruction Set Computer), p. 17
RCP (Recongurable Co-Processor), p. 18
(PE - Processing Elements), p. 19

CLBs (Congurable Logic Blocks), p. 20


RBT (Recongurable Bits Table, p. 21
VLIW (Very Long Instruction Word), p. 21
FFUs (Fixed Functional Units), p. 21
XiRISC (eXented Instruction Set RISC), p. 22
DSP (Digital Signal Processing), p. 22
VISC (Variable Instruction Set Communications Architecture), p. 24
FSM (Finite State Machine), p. 33
Ac (Acumulador), p. 35
SP (Stack Pointer - Apontador de Pilha), p. 35
PC (Counter Program - Contador de Programa), p. 45
VHDL (VHSIC Hardware Description Language), p. 59

Sumrio

INTRODUO

p. 1

1.1

Contextualizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 1

1.2

Denies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 3

1.3

Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 4

1.4

Diculdades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 5

1.5

Organizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 5

2 REVISO BIBLIOGRFICA

p. 6

2.1

A integrao entre Hardware e Software . . . . . . . . . . . . . . . . . . . .

p. 6

2.2

ASIC, ASIP e RISP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 7

2.3

Desenvolvimento de um RISP . . . . . . . . . . . . . . . . . . . . . . . . .

p. 9

2.3.1

Acoplamento ou Integrao . . . . . . . . . . . . . . . . . . . . . .

p. 9

2.3.2

Codicao de instrues . . . . . . . . . . . . . . . . . . . . . . .

p. 11

2.3.3

Operandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 12

2.3.3.1

Hardwired . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 12

2.3.3.2

Fixo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 12

2.3.3.3

Flexvel . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 13

Desenvolvimento da lgica recongurvel . . . . . . . . . . . . . . . . . . .

p. 13

2.4.1

Granularidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 14

2.4.2

Interconexo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 15

2.4.3

Recongurabilidade . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 15

Trabalhos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 16

2.4

2.5

2.6

O Padro OCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 24

2.6.1

Sinais Bsicos do OCP . . . . . . . . . . . . . . . . . . . . . . . . .

p. 25

2.6.2

Temporizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 27

3 ARQUITETURA PROPOSTA

p. 32

3.1

Viso Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 32

3.2

Unidade Operativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 34

3.3

Modos de funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 35

3.4

Utilizao do padro OCP . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 36

3.5

Unidade de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 37

3.6

Instrues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 40

3.7

Processo de Execuo de Instrues Fixas . . . . . . . . . . . . . . . . . . .

p. 42

3.8

Unidade de Recongurao . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 44

3.8.1

Processo de recongurao de uma instruo . . . . . . . . . . . . .

p. 45

3.8.2

Processo de Execuo de Instrues Reconguradas . . . . . . . . .

p. 52

Recongurao de uma instruo . . . . . . . . . . . . . . . . . . . . . . . .

p. 55

3.9

4 SIMULAES E RESULTADOS
4.1

p. 59
p. 59

4.1.1

Anlise de custo dos conjuntos de instrues . . . . . . . . . . . . .

p. 60

Simulaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 61

4.2.1

Simulao da alternncia entre os conjuntos de instrues . . . . . .

p. 61

4.2.2

Simulao da criao de uma instruo: MAC D, A, B, C . . . . . . .

p. 67

4.2.3

4.2

Resultados da Compilao . . . . . . . . . . . . . . . . . . . . . . . . . . .

Simulao de uma aplicao: Fatorial . . . . . . . . . . . . . . . . .

p. 70

5 Consideraes nais

p. 79

Referncias

p. 82

Apndice A -- Esquema completo do processador

p. 85

Apndice B -- Conjunto de registradores

p. 88

Apndice C -- Fluxograma da mquina de estados do processador

p. 89

Apndice D -- Conjuntos de Instrues

p. 94

D.1 Conjunto 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 94

D.2 Conjunto 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 96

D.3 Conjunto 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 98

Apndice E -- Microinstrues dos conjuntos de Instrues Fixos

p. 100

E.1 Conjunto de instruo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 100


E.2 Conjunto de instruo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 103
E.3 Conjunto de instruo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 105
Apndice F -- Codicao dos formatos de operaes

p. 108

INTRODUO

Este Captulo dene o escopo do trabalho e o contextualiza, bem como introduz algumas
denies sobre computao recongurvel, com nfase para os processadores recongurveis.
Estes conceitos so necessrios para um melhor entendimento acerca desta dissertao.

1.1

Contextualizao

Um dos principais usos da computao consiste na resoluo de problemas complexos existentes nas reas de engenharia e cincias exatas, geralmente relacionados a fatores como desempenho, tempo de resposta, ecincia, disponibilidade, tolerncia falhas, entre outros. Existem
diversas pesquisas para que tais solues consumam cada vez menos recursos computacionais
necessrios para armazenamento, recuperao, transmisso e processamento de informaes e
para que estas sejam realizadas em um menor perodo de tempo possvel.
[Martins et al., 2003] arma que as solues para estes problemas podem ser classicadas
basicamente em dois paradigmas, que so as solues implementadas em Hardware Fixo (HF)
ou Hardwired e as solues implementadas em Hardware Programvel atravs de Software
(HP+SW). As principais decincias do paradigma de hardware xo so a falta de exibilidade
e sua sub-utilizao quando da execuo de aplicaes diversas. Alm disso, os componentes
de hardware utilizados neste paradigma no podem ser alterados aps a fabricao, no sendo
assim possvel realizar adaptaes durante a execuo de tarefas computacionais.
J no paradigma de Hardware Programvel atravs de Software, a principal decincia est
relacionada com o desempenho durante a execuo de aplicaes, que muitas vezes insatisfatrio. Apesar da grande exibilidade para a execuo de qualquer tipo de trabalho que envolva
processamento computacional, a caracterstica genrica destes sistemas faz com que as solues
implementadas apresentem desempenho inferiores ao timo.
As desvantagens relacionadas com desempenho, exibilidade, custo, entre outros, associados a cada um desses tipos de abordagens de implementao de hardware so os principais

problemas que motivaram o desenvolvimento de novos modelos e tipos de implementao de


solues computacionais.
A Computao Recongurvel uma soluo intermediria entre as solues em dispositivos dedicados e de propsito geral. De acordo com [Martins et al., 2003], entre os motivos
para o seu estudo, constam a demanda computacional de algumas importantes aplicaes atuais
e futuras, a inadequao de alguns modelos e estilos de computao atual em termos de desempenho e exibilidade, o interesse das principais empresas e universidades do mundo, e tambm
a evoluo dos dispositivos computacionais em termos de arquitetura e tecnologia.
Em termos bsicos, a Computao Recongurvel combina a velocidade do hardware com
a exibilidade do software. [Adrio, 1997] cita que a tecnologia da computao recongurvel
consiste na habilidade de se modicar o hardware da arquitetura do sistema para se adequar
aplicao; e isto pode ou no ser realizado com o sistema em funcionamento.
A Computao Recongurvel, segundo [Dehon, 1996], ainda uma rea em desenvolvimento, diferente de arquiteturas de computadores onde os conceitos e mecanismos j so alvo de
estudos a muito tempo. Apesar dos conceitos bsicos de computao recongurvel terem sido
propostos na dcada de 60, as primeiras demonstraes s vieram ocorrer em meados da dcada
de 90. A partir desta dcada, de acordo com [Mesquita, 2002], houveram avanos signicativos
no campo da computao recongurvel utilizando-se FPGAs (Field Programmable Gate Arrays) 1 como base para sistemas reprogramveis de alto desempenho. Muitos desses sistemas
alcanaram altos nveis de desempenho e resultados satisfatrios na aplicao de determinadas
tarefas. No entanto, os FPGAs so tipicamente congurados antes de iniciarem a execuo da
aplicao, ou seja, apesar de serem classicados como dispositivos recongurveis, estes so
recongurados apenas em tempo de desenvolvimento. Isto fez com que os estudos neste campo
continuassem sendo amplamente explorados em busca de novas solues, como por exemplo a
Recongurao Dinmica.
A recongurao dinmica, tambm chamada de Run-Time Reconguration(RT R), onthe-y reconguration ou in-circuit reconguration, consiste no processo de recongurao de
um dispositivo em em tempo de execuo, em que no h necessidade de reiniciar o circuito ou
remover elementos recongurveis para realizar a programao do dispositivo.
Uma arquitetura recongurvel possui como principais metas: acrscimo de velocidade
e capacidade de prototipagem, representadas pelo nmero de portas lgicas equivalentes, proporcionando aumento de desempenho; recongurao dinmica e/ou parcial; baixo consumo na
1 FPGAs

so dispositivos que consistem de uma matriz de blocos lgicos, formada por blocos de entrada e
sada, e conectada por os de interconexo, onde todos esses tens so congurveis

recongurao; dispositivos livres de falhas; granularidade adequada ao problema, entre outros.


O uso de arquiteturas recongurveis para incrementar o desempenho de sistemas uma tecnologia muito utilizada, principalmente pela possibilidade de implementao de certos algoritmos
lentos nos atuais processadores diretamente no hardware.
Esta dissertao se insere neste contexto de busca pelo desenvolvimento de arquiteturas
recongurveis mais adequadas ao uso de sistemas computacionais, particularmente visando
um acrscimo de desempenho na soluo de tarefas computacionais.

1.2

Denies

O termo Sistemas de Computao Recongurvel geralmente se refere a habilidade de recongurar um FPGA baseado na tecnologia SRAM (Static Random Access Memory).De acordo
com [Goncalves et al., 2003], esta tecnologia propicia chips extremamente ecientes e totalmente reaproveitveis, pois estes podem ser reprogramados e reutilizados quantas vezes forem
necessrias.
Os Sistemas de Computao Recongurvel so plataformas de hardware cujas arquiteturas podem ser modicadas por software, em tempo de execuo, para melhor adequar-se
aplicao que est sendo executada naquele instante. Deste modo, o processador recongurvel
passa a trabalhar com uma arquitetura desenvolvida exclusivamente para aquele determinado
tipo de aplicao, permitindo uma ecincia muito maior do que a normalmente encontrada
em processadores de uso geral. Isto ocorre porque o hardware otimizado para executar os
algoritmos necessrios para uma aplicao especca.
Apesar do nome, as arquiteturas recongurveis podem ser hbridas, alm de puramente
recongurveis. Uma arquitetura recongurvel hbrida consiste em dispositivos de hardware
xo e hardware programvel em conjunto com um hardware recongurvel. Tambm possvel a recongurao atravs de software, onde os objetos denidos como hardware podem ser
redenidos como blocos ou mdulos construtivos, como mostra [Barat and Lauwereins, 2000].
O hardware recongurvel apresenta-se como uma alternativa tecnolgica que pode adaptarse a aplicao com a facilidade de um processador de propsito geral, enquanto mantm as
vantagens de desempenho do hardware dedicado. De acordo com [Arago et al., 2000], a computao recongurvel tem um grande potencial a ser explorado especialmente em aplicaes
que necessitam de alto desempenho como, por exemplo, processamento de imagens e aplicaes
de tempo real. Segundo [Silva, 2001], as arquiteturas recongurveis so atualmente utilizadas
em diversas reas de aplicao, propiciando resultados satisfatrios em aplicaes multimdia,

Processamento Digital de Sinais, Telecomunicaes, Computao Mvel, Criptograa entre


outros.
[Barat and Lauwereins, 2000] mostra que, dentre os vrios segmentos em relao ao hardware recongurvel, destacam-se os Processadores Recongurveis. Estes processadores
combinam as funes de um microprocessador com uma lgica recongurvel e podem ser
adaptados depois do processo de desenvolvimento, do mesmo modo que os processadores programveis podem se adaptar a mudanas na aplicao.
[Lodi et al., 2003] dene os Processadores com Conjunto de Instrues Recongurveis
(RISP- Recongurable Instruction Set Processors) como um subconjunto dos processadores
recongurveis. Os processadores RISP consistem em um ncleo do microprocessador que se
estende lgica recongurvel. A partir da dcada de 90, as pesquisas acerca dos processadores
RISP se intensicaram, propiciando o surgimento de diversos processadores desenvolvidos para
o aprimoramento dos conceitos envolvendo sua utilizao, e o surgimento de novas tendncias,
como a utilizao dos RISPs destinados a aplicaes em geral.

1.3

Objetivos

O presente trabalho tem como intuito estudar e propor uma arquitetura de um microprocessador que possibilite a criao e recongurao de novos padres de instrues. Nesta dissertao foi desenvolvido um processador RISP, combinando as tcnicas de congurao do
conjunto de instrues do processador executadas em tempo de desenvolvimento, e de recongurao do mesmo em tempo de execuo, de uma forma simples e eciente.
Para tanto, este processador apresenta a incorporao de uma unidade recongurvel destinada a recongurao de novas instrues. Com o objetivo de possibilitar a avaliao do
impacto da unidade recongurvel, o processador desenvolvido inclui uma unidade de controle
onde trs conjuntos de instrues distintos foram implementados. A escolha da utilizao de
cada um destes conjuntos pode ser realizada atravs de instrues privilegiadas, como ser visto
posteriormente.
O processador proposto neste trabalho permite, ento, explorar a relao entre a complexidade da recongurao dinmica de instrues e o desempenho no uso de um conjunto de
instruo especico hardwired.
Tambm objetivo desta dissertao contribuir com a linha de pesquisa em Sistemas Integrados e Distribudos, acumulando conhecimentos sobre o projeto e implementao de micro-

processadores.
Este processador apresentado nesta dissertao como uma Prova de conceito, ou seja,
pretende-se provar, atravs de evidncias como simulaes e testes, que o modelo de arquitetura
proposto pode ser realmente utilizado na prtica. Como nem sempre possvel determinar
se projees tericas do conceito de uma arquitetura podem ser aplicadas na prtica, torna-se
essencial desenvolver um modelo de prova de conceito que possa executar a funo desejada
em um ambiente real. Aplicando este tipo de desenvolvimento, pode-se portanto vericar com
antecedncia se o conceito original possui falhas ou funcionar como esperado.

1.4

Diculdades

O modelo de arquitetura e a prova de conceito seriam melhor explorados com a disponibilidade de um compilador. Um compilador para a linguagem TIGER est sendo desenvolvido por outro pesquisador do grupo de pesquisa em Arquiteturas e Sistemas Integrados da
UFRN/CCET/DIMAp. Entretanto, at o momento em que esta dissertao foi nalizada, este
compilador ainda no se encontrava concludo, portanto no houve possibilidade de se realizarem testes de maior porte, sendo estes testes uma das prioridades do grupo de pesquisa para
trabalhos futuros.

1.5

Organizao

Este trabalho est estruturado da seguinte forma: o captulo 2 introduz alguns conceitos
tericos fundamentais com relao aos processadores recongurveis, dando nfase aos processadores RISP e aos trabalhos anteriormente publicados. O captulo 3 apresenta o processador
proposto nesta dissertao, no que diz respeito sua organizao, estrutura e caractersticas
principais. O captulo 4 mostra a implementao do processador, onde so apresentados resultados de simulaes obtidas das unidades funcionais implementadas. Por ltimo, o captulo 5
apresenta as consideraes nais acerca deste trabalho.

REVISO BIBLIOGRFICA

Este Captulo aborda alguns aspectos do estado-da-arte da computao recongurvel, em


particular os processadores RISP. Sero extradas informaes quanto a concepo e implementao destes processadores. O captulo tambm inclui uma breve anlise de algumas arquiteturas
da literatura que serviram como base para a criao do processador proposto nesta dissertao.
Este Captulo traz tambm uma explicao sobre o padro de comunicao OCP (Open Core
Protocol) [Partnerchip, 2001], utilizado para a interface entre o processador e o mundo externo.

2.1

A integrao entre Hardware e Software

Os Sistemas Integrados hoje so compostos de muitos componentes de hardware e software


que interagem entre si, de modo que o equilbrio entre estes componentes determina o sucesso
do sistema. [Lodi et al., 2003] diz que, devido natureza do software, seus componentes so
mais fceis de serem modicados do que os de hardware.
Os componentes de software, em razo de sua exibilidade, oferecem uma maneira mais
fcil de corrigir erros, mudar a aplicao, reutilizar componentes e reduzir o perodo entre o
desenvolvimento do produto e sua chegada ao mercado (time-to-market). Entretanto, quando
comparados s solues em hardware puro, os componentes de software so mais lentos e
consomem mais energia. Os componentes de hardware so utilizados quando a velocidade e/ou
o consumo de energia so crticos. Por outro lado, os componentes de hardware requerem um
processo de desenvolvimento longo e caro.
De acordo com [Martins et al., 2003], uma arquitetura recongurvel pode compartilhar
todas as caractersticas de uma arquitetura tradicional. No entanto, organiza e implementa a
computao de maneira diferente. Ao invs de processar uma funo por meio de um conjunto
de instrues executadas seqencialmente ao longo do tempo, assim como em um processador,
as arquiteturas recongurveis geralmente processam a funo por meio de unidades lgicas
mapeadas em diferentes blocos construtivos bsicos disponveis dentro dos dispositivos recon-

gurveis, como os FPGAs. Assim, as arquiteturas recongurveis substituem a computao


temporal pela computao espacial, o que possibilita ganho de desempenho e menor consumo
de energia. [Compton and Hauck, 2000] cita que as arquiteturas recongurveis permitem a recongurao dos blocos construtivos, tanto na sua lgica como em sua funcionalidade interna,
assim como a recongurao dos blocos de interconexo, responsveis pela interligao destes blocos construtivos. Os blocos construtivos normalmente implementam ou so as prprias
unidades de processamento, armazenamento, comunicao e entrada/sada de dados.
Do exposto acima, conclui-se pela vantagem terica da utilizao das arquiteturas recongurveis. Esta dissertao explora este espao de projeto de sistemas computacionais em
hardware, propondo o desenvolvimento de um processador com conjunto de instruo recongurvel.

2.2

ASIC, ASIP e RISP

[Smith, 1997] dene os ASICs (Aplication Specic Integrated Circuits), tambm chamados de hardware totalmente customizados, como processadores projetados para executarem
uma determinada operao especca, o que os tornam rpidos e ecientes quando esto executando a operao para a qual eles foram desenvolvidos. Contudo, aps fabricado, o ASIC no
pode ser alterado. Caso seja necessrio modic-lo, o ASIC deve ser desenvolvido e fabricado
novamente.
Os microprocessadores, Por outro lado, so dispositivos exveis que podem ser programados para desempenhar qualquer tarefa computacional. Entretanto, estes possuem menor desempenho quando comparados com um ASIC por causa do tempo gasto na busca e decodicao
de instrues e da sua no-especializao.
Os Processadores com Conjunto de Instrues para Aplicaes Especcas (ASIPs - Specic Instruction Set Processors) so processadores cujo conjunto de instrues inclui instrues
dedicadas aplicao, ou grupo de aplicaes, para as quais foi desenvolvido. Na literatura
possvel encontrar ferramentas que propem a gerao de uma descrio sintetizvel de um
ASIP, como em [It and Carro, 2000]. Estas descries podem servir como entrada para um
processo de sntese, realizado ou no pela prpria ferramenta, dando origem a um arquivo de
congurao de um FPGA. Apesar da exibilidade aparente deste processo e, no obstante ao
aumento de desempenho obtido quando comparado com processadores de propsito geral, os
ASIPs assim obtidos apresentam algumas restries quanto a desempenho e exibilidade. Em
[Ito et al., 2001] o conjunto de instrues um simples subconjunto dos "byte codes"java, por-

tanto no necessariamente melhor adaptados aplicao alvo. Quanto a exibilidade do ASIP,


de um modo geral, apresentam melhor adequao apenas para a aplicao, ou grupo de aplicaes, para as quais foi desenvolvido. Quando a aplicao muda, a adequao desaparece e o
desempenho sofre uma degradao.
Em termos de desempenho, os processadores ASICs e ASIPs apresentam vantagens em relao aos outros sistemas computacionais, como os microprocessadores e microcontroladores,
em relao execuo das aplicaes para as quais foram originalmente desenvolvidas. Entretanto, esta vantagem se torna deciente quando da execuo de outras aplicaes. Algumas vezes a utilizao destes processadores para outras aplicaes torna-se impraticvel. Alm disso,
[Silva, 2001] arma que estas arquiteturas no so adaptveis do ponto de vista da capacidade
de reorganizao estrutural e criao de novas funes em hardware.
Os processadores recongurveis, como por exemplo os RISPs, em detrimento das demais
arquiteturas tais quais ASICs e ASIPs, no possuem uma estrutura adaptada a uma nalidade especca. Em outras palavras, os recursos internos e a estrutura dos dispositivos recongurveis
encontram-se incompletos at que sejam mapeados em hardware mediante uma congurao.
Uma possibilidade seria o mapeamento em hardware do conjunto de instrues do processador,
que pode ser modicado de acordo com as necessidades da aplicao vigente.
[Barat et al., 2002b] mostra que a diferena de um processador RISP para um ASIC, em
relao execuo de instrues, est no fato de que existe um conjunto de instrues xo implementado por meio de um hardware xo e um conjunto de instrues recongurvel implementado sob uma lgica recongurvel, que pode sofrer alteraes durante o tempo de execuo. As unidades funcionais recongurveis oferecem a adaptao do processador aplicao,
enquanto o ncleo do processador oferece a programabilidade do software. O mesmo autor
tambm arma que o custo do projeto do ncleo de um microprocessador reduzido mediante
a reutilizao do mesmo para vrias aplicaes diferentes. Nos ASIPs, o custo para cada nova
gerao vem da reformulao do projeto das unidades funcionais especializadas, o que pode
ser relativamente alto. Tcnicas de prototipagem rpida so essenciais para reduzir o custo e o
tempo necessrio para esta reformulao do projeto. Um RISP pode ser usado como um prottipo para uma famlia de processadores ASIP que compartilham o mesmo ncleo ou conjunto
de instrues xas.

2.3

Desenvolvimento de um RISP

De acordo com [Barat and Lauwereins, 2000], o desenvolvimento de um processador recongurvel, em particular um RISP, deve ser realizado a partir de duas caractersticas principais. A primeira a interface entre o microprocessador e a lgica recongurvel, que envolve os
aspectos relacionados sobre de que modo os dados so transferidos do processador para a lgica
recongurvel e vice-versa, assim como a sincronizao entre estes. A segunda o desenvolvimento da lgica recongurvel, onde esto envolvidas questes referentes a granularidade,
recongurabilidade, interconexo, entre outros.
Nas sub-sees seguintes sero vistas as diferentes possibilidades de implementao existentes para cada uma das caractersticas citadas acima. Tais informaes foram retiradas da
literatura. Na sesso 2.5, alguns trabalhos relacionados encontrados na literatura sero analisados.

2.3.1 Acoplamento ou Integrao


Um processador recongurvel consiste de um microprocessador acoplado a uma lgica recongurvel. A posio da lgica recongurvel, denominada Unidade de Processamento Recongurvel (RPU - Recongurable Processing Unit), em relao ao microprocessador afeta
o desempenho do sistema e o tipo de aplicao que utilizar este hardware recongurvel.
[Carrillo and Chow, 2001] diz que o benefcio obtido da execuo do cdigo na lgica recongurvel depende de dois aspectos, que so o tempo de comunicao e o tempo de execuo.
O tempo necessrio para executar uma operao a soma do tempo necessrio para transferir
os dados a serem processados e o tempo necessrio para process-lo. Se este tempo total for
menor do que o tempo obtido pelo processador sem a lgica recongurvel, ento conrma-se
o benefcio.
O hardware recongurvel pode ser acoplado ao microprocessador por trs maneiras distintas: a primeira destas consiste em anexar a lgica recongurvel em algum barramento de
Entrada e Sada, por exemplo em um barramento PCI (Peripheral Component Interconnect),
como ilustrado na Figura 1.
A segunda maneira por meio de um coprocessador, em que a lgica recongurvel inserida prxima ao microprocessador. Deste modo, a comunicao entre as unidades realizada
utilizando-se protocolos de comunicao similares aos utilizados em coprocessadores de ponto
utuante. A Figura 2 mostra este modo de acoplamento.

10

Figura 1: Acoplamento atravs do barramento de E/S

Figura 2: Acoplamento atravs de um coprocessador

A terceira maneira de acoplamento consiste na utilizao de uma ou mais Unidades Funcionais Recongurveis (RFU Recongurable Functional Unit), em que a lgica recongurvel
inserida no microprocessador, como exemplicado na Figura 3. Os processadores RISP seguem este tipo de acoplamento.

Figura 3: Acoplamento atravs de uma RFU

Os dois primeiros modos de acoplamento so conhecidos como fracamente acoplados. A


caracterstica principal destes modos de acoplamento se deve ao fato de que pode existir um
aumento de desempenho em virtude da utilizao da lgica recongurvel, mas este aumento
penalizado devido ao alto custo adicional durante a transferncia de dados. [Barat et al., 2002a]

11

cita como vantagens dessa forma de acoplamento a facilidade no projeto de sistemas, devido
a utilizao de componentes-padro como FPGAs; o fato de poder utilizar uma maior poro
do hardware recongurvel, pelo motivo do hardware no estar limitado ao espao disponvel
no processador; e a possibilidade do microprocessador e lgica recongurvel poderem realizar
diferentes tarefas ao mesmo tempo em virtude de serem dois dispositivos independentes.
J a integrao de uma unidade funcional recebe a denominao de fortemente acoplado.
Utilizando-se este tipo de acoplamento, o custo de comunicao entre o microprocessador e
a lgica recongurvel praticamente nulo pelo fato de se tornarem um nico dispositivo,
conseqentemente acarretando um aumento na velocidade, tornando possvel a acelerao de
diversas aplicaes.
Como desvantagens, podem-se citar um maior custo de desenvolvimento, por no ser possvel utilizar componentes-padro, e o fato do tamanho do hardware recongurvel ser limitado
ao tamanho do processador.

2.3.2 Codicao de instrues


As instrues recongurveis geralmente so identicadas por um CodOp (Cdigo da
Operao) especial, na forma de um campo extra contido na instruo, o qual pode ser implementado de duas formas:
A primeira forma consiste em especicar no CodOp um endereo de memria com a palavra
de recongurao para uma instruo. Esta forma de codicao causa um aumento no nmero
de bits do tamanho da palavra de instruo. A Figura 4 ilustra este caso.

Figura 4: Codicao de instrues por meio do CodOp

A segunda forma a utilizao de um identicador, responsvel por indexar uma tabela de


congurao onde so armazenadas informaes, como por exemplo a palavra de recongura-

12

o. Esta congurao propicia um menor nmero de bits no tamanho da palavra de instruo,


mas o nmero de instrues distintas passa a ser limitado pelo tamanho da tabela de congurao, como pode ser visto na Figura 5.

Figura 5: Codicao de instrues mediante um identicador

2.3.3 Operandos
A palavra de instruo especica os operandos (valores imediatos, endereos, identicadores, etc) que so enviados para a RFU, codicados em um dos formatos vistos a seguir:
2.3.3.1

Hardwired

O contedo de todos os registradores enviado RFU, sendo que os registradores utilizados


so denidos de acordo com a instruo congurada na RFU. O resultado obtido roteado para
o registrador indicado na palavra de instruo, fazendo com que a RFU acesse uma maior
quantidade de registradores. A desvantagem deste formato deve-se a diculdade na gerao
do cdigo necessrio para efetuar tal roteamento e para denio de quais registradores sero
utilizados. A Figura 6 ilustra este esquema.
2.3.3.2

Fixo

Dois operandos, selecionados por um banco de registradores, esto em posies xas na


palavra de instruo e possuem tipos xos. Este formato necessita de mais bits de instruo,
mas permite maior exibilidade para especicar operandos. A Figura 7 mostra o esquema de
codicao de operandos xos.

13

Figura 6: Codicao hardwired

Figura 7: Codicao xa

2.3.3.3

Flexvel

A posio dos operandos congurvel. Se uma tabela de congurao for utilizada, esta
pode especicar a decodicao dos operandos. Neste caso, um operando selecionado a
partir do banco de registradores e o outro selecionado ou do banco de registradores ou tratado
como uma constante includa na palavra de instruo, dependendo da tabela de congurao. A
Figura 8 ilustra este esquema.

2.4

Desenvolvimento da lgica recongurvel

As Arquiteturas recongurveis podem ser classicadas segundo muitos critrios. Entre os


mais utilizados, so considerados a granularidade de suas unidades recongurveis, a interconexo entre segmentos e o momento da recongurao.

14

Figura 8: Codicao exvel

2.4.1 Granularidade
A granularidade um termo originalmente usado por [Hartenstein, 2001] para designar a
complexidade e a largura das palavras das unidades de recongurao. Quanto granularidade,
as arquiteturas recongurveis podem ser classicadas como:
Arquiteturas Recongurveis de Granularidade Fina: apresentam menor quantidade de
lgica ou poder computacional nas unidades de recongurao. [Hartenstein, 2001] arma
que estas arquiteturas geralmente oferecem maior exibilidade de implementao de
algoritmos em hardware, impondo, entretanto um custo de roteamento bem mais elevado. Essas caractersticas possibilitam uma maior aproximao da arquitetura pscongurao das caractersticas do algoritmo implementado, geralmente resultando em
um melhor desempenho. Alm do roteamento, esse tipo de granularidade apresenta outras desvantagens, dentre elas, alto consumo de energia durante a recongurao e maiores atrasos de propagao dos sinais, como arma [Dehon, 1996]. A granularidade na
utiliza portas como blocos bsicos de construo, implementados utilizando blocos funcionais compostos por tabelas (Lookup Tables LUT ), ip-ops e multiplexadores. As
aplicaes em que este tipo de granularidade so recomendadas so as que envolvem
operaes de manipulao de bits.
Arquiteturas Recongurveis de Granularidade Grossa: apresentam maior quantidade de
lgica ou poder computacional nas unidades de recongurao. Estas arquiteturas so
utilizadas para o mapeamento e execuo de aplicaes que necessitam de caminho de
dados com largura de uma palavra. Suas unidades de recongurao so otimizadas para
maior poder computacional, apresentando melhor desempenho em algoritmos com tais

15

caractersticas. Na granularidade grossa, os blocos de construo so maiores, tipicamente ULAs, multiplicadores, deslocadores, entre outros. Geralmente so utilizados em
aplicaes que envolvem paralelismo.

2.4.2 Interconexo
A interconexo utilizada para conectar elementos de processamento a m de obter a funcionalidade desejada. Algumas arquiteturas recongurveis agrupam os seus blocos construtivos
bsicos em segmentos. Segmentos so unidades mnimas de hardware que podem ser conguradas em uma operao de recongurao. As arquiteturas recongurveis possuem unidades
dedicadas que possibilitam a interconexo intra-segmentos e intersegmentos. O modo de interconexo intra-segmentos conecta elementos situados dentro de um segmento, enquanto que o
modo de interconexo intersegmentos conecta elementos de diferentes segmentos.
Em dispositivos de granularidade na, so encontrados vrios nveis de interconexo intrasegmentos, enquanto que em dispositivos de granularidade grossa, a interconexo feita por
barramentos ou redes em chip (NOC - Network On Chip). Nesta ltima forma de interconexo,
pacotes podem ser roteados entre as unidades de processamento recongurveis, assim como
pode ser visto em [Azevedo et al., 2003] [Soares et al., 2004]. A interconexo intersegmentos
utilizada em RFUs para suportar instrues com mltiplos segmentos, com a nalidade de
transmitir dados entre os diferentes segmentos.

2.4.3 Recongurabilidade
Se uma RFU pode ser congurada apenas em tempo de desenvolvimento, ento considerase que a unidade apenas congurvel. Se a RFU pode ser congurada aps sua inicializao,
em tempo de execuo, a unidade dita recongurvel. Somente alguns dispositivos programveis, como alguns tipos de FPGAs, possuem a capacidade de serem reprogramados, o que no
as tornam sucientes para que sejam considerados dispositivos recongurveis.
Quanto ao momento de recongurao as arquiteturas recongurveis podem ser classicadas como estticas ou dinmicas. [Adrio, 1997] diz que a recongurao dinmica possibilita
a recongurao durante a execuo enquanto que a recongurao esttica requer que a execuo seja interrompida.

16

2.5

Trabalhos Relacionados

As arquiteturas recongurveis foram sendo desenvolvidas e aprimoradas de acordo com a


disponibilidade de tecnologia e visando a resoluo de novos problemas e desaos. De acordo
com [Mesquita, 2002], a partir do amadurecimento da tecnologia de FPGAs, as primeiras arquiteturas recongurveis foram criadas com o intuito principal de aumentar o desempenho
de algoritmos que at ento eram executados em software. O primeiro processador de propsito geral acoplado a um FPGA foi denominado PRISM (Processor Recongurable through
Instruction-Set Metamorphosis), em 1993 [Athanas and Silverman, 1993]. Devido a limitao
da tecnologia dos FPGAs da poca, somente era possvel desenvolver um sistema fracamente
acoplado. Um FPGA comunicava-se com um processador por meio de um barramento.
O primeiro processador dito recongurvel foi denominado PRISC (PRogrammable Instruction Set Computer), em 1994 por [Razdan and Smith, 1994]. PRISC o primeiro a explorar
na pratica a existncia de uma RFU contida em um caminho de dados de um processador MIPS.
O PRISC contm um conjunto de instrues RISC (Reduced Instruction Set Computer)
convencional, juntamente com um conjunto de instruo de aplicao especca, que so implementadas em hardware por meio de unidades funcionais programveis (PFUs - Programmable Functional Units). Estas PFUs so adicionadas arquitetura mantendo os benefcios das
tcnicas RISC de alto desempenho e diminuindo o impacto do tempo de ciclo do processador.
A Figura 9 mostra os recursos de hardware programvel anexados diretamente no caminho de
dados da CPU na forma de uma PFU. A PFU adicionada em paralelo com as unidades funcionais existentes de forma que aumente, sem que ocorra uma substituio, a funcionalidade do
caminho de dados existente. Cada PFU possui duas portas de entrada para os operandos e uma
porta de sada contendo os resultados.

Figura 9: Caminho de dados do PRISC

Para programar a PFU, foi criada uma instruo denominada expfu (Execute PFU). A Fi-

17

gura 10 mostra um exemplo deste formato de instruo no MIPS. A instruo expfu atua como
uma funo booleana de duas entradas e uma sada. O sistema de compilao/sntese nomeia
um nmero lgico da PFU para cada funo booleana da aplicao. O campo de LPnum na instruo de expfu especica a funo particular para ser executada. Os 11 bits do campo LPnum
permitem 2048 diferentes conguraes da programao de PFU por aplicao. A informao
da programao de cada funo lgica da PFU parte do segmento de dados do arquivo de
objeto da aplicao. O nmero lgico da PFU utilizado para indexao dentro do segmento
de dados e para encontrar a informao de programao apropriada. Para cada PFU associado um registrador de 11 bits denominado Pnum, contendo a funo lgica da PFU atualmente
programada. Se o valor de LPnum contida na instruo for o mesmo do registrador Pnum, a
instruo expfu executa normalmente. Caso contrrio, gerada uma exceo.

Figura 10: Formato de instruo do PRISC

Assim, PRISM e PRISC so representantes da primeira gerao de processadores recongurveis, onde vericou-se a ecincia da utilizao de FPGAs para aplicaes especcas,
aumentando o desempenho com relao a solues implementadas em software. O problema
principal desta gerao, segundo [Mesquita, 2002], o gargalo de comunicao entre o processador e os FPGAs e o alto tempo de recongurao. O fato da recongurao ser esttica
impunha a interrupo da execuo para que o sistema possa ser recongurado.
Com a evoluo da tecnologia de integrao, surgiu a segunda gerao de processadores recongurveis, tornando possvel o desenvolvimento de um sistema composto pelo processador,
FPGAs e memria em um nico chip, resultando no embrio do que hoje se identica por SoC
(System-on-a-Chip). Tambm foi possvel o desenvolvimento de processadores utilizando-se
recongurao dinmica.
[Wirthlin, 1995] desenvolveu o processador DISC (Dynamic Instruction Set Computer),
implementado utilizando FPGAs parcialmente recongurveis. A recongurao parcial permite a congurao de sub-sees de um FPGA. Cada instruo tratada como um mdulo de
circuito independente, e estas instrues ocupam espao neste FPGA somente quando necessrio, de modo que estes recursos podem ser reusados para implementar instrues especcas a
uma aplicao aumentando o seu desempenho.
Em 1997 surgiu o processador recongurvel Chimaera, criado por [S. Hauck, 1997] e

18

[de Beeck et al., 2001]. O processador Chimaera um hardware que consiste em um microprocessador com um coprocessador recongurvel (RCP - Recongurable Co-Processor) integrado.
O Chimaera trata a lgica recongurvel no como um recurso xo, mas como um cache
para instrues da RFU. As instrues que tm sido executadas recentemente, ou as que de
alguma maneira existe uma predio de que sero necessrias, so mantidas na lgica recongurvel. Se uma outra instruo for requerida, esta enviada para a RFU, sobrescrevendo
uma ou mais instrues previamente carregadas. Desta maneira, o sistema usa tcnicas de recongurao em tempo de execuo parciais para controlar a lgica recongurvel. Isto requer
que a lgica recongurvel seja um tanto simtrica, de modo que uma instruo dada possa ser
colocada no RFU onde quer que exista uma lgica disponvel.
A m usar instrues na RFU, o cdigo da aplicao inclui chamadas RFU, e os mapeamentos correspondentes na RFU so contidos no segmento da instruo dessa aplicao. As
chamadas RFU so feitas por instrues especiais que dizem ao processador para executar
uma instruo RFU. Uma instruo ID especicada determinando que instruo especca
deve ser executada. Se essa instruo estiver presente na RFU, o resultado dessa instruo escrito no registrador de destino. Desta maneira, as chamadas RFU atuam como qualquer outra
instruo. Se a instruo solicitada no estiver armazenada atualmente na RFU, o processador
parado enquanto a RFU busca a instruo da memria e se recongura.
Uma congurao prpria de RFU determina de quais registradores sero lidos os operandos. Uma nica instruo de RFU pode ler de todos os registradores conectados RFU,
permitindo que uma nica instruo de RFU possa usar at nove operandos diferentes. Assim,
a chamada de RFU consiste somente no CodOp denominado RFUOP, que indica que chamada
instruo RFU. Neste CodOp, um operando ID que especica qual instruo ser chamada e
o operando do registrador de destino. Todas as instrues carregadas na RFU especulam sua
execuo durante cada ciclo do processador, embora seus resultados somente sejam escritos
nos registradores quando sua chamada correspondente RFU sejam realmente realizadas. Uma
instruo RFU pode ser executada em mltiplos ciclos sem a necessidade de interromper o
processador.
A arquitetura de Chimaera mostrada na Figura 11. O componente principal do sistema o
arranjo recongurvel, projetada para suportar execues de alto desempenho. neste arranjo
que todas as instrues de RFU so executadas realmente. Este arranjo recebe suas entradas diretamente do processador ou de um banco de registradores espelho que duplica um subconjunto
dos valores presentes no banco de registradores do processador. Prximo a este arranjo existe

19

um conjunto de "Content Addressable Memory"(CAM), uma por linha no arranjo recongurvel. Estas CAMs vericam a instruo seguinte e determina se a instruo do tipo RFUOP. Se
o valor da CAM combinar com a RFUOP ID, o valor contido nesta linha no arranjo recongurvel ser escrito no barramento de resultado e enviado ao banco de registradores. Se a instruo
que corresponde ao RFUOP ID no estiver presente, o controle da lgica de busca interrompe o
processador e carrega a instruo RFU a partir da memria presente no arranjo recongurvel.
A lgica de busca tambm determina que partes do arranjo recongurvel iro sobrescrever a
instruo que est sendo carregada, e tenta reter as instrues RFU que provavelmente podero
ser utilizadas brevemente.

Figura 11: Arquitetura do Chimaera

O Chimaera um processador criado visando alto desempenho, baseado em uma unidade


funcional de granularidade na conectada a um processador MIPS R4000. A lgica recongurvel organizada em 32 linhas com 32 blocos lgicos cada, com um total de 1024 Elementos
de Processamento (PE - Processing Elements). A Figura 12 representa um bloco lgico do Chimaera. O bloco lgico pode ser congurado como uma 4-LUT, duas 3-LUTs, ou uma 3-LUT e
uma execuo de carry. Utilizando a congurao de carry, operaes aritmticas e lgicas tais
como a adio, subtrao, comparao, paridade e outras podem ser suportadas ecientemente.
O GARP uma arquitetura hbrida desenvolvida por [Hauser and Wawrzynek, 1997] em
1997, na qual o FPGA apresentado como uma unidade funcional escrava localizada no mesmo
espao do processador. Esta arquitetura possui um coprocessador integrado a um ncleo padro
MIPS, com a caracterstica que o coprocessador possui acesso prprio memria. Ao contrrio
do PRISC e Chimaera, o GARP suporta operaes multiciclo. O processador principal possui
instrues especiais para controle, destinadas para carregar conguraes, para fazer cpia de
dados entre o arranjo recongurvel e os registradores do processador, para manipulao do
contador de relgio, entre outros. A Figura 13 mostra um esquema simplicado do GARP. O

20

Figura 12: Bloco Lgico do Chimaera

arranjo recongurvel do GARP constitudo de elementos denominados blocos (blocks). Um


bloco em cada linha denominado como bloco de controle (Control Block), enquanto que os
restantes so denominados Blocos Lgicos Congurveis (CLBs - Congurable Logic Blocks).

Figura 13: Arquitetura do GARP

Em 2001 foi criada por [Carrillo and Chow, 2001] a arquitetura OneChip. Esta arquitetura
integra uma unidade recongurvel dentro de um processador superescalar RISC pipeline. A
OneChip permite a execuo de mltiplas instrues simultaneamente e execuo de instrues
fora de ordem. Isto acarreta um melhor desempenho devido ao fato do processador e da lgica
recongurvel poderem executar diversas instrues em paralelo.
As caractersticas principais do processador OneChip so: recongurao dinmica, lgica

21

programvel no pipeline do processador, pipeline superescalar, que permite mltiplas instrues


enviadas por ciclo e compresso da congurao, que reduz o tamanho da congurao.
[Carrillo and Chow, 2001] arma que a Unidade Funcional Recongurvel (RFU) do OneChip contm um ou mais FPGAs e um controlador FPGA, como visto na Figura 14. Estes
FPGAs possuem mltiplos contextos e so capazes de suportar mais de uma programao para
a lgica recongurvel. Estas conguraes so armazenadas em uma memria de contexto,
que faz com que o FPGA seja capaz de alternar rapidamente entre as conguraes. Cada
contexto de um FPGA congurado independentemente dos outros e atua como um cache de
conguraes. Somente um contexto pode ser ativado em um determinado momento. O Controlador FPGA responsvel pela programao dos FPGAs, pela alternncia entre contextos e
pela seleo de conguraes para respostas se necessrio. A RBT (Recongurable Bits Table
- Tabela de Recongurao de Bits) atua como um gerente de congurao que mantm sob
observao onde as conguraes dos FPGAs esto alocadas. As informaes contidas na tabela so o endereo de cada congurao e sinais que mantm sob observao as conguraes
carregadas e ativas.

Figura 14: Arquitetura da RFU do OneChip

O processador CRISP (Congurable and Recongurable Instruction Set Processor), foi


proposto originalmente por [Barat et al., 2002a] em 2002 depois redenido como (Coarsegrained Recongurable Instruction Set Processor) em 2003 [Barat et al., 2003]. O CRISP
um processador que possui a caracterstica de ser congurvel em tempo de desenvolvimento e
recongurvel em tempo de execuo. Consiste em um processador V LIW (Very Long Instruction Word), que executa instrues compostas por operaes paralelas, executadas em unidades
funcionais xas (FFUs - Fixed Functional Units) e uma unidade funcional recongurvel.

22

Segundo [de Beeck et al., 2001], a sua capacidade de recongurao em tempo de execuo
similar as existentes no Chimaera e OneChip. As unidades funcionais xas so unidades
utilizadas em processadores VLIW tpicos, como multiplexadores e unidades de E/S.
A unidade recongurvel do CRISP recebe um CodOp e um ou mais operandos do banco
de registradores, produzindo um ou mais resultados que so armazenados no banco de registradores. Esta arquitetura possui um decodicador recongurvel, ao invs de um decodicador
hardwired. Este decodicador consiste em uma memria de congurao endereada pelo CodOp, de modo que o CodOp determina qual congurao ser utilizada na lgica recongurvel. Modicando os ndices da memria de congurao, possvel alterar o comportamento
da unidade recongurvel, modicando o conjunto de instrues do processador.
Internamente, a unidade recongurvel composta por vrios arranjos recongurveis
compostos por Elementos de Processamento de granularidade grossa, em que os elementos
de processamento so cpias das unidades xas, conectadas por meio de uma rede de conexo
crossbar. Este crossbar pode conectar a sada de qualquer Elemento de Processamento entrada
de qualquer outro Elemento de Processamento. Tambm possvel conectar cada Elemento de
Processamento ao banco de registradores mediante as portas de E/S da RFU. Cada Elemento de
Processamento possui um registrador em sua sada, que pode ser bypassed. Ao combinar este
registrador opcional com a rede crossbar, possvel realizar computao espacial.
Somente as Unidades Fixas so necessrias para executar programas. O arranjo recongurvel utilizado para aumentar o desempenho e diminuir o consumo de potncia, comparado
aos arranjos tradicionais, como as tabelas LUTs (Look-Up Tables). A Figura 15 mostra um
esquema simplicado do processador CRISP.
O XiRISC (eXented Instruction Set RISC), descrito por [Lodi et al., 2003] em 2003, um
processador VLIW baseado em um RISC clssico com um pipeline de 5 estgios. Esta arquitetura apresenta unidades funcionais hardwired para clculos DSP e um caminho de dados
congurvel adicional com pipeline, denominado Gate Array, ou PiCoGA, que atua como um
repositrio de unidades funcionais de aplicaes especcas virtual.
O XiRISC apresenta uma arquitetura Load/Store, onde os dados lidos da memria so armazenados em um banco de registradores antes de serem enviados para as unidades funcionais. A
unidade funcional recongurvel fornece a capacidade de dinamicamente estender o conjunto
de instrues do processador com instrues multiciclo de uma aplicao especca, e ento
concluir a congurao em tempo de execuo. O processador busca duas instrues de 32 bits
em cada ciclo de relgio, que so executadas paralelamente nas unidades funcionais disponveis, determinando dois uxos de operaes separados de modo simtrico, denominados canais

23

Figura 15: Processador CRISP

de dados (data channels). Os processadores de propsito gerais executam operaes DSP. J


a unidade recongurvel prov a capacidade de extender dinamicamente o conjunto de instrues do processador incluindo instrues multiciclo de aplicao especca. A m de melhor
explorar o paralelismo no nvel de instruo, o GA suporta at quatro entradas e dois registradores de destino para cada instruo assembly emitida. O conjunto de instrues do XiRISC
possui duas instrues adicionais, que so: GA-load, que carrega uma congurao dentro do
PiCoGA, e GA-op, que inicia a execuo de uma funo de aplicao especca previamente
armazenada. A Figura 16 apresenta um esquema simplicado desta arquitetura.

Figura 16: Processador XiRISC

24

Em 2003 surgiu a arquitetura V ISC (Variable Instruction Set Communications Architecture), apresentado por [Liu et al., 2003]. A caracterstica que diferencia o conjunto de instruo
deste processador dos demais a utilizao de um dicionrio que dene o tipo de cada instruo e permite ao compilador congurar o melhor conjunto de instrues para a execuo de
um determinado programa. Durante a sua execuo, o campo de CodOp contido na instruo
usado como ndice do dicionrio para obter uma palavra de controle, que congura o caminho
de dados e as unidades de execuo contidas na unidade recongurvel. Para cada novo conjunto de instruo redenido um novo contedo do dicionrio. Uma instruo VISC contm
um CodOp com at quatro operandos, como visto na Figura 17.

Figura 17: Formato de instruo do VISC

Atualmente os processadores recongurveis esto voltados para aplicaes multimdia,


que no so facilmente implementadas em FPGAs convencionais. O gargalo da comunicao
entre os dispositivos foi reduzido devido ao forte acoplamento entre o processador e a lgica
recongurvel. Estudos ainda continuam para que esse gargalo possa ser reduzido ainda mais.
Nota-se nos processadores atuais uma tendncia em obter diferentes formas quanto a utilizao
da lgica recongurvel, em particular ao conjunto de instrues, projetando diferentes modelos
de RISP.

2.6

O Padro OCP

O padro OCP (Open Core Protocol) [Partnerchip, 2001] um conjunto de denies de


sinais e protocolos de comunicao desenvolvido de modo a prover a interconexo de mdulos
de circuitos de uma forma padronizada, de forma a tornar compatvel a transferncia de informaes entre eles, independente da forma de processamento de cada mdulo. A utilizao do
padro OCP possibilita a reduo do tempo de projeto e do custo de manuteno de sistemas
integrveis.

25

O padro dene uma interface ponto a ponto usando duas entidades de comunicao. Uma
das entidades denida como o mestre (master) e a outra denida como o escravo (slave). O
mestre a entidade de controle da comunicao e cabe a ele iniciar e gerar os sinais de controle. A entidade escravo responde aos comandos do mestre, tomando as aes correspondentes
especcas de cada comando, recebendo os dados do mestre e/ou entregando dados ao mestre.
Para que um sistema seja considerado padro OCP compatvel, necessrio que cada interface OCP do sistema contenha no mnimo os sinais bsicos OCP, cumpra um protocolo mnimo
denido sobre os sinais bsicos e obedea a temporizao dos sinais denida pelo padro. Alm
disso, o sistema e suas interfaces devem ser descritas usando a sintaxe denida pelo padro OCP
e as especicaes de desempenho devem ser denidas utilizando-se as regras estabelecidas. A
Figura 18 ilustra os sinais OCP entre as entidades mestre e escravo.

Figura 18: Sinais OCP

2.6.1 Sinais Bsicos do OCP


Os sinais bsicos do OCP so:
Clk (1 bit): Todos os sinais so sincronizados com a borda positiva do relgio;
MAddr (1-32 bits): Endereo de transferncia, especica o endereo de escrita do dado;
MCmd (3 bits): Comando de transferncia, indica o tipo de transferncia de dados, codicado segundo a Tabela 1:

26

Tabela 1: Codicao dos comandos MCmd


MCmd[2:0]
000
001
010
011
100
101
110
111

Tipo
Idle
Write
Read
ReadEx
Reservado
Reservado
Reservado
BroadCast

Mnemnico
IDLE
WR
RD
RDEX

BCST

MData (8/16/32/64/128 bits): Dado de escrita, barramento de dados unidirecional do


mestre para o escravo;
SCmdAccept (1 bit): Indica que o escravo aceita o pedido de transferncia do mestre;
SData (8/16/32/64/128 bits): Dado de leitura, barramento de dados unidirecioanl do escravo para o mestre;
SResp (2 bits): Resposta do escravo ao pedido de transferncia do mestre, codicado
segundo a Tabela 2:
Tabela 2: Codicao dos comandos SResp
SResp[1:0]
00
01
10
11

Resposta
Sem resposta
dado vlido/aceito
Reservado
Erro

Mnemnico
NULL
DVA
RD
ERR

Alm dos sinais bsicos o padro especica outras categorias de sinais:


Simple Extensions - Sinais que adicionam ao padro maiores capacidades de endereamento, de dados, e de suporte a transferncia de dados em rajadas, e maior controle do
uxo de dados (MAddrSpace, MBurst, MByteEn, MDataValid, MRespAccept, SDataAccept) ;
Complex Extensions - Suporte a threads e conexes (MConnID, MDataThreadID, MThreadBusy, MThreadID, SThreadBusy, SThhreadID);
Sideband Signals - Sinais que no fazem parte do controle de uxo de dados, sinais
de ags, erro, interrupes, etc (MFlag, Reset_n, SError, SFlag, SInterrupt, Control,
ControlBusy, ControlWr, Status, StatusBusy, StatusRd);

27

Test Signals - Sinais que do suporte a scan, controle de relgio, utilizados para teste do
circuito (Scanctrl, Scanin, Scanout, ClkByp, Testclk, TCK, TDI, TDO, TMS, TRST_N)

2.6.2 Temporizao
A Figura 19 mostra um exemplo do esquema de temporizao entre as entidades mestre e
escravo utilizando a interface OCP em operaes de escrita e leitura utilizando apenas os sinais
bsicos.

Figura 19: Temporizao OCP envolvendo operaes de escrita e leitura

O sinal de MCmd com valor IDLE at a primeira subida do relgio, indeticada na gura
pelo nmero 1, indica que o sistema est ocioso (IDLE), sem execuo de escrita ou leitura.
A partir desse ponto, efetuada uma solicitao de escrita da entidade mestre para a entidade
escravo. Para que isto ocorra, necessrio que o barramento de comando da entidade mestre
contenha um pedido de escrita (MCmd = WR1), o barramento de endereo da entidade mestre
contenha o endereo de escrita (MAddr = A1) e o barramento de dados da entidade mestre
contenha o dado a ser armazenado (MData = D1).
Durante o pedido em que a entidade mestre est em modo de escrita, o MCmd deve permanecer no estado WR1 at que a entidade escravo envie uma conrmao de que est pronta para
armazenar o valor requisitado, ou seja, at que SCmndAccept = 1. Ao receber esta conrmao,

28

o barramento de comando retorna ao estado ocioso a partir da prxima subida de relgio,


espera de uma nova solicitao de escrita ou leitura.
O modo de funcionamento da unidade escravo durante uma operao de escrita ocorre
da seguinte forma: ao ser conrmada a operao de escrita, o endereo e o dado enviados
pela entidade mestre cam disponveis no barramento a espera de que a unidade escrava possa
receber estes valores. Quando a unidade escravo estiver disponvel, esta recebe os valores a m
de efetuar a escrita, ao mesmo tempo em que envia para a unidade mestre o sinal de conrmao
(SCmndAccept = 1).
A quarta subida de relgio do exemplo ilustra uma solicitao de leitura. Neste caso, ao
mesmo tempo que o barramento de comando recebe o valor correspondente a esta solicitao
(MCmd = RD2), o valor do endereo de leitura colocado no barramento de endereo da entidade mestre (MAddr = A2). Novamente, para que a operao seja efetuada, necessrio que a
entidade escravo envie um sinal de conrmao indicando que est pronta para realizar o pedido
(SCmndAccept = 1).
No perodo de relgio seguinte conrmao (clk = 5), a entidade escravo, aps enviar a
conrmao que est apta a realizar a leitura, recebe o endereo A2 enviado e o utiliza para
realizar a operao de leitura interna. O processo de resposta realizado por meio dos barramentos SResp e SData. Supondo no exemplo que se trata de um dado vlido, o barramento de
resposta envia o valor (SResp = DVA2), ao mesmo tempo em que a entidade escravo envia para
a entidade mestre o dado lido atravs do barramento de dados da entidade escravo (SData =
D2).
A entidade mestre, ao receber o sinal de resposta indicando que o valor lido um dado
vlido, recebe o valor contido em SData, nalizando a operao de leitura. Ao trmino desta
etapa, o barramento de controle volta ao estado ocioso at que seja realizada uma nova operao.
Neste exemplo, durante a operao de escrita a entidade escravo envia o sinal de conrmao no mesmo perodo de relgio em que a unidade mestre solicitou a operao de escrita. Este
processo no obrigatrio, pois no necessrio que a entidade escravo, como por exemplo
uma memria, responda imediatamente ao pedido da entidade mestre, no caso um processador.
O prximo exemplo ilustra um esquema de temporizao no qual ocorrem vrias solicitaes de escrita com uxo de dados, como visto na Figura 20. Este exemplo contm trs
processos de escrita, com diferentes latncias.
O exemplo inicia-se com um pedido de escrita feito pela unidade mestre durante a subida
de relgio indicada pelo valor 1 (clk = 1). Este procedimento altera o valor do barramento

29

Figura 20: Temporizao OCP com controle de uxo

de controle (MCmd) de IDLE para WR1. Ao mesmo tempo o valor do endereo de escrita
colocado no barramento de endereo da entidade mestre (MAddr = A1) e o dado a ser transferido
no barramento de dados da entidade mestre (MData = D1). A entidade escravo indica que aceita
a solicitao do mestre durante o mesmo perodo de relgio ativando o sinal ScmdAccept = 1.
Na seqncia, ao mesmo tempo em que a entidade mestre inicia um novo pedido de escrita
(MCmd = WR2), a entidade escravo recebe o endereo (A1) e o dado (D1) usando-os para realizar a operao de escrita interna. Como a entidade escravo ainda est trabalhando com os
valores recebidos anteriormente, esta desativa o sinal de ScmdAccept, indicando que no est
pronta para aceitar uma nova operao. Neste caso, enquanto o sinal ScmdAccept estiver desativado (ScmdAccept = 0), a entidade mestre mantm as informaes dos barramentos (MCmd,
MAddr e MData), ou seja, permanece no mesmo estado e no poder enviar novos valores.
Na subida de relgio 3, a entidade escravo ativa o sinal ScmdAccept, indicando estar pronta
para realizar o pedido de escrita pendente. Portanto, na subida de relgio seguinte, o escravo
captura o novo endereo (A2) e novo o dado (D2) usando-os para realizar a segunda operao
de escrita interna.
Aps um ciclo ocioso (IDLE), a entidade mestre inicia um terceiro ciclo de escrita. Como
o sinal ScmdAccept est desativado, as informaes dos barramentos devem permanecer at
que a entidade escravo envie o sinal de conrmao, no importa quantos ciclos de relgio

30

demorem. Neste exemplo, na subida de relgio 7 enviado o sinal de conrmao, enquanto


que no oitavo ciclo a entidade escravo captura as informaes dos barramentos de escrita e de
dados do mestre, mantidos nos dois ciclos anteriores, usando-os para realizar a operao de
escrita interna pendente.
O ltimo exemplo mostra um esquema de temporizao com latncia no processo de leitura,
visto na Figura 21. A solicitao de leitura possui uma latncia = 2, correspondente ao perodo
em que o sinal ScmdAccept est desativado, enquanto que o processo de resposta possui uma
latncia = 3, correspondente ao perodo entre o nal da solicitao da entidade mestre e a
resposta e entrega dos valores pela entidade escravo.

Figura 21: Temporizao OCP com latncia de leitura

O perodo de relgio 1 do exemplo ilustra uma solicitao de leitura pela entidade mestre,
alterando o sinal do barramento de IDLE para RD1, ao mesmo tempo em que um valor do
endereo inserido no barramento de endereo. Por ser uma operao de leitura, nenhum valor
colocado no barramento de dados. Neste momento, a entidade escravo ainda no pode atender
ao pedido, de modo que o sinal ScmdAccept est desativado.
No perodo de relgio 2, a entidade mestre recebe a indicao de que a entidade escravo
ainda no est pronta para atender ao pedido, ento esta mantm os valores contidos nos barramentos e continua esperando a conrmao do escravo. Somente no perodo de relgio 3 o sinal
ScmdAccept ativado, indicando o incio do processo de leitura pela entidade escravo. A enti-

31

dade mestre ainda deve manter as informaes nos barramentos e no poder realizar nenhum
outro processo enquanto no receber a resposta sobre o ltimo pedido de leitura realizado.
Durante o perodo 4, a entidade escravo captura as informaes enviadas pelo mestre. O
processo de leitura somente concludo quando o escravo emitir um sinal de resposta. Caso a
entidade escravo necessite esperar algum dado de algum dispositivo externo, o sinal de resposta
dever permanecer como NULL.
Quando o escravo estiver pronto, este envia um sinal de resposta indicando que o dado
valido (SResp = DVA1), bem como a informao requisitada no barramento de leitura (SData
= D1). Aps o mestre receber o sinal de resposta, o perodo de relgio seguinte dedicado
ao armazenamento da informao solicitada. Aps este ltimo passo, torna-se possvel novas
requisies de leitura ou escrita.
Os exemplos de temporizao apresentados mostram que as operaes de escrita gastam
no mnimo dois ciclos de relgio para serem efetuadas, enquanto que as operaes de leitura
gastam pelo menos trs ciclos de relgio.
O padro OCP oferece outros modos de temporizao, bem como diversas opes de utilizao, que no sero vistas por no serem utilizadas no escopo deste trabalho.

32

ARQUITETURA PROPOSTA

Este captulo disserta sobre o modelo de arquitetura proposto nesta dissertao, no que
tange a concepo das unidades constituintes do processador - unidades operativa, de controle
e de recongurao.
A tendncia dos RISP atuais a busca de novas tcnicas para a recongurao do conjunto
de instrues em tempo real. Geralmente, tais processadores realizam modicaes no caminho
de dados para adequar-se lgica recongurvel.
Esta caracterstica faz-se uma das diferenas entre os processadores RISP mencionados
anteriormente e o modelo de arquitetura proposto nesta dissertao. Parte da lgica recongurvel encontra-se inserida dentro da unidade de controle do processador, enquanto que foram
realizadas apenas as modicaes necessrias no caminho de dados do processador para que
o processador pudesse realizar a recongurao do conjunto de instrues. Tambm foi criada uma unidade de recongurao com a nalidade de criao, modicao e combinao de
novas instrues, em tempo de execuo, enviadas pelo usurio utilizando-se o padro OCP.
Outra caracterstica importante do processador a possibilidade de poder trabalhar com diversos conjuntos de instrues contidos dentro da unidade de controle, denominados conjuntos
de instrues xos e de alternar entre estes conjuntos de acordo com o desejo do usurio, podendo escolher o conjunto de instruo que melhor se adapte aplicao atual, proporcionando
um melhor desempenho na sua execuo, como visto em [Casillo et al., 2005].
As sesses seguintes contm maiores detalhes sobre como so realizadas a criao e modicao de novas instrues atravs da unidade recongurvel e como so implementados os
conjuntos de instrues xos.

3.1

Viso Geral

A arquitetura proposta foi projetada originalmente a partir do microprocessador MIC-1


descrito por [Tanenbaum, 1992]. O MIC possui um caminho de dados composto por 16 regis-

33

tradores idnticos de 16 bits, formando uma memria de rascunho acessvel apenas ao nvel
de microprogramao. Cada registrador ligado a dois barramentos de sada, A e B, que alimentam uma ULA de 16 bits. A sada da ULA ligada a um deslocador, que pode deslocar o
resultado da operao em 1 bit para a esquerda ou direita, e o resultado nal pode ser armazenado na memria de rascunho ou ser enviado para a memria externa.
J em [Ramos et al., 2004], foi apresentada uma expanso desta arquitetura, mantendo-se a
estrutura original do caminho de dados de [Tanenbaum, 1992], com o acrscimo de instrues
de entrada/sada e de tratamento de interrupo, e tambm foram realizadas alteraes de tal
forma a transformar o MIC-1 em uma entidade mestre OCP. Para tanto, projetou-se um wrapper
1,

que recebe sinais do MIC-1 e converte-os para sinais no padro OCP, assim como recebe

sinais no padro OCP e transfere-os para o MIC-1.


Utilizando estas arquiteturas como base, foi projetada a arquitetura apresentada nesta dissertao. Internamente, este modelo de arquitetura um processador multiciclo com vias de
dados de 32 bits, composto por uma unidade operativa, na qual o caminho de dados baseada
na estrutura do MIC-1, mas com diversas modicaes para adaptar-se s novas funcionalidades; uma unidade de controle contendo uma Mquina de Estados Finitos (Finite State Machine
- FSM) que controla o funcionamento da arquitetura e engloba os conjuntos de instrues xos; e uma unidade de recongurao, projetada para recongurar e combinar instrues. A
Figura 22 apresenta uma viso geral dos blocos funcionais presentes no processador e a ligao entre estes. Cada bloco funcional ser descrito posteriormente ao longo deste captulo. O
esquema completo do processador pode ser visto no Apndice A.

Figura 22: Unidades constituintes do processador

1 wrapper trata-se de um conector que integra dispositivos OCP a outros dispositivos no adaptados a este padro

34

3.2

Unidade Operativa

A unidade operativa composta por latches, multiplexadores, dois registradores denominados MAR (Memory Address Register) e MBR (Memory Buffer Register), uma ULA e um
deslocador de 32 bits e um conjunto de 32 registradores de trabalho. A Figura 23 ilustra o
caminho de dados do processador.

Figura 23: Unidade Operativa do processador

A arquitetura de [Tanenbaum, 1992] pode realizar apenas quatro operaes: soma de dois
operandos, and lgico, transparncia do primeiro operando e negao do primeiro operando. A
operao de subtrao entre dois operandos realizada utilizando-se a forma de complemento
de 2 (x y = x + 1 + not(y)), de modo que so gastos 3 ciclos de relgio para sua execuo.
Para eliminar estes ciclos extras e aumentar o desempenho do processador na execuo de
aplicaes, a ULA do processador proposto foi projetada para realizar oito operaes distintas
com operandos de 32 bits: transparncia do primeiro operando, and e or lgicos, negao do
primeiro e do segundo operando e operaes aritmticas de adio, subtrao e multiplicao
de dois operandos, sendo todas estas realizadas em um ciclo de relgio.

35

Um ciclo bsico da ULA consiste da seqncia dos seguintes eventos: carga dos latches A
e B, execuo da operao programada pela ULA e/ou pelo deslocador e armazenamento dos
resultados nos registradores. Assim como na arquitetura de [Tanenbaum, 1992], para obter o
seqenciamento correto de eventos, foi utilizado um relgio com quatro subciclos. Os eventos
chave durante cada um dos subciclos so:
Receber os sinais de controle responsveis pela execuo do estado atual a partir da unidade de controle;
Colocar os contedos dos registradores contidos na memria de rascunho nos barramentos de sada A e B e armazen-los nos latches A e B;
Produzir uma sada estvel a partir da ULA e do deslocador, e carregar o MAR se requisitado;
Armazenar o valor existente no barramento C na memria de rascunho e carregar o MBR
ou MAR, se for necessrio.
O conjunto de registradores contm 32 registradores de 32 bits, sendo os quatro primeiros
destinados a funes especcas, como Acumulador (AC) e apontador de pilha (SP - Stack
Pointer), e 28 restantes para uso geral. O relao completa do banco de registradores do processador e sua codicao encontra-se no Apndice B.

3.3

Modos de funcionamento

O processador pode atuar sob dois modos de funcionamento: modo de recongurao e


modo de execuo. No modo de execuo, podem ser tratadas as instrues xas (instrues
contidas nos conjuntos de instrues xos) ou instrues recongurveis (instrues criadas
ou combinadas a partir da unidade de recongurao). A cada incio de execuo de uma
instruo, verica-se se esta instruo atual xa ou recongurvel. Caso seja uma instruo
xa, a unidade de controle envia os comandos correspondentes aos estados que compem a
instruo. Caso contrrio, a unidade de controle busca os estados correspondentes a instruo
recongurada armazenados na unidade de recongurao para em seguida envi-los parte
operativa a m de serem executados.
O funcionamento do modo de recongurao exige que o usurio envie um sinal ao processador informando que deseja recongurar uma instruo, juntamente com os valores do CodOp
recongurvel, de 8 bits, e do valor da palavra de recongurao, de 28 bits, que representa a

36

operao atual da instruo recongurada. Caso uma instruo possua mais de uma operao,
o valor do CodOp deve ser mantido, e para cada nova operao enviada uma nova palavra de
recongurao at que seja indicado o trmino da instruo. Estes modos de funcionamento
sero detalhados nas sesses referentes s unidades de recongurao e unidade de controle.

3.4

Utilizao do padro OCP

O processador proposto foi projetado adotando as normas do padro OCP. Por j encontrarse adaptado ao padro, no necessrio a utilizao de wrappers para a comunicao do processador com dispositivos externos, contanto que tais dispositivos tambm estejam adaptados
ao padro OCP. Foram implementados apenas os sinais bsicos do OCP para realizar operaes
simples de escrita e leitura.
O processador se comunica com um dispositivo de E/S e com a memria. A comunicao
entre o processador e a memria realizada de modo que o processador foi denido como a
entidade mestre (master) e a memria denida como entidade escravo (slave). Neste esquema,
o processador considerado a entidade de controle da comunicao e possui como tarefa gerar
os sinais de controle e requisies de escrita ou leitura na memria. A memria, por sua vez,
responde aos comandos do processador tomando as aes correspondentes especcas para cada
solicitao, recebendo os dados do processador e/ou entregando dados a este.
J a comunicao entre o dispositivo de E/S e o processador realizada de modo inverso,
sendo o dispositivo de E/S atuando como entidade mestre e o processador como entidade escravo. A tarefa deste dispositivo de E/S de gerar apenas requisies de escrita no processador,
enviando as informaes referentes as instrues que sero reconguradas. Os detalhes desta
implementao sero vistos adiante. A Figura 24 mostra uma representao da comunicao
entre estes dispositivos.

Figura 24: Representao das unidades adaptadas ao padro OCP

37

3.5

Unidade de Controle

A unidade de controle implementada sob a forma de uma mquina de estados nitos com
118 estados. A ilustrao da mquina de estados completa encontra-se no Apndice C.
Com o intuito de validar a proposta do processador conter mais de um conjunto de instruo e poder alternar entre estes conjuntos durante o seu funcionamento, foram implementados
trs conjuntos de instrues simples para possibilitar a realizao de operaes envolvendo a
alternncia entre tais conjuntos.
Os trs conjuntos de instrues implementados so compostos, cada um, por 32 instrues, sendo 30 de propsito geral especcas de cada conjunto, e 2 instrues comuns a todos
os conjuntos, vistas adiante. O conjunto de instruo 1 basicamente o conjunto apresentado
em [Tanenbaum, 1992] para o processador MIC-1 e aprimorado em [Ramos et al., 2004] com
o acrscimo de instrues de tratamento de interrupo e Entrada/Sada (E/S). Neste conjunto
apenas o acumulador e o apontador de pilha so acessveis ao usurio. Os demais conjuntos
utilizam o conjunto 1 como base e acrescentam novas instrues. O segundo conjunto possui
instrues em que os 32 registradores so acessveis ao usurio e o terceiro conjunto baseado em instrues que utilizam operaes envolvendo a pilha. Maiores detalhes acerca destes
conjuntos de instrues podem ser vistos no Apndice D.
Cada CodOp corresponde a uma srie de estados, os quais podem estar relacionados a
uma ou mais instrues distintas, de acordo com o conjunto de instruo utilizado. A Figura 25
apresenta um exemplo da implementao dos estados dos conjuntos de instrues durante a execuo de um mesmo CodOp. Como exemplo, ser utilizado o CodOp 00000101 (Op_05H).
Neste exemplo, cada conjunto executa uma instruo diferente a partir do mesmo CodOp
recebido. O conjunto de instruo 1 inicia a instruo ADDL X, o conjunto de instruo 2 inicia
a instruo LODR Ra, Rx, Ry, e o conjunto de instruo 3 inicia a instruo LODI. Cada instruo pode ser executada de maneira independente por cada conjunto, contento a quantidade
de operaes necessrias para sua execuo. Este exemplo demonstra a possibilidade de que,
para um mesmo CodOp em particular, os conjuntos de instrues podem implementar instrues de maior ou menor quantidade de estados. As microinstrues presentes em cada um dos
conjuntos de instrues so:
Estado 05_1:
ADDL - MAR := SP + IR; RD; GOTO OP13_2
LODR - MAR := Rx + Ry; RD

38

Figura 25: Conjunto de estados do CodOp 05H

LODI - MAR := SP; RD


Estado 05_2:
ADDL - AC := MBR + AC; GOTO INT;
LODR - Ra := MBR; GOTO INT;
LODI - MAR := MBR; RD
Estado 05_3:
ADDL - instruo concluda
LODR - instruo concluda
LODI - MAR := SP; WR; GOTO INT
Qualquer instruo, no importa em qual conjunto de instruo esteja, termina apenas
quando executado o comando GOTO INT, o que d incio ao processo de interrupo. A
rotina de interrupo consiste em uma seqncia de 11 estados com a nalidade de armazenar
o contedo do acumulador, apontador de pilha e contador de programa.

39

Para que possa ocorrer uma interrupo preciso que aconteam dois eventos. O primeiro
a execuo da instruo SETI, presente em todos os conjuntos de instrues implementados.
O segundo evento a ativao da entrada INTR, que indica o pedido de interrupo. Somente
quando estes dois eventos acontecerem, o processador atender ao pedido de interrupo. Para
recuperar o contexto depois de uma interrupo, foi implementada a instruo RETI, que tambm est presente em todos os conjuntos de instrues. Ao ser executada uma interrupo, um
sinal indicando que o pedido de interrupo foi aceito ativado (INTA). Aps o trmino do
processo, a mquina de estados retorna ao estado inicial.
A Figura 26 ilustra mais um exemplo da utilizao dos conjuntos de instrues xos, utilizando a instruo LODD. O estado OP0_1 utilizada pelos trs conjuntos implementados.
No segundo estado, OP0_2, os conjuntos 1 e 2 nalizam a sua execuo, embora o conjunto 3
contenha ainda mais estados necessrios para ser concludo. Isto demonstra a possibilidade de
compartilhamento de estados por mais de um conjunto de instrues. Este fato leva a reduo
da lgica utilizada para a implementao da mquina de estados.

Figura 26: Conjunto de estados da instruo LODD

Para que o usurio possa alternar entre os conjuntos de instrues implementados, foram criadas duas instrues, denominadas muda_conj e muda_modo. A funo da instruo
muda_conj consiste em alterar o conjunto de instruo atualmente utilizado. Foi utilizado um
registrador de 8 bits denominado registrador de estado dentro da unidade de controle. Este

40

registrador responsvel por armazenar os bits que informam qual conjunto de instruo est
selecionado atualmente, codicados de forma que os dois ltimo bits, quando possuem valor
00 representam o conjunto 1, o valor 01 representa o conjunto 2 e o valor 10 representa
o conjunto 3. Ao executar a instruo muda_conj, os 2 ltimos bits do CodOp so enviados ao
registrador de estado, indicando qual conjunto deve ser selecionado. O registrador de estado
alterado somente mediante esta instruo, portanto no possvel alternar entre os conjuntos
durante a execuo de uma instruo. A cada reincio do processador, o conjunto de instruo
1 selecionado.
A instruo muda_modo altera o modo de funcionamento do controle xo. Ao executar
esta instruo, os bits 7 e 6 do CodOp so enviados ao registrador de estados. Estes bits representam o modo de funcionamento do processador, codicados da seguinte forma: o valor 00
representa o modo usurio e o valor 01 representa o modo supervisor. Somente possvel
utilizar a instruo muda_conj se o processador estiver em modo supervisor. Outros modos de
funcionamento no foram implementados.

3.6

Instrues

Todas as instrues implementadas esto classicadas em 5 formatos distintos. O primeiro


formato do tipo (8, 24), sendo oito bits de CodOp e 24 bits utilizados para endereo ou dados.
Este formato utilizado em instrues de leitura/armazenamento, tais como LODD X e STOD
X.
O segundo formato, do tipo (8, 5, 19), formado por oito bits de CodOp, cinco bits para o
registrador destino da operao e 19 bits para dados ou endereo. As instrues que usam esse
formato so as instrues que realizam operaes dado-registrador, tal como a instruo LODL
Rx,Y, que signica carregar um valor de Y de 19 bits no registrador Rx.
O terceiro formato possui o tipo (8, 5, 5, 14), formado por oito bits de CodOp, cinco bits
para o registrador destino da operao, 5 bits para um registrador de entrada e 14 bits para dados
ou endereo. No existem instrues presentes nos conjuntos xos que utilizam este formato,
sendo portanto utilizado apenas em instrues reconguradas. No Captulo 4 ser visto um
exemplo de implementao deste formato.
O quarto formato do tipo (8, 5, 5, 5, 9), com oito bits de CodOp, cinco bits para o registrador destino e cinco bits para os registradores que contm o primeiro e segundo operandos,
respectivamente. So instrues tpicas desse formato as operaes aritmticas de trs endereos, como ADDR Ra, Rx, Ry.

41

O quinto e ltimo formato consiste no tipo (8, 5, 5, 5, 5, 4), com oito bits de CodOp,
cinco bits para o registrador destino e cinco bits para os registradores que contm o primeiro,
segundo e terceiros operandos, respectivamente. Este formato somente utilizado em instrues
reconguradas. O Captulo 4 tambm contm um exemplo da implementao de uma instruo
utilizando este formato.
A Tabela 3 a seguir contm a relao de todas as instrues contidas nos trs conjuntos
de instrues. No Apndice E encontram-se informaes detalhadas sobre os conjuntos implementados.
Tabela 3: Conjuntos de instrues do processador
CodOp
Conjunto 1 Conjunto 2
Conjunto 3
00000000 LODD X
LODD X
LODDp X
00000001 STOD X
STOD X
STODp X
00000010 LOCO X
LOCO X
LOCO X
00000011 LODL X
LODL Rx, Y
LODLp X
00000100 STOL X
STOL Y, Rx
STOLp X
00000101 ADDL X
LODR Ra, Rx, Ry LODIp X
00000110 SUBL X
STOR Ra, Rx, Ry STOIp X
00000111 CALL X
CALL X
CALL X
00001000 JUMP X
JUMP X
JUMP X
00001001 JNEG X
JNEG X
JNEG X
00001010 JPOS X
JPOS X
JPOS X
00001011 JNZE X
JNZE X
JNZE X
00001100 JZER X
JZER X
JZER X
00001101 ADDD X
ADDR Ra, Rx, Ry ADDp X
00001110 SUBD X
SUBR Ra, Rx, Ry SUBp X
00001111 MULL X
MULL Ra, Rx, Ry MULp X
11110000 RETN
RETN
RETN
11110001 PSHI
SHL
SHLp
11110010 POPI
SHR
SHRp
11110011 PUSH
PUSH
PUSH
11110100 POP
POP
POP
11110101 SWAP
SWAP
SWAP
11110110 SETI
SETI
SETI
11110111 RETI
RETI
RETI
11111000 INSP
INSP
INSP
11111001 DESP
DESP
DESP
11111010 LDIO
LDIO
LDIO
11111011 STIO
STIO
STIO
11111100 11111101 11111110 muda_conj
muda_conj
muda_conj
11111111 muda_modo muda_modo
muda_modo

42

3.7

Processo de Execuo de Instrues Fixas

A Figura27 apresenta o diagrama de estados contendo apenas as etapas necessrias para


este processo.

Figura 27: Diagrama de estados do processo de execuo de instrues xas

O estado Verica_pedido responsvel por vericar se houve um pedido de recongurao de instruo atravs do sinal de MCommand externo. Caso este sinal contenha um pedido
de recongurao (MCmd_externo = 001), ser iniciada a seqncia de recongurao de instrues, que ser vista na subseo 3.8.1. Caso contrrio (MCmd_externo = 000), iniciar a
execuo de uma instruo xa ou recongurada. A seqncia de funcionamento de instrues
reconguradas ser vista conforme a subseo 3.8.2.
Ao ser iniciado o processo de execuo de instrues xas, o primeiro evento consiste na
busca de uma instruo. Para que este evento ocorra, necessrio realizar uma busca na memria (MCmd = 010), enviando o valor de PC atravs do padro OCP (MAddr = PC), fato este que
ocorre no estado "Read1". A mquina de estados deve permanecer neste estado enquanto no
receber um sinal de conrmao da memria (SCmmdAccept = 1). A partir desta conrmao,
executado o estado "Read2", em que o processador recebe da memria um sinal que indica se
o dado valido (SResp = 001), juntamente com o valor solicitado da instruo (MBR = SData).

43

No estado seguinte (Atualiza_IR), o valor do registrador de instruo (IR) atualizado com o


valor de MBR.
O estado Verica_instruo responsvel por vericar se o CodOp (IR) recebido do
tipo xo ou recongurvel. Se os quatro primeiros bits do CodOp forem 0000 ou 1111,
signica que a instruo pertence a algum dos conjuntos xos, caso contrrio a instruo a ser
executada do tipo recongurvel. A sesso 3.8 contm maiores detalhes sobre CodOps xos
e recongurveis.
Em se tratando de uma instruo pertencente aos conjuntos de instrues xos, o estado
seguinte ser o estado de decodicao da instruo. Aps a decodicao, a instruo ser
executada de acordo com o conjunto de instruo selecionado.
O exemplo a seguir mostra a execuo da instruo de CodOp "00000010"(02H), que representa a instruo LOCO X (Load Constant X). Esta instruo possui apenas uma microinstruo:
Acc := BAND(AMASK, IR); GOTO INT;
Para executar esta microinstruo, a Unidade Operativa recebe da Unidade de Controle os
sinais que controlam seus blocos funcionais, como visto na Figura 28.

Figura 28: Implementao da instruo LOCO

44

O signicado desta instruo consiste no acumulador (registrador "00001") receber o resultado de uma operao AND entre o valor de IR e a mscara AMASK. Esta operao faz com que
os 8 bits de CodOp presentes no registrador IR se tornem iguais a zero. Assim, o acumulador
receber o valor 00000000B juntamente com os 24 bits restantes de IR. Em outras palavras,
o acumulador recebe um valor constante de 24 bits.
Todas as demais instrues, presentes nos trs conjuntos de instrues xos, so executadas
de maneira anloga a anteriormente exemplicada. A presena da microinstruo GOTO INT
representa o nal da execuo da instruo.

3.8

Unidade de Recongurao

A unidade de recongurao foi projetada para o tratamento de instrues recongurveis.


A Figura 29 ilustra, de um modo geral, os blocos funcionais constituintes desta unidade. O
funcionamento desta unidade, bem como a descrio e utilizao de cada bloco funcional que
compe a unidade, sero vistos nas subsees a seguir.

Figura 29: Unidade de recongurao

45

Esta unidade possibilita criar uma instruo que no se encontra nos conjuntos de instrues
xos e combinar duas ou mais instrues reconguradas. A seo 3.9 contm exemplos da
implementao de instrues reconguradas sob cada uma destas tcnicas.

3.8.1 Processo de recongurao de uma instruo


O Digrama de estados da Figura 30 representa os estados correspondentes ao processo de
recongurao de uma instruo. Estes estados fazem parte da mquina de estados (FSM) do
processador, que encontra-se no Apndice C.

Figura 30: Diagrama de estados do processo de recongurao

A recongurao de uma instruo ocorre quando o processador recebe um sinal externo,


via OCP, indicando um pedido de congurao. Em outras palavras, o processador deve receber
do meio externo uma requisio de escrita indicada por MCmd_ext = 001. Este processo
ocorre no estado verica_pedido. Ao entrar no processo de recongurao, o valor do Contador
de Programa (PC) permanece com o valor atual at que a recongurao seja nalizada.
Ao receber o valor MCmd_ext = 001, conrmado o pedido de recongurao. No
estado Verica Instruo Recongurada, o processador recebe o valor do CodOp da instruo
recongurada por meio do sinal (MAddr_externo), bem como o valor da palavra de recongurao mediante o sinal (MData_externo) contendo o primeiro estado da instruo. O processador
envia o sinal SCmmdAccept = 1 indicando que aceitou o pedido de recongurao e armazena
os valores do CodOp e da palavra de recongurao nos registradores reg_codop e reg_dados.
A codicao da palavra de recongurao ser vista na seo 3.9.
Neste mesmo estado realizada uma vericao no valor do CodOp recebido am de vericar se este valor corresponde a um CodOp recongurado vlido. Os quatro primeiros bits

46

do CodOp so comparados com os valores 0000 e 1111. Caso o resultado dessa comparao seja positiva, a instruo no pode ser congurada, porque todos os CodOps iniciados por
0000 e 1111 so reservados para as instrues presentes nos conjuntos de instrues xos.
Como resultado, gerado um sinal de erro indicando que no possvel realizar esta operao,
e a mquina de estados retorna ao estado anterior para receber um novo valor ou continuar a
execuo de instrues dos conjuntos xos. Caso o resultado da comparao seja negativo,
o CodOp recebido encontra-se na faixa de valores reservados para instrues recongurveis,
continuando a seqncia de execuo.
O estado verica_codop_reconigurado responsvel por vericar se a palavra de recongurao atual faz parte de uma nova instruo ou de uma instruo previamente armazenada.
Para realizar esta vericao, foi utilizado um componente de memria do tipo lpm_ram, denominado lmpram_verica, com 256 posies e 2 bits de palavra. Cada endereo desta lpm_ram
corresponde a um CodOp recongurado. O primeiro bit informa se existe ou no uma instruo
recongurada utilizando este endereo (CodOp), enquanto que o segundo bit informa se a instruo est parcialmente recongurada, ou seja, se ainda devem ser includas novas operaes,
ou se a instruo j foi totalmente recongurada.
A Figura 31 mostra um exemplo de utilizao desta lpm_ram, em que deseja-se recongurar
uma instruo de CodOp 1AH contendo 3 operaes. A cada nova palavra de recongurao
(operao que compe uma instruo), realizada uma leitura nesta memria.
A Figura 31.a ilustra a primeira vericao nesta memria. A Lpm_ram recebe o valor do
atual CodOp (1AH), utilizado como endereo da memria, e o valor do ltimo bit da atual palavra de recongurao (exemplo: A839940H). Este bit, denominado bit_end, indica o trmino
da instruo.
Nesta consulta, o valor existente na lpm_ram possui valor 00. Esta codicao indica que
no existe nenhuma instruo utilizando este CodOp. Deste modo, realizada uma operao
de escrita nesta memria. O valor do primeiro bit alterado para 1, indicando que a partir
deste momento existe uma instruo para este CodOp, e o valor do segundo bit ser o valor do
bit_end da atual palavra de recongurao, que neste exemplo possui valor 0. Identicado
que se trata de uma nova instruo, dever ser iniciado o processo de armazenamento de um
novo CodOp.
A Figura 31.b mostra uma segunda consulta a memria. Os valores recebidos pela tabela
so o CodOp = 1AH e o bit_end da palavra de recongurao atual, que neste exemplo contm
o valor 4C20040H. Ao buscar o valor da memria endereada por 1AH, verica-se que o valor
recebido igual a "10", que foi o valor armazenado durante a execuo anterior.

47

Figura 31: Exemplo de funcionamento da Lpm_ram de vericao. (a) nova instruo. (b)
continuao da instruo. (c) trmino da instruo. (d) erro de recongurao.

48

Esta codicao indica que existe uma instruo utilizando este CodOp, mas ainda no se
encontra concluda. Em outras palavras, indica que ainda existem mais palavras de recongurao (operaes) a serem armazenadas. O Cdigo armazenado na memria ser novamente
10, em que 1 indica a presena de uma instruo para este CodOp e 0 indica que ainda devero ser enviadas outras operaes, pelo fato de que a palavra de recongurao atual tambm
possui seu ltimo bit com valor 0.
Se o valor do CodOp desta segunda consulta fosse diferente do utilizado na primeira consulta, o processador interpretar como se este CodOp seja uma nova instruo ao invs da
segunda operao de uma mesma instruo. Isto ocasionar um erro na execuo da instruo
anteriormente armazenada. Aps a primeira consulta, o valor armazenado na lpm_ram na posio 1AH recebeu o valor 10, ou seja, a instruo que utiliza o CodOp 1AH ainda no foi
concluda. Se a unidade de recongurao receber outro CodOp (por exemplo 1BH) antes que
o CodOp 1AH esteja concludo, no possvel continuar a seqncia de armazenamento do CodOp 1AH. Por este motivo, um novo CodOp s pode ser recongurado aps todas as operaes
do CodOp anterior serem armazenadas.
A terceira consulta memria representado pela Figura 31.c. Neste exemplo, o endereo
da memria continua sendo o valor do CodOp 1AH, pelo motivo de que anteriormente foi
informado que a instruo ainda no estava concluda. A diferena deste exemplo para o anterior
est no fato de que a nova palavra de recongurao (6460041H) possui o valor de bit_end igual
a 1. O armazenamento na memria tambm anlogo ao realizado no exemplo (b), com a
diferena de que o segundo bit armazenado conter o valor 1, indicando que trata-se da ltima
operao desta instruo.
Aps o trmino de uma instruo, no possvel recongurar novamente o mesmo CodOp
at que o processador seja reinicializado. Este procedimento necessrio para evitar o risco das
novas operaes sobrescreverem informaes armazenadas anteriormente por outro CodOp e
comprometer a execuo de outras instrues reconguradas, fato que sera provado ainda nesta
sesso.
O ltimo exemplo, na Figura 31.d, mostra uma tentativa de recongurar o mesmo CodOp
aps a indicao de que a instruo est concluda. Neste caso, no importa o valor do bit_end
contido na palavra de recongurao. Ao buscar a informao na memria e ser constatado
que o segundo bit armazenado possui valor 1, um sinal de erro enviado entidade externa
indicando que no foi possvel recongurar a instruo utilizando este CodOp e a mquina de
estados retorna ao estado de vericao de pedido de recongurao.
Assim, conclui-se que, ao ser inicializada a recongurao de um determinado CodOp,

49

obrigatoriamente todas as operaes que compem este CodOp devem ser armazenadas seqencialmente at que seja indicado o sinal de trmino da instruo, e que cada CodOp pode ser
recongurado apenas uma vez.
Aps a vericao do CodOp, em se tratando de uma nova instruo, ser executado o
estado Grava_novo_end_tabela, responsvel por armazenar a posio inicial da instruo na
memria RAM de recongurao. Para realizar este processo, so utilizados um registrador de
8 bits, denominado registrador de endereo da tabela e outro componente do tipo "lpm_ram",
denominado tabela de endereos, com 256 posies e 8 bits de palavra. A funo deste registrador a de conter o endereo inicial do prximo CodOp a ser recongurado, ou seja, o
registrador atua como um ponteiro. J a funo desta lpm_ram a de armazenar o endereo
inicial da memria de recongurao de todos os CodOps j recongurados.
Por denio, ao se inicializar o computador, o registrador de endereo de tabela recebe o
valor 00H. A partir deste ponto, a cada vez que o estado Grava_novo_end_tabela executado,
um sinal de escrita enviado para a tabela de endereos, que recebe como endereo o valor do
CodOp atual e como dados o valor de sada do registrador. A Figura 32 ilustra um exemplo
desta operao.

Figura 32: Exemplo de funcionamento da tabela de endereos para um novo CodOp.

Ainda no estado Grava_novo_end_tabela, o valor armazenado no registrador de endereo


de tabela enviado a um registrador de 8 bits denominado registrador de entrada da RAM.

50

A funo deste registrador a de armazenar o endereo a ser enviado para o barramento de


endereos da RAM de recongurao.
Se o estado verica_codop_reconigurado informou que o CodOp atualmente recongurado j existe, ento o prximo estado a ser executado o estado nomeado Envia_mesmo_CodOp,
por tratar-se de uma continuao do processo de recongurao de uma instruo. Este estado,
ao contrrio do anteriormente descrito, no executa operao de escrita na tabela, devido ao fato
de que j encontra-se armazenado na tabela o valor do endereo inicial desta instruo, processo
este realizado na execuo do estado Grava_novo_end_tabela.
O processo de armazenamento do registrador de entrada da RAM realizado da mesma
forma realizada pelo estado Grava_novo_end_tabela, ou seja, a unidade de controle envia um
sinal de ativao de escrita no registrador, ao mesmo tempo em que este recebe o contedo do
registrador de endereo da tabela, como pode ser visto na Figura 33.

Figura 33: Exemplo de funcionamento da tabela de endereos para um mesmo CodOp.

Ambos os estados Grava_novo_end_tabela e Envia_mesmo_CodOp tero como seguinte


estado Grava_CodOp. Este estado possui como nica funo habilitar o processo de escrita
na memria RAM de recongurao. Esta RAM foi implementada tambm utilizando um
componente "lpm_ram", com 8 bits de endereo e 28 bits de palavra. A RAM recebe no seu
barramento de endereos o valor contido no registrador de entrada da RAM e no barramento de
dados o valor da palavra de recongurao atual, que estava armazenada em reg_dados.

51

O estado nal do processo de recongurao denominado Atualiza_registrador. Neste


estado, o registrador de endereo de tabela assume o valor de uma posio seguinte que
encontra-se armazenada no registrador de entrada da RAM. Como visto nos estados anteriores,
o valor contido neste registrador pode ser utilizado para indicar o incio de uma nova instruo
ou para continuar a seqncia de armazenamento de operaes de um mesmo CodOp na RAM
de recongurao.
As Figuras a seguir apresentam um exemplo completo do processo de recongurao de
uma instruo contendo duas operaes. A Figura 34 ilustra a seqncia de armazenamento de
um novo CodOp 1AH contendo a palavra de recongurao 1A00000H.

Figura 34: Processo de recongurao de um novo CodOp

A Figura 35 ilustra a seqncia de armazenamento da segunda operao da instruo de


CodOp 1AH contendo a palavra de recongurao 3A802C1H.
Como citado anteriormente, um mesmo CodOp s poder ser novamente recongurado
aps o reincio do processador. Supondo que um CodOp X foi recongurado contendo quatro
operaes, de modo que a instruo se inicia no endereo 00H e termina no endereo 03H.

52

Figura 35: Continuao do processo de recongurao de um CodOp

Aps o trmino deste processo, foi recongurado um CodOp Y contendo duas operaes. Este
CodOp Y ter como endereo inicial o valor imediatamente seguinte ao utilizado para armazenar a ltima operao do CodOp X, ou seja, o endereo inicial de CodOp Y ser o valor
04H. Se posteriormente fosse desejado recongurar novamente o CodOp X, contendo agora
cinco operaes, a quinta operao armazenada ultrapassaria o limite de posies de memria
utilizado anteriormente para o CodOp X, ocupando assim o espao utilizado atualmente pelo
CodOp Y. Este processo tornaria a execuo do CodOp Y completamente diferente da que foi
originalmente descrita.

3.8.2 Processo de Execuo de Instrues Reconguradas


O processo de execuo de instrues reconguradas realizado de maneira anloga ao
processo de execuo de instrues xas, visto na seo 3.7. Desse modo, sero detalhadas
apenas as etapas que representam este processo. A Figura 36 mostra o diagrama de estados
contendo as etapas deste processo.

53

Figura 36: Diagrama de estados do processo de execuo de instrues reconguradas

A partir do estado Verica_instruo, caso os quatro primeiros bits de CodOp estejam entre 0001 e 1110, ser iniciado o processo de execuo de uma instruo recongurada.
O estado seguinte denominado Busca instruo recongurada. Neste estado, o registrador
reg_codop recebe o valor do CodOp solicitado e far a busca do endereo inicial da instruo
na tabela de endereos. No estado L instruo recongurada o registrador de entrada da RAM
recebe o valor contido na tabela de endereo, o qual ser o barramento de endereo da memria
RAM de recongurao. O estado Espera instruo recongurada consiste em um estado de
espera enquanto realizada a busca nesta memria. Este estado necessrio devido ao fato de
que a memria de recongurao necessita de 3 ciclos de relgio para disponibilizar o resultado. Como cada estado possui 4 ciclos de relgio, somente necessrio adicionar um ciclo de
espera.
O prximo estado denominado Executa instruo recongurada. Neste estado, o valor da
palavra de recongurao armazenado na memria de recongurao recebido pela Unidade
de Controle, que posteriormente a envia para a Unidade Operativa, de maneira similar a realizada na execuo de instrues xas. A codicao da palavra de recongurao ser vista na
seo seguinte.
Ainda neste estado, o bit_end da palavra de recongurao vericado. Caso este seja igual

54

a 1, o estado seguinte ser o estado INT, indicando o trmino da instruo. Caso contrrio,
sero executados os estados nomeados Busca cont instruo recongurvel, L cont instruo
recongurvel e Espera cont instruo recongurvel. A funcionalidade destas instrues
praticamente idntica aos estados Busca instruo recongurvel, L instruo recongurvel
e Espera instruo recongurvel, com exceo de que o registrador de entrada da RAM no
recebe o valor contido na tabela, e sim o valor de sada do incrementador, fazendo com que a
memria acesse uma posio seguinte executada anteriormente. As guras seguintes mostram
um exemplo de execuo da instruo recongurada 1AH. A Figura 37 ilustra a execuo da
primeira operao de uma instruo recongurvel.

Figura 37: Processo de recongurao de um novo CodOp

A Figura 38 mostra a execuo das demais operaes da instruo recongurvel at que o


valor do bit_end seja igual a 1.

55

Figura 38: Continuao do processo de recongurao de um CodOp

3.9

Recongurao de uma instruo

Como visto anteriormente, para recongurar uma instruo, necessrio informar o valor do endereo (CodOp) e dos dados (palavra de recongurao). A palavra de congurao
contm 28 sinais, dispostos conforme a Figura 39, responsveis por manipular os blocos funcionais da unidade operativa. Este processo similar ao realizado para a execuo de instrues
presentes nos conjuntos de instrues xos, mas com algumas modicaes.

Figura 39: Disposio dos bits da palavra de recongurao

A congurao da palavra de congurao apresentada na Tabela 4. A manipulao


destes bits permite a criao e/ou combinao de qualquer instruo que seja possvel para o

56

processador realiz-la.
Tabela 4: Composio da palavra de congurao
Funo
Valores
Dene formato da instruo
Vide Apndice F
Controla o operando esquerdo da ULA 00 = Bar A
01 = Bar C
10 = AMASK
11 = MBR
BMUX
Controla o operando direito da ULA
00 = Bar B
01 = +1
10 = IR
11 = 00H & IR(18-0)
ULA
Seleciona operao da ULA
000 = A
001 = A AND B
010 = NOT(A)
011 = NOT(B)
100 = A + B
101 = A - B
110 = A * B
111 = A OR B
SH
Deslocador
Bit 1: Direo (esq/dir)
Bits 2 a 6: deslocamento
MBR
Carrega MBR
0 = no carrega
1 = carrega
MAR
Carrega MAR
0 = no carrega
1 = carrega
ENC
Armazena resultado
0 = no armazena
no conjunto de registradores
1 = armazena
MUX_MAR Entrada de MAR
00 = PC
01 = IR
10 = Latch B
11 = Bar C
MUX_MBR Entrada de MBR
0 = PC
1 = Bar C
WR
Estado de escrita na RAM
0 = no ocorre escrita
1 = ocorre escrita
RD
Estado de leitura na RAM
0 = no ocorre leitura
1 = ocorre leitura
BIT_END
Final da instruo
0 = no concluda
1 = concluda
Nome
Formato
AMUX

As operaes podem conter de 1 a 4 registradores, ou seja podem assumir os formatos de


OPA a OPC, A, B, D. Dependendo do formato utilizado e da quantidade de operaes que
compe a instruo, um registrador utilizado como destino na operao 1 pode ser utilizado
como entrada na operao 2. O Apndice F apresenta todos os formatos possveis de serem

57

utilizados na palavra de recongurao.


Analisando o conjunto de instruo 2, constata-se que para realizar uma operao de incremento de um valor X, necessrio primeiramente que um dos 32 registradores de trabalho
receba o valor 1, para posteriormente ser adicionado ao valor de X. E para que um registrador receba o valor 1, primeiramente o acumulador ir receber este valor para que depois
o contedo do acumulador seja movido para o registrador desejado. A partir destas informaes citadas, conclui-se que para executar o incremento de um registrador so necessrias 3
instrues.
Atravs do processo de recongurao de uma instruo, possvel criar a instruo INC
R, em que deseja-se realizar a operao R = R + 1. Para criar esta instruo, necessrio
denir o CodOp da instruo e as operaes necessrias, ou seja, congurar as palavras de
recongurao da instruo.
A primeira ao a ser tomada na denio da palavra de recongurao quanto ao formato
da operao. Para que ocorra R = R + 1, o valor de R deve estar presente no barramento
de Entrada A e tambm no barramento de resultado C. Vericando a tabela de codicao
(Apndice F), possvel utilizar qualquer formato que esteja na forma A = A op X, visto que
no necessrio informar o segundo operando. Para este exemplo, ser utilizado o formato
"000000"(A = A op A).
Analisando a unidade operativa do processador, para que a ULA receba como entrada o
barramento A, o valor de AMux dever ser "00". Pelo fato de uma das entradas de BMux estar
denida como o valor constante 1, no necessrio que seja enviado um valor no barramento
B, pois somente necessrio que BMux assuma o valor 01, selecionando a constante 1 como
a segunda entrada da ULA.
Como a operao desejada uma soma, os bits referentes ao controle da ULA devero
assumir os valores 100. Como no necessrio efetuar nenhum deslocamento no resultado,
os bits referentes a SH devero ser iguais a 0.
A operao desejada no necessita de nenhum acesso a memria, por isto todos os bits
referentes a MAR, MBR, WR e RD assumem valor 0. Para que o resultado da operao seja
armazenado no registrador "R", necessrio que o bit ENC seja igual a 1.
Finalizando, como apenas a operao R = R + 1 necessria para efetuar a instruo INC R,
o valor de bit_end deve ser ativado. Assim, a palavra de recongurao dever conter estes valores na seqncia de campos tal como foi visto na gura 39: 0000000001100000000001000001
(060041H). O Captulo 4 contm um exemplo de simulao da criao e utilizao desta ins-

58

truo recongurada.
O segundo exemplo ilustra a recongurao de uma instruo do tipo MAC (Multiplica e
Acumula). Ser criada a instruo MAC D, A, B, C, em que D = A + (B C). Como visto na
seo 3.3, esta instruo encontra-se no formato 4 (OP 5, 5, 5, 5, 4). A instruo desejada pode
ser decomposta em duas operaes: D = B C e D = D + A, de modo que cada uma destas
operaes ser armazenada na unidade de recongurao, utilizando-se o mesmo CodOp, que
neste caso ser denido como 11H.
Para denir a primeira palavra de recongurao, primeiramente deve-se denir o formato
da operao atual. Para a operao D = B C, o primeiro operando dever ser enviado ao barramento C, o terceiro operando ao barramento A e o quarto operando ao barramento B. Isto resulta
no formato de operao Bar C = Bar B op Aux, o que corresponde a codicao "101010".
O formato nal desta palavra de recongurao "1010100000110000000001000000", ou
A830040H.
A segunda operao (D = D + A) apresenta o primeiro operando como registrador destino
(Bar C) e como primeiro registrador de entrada (Bar A), enquanto que o segundo operando
representa o segundo registrador de entrada (Bar B). A codicao do formato BAR C = BAR
C op BAR A igual ao valor "010011". Ao nal da anlise dos bits restantes da segunda e
ltima palavra de recongurao, esta assume valor "0100110000100000000001000001", ou
4C20041H.
Aps o trmino do processo de recongurao, o processador deve continuar o processo
de execuo de instrues normalmente. Se em determinado momento o processador receber
uma instruo na qual IR seja igual a "11390A60H", a consulta ao valor 11H (00010001B) far
com que o processador inicie o processo de execuo de instruo recongurvel. Analisando
o valor de IR de acordo com o formato (8-5-5-5-5- 4), tem-se "00010001 00111 00100 00101
00110 0000". Isto representa a instruo MAC RD, RA, RB, RC.

59

SIMULAES E RESULTADOS

Este captulo apresenta alguns resultados quanto implementao das unidades funcionais
constituintes do processador e simulaes do comportamento e funcionalidade dos mesmos.
O processador foi descrito utilizando-se a linguagem de descrio V HDL(VHSIC Hardware
Description Language[IEEE, 1993], atravs da ferramenta de desenvolvimento Quartus II, da
Altera[Altera, 2005].

4.1

Resultados da Compilao

O processador foi compilado utilizando o dispositivo EP1S10F484C5, da famlia de dispositivos Stratix, da Altera. Este dispositivo foi escolhido em virtude da possibilidade de se
estimar o consumo de potncia da aplicao.
O resultado da compilao mostra que foram utilizados 3.798 elementos lgicos deste dispositivo, o que corresponde a 35% da rea disponvel do dispositivo (10.570 elementos lgicos).
Foram utilizados 154 pinos dos 336 disponveis (45% do total) e 9.728 bits de memria para a
implementao dos componentes lpm_ram, o que corresponde a apenas 1% da capacidade do
processador (920.448). Foram obtidas as seguintes freqncias para cada subciclo de relgio:
CLK_0: 90.20 MHz (perodo = 11.086 ns)
CLK_1: 61.07 MHz (perodo = 16.374 ns)
CLK_2: 290.87 MHz (perodo = 3.438 ns)
CLK_3: 136.54 MHz (perodo = 7.324 ns)
A freqncia de mais alto valor (CLK_1) devido ao tempo gasto para os latches A e B da
unidade operativa receberem os valores armazenados na memria de rascunho do processador.
J a freqncia de mais alto valor (CLK_2) conseqncia da utilizao de mega funes disponveis no Quartus para efetuar as operaes aritmticas de adio, subtrao e multiplicao

60

em apenas um ciclo. Em virtude dos valores obtidos, conclui-se que o processador possui uma
freqncia mxima de operao de 61MHz.
A Tabela 5 mostra a quantidade de elementos lgicos (EL), de registradores e de bits de memria (BM) utilizados em cada componente do processador. O componente que mais consome
elementos lgicos a memria de rascunho, pelo motivo da sua implementao ter sido realizada utilizando um conjunto de 32 registradores. A rea ocupada pela memria de rascunho
poderia ser reduzida caso este componente fosse implementado utilizando lpm_rams, como foi
realizado com a memria de recongurao. Este processo aumentaria a freqncia maxima de
operao e diminuiria a rea do processador. No entanto, acarretaria alteraes na temporizao
do processador e, conseqentemente, uma reformulao em toda a mquina de estados.
Tabela 5: Valores obtidos na compilao do processador
Unidade
Unidade de controle
Unidade Operativa

Componente

AMUX
BMUX
Latch A
Latch B
Mar
Mbr
Mux_mar
Memria de rascunho
Deslocador
Ula
Unidade de recongurao
registrador de CodOp
registrador de dados
registrador de endereo RAM
registrador de endereo tabela
multiplexador 4_1
Lpm_Ram vericao
Lpm_Ram tabela
Lpm_Ram dados (Memria Rec)
Total

E.L
1504
2234
32
19
32
32
32
32
26
1353
406
270
60
8
28
8
8
8
0
0
0
3798

Registradores
498
1120
0
0
32
32
32
32
0
992
0
0
52
8
28
8
8
0
0
0
0
1670

B.M
0
0
0
0
0
0
0
0
0
0
0
0
9728
0
0
0
0
0
512
2048
7168
9728

4.1.1 Anlise de custo dos conjuntos de instrues


Para vericar o impacto do acrscimo de um conjunto de instruo, foram realizadas compilaes utilizando cada conjunto separadamente e combinaes entre estes. Em todas as compilaes dos conjuntos, foi utilizado o dispositivo EP1S20F780C5 da famlia de dispositivos Stratix
da Altera. Foram analisados o total de elementos lgicos, a quantidade de estados necessrios

61

apenas para a execuo de instrues xas, excluindo os estados iniciais e de interrupo, e o


total de estados do conjunto. A Tabela 6 apresenta os resultados.
Tabela 6: Valores obtidos para cada conjunto de instruo
Conjunto de instruo
Conjunto 1
Conjunto 2
Conjunto 3
Conjuntos 1 e 2
Conjuntos 1 e 3
Conjuntos 2 e 3
Conjuntos 1, 2 e 3

E. L
822
828
909
1023
1081
1175
1380

Estados de execuo
59
53
87
64
87
87
87

Total de estados
90
84
118
95
118
118
118

% rea do dispositivo
3%
3%
4%
5%
6%
7%
7%

Com base nestes resultados, conclui-se que a diferena entre o menor conjunto de instruo
e o conjunto de instruo completo de 558 elementos lgicos.

4.2

Simulaes

Nesta seo sero vistos algumas simulaes do comportamento do processador na execuo de instrues xas e recongurveis e durante o processo de recongurao de uma ou mais
instrues.

4.2.1 Simulao da alternncia entre os conjuntos de instrues


Esta simulao mostra a execuo da instruo de CodOp 0DH por cada um dos conjuntos
implementados. A Figura 40 apresenta uma viso geral do processo de simulao desde a
inicializao do processador at a execuo da ltima instruo desejada, com um tempo de
execuo de aproximadamente 7, 36s. As Figuras 41 a 48 mostram maiores detalhes deste
processo.
A Figura 41 mostra a execuo da instruo muda_modo. Sem a execuo desta instruo,
o processador no executar nenhum comando de alterao de um conjunto de instruo para
outro. Esta gura tambm apresenta o comportamento do processador durante a seqncia
de estados iniciais para a execuo de uma instruo xa, como visto na seo 3.7. As setas
indicativas da gura mostram os principais eventos que ocorrem durante os estados iniciais
de uma instruo. Todas as instrues xas possuem o mesmo padro de comportamento,
alterando-se apenas os valores de PC, IR e SData.
Durante esta simulao o acumulador recebe alguns valores aleatrios atravs de instrues
LOCO para realizar as operaes. Na Figura 42, o acumulador recebe o valor "1AH", mediante

62

Figura 40: Viso geral da simulao de alternncia de conjuntos de instrues

Figura 41: Simulao da instruo muda_modo

63

a instruo LOCO 1AH.

Figura 42: Simulao da instruo LOCO 1AH

Aps a execuo de LOCO 1AH, a instruo seguinte a ser executada a instruo IR


= 0D084200H. Como at o presente momento no houve nenhuma instruo para selecionar
um conjunto de instruo, ento ser utilizado o conjunto de instruo 1. O CodOp 0DH
do conjunto 1 refere-se a instruo ADD X, em que o acumulador recebe o contedo de memria endereado por X. Esta instruo pertence ao formato de instruo 1, em que os 8
primeiros bits (00001101B - 0DH) representam o CodOp da instruo e os 24 bits restantes
(000010000100001000000000B - 084200H) representam o valor do endereo de memria a
ser consultado.
A Figura 43 mostra apenas os estados de execuo desta instruo. O estado OP13_1 indica
uma operao de leitura na memria, em que o valor a ser recebido ser o contedo da clula
de memria da posio 00084200H. Aps a leitura deste valor, o estado OP13_2 responsvel
por realizar uma adio entre o valor do acumulador e o valor de MBR.
Em seguida ocorre a execuo da instruo IR = FE000001H. Esta instruo seleciona qual
conjunto de instruo ser utilizado a partir da prxima instruo. Os dois ltimos bits de IR
("01"B) indicam que ser selecionado o conjunto de instruo 2. A execuo desta instruo
apresentada na Figura 44.
Na Figura 45, novamente o processador executa a instruo IR = 0D084200H. A diferena est no fato de que agora o CodOp 0DH resultar na execuo da instruo ADDR
Ra, Rx, Ry. Esta instruo pertence ao formato de instruo 2, em que os 8 primeiros bits
(00001101B - 0DH) representam o CodOp da instruo e os 24 bits restantes (00001 00001

64

Figura 43: Simulao da instruo IR = 0D084200H do conjunto 1

Figura 44: Simulao da alterao do conjunto de instruo 1 para 2

00001 000000000B - 084200H) so interpretados na forma 5-5-5-9, que representam, respectivamente, a codicao dos registradores Ra, Rx e Ry.
Ao contrrio da execuo apresentada na Figura 43, esta instruo contm apenas uma operao (OP13_1), em que o Ra (Acumulador) recebe o resultado da soma entre Rx (Acumulador)
e Ry (Acumulador).
Na seqncia, a instruo a ser executada IR = FE000002H. O processo de execuo desta
instruo (muda_conjunto) semelhante ao anteriormente descrito, com a diferena de que esta
instruo seleciona o conjunto de instruo 3, como pode ser visto na Figura 46.

65

Figura 45: Simulao da instruo IR = 0D084200H do conjunto 2

Figura 46: Simulao da alterao do conjunto de instruo 2 para 3

A ltima parte desta simulao apresenta novamente a execuo de IR = 0D084200H. Este


CodOp dar incio a execuo da instruo ADDp, em que o processador recebe dois valores
armazenados na pilha, efetua a adio entre estes valores e empilha o resultado nal. Esta
instruo tambm encontra-se no formato 1, com a diferena de que os 24 bits restantes no
representam nenhum valor utilizado durante esta execuo.
A Figura 47 apresenta os primeiros estados desta instruo. As setas indicativas mostram
os eventos ocorridos no processo de busca de um valor na pilha. Neste exemplo, foi solicitada
uma busca na pilha na posio "00H", obtendo-se o valor "17H", sendo este valor armazenado
no Registrador A.

66

Figura 47: Simulao da instruo IR = 0D084200H do conjunto 3 (a)

J a Figura 48 mostra um processo semelhante, em que realizada a busca na pilha na


posio "01H"e recebendo o valor "F1H", posteriormente armazenado no Registrador B. As
ltimas operaes representam a adio dos valores contidos em A e B, e o armazenamento do
resultado na pilha, por meio de uma operao de escrita.

Figura 48: Simulao da instruo IR = 0D084200H do conjunto 3 (b)

A Figura 49 mostra o diagrama de estados que conrma o resultado das simulaes realizadas, em que o mesmo CodOp pode ser destinado a trs operaes distintas.

67

Figura 49: Diagrama de estados do CodOp


0D084200H

4.2.2 Simulao da criao de uma instruo: MAC D, A, B, C


Esta simulao permite vericar o comportamento do processador durante o processo de
recongurao de uma instruo contendo mais de uma operao e sua execuo. Como exemplo, ser criada a instruo MAC D, A, B, C. O processo de criao desta instruo encontra-se
na pgina 58 da sesso 3.9. A instruo MAC composta por duas operaes (A830040H
e 4C20041H). Cada operao de uma instruo recongurada necessita de 6 estados para ser
efetuada.
Esta primeira tela de simulao (Figura 50) apresenta o processo de recongurao desta
instruo. O perodo utilizado de 20ns para cada subciclo de relgio, o que resulta em um
total de 80ns para cada instruo.
A Figura 51 mostra o funcionamento da unidade de recongurao durante a criao de
MAC. Os locais indicados na gura mostram os principais eventos deste processo. O tempo
total gasto para recongurar as duas operaes foi de 1.06s.
A Figura 52 mostra o processo de inicializao das variveis A, B e C. Para denir o valor
de cada varivel, necessrio executar a instruo LOCO informando o valor desejado, para
posteriormente mover o valor do acumulador para o registrador. Como no existe a instruo
MOV, utilizada a instruo ADDR R, Acc, 0, em que o registrador alvo recebe o contedo do

68

Figura 50: Simulao do processo de recongurao (b)

Figura 51: Simulao do processo de recongurao (a)

registrador acumulador somado com "00000000"H.


A Figura 53 ilustra a execuo da instruo MAC. O valor IR = 11390A60H (0001 0001
00111 00100 00101 00110 0000B) informa quais so os 4 registradores utilizados nesta operao. Esta operao necessita de 15 estados para ser efetuada, sendo 10 estados para a primeira
operao (incluindo os 6 estados iniciais de busca e vericao) e 5 estados para a segunda
operao (incluindo o estado de vericao de interrupo).
A aplicao foi executada em um total de 99 estados, resultando em tempo total de 9, 32s.

69

Figura 52: Simulao do processo de obteno de valores

Figura 53: Simulao do processo de execuo da instruo recongurada

Excluindo-se o tempo gasto para recongurar a instruo, o tempo necessrio apenas para a
execuo da aplicao de 8, 26s.
possvel reduzir este tempo de execuo criando a instruo LDR X. Esta instruo permite que qualquer registrador possa receber diretamente um valor constante de 14 bits, ou seja,
elimina-se a obrigatoriedade do valor desejado primeiramente ser armazenado no acumulador.
Esta instruo contm somente uma microinstruo: Ra = "00000000"H + "0000000000000"B
& IR(18-0).
Para executar esta microinstruo, necessrio que o valor de IR seja (8, 5, 5, 14). Os 8
primeiros bits correspondam ao CodOp, assim como ocorre em todas as instrues. Os 5 bits do

70

primeiro operando correspondem ao registrador destino da operao. Os 5 bits do primeiro operando devem ser "00000", o que corresponde ao registrador 0. Os 5 bits do segundo operando
podem assumir qualquer valor, pois no sero utilizados. Isto se deve ao fato de que os bits de
Bmux da palavra de recongurao devem ser "11", selecionando a entrada "0000000000000"B
& IR(18-0). Esta a nica congurao do processador que permite a realizao da instruo
LDR X em uma nica operao.
A ltima tela desta simulao, correspondente a Figura 54, apresenta a execuo de uma
aplicao MAC utilizando a instruo LDR. O processo de execuo desta aplicao necessita
de 54 estados, sendo 6 estados para recongurar a instruo LDR, 11 estados para execut-la e
15 estados para executar a instruo MAC. O tempo de execuo desta aplicao, excluindo-se
o tempo necessrio para recongurar as instrues, de 4, 17s, ou seja, houve uma reduo de
50% na execuo desta aplicao.

Figura 54: Simulao do processo de execuo das instrues MAC e LDR

4.2.3 Simulao de uma aplicao: Fatorial


Esta simulao envolve a execuo de uma aplicao completa para a obteno do fatorial
de um nmero. A execuo desta aplicao foi realizada com base neste algoritmo:

71

Utilizando como exemplo Acc = "05"D, a aplicao deste algoritmo consiste nos seguintes

passos:

72

Inicialmente, esta aplicao foi implementada utilizando apenas as instrues do conjunto


de instruo 2. A Tabela 7 mostra a seqncia de execuo da aplicao. Cada linha da tabela
representa a execuo de uma operao distinta.

PC
00H
01H
02H
03H
04H
05H
06H
07H
08H
09H
0AH
0BH
0CH
0DH

Tabela 7: Execuo do fatorial utilizando apenas instrues xas


IR
Mnemnico
Efeito
FF00000FH
Muda_modo
modo supervisor
FE00001FH
Muda_conjunto
conjunto 2
02000001H
LOCO 01
Acc = 1
0D204000H
ADDR A, Acc, 0 A = Acc + 0
0D284000H
ADDR B, Acc, 0 B = Acc + 0
0D304000H
ADDR C, Acc, 0 C = Acc + 0
02000005H
LOCO 05
Acc = 5
0E084C00H SUBR Acc, Acc, C Acc = Acc - C
0C00000DH
JZER 0D
IF Acc = 0 PC = 0DH
0D294C00H
ADDR B, B, C
B=B+C
0F210A00H
MULR A, A, B
A=A*B
0E84C00H SUBR Acc, Acc, C Acc = Acc - C
0B000009H
JNZE 09
IF Acc = 0 PC = 09H
0D090000H
ADDR Acc, A, 0 Acc = A + 0

Ciclos
9
9
9
9
9
9
9
9
9
9
9
9
10
9

A Figura 55 apresenta uma tela contendo uma viso geral da execuo da aplicao. A Figura mostra que nesta aplicao no houve nenhuma alterao nos bits MCmd_ext, MData_ext
e MAddr_ext. Isto signica que em nenhum momento durante a execuo desta instruo houve
um pedido de recongurao de uma instruo. Conseqentemente, no foi realizada nenhuma
operao a partir de uma instruo recongurada.
A gura tambm ilustra o contedo dos registradores 1 a 7, em que SIG1 representa o
acumulador, SIG4 representa o registrador A e assim sucessivamente. Com base nos valores,
representados em hexadecimal, assumidos pelos registradores, comprova-se a correta execuo
da aplicao.
A Figura 56 apresenta uma viso um pouco mais detalhada do processo de clculo do fatorial no perodo de simulao aonde ocorrem as operaes de adio, multiplicao e subtrao
envolvendo os registradores selecionados.

73

Figura 55: Viso geral da simulao do Fatorial utilizando instrues xas

Figura 56: Execuo das operaes durante a simulao do Fatorial

O processo a partir do estado Verica_Pedido at o estado de decodicao possui 8 estados distintos. Todas as instrues xas executam estes estados, alm dos estados especcos
destinados as operaes da instruo. Desse modo, conclui-se que a execuo de uma instruo
xa demora no mnimo 9 estados para ser nalizada. Para se executar o algoritmo acima, foram
necessrios 237 estados. Como cada estado possui 4 ciclos de relgio, e cada ciclo de relgio
possui um perodo de 20ns, o tempo mnimo de execuo desta aplicao de 18.960ns, embora o tempo real de execuo da aplicao dependa do tempo de resposta da memria RAM

74

para cada solicitao de leitura.


A Figura 57, indica o momento em que a aplicao nalizada (19, 46s). Sabendo-se que
a aplicao foi iniciada com 120ns, o tempo total gasto para a execuo desta aplicao foi de
19, 34s. A potncia total consumida durante este perodo foi de 131, 35mW , o que resulta em
um gasto de energia de 2, 540J.

Figura 57: Trmino da execuo do Fatorial

Um segundo exemplo de um fatorial foi implementado, utilizando agora instrues reconguradas. Para auxiliar a execuo do fatorial foram criadas as instrues INC R e DEC R,
vistas na seo 3.9. A Figura 58 mostra a seqncia completa da execuo desta aplicao
utilizando as instrues reconguradas.
A Tabela 8 mostra o novo algoritmo para o clculo do fatorial utilizando as instrues
criadas. A Tabela 9 contm algumas informaes adicionais sobre as instrues reconguradas
utilizadas neste exemplo.
A Figura 59 mostra uma tela de simulao aonde ocorre o processo de execuo das instrues reconguradas. Como visto anteriormente, todas as instrues reconguradas que possuem apenas uma operao necessitam de 11 estados para serem executadas.
Por este motivo, no se deve criar uma instruo recongurada contendo uma operao para
substituir uma instruo xa que realize esta mesma operao, pois a instruo recongurvel
gasta 2 ciclos a mais do que a instruo xa que contenha tambm uma operao. Esta diferena existente devido aos ciclos extras que o componente lpm_ram utilizado necessita para

75

Figura 58: Viso geral da simulao do Fatorial utilizando instrues INC R e REC R

Tabela 8: Execuo do fatorial utilizando instrues reconguradas


PC
00H
00H
00H
01H
02H
03H
04H
05H
06H
07H
08H
08H
0CH
0DH

IR
FF00000FH
FE00001FH
02000005H
1A084000H
0C00000BH
10210000H
10294000H
10294000H
0F210A00H
1A084000H
0B000007H
0D090000H

Mnemnico
Criar INC R
Criar DEC R
Muda_modo
Muda_conjunto
LOCO 05
DEC Acc
JZER 0B
INC A
INC B
INC B
MULR A, A, B
DEC Acc
JNZE 07
ADDR Acc, A, 0

Efeito
R=R+1
R=R-1
modo supervisor
conjunto 2
Acc = 5
Acc = Acc - 1
IF Acc = 0 PC = 0BH
A=A+1
B=B+1
B=B+1
A=A*B
Acc = Acc - 1
IF Acc = 0 PC = 07H
Acc = A + 0

Ciclos
6
6
9
9
9
11
9
11
11
11
9
11
9/10
9

Tabela 9: Informaes adicionais das instrues reconguradas


Instruo
INC R
DEC R

Operao
INC R
DEC R

MData
6460041H
6468041H

MAddr
1AH
10H

Endereo RAM reconf.


00
01

disponibilizar o dado. Caso haja outro componente que realize esta operao em menos ciclos,
esta diferena se tornar inexistente, proporcionando um aumento de desempenho ainda maior.
Esta aplicao foi executada em um total de 253 estados. Multiplicando este valor pelo
perodo de relgio total (80ns), o tempo mnimo de execuo desta aplicao de 20.240ns. O
tempo real desta simulao, considerando a variao de tempo durante as operaes de leitura,
de 20, 765s. Excluindo-se o perodo gasto para iniciar o processador, o tempo de execuo

76

Figura 59: Execuo das instrues INC R e REC R

desta aplicao foi de 20, 645s. A potncia total consumida foi de 135.84mW , proporcionando
um gasto de energia de 2, 80J.
A partir da segunda vez que esta aplicao executada, no se faz necessrio repetir o
processo de recongurao das instrues, como visto na Figura 60. Desse modo, o total de estados necessrios para executar o fatorial reduzido para 241 estados, resultando em um tempo
mnimo de simulao de 19.517ns. A potncia neste intervalo de 121, 30mW , consumindo
uma energia de 2, 36J.

Figura 60: Repetio do processo de fatorial sem recongurao de INC e DEC

O ltimo exemplo consiste na criao da instruo FAT Acc, A, B, por meio da combinao
de instrues. Esta instruo FAT contm 3 operaes, que so INC B, MULR A, A, B e DEC

77

Acc. Como somente um valor de IR ser recebido, e para cada operao os registradores de
destino e entrada so diferentes, cada uma das operaes dever seguir um formato distinto.
A primeira operao (INC B) deve fazer com que o registrador B receba o valor do prprio
registrador B adicionado de uma unidade. Como B o terceiro operando (BAR B) da instruo
FAT, esta operao deve seguir algum formato em que BAR B = BAR B + X. Mediante a tabela
de codicao de formatos (apndice F), os bits reservados para o campo formato da palavra de
recongurao tero valor "001010". Aps a denio dos valores dos demais componentes, o
valor nal da primeira palavra de recongurao ser 2860040H.
Devem ser seguidos os mesmos procedimentos para todas as operaes seguintes. A segunda operao deve realizar A = A B, ou seja, BAR A = BAR A * BAR B. O valor nal
desta palavra de recongurao ser 0430040H. Para realizar a operao DEC Acc, o formato
da operao deve ser BAR C = BAR C - X, resultando na palavra de recongurao igual a
4C68041H. Como o ltimo bit desta palavra contm o valor 1, signica o trmino da recongurao desta instruo.
A instruo FAT demora 19 estados para ser executada, sendo 10 estados para a primeira
operao, 4 para a segunda e 5 para a ltima. A Tabela 10 mostra o novo algoritmo para
o clculo do fatorial utilizando a instruo FAT. A Tabela 11 contm algumas informaes
adicionais sobre as instrues reconguradas utilizadas neste exemplo.
Tabela 10: Execuo do fatorial utilizando instrues reconguradas com mais de uma operao
PC
00H
00H
00H
00H
01H
02H
02H
03H
04H
04H
05H
06H
07H
08H
09H

IR
FF00000FH
FE00001FH
02000005H
15084001H
0C000009H
18210001H
18294001H
10090A00H
0B000007H
0D090000H

Mnemnico
Criar FAT C, A, B
Continua FAT C, A, B
Continua FAT C, A, B
Muda_modo
Muda_conjunto
LOCO 05
Criar DEC R
DEC Acc
JZER 09
Criar INC R
INC A
INC B
FAT Acc, A, B
JNZE 07
ADDR Acc, A, 0

Efeito
INC R
MULR A, A, B
Dec R
modo supervisor
conjunto 2
Acc = 5
R=R-1
Acc = Acc - 1
IF Acc = 0 PC = 09H
R=R+1
A=A+1
B=B+1
Acc!
IF Acc = 0 PC = 07H
Acc = A + 0

Ciclos
6
6
6
9
9
9
6
11
9
6
11
11
19
9/10
9

A Figura 61 apresenta o processo de simulao do fatorial realizada duas vezes. A primeira


execuo, considerando o tempo gasto para recongurar a instruo FAT, dura 18, 498s, em
um total de 223 estados. A potncia total deste processo de 135, 45mW . A segunda execuo,

78

Tabela 11: Informaes adicionais das instrues reconguradas


Instruo
FAT C, A, B
FAT C, A, B
FAT C, A, B
DEC R
INC R

Operao
INC R
MULR A, A, B
DEC R
DEC R
INC R

MData
2860040H
0430040H
4C68041H
6468041H
6460041H

MAddr
10H
10H
10H
15H
18H

Endereo RAM Reconf.


00
01
02
03
04

por no necessitar que o processo de recongurao seja realizado novamente, realizada em


16, 145s, consumindo 121, 95mW de potncia. A energia consumida neste ltimo perodo de
1, 968J. Em relao a primeira execuo do fatorial, em que no foram utilizadas instrues
reconguradas, houve um ganho de 22,50% em relao ao consumo de energia.

Figura 61: Repetio do processo de fatorial sem recongurao de FAT

79

Consideraes nais

O desenvolvimento deste trabalho teve como objetivo central o projeto e implementao de


um processador com conjunto de instruo recongurvel. Com o projeto e implementao do
processador apresentado nesta dissertao pretende-se estudar a aplicabilidade e a ecincia de
dois conceitos. O primeiro destes conceitos diz respeito utilizao no processador de mais de
um conjunto de instruo. Nesta dissertao estes conjuntos de instruo foram chamados de
conjuntos de instruo xos, em oposio possibilidade de criar novas instrues em tempo
de execuo. O segundo conceito diz respeito justamente possibilidade de, em tempo de execuo, denir novos padres de instrues, denindo seu formato, operandos, bem como as
operaes elementares executadas durante o ciclo de vida desta instruo. Dos conjuntos de
instruo xos apenas um deve estar ativo em um determinado momento. A criao de instrues possibilita a combinao de padres de instrues pr-existentes, possibilitando uma
melhor adaptao entre o conjunto de instrues e a aplicao. Uma vez criadas novas instrues, o processador passa a reconhec-las e utiliz-las como uma de suas instrues nativas.
Para tornar possvel a utilizao de mais de um conjunto de instruo durante a execuo de
uma aplicao, foram criadas instrues privilegiadas que denem o conjunto em uso.
Na arquitetura de processador cuja proposta e implementao so objeto desta dissertao,
trs conjuntos de instrues foram criados. Obedecendo aos objetivos de projeto e implementao de uma plataforma de hardware que possibilite o estudo de viabilidade, aplicabilidade e ecincia dos conceitos j mencionados, os conjuntos criados foram consideravelmente simples.
Cada conjunto possui caractersticas e instrues prprias, entretanto algumas instrues bsicas so compartilhadas por mais de um conjunto ou pelos trs. A implementao da unidade de
controle do processador (uma mquina de estados nitos)leva em considerao a possibilidade
de compartilhamento de caractersticas e recursos e, visando a minimizao da rea ocupada,
compartilha estados sempre que possvel.
Nesta dissertao foram realizados experimentos no sentido de analisar o custo de cada um
dos conjuntos de instruo. Com base nestes estudos vericou-se que 822 clulas lgicas do
dispositivo EP1S20F780C5 da famlia Sratrix foram necessrias para a implementao de um

80

conjunto. Para a integrao de um segundo um conjunto o nmero de clulas lgicas cresceu


para 1023, o que representa um aumento de 201 clulas lgicas, o que corresponde a um aumento de at 2% da rea utilizada pelo dispositivo. A implementao nal com trs conjuntos
requisitou um total de 1380 clulas lgicas, representando um aumento de 4% com relao a
uma unidade de controle com apenas um conjunto de instruo. Na dissertao o leitor encontra
simulaes e tabelas com resultados de sntese que comprovam a ecincia da implementao
da mquina de estados com trs conjuntos de instruo.
Devido a existncia de diferentes conjuntos de instrues na mesma arquitetura, espera-se
que o compilador possa explorar o espao de solues de compilao possvel, escolhendo para
cada trecho de cdigo, rotina ou lao, qual o conjunto de instruo que melhor se adequado segundo uma mtrica de desempenho que resta a ser denida. Esta mtrica de desempenho pode
estar baseada no tempo de execuo ou na potncia consumida, por exemplo. Nesta dissertao
de mestrado no foi possvel realizar experimentos de compilao, entretanto no grupo de pesquisa em arquiteturas e sistemas integrados, trabalhos desta natureza, utilizando o processador
aqui proposto, j foram iniciados.
A criao de novas instrues apresenta-se como uma proposta agressiva no que diz respeito a denio, em tempo de execuo ou compilao, de um conjunto de instruo mais
adequado a aplicao. Mais uma vez a adequao pode ser vista segundo diferentes mtricas.
Para permitir a criao de instrues, foi projetada uma unidade de recongurao junto a unidade de controle. Nesta dissertao o leitor encontra simulaes e resultados de rea e potncia
consumida que comprovam a ecincia da unidade de recongurao. Quanto aos resultados de
potncia consumida observa-se que 131,35 mW so necessrios para a execuo do algoritmos
de clculo do fatorial sem o uso da unidade de recongurao, ou seja, sem o uso de instrues
customizadas. O mesmo algoritmo, quando utilizando ao mximo a possibilidade de criao
de novas instrues, consome uma potncia de 121,95 mW. Nestes resultados destaca-se que
para o clculo do algoritmo original no foi considerado o consumo de potncia associado aos
acessos memria para busca de instrues e dados, entretanto bem conhecido que o acesso
memria representa a principal parcela de consumo de potncia na execuo de um cdigo
qualquer. Por outro lado, na execuo da verso otimizada do algoritmo, as instrues customizadas so buscadas em memrias internas ao dispositivo utilizado para sntese e simulao.
Por encontrarem-se internas ao dispositivo, o consumo de potncia destes acessos memria
foram considerados. No corpo da dissertao encontram-se resultados de potncia consumida
durante a execuo dos algoritmos, durante o processo de recongurao e durante a execuo
ps-recongurao. A tcnica de criao de novas instrues implica em consumo de potncia
para recongurao, entretanto, se o trecho de cdigo que utiliza instrues reconguradas

81

um trecho cuja execuo se repete e executada em menos tempo que o algoritmo original, o
resultado um consumo de energia menor que a do algoritmo original.
Em relao a quantidade de estados utilizados na FSM do processador, verica-se que para
recongurar uma instruo so necessrios 6 estados para cada operao existente. Para executar uma operao xa, so necessrios no mnimo 9 estados, considerando uma instruo com
apenas uma operao. Cada operao extra consome 1 estado a mais durante a execuo. J para
a execuo de uma instruo customizada, so necessrios 11 estados para executar a primeira
operao, e as demais operaes necessitam de apenas 4 ou 5 estados. Estes valores tambm
comprovam a ecincia na resoluo de problemas utilizando a tcnica de recongurao.
A comparao da execuo do algoritmo original e de sua verso otimizada mostrou que
a utilizao de instrues reconguradas, principalmente quando realizada uma combinao
entre duas ou mais operaes, proporciona aumento de desempenho do processador, atingindo
assim os objetivos esperados.
Com base nas informaes encontradas, conclui-se que os resultados obtidos frente compilao do processador foram considerados satisfatrios. Foram utilizados 3.798 clulas lgicas
do dispositivo EP1S10F484C5 da famlia Stratix, resultando em uma freqncia mxima de
operao de 61MHz. Estes resultados so equivalentes a outras implementaes em FPGA que
no utilizam pipeline. Desse modo, possvel armar que o processador recongurvel atende
as nalidades para as quais foi projetado.

82

Referncias
[Adrio, 1997] Adrio, A. M. S. (1997). Arquiteturas recongurveis. Porto Alegre, RS, Brasil.
[Altera, 2005] Altera (2005). Quartus II 4.1 version Altera.
[Arago et al., 2000] Arago, A., Romero, R., and Marques, E. (2000). Computao recongurvel aplicada robtica. Marlia, SP, Brasil. Workshop de Computao Recongurvel CORE 2000.
[Athanas and Silverman, 1993] Athanas, P. M. and Silverman, H. F. (1993). Processor reconguration through instruction-set metamorphosis. IEEE Computer, 26(3):1118.
[Azevedo et al., 2003] Azevedo, A., Soares, R., and Silva, I. S. (2003). A new hybrid paralell/recongurable architecture: The x4cp32. In Proceedings of 16th Symposium on Integrated Circuits and Systems Design, pages 225230, So Paulo, SP, Brasil. IEEE Circuits and
Systems Society.
[Barat et al., 2003] Barat, F., Jayapala, M., Aa, T. V., Lauwereins, R., Deconinck, G., and Corporaal, H. (2003). Low power coarse-grained recongurable instruction set processor. In
3th International Conference on Field Programmable Logic and Applications, 1st - 3rd Sept.
2003, in Lisbon, Portugal.
[Barat et al., 2002a] Barat, F., Jayapala, M., de Beeck, P. O., Deconinck, G., and Leuven, K. U.
(2002a). Software pipelining for coarse-grained recongurable instruction set processors. In
ASP-DAC 02: Proceedings of the 2002 conference on Asia South Pacic design automation/VLSI Design, page 338, Washington, DC, USA. IEEE Computer Society.
[Barat et al., 2002b] Barat, F., Lauwereins, R., and Deconinck, G. (2002b). Recongurable
instruction set processors from a hardware/software perspective. IEEE Trans. Softw. Eng.,
28(9):847862.
[Barat and Lauwereins, 2000] Barat, F. and Lauwereins, R. (2000). Recongurable instruction
set processors: A survey. In RSP 00: Proceedings of the 11th IEEE International Workshop
on Rapid System Prototyping (RSP 2000), page 168, Washington, DC, USA. IEEE Computer
Society.
[Carrillo and Chow, 2001] Carrillo, J. E. and Chow, P. (2001). The effect of recongurable
units in superscalar processors. In FPGA 01: Proceedings of the 2001 ACM/SIGDA ninth
international symposium on Field programmable gate arrays, pages 141150, New York,
NY, USA. ACM Press.
[Casillo et al., 2005] Casillo, L. A., Lima, L. M. P., de Souza, G. B., and Silva, I. S. (2005).
Projeto e implementao em um fpga de um processador com conjunto de instruo recongurvel utilizando vhdl. In In proceedings of XI Workshop Iberchip, Salvador, BA, Brasil.

83

[Compton and Hauck, 2000] Compton, K. and Hauck, S. (2000). An introduction to recongurable computing. IEEE Computer.
[Dehon, 1996] Dehon, A. M. (1996). Recongurable architectures for general-purpose computing. PhD thesis. Supervisor-Thomas Knight, Jr.
[de Beeck et al., 2001] de Beeck, P. O., Barat, F., Jayapala, M., and Lauwereins, R. (2001).
Crisp: A template for recongurable instruction set processors. In FPL 01: Proceedings
of the 11th International Conference on Field-Programmable Logic and Applications, pages
296305, London, UK. Springer-Verlag.
[Goncalves et al., 2003] Goncalves, R. A., Moraes, P. A., Cardoso, J. M. P., Wolf, D. F., Fernandes, M. M., Romero, R. A. F., and Marques, E. (2003). Architect-r: A system for recongurable robots. In In proceedings of ACM Anual symposium on Applied Computing - SAC,
Melbourne - Florida.
[Hartenstein, 2001] Hartenstein, R. (2001). A decade of recongurable computing: a visionary
retrospective. In DATE 01: Proceedings of the conference on Design, automation and test
in Europe, pages 642649, Piscataway, NJ, USA. IEEE Press.
[Hauser and Wawrzynek, 1997] Hauser, J. R. and Wawrzynek, J. (1997). Garp: a mips processor with a recongurable coprocessor. In FCCM 97: Proceedings of the 5th IEEE Symposium on FPGA-Based Custom Computing Machines (FCCM 97), page 12, Washington,
DC, USA. IEEE Computer Society.
[IEEE, 1993] IEEE (1993). IEEE Std 1076-1993 IEEE Standard VHDL Language Reference
Manual.
[Ito et al., 2001] Ito, S. A., Carro, L., and Jacob, R. (2001). Making java work for microcontroller applications. IEEE Design and Test of Computers, 18(5):100110.
[It and Carro, 2000] It, S. A. and Carro, L. (2000). A comparison of microcontrollers targeted
to fpga-based embedded applications. In 13th Symposium on Integrated Circuits and Systems
Design, pages 399402, Manaus, AM, Brasil. Brasilian Computer Society.
[Liu et al., 2003] Liu, J., Chow, F., Kong, T., and Roy, R. (2003). Variable instruction set
architecture and its compiler support. IEEE Trans. Comput., 52(7):881895.
[Lodi et al., 2003] Lodi, A., Mario Toma, F. C., Cappelli, A., and Guerrieri, R. (2003). A
vliw processor uit recongurable instruction set for embedded applications. IEEE Journal
of solid-state circuits, 538(11).
[Martins et al., 2003] Martins, C. A. P. S., Ordonez, E. D. M., Corra, J. B. T., and Carvalho,
M. B. (2003). Computao recongurvel: conceitos, tendncias e aplicaes. In Jornada
de Atualizao em Informtica (JAI 2003), pages 339388, Campinas, SP, Brasil. Sociedade
Brasileira de Computao.
[Mesquita, 2002] Mesquita, D. G. (2002). Contribuies para recongurao parcial, remota e
dinmica de fpgas. Masters thesis, Ponticia Universidade Catolica do Rio Grande do Sul,
Porto Alegre, RS, Brasil.
[Partnerchip, 2001] Partnerchip, O. I. (2001). Open Core Protcol Specication.

84

[Ramos et al., 2004] Ramos, K. D. N., Casillo, L. A., Santiago, N. R. A. C., Oliveira, J. A. N.,
Augusto, A., and Silva, I. S. (2004). Projeto baseado em reuso: Implementao de um ip de
processador didtico em fpga com interface ocp. In In proceedings of X Iberchip, Cartagena
del Indias, Colmbia.
[Razdan and Smith, 1994] Razdan, R. and Smith, M. D. (1994). A high-performance microarchitecture with hardware-programmable functional units. In MICRO 27: Proceedings of the
27th annual international symposium on Microarchitecture, pages 172180, New York, NY,
USA. ACM Press.
[Silva, 2001] Silva, I. S. (2001). Arquiteturas recongurveis: Teoria e prtica. In III Escola
de Microeletrnica da SBC-Sul, pages 161182, Santa Maria, RS, Brasil. EMICRO2001.
[Smith, 1997] Smith, M. J. S. (1997). Aplication-Specic Integrated Circuits. Addison-Wesley,
Berkeley, California, 3 edition.
[Soares et al., 2004] Soares, R., Azevedo, A., and Silva, I. S. (2004). When recongurable
architecture meets network-on-chip. In Proceedings of 17th Symposium on Integrated Circuits and Systems Design, pages 216221, Porto de Galinhas, PE, Brasil. IEEE Circuits and
Systems Society.
[S. Hauck, 1997] S. Hauck, T. W. Fry, M. M. H. J. P. K. (1997). The chimaera recongurable
functional unit. In FCCM 97: Proceedings of the 5th IEEE Symposium on FPGA-Based
Custom Computing Machines (FCCM 97), page 87, Washington, DC, USA. IEEE Computer
Society.
[Tanenbaum, 1992] Tanenbaum, A. S. (1992). Organizao Estruturada de Computadores.
Prentice/Hall do Brasil, Rio de Janeiro, RJ, Brasil, 3 edition.
[Wirthlin, 1995] Wirthlin, M. J. (1995). A dynamic instruction set computer. In FCCM 95:
Proceedings of the IEEE Symposium on FPGAs for Custom Computing Machines, page 99,
Washington, DC, USA. IEEE Computer Society.

85

APNDICE A -- Esquema completo do processador

86

87

88

APNDICE B -- Conjunto de registradores

Cdigo
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111

Registrador
0
Acc
FP
SP
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
Y
X
Z

89

APNDICE C -- Fluxograma da mquina de estados


do processador

90

91

92

93

94

APNDICE D -- Conjuntos de Instrues

D.1

Conjunto 1
Binrio
00000000xxxxxxxxxxxxxxxxxxxxxxxx
00000001xxxxxxxxxxxxxxxxxxxxxxxx
00000010xxxxxxxxxxxxxxxxxxxxxxxx
00000011xxxxxxxxxxxxxxxxxxxxxxxx
00000100xxxxxxxxxxxxxxxxxxxxxxxx
00000101xxxxxxxxxxxxxxxxxxxxxxxx
00000110xxxxxxxxxxxxxxxxxxxxxxxx
00000111xxxxxxxxxxxxxxxxxxxxxxxx
00001000xxxxxxxxxxxxxxxxxxxxxxxx
00001001xxxxxxxxxxxxxxxxxxxxxxxx
00001010xxxxxxxxxxxxxxxxxxxxxxxx
00001011xxxxxxxxxxxxxxxxxxxxxxxx
00001100xxxxxxxxxxxxxxxxxxxxxxxx
00001101xxxxxxxxxxxxxxxxxxxxxxxx
00001110xxxxxxxxxxxxxxxxxxxxxxxx
00001111xxxxxxxxxxxxxxxxxxxxxxxx
11110000000000000000000000000000
11110001000000000000000000000000
11110010000000000000000000000000
11110011000000000000000000000000
11110100000000000000000000000000
11110101000000000000000000000000
11110110000000000000000000000000
11110111000000000000000000000000
11111000xxxxxxxxxxxxxxxxxxxxxxxx
11111001xxxxxxxxxxxxxxxxxxxxxxxx
11111010000000000000000000000000
11111011000000000000000000000000
11111110000000000000000000000000
11111101000000000000000000000000
111111100000000000000000yyyyyyyy
111111110000000000000000yyyyyyyy

Hexadecimal
00XXXXXX
01XXXXXX
02XXXXXX
03XXXXXX
04XXXXXX
05XXXXXX
06XXXXXX
07XXXXXX
08XXXXXX
09XXXXXX
0AXXXXXX
0BXXXXXX
0CXXXXXX
0DXXXXXX
0EXXXXXX
0FXXXXXX
F7000000
F0000000
F1000000
F2000000
F3000000
F4000000
F5000000
F6000000
F8XXXXXX
F9XXXXXX
FAXXXXXX
FBXXXXXX
FE00000YY
FF00000YY

Inst. Inicial
OP0_1
OP1_1
OP2_1
OP3_1
OP4_1
OP5_1
OP6_1
OP7_1
OP8_1
OP9_1
OP10_1
OP11_1
OP12_1
OP13_1
OP14_1
OP15_1
OP16_1
OP17_1
OP18_1
OP19_1
OP20_1
OP21_1
OP22_1
OP23_1
OP24_1
OP25_1
OP26_1
OP27_1
OP30_1
OP31_1

Mnemnico
LODD X
STOD X
LOCO X
LODL X
STOL X
ADDL X
SUBL X
CALL X
JUMP X
JNEG X
JPOS X
JNZE X
JZER X
ADDD X
SUBD X
MUL X
RETN
PSHI
POPI
PUSH
POP
SWAP
SETI
RETI
INSP X
DESP X
LDIO
STIO

MUDA_MODO
MUDA_CONJ

95

Mnemnico

Instruo

Signicado

LODD X

Carrega direto

ac := m[x]

STOD X

Armazena direto

m[x] := ac

LOCO X

Carrega constante

LODL X

Carrega local

ac := m[sp + x]

STOL X

Armazena local

m[x + sp] := ac

ADDL X

Adiciona local

ac := ac + m[sp + x]

SUBL X

Subtrai local

ac := ac - m[sp + x]

CALL X

Chama procedimento

sp := sp - 1; m[sp] := pc; pc := x

JUMP X

Desvia

pc := x

JNEG X

Desvia se negativo

If ac < 0 then pc := x

JPOS X

Desvia se positivo

If ac > 0 then pc := x

JNZE X

Desvia se no zero

If ac = 0 then pc := x

JZER X

Desvia se zero

If ac = 0 then pc := x

ADDD X

Adiciona direto

ac := ac + m[x]

SUBD X

Subtrai direto

ac := ac - m[x]

MUL X

Mulriplica direto

ac := ac * m[x]

RETN

Retorno de subrotina

pc := m[sp]; sp := sp + 1

PSHI

Empilha direto

sp := sp - 1; m[sp] := m[ac]

POPI

Desempilha direto

m[ac] := m[sp]; sp := sp + 1

PUSH

Coloca na pilha

sp := sp - 1; m[sp] := ac

POP

Retira da pilha

ac := m[sp]; sp := sp + 1

SWAP

Troca ac, sp

tmp:= ac; ac := sp; sp := tmp

SETI

Inverte estado de IE

ie := inv(ie); armazena PC, AC, SP

RETI

Retorno da interrupo

ie := 0; restaura PC, AC, SP

INSP X

Incrementa sp

sp := sp + X

DESP X

Decrementa sp

sp := sp - X

LDIO

Carrega de IO

ac := io[y]

STIO

Armazena em IO

io[y] := ac

MUDA_MODO Altera modo de funcionamento


MUDA_CONJ

Altera Conjunto de Instruo

ac := x(0

16777216)

96

D.2

Conjunto 2

Binrio
00000000xxxxxxxxxxxxxxxxxxxxxxxx
00000001xxxxxxxxxxxxxxxxxxxxxxxx
00000010xxxxxxxxxxxxxxxxxxxxxxxx
00000011xxxxxyyyyyyyyyyyyyyyyyyy
00000100xxxxxyyyyyyyyyyyyyyyyyyy
00000101aaaaaxxxxxyyyyyzzzzzzzzz
00000110aaaaaxxxxxyyyyyzzzzzzzzz
00000111xxxxxxxxxxxxxxxxxxxxxxxx
00001000xxxxxxxxxxxxxxxxxxxxxxxx
00001001xxxxxxxxxxxxxxxxxxxxxxxx
00001010xxxxxxxxxxxxxxxxxxxxxxxx
00001011xxxxxxxxxxxxxxxxxxxxxxxx
00001100xxxxxxxxxxxxxxxxxxxxxxxx
00001101aaaaaxxxxxyyyyyzzzzzzzzz
00001110aaaaaxxxxxyyyyyzzzzzzzzz
00001111aaaaaxxxxxyyyyyzzzzzzzzz
11110000000000000000000000000000
11110001xxxxxzzzzzzzzzzzzzzzzzzz
11110010xxxxxzzzzzzzzzzzzzzzzzzz
11110011000000000000000000000000
11110100000000000000000000000000
11110101000000000000000000000000
11110110000000000000000000000000
11110111000000000000000000000000
11111000xxxxxxxxxxxxxxxxxxxxxxxx
11111001xxxxxxxxxxxxxxxxxxxxxxxx
11111010000000000000000000000000
11111011000000000000000000000000
11111110000000000000000000000000
11111101000000000000000000000000
111111100000000000000000yyyyyyyy
111111110000000000000000yyyyyyyy

Hexadecimal
00XXXXXX
01XXXXXX
02XXXXXX
03XXYYYY
04XXYYYY
05AAXXYY
06AAXXYY
07XXXXXX
08XXXXXX
09XXXXXX
0AXXXXXX
0BXXXXXX
0CXXXXXX
0DXXXXXX
0EXXXXXX
0FXXXXXX
F7000000
F0000000
F1000000
F2000000
F3000000
F4000000
F5000000
F6000000
F8XXXXXX
F9XXXXXX
FAXXXXXX
FBXXXXXX
FE00000YY
FF00000YY

Inst. Inicial
OP0_1
OP1_1
OP2_1
OP3_1
OP4_1
OP5_1
OP6_1
OP7_1
OP8_1
OP9_1
OP10_1
OP11_1
OP12_1
OP13_1
OP14_1
OP15_1
OP16_1
OP17_1
OP18_1
OP19_1
OP20_1
OP21_1
OP22_1
OP23_1
OP24_1
OP25_1
OP26_1
OP27_1
OP30_1
OP31_1

Mnemnico
LODD X
STOD X
LOCO X
LODL Rx, Y
STOL Y, Rx
LODR Ra, Rx, Ry
STOR Rx, Ry, Ra
CALL X
JUMP X
JNEG X
JPOS X
JNZE X
JZER X
ADDR Ra, Rx, Ry
SUBR Ra, Rx, Ry
MULR Ra, Rx, Ry
RETN
SHL Rx, z
SHR Rx, z
PUSH
POP
SWAP
SETI
RETI
INSP X
DESP X
LDIO
STIO

MUDA_MODO
MUDA_CONJ

97

Mnemnico

Instruo

Signicado

LODD X

Carrega direto

ac := m[x]

STOD X

Armazena direto

m[x] := ac

LOCO X

Carrega constante

LODL Rx, Y

Carrega local

STOL Y, Rx

Armazena local

m[fp + y] := Rx

LODR Ra, Rx, Ry

Carrega registrador

Ra := m[Rx + Ry]

STOR Ra, Rx, Ry

Armazena registrador

m[Rx + Ry] := Ra

CALL X

Chama procedimento

sp := sp - 1; m[sp] := pc; pc := x

JUMP X

Desvia

pc := x

JNEG X

Desvia se negativo

If ac < 0 then pc := x

JPOS X

Desvia se positivo

If ac > 0 then pc := x

JNZE X

Desvia se no zero

If ac = 0 then pc := x

JZER X

Desvia se zero

If ac = 0 then pc := x

ADDR Ra, Rx, Ry

Adiciona registradores

Ra := Rx + Ry

SUBR Ra, Rx, Ry

Subtrai registradores

Ra := Rx - Ry

MULR Ra, Rx, Ry

Mulriplica registradores

Ra := Rx * Ry

RETN

Retorno de subrotina

pc := m[sp]; sp := sp + 1

PSHI

Desloca esquerda

ac := Rx z

POPI

Desloca direita

ac := Rx z

PUSH

Coloca na pilha

sp := sp - 1; m[sp] := ac

POP

Retira da pilha

ac := m[sp]; sp := sp + 1

SWAP

Troca ac, sp

tmp:= ac; ac := sp; sp := tmp

SETI

Inverte estado de IE

ie := inv(ie); armazena PC, AC, SP

RETI

Retorno da interrupo

ie := 0; restaura PC, AC, SP

INSP X

Incrementa sp

sp := sp + X

DESP X

Decrementa sp

sp := sp - X

LDIO

Carrega de IO

ac := io[y]

STIO

Armazena em IO

io[y] := ac

MUDA_MODO

Altera modo de funcionamento

MUDA_CONJ

Altera Conjunto de Instruo

ac := x(0

16777216)

Rx := m[fp + y]; x(0

524288)

98

D.3

Conjunto 3
Binrio
00000000xxxxxxxxxxxxxxxxxxxxxxxx
00000001xxxxxxxxxxxxxxxxxxxxxxxx
00000010xxxxxxxxxxxxxxxxxxxxxxxx
00000011xxxxxxxxxxxxxxxxxxxxxxxx
00000100xxxxxxxxxxxxxxxxxxxxxxxx
00000101xxxxxxxxxxxxxxxxxxxxxxxx
00000110xxxxxxxxxxxxxxxxxxxxxxxx
00000111xxxxxxxxxxxxxxxxxxxxxxxx
00001000xxxxxxxxxxxxxxxxxxxxxxxx
00001001xxxxxxxxxxxxxxxxxxxxxxxx
00001010xxxxxxxxxxxxxxxxxxxxxxxx
00001011xxxxxxxxxxxxxxxxxxxxxxxx
00001100xxxxxxxxxxxxxxxxxxxxxxxx
00001101000000000000000000000000
00001110000000000000000000000000
00001111000000000000000000000000
11110000000000000000000000000000
11110001000000000000000000000000
11110010000000000000000000000000
11110011000000000000000000000000
11110100000000000000000000000000
11110101000000000000000000000000
11110110000000000000000000000000
11110111000000000000000000000000
11111000xxxxxxxxxxxxxxxxxxxxxxxx
11111001xxxxxxxxxxxxxxxxxxxxxxxx
11111010000000000000000000000000
11111011000000000000000000000000
11111110000000000000000000000000
11111101000000000000000000000000
111111100000000000000000yyyyyyyy
111111110000000000000000yyyyyyyy

Hexadecimal
00XXXXXX
01XXXXXX
02XXXXXX
03XXXXXX
04XXXXXX
05XXXXXX
06XXXXXX
07XXXXXX
08XXXXXX
09XXXXXX
0AXXXXXX
0BXXXXXX
0CXXXXXX
0D000000
0E000000
0F000000
F7000000
F0000000
F1000000
F2000000
F3000000
F4000000
F5000000
F6000000
F8XXXXXX
F9XXXXXX
FAXXXXXX
FBXXXXXX
FE00000YY
FF00000YY

Inst. Inicial
OP0_1
OP1_1
OP2_1
OP3_1
OP4_1
OP5_1
OP6_1
OP7_1
OP8_1
OP9_1
OP10_1
OP11_1
OP12_1
OP13_1
OP14_1
OP15_1
OP16_1
OP17_1
OP18_1
OP19_1
OP20_1
OP21_1
OP22_1
OP23_1
OP24_1
OP25_1
OP26_1
OP27_1
OP30_1
OP31_1

Mnemnico
LODDp X
STODp X
LOCO X
LODLp X
STOLp X
LODI X
STOI X
CALL X
JUMP X
JNEG X
JPOS X
JNZE X
JZER X
ADDp
SUBp
MULp
RETN
SHLp
SHRp
PUSH
POP
SWAP
SETI
RETI
INSP X
DESP X
LDIO
STIO

MUDA_MODO
MUDA_CONJ

99

Mnemnico

Instruo

Signicado

LODDp X

Carrega direto usando pilha

push m[x]

STODp X

Armazena direto usando pilha

pop m[x]

LOCO X

Carrega constante

LODLp X

Carrega local usando pilha

push m[fp+y]]

STOLp X

Armazena local usando pilha

pop m[fp+y]

LODI X

Carrega indireto

pop x; push m[x]

STOI X

Armazena indireto

pop dado; pop x; m[x] = dado

CALL X

Chama procedimento

sp := sp - 1; m[sp] := pc; pc := x

JUMP X

Desvia

pc := x

JNEG X

Desvia se negativo

If ac < 0 then pc := x

JPOS X

Desvia se positivo

If ac > 0 then pc := x

JNZE X

Desvia se no zero

If ac = 0 then pc := x

JZER X

Desvia se zero

If ac = 0 then pc := x

ADDp

Adiciona registradores

a = m[sp]; sp = sp + 1;

ac := x(0

16777216)

b = m[sp];
m[sp] = m[b + a]
SUBp

Subtrai registradores

a = m[sp]; sp = sp + 1;
b = m[sp];
m[sp] = m[b - a]

MULp

Mulriplica registradores

a = m[sp]; sp = sp + 1;
b = m[sp];
m[sp] = m[b * a]

SHLp

Desloca esquerda

a = m[sp]; ; a Z; m[sp] = m[a]

SHRp

Desloca esquerda

a = m[sp]; ; a Z; m[sp] = m[a]

PUSH

Coloca na pilha

sp := sp - 1; m[sp] := ac

POP

Retira da pilha

ac := m[sp]; sp := sp + 1

SWAP

Troca ac, sp

tmp:= ac; ac := sp; sp := tmp

SETI

Inverte estado de IE

ie := inv(ie); armazena PC, AC, SP

RETI

Retorno da interrupo

ie := 0; restaura PC, AC, SP

RETN

Retorno de subrotina

pc := m[sp]; sp := sp + 1

INSP X

Incrementa sp

sp := sp + X

DESP X

Decrementa sp

sp := sp - X

LDIO

Carrega de IO

ac := io[y]

STIO

Armazena em IO

io[y] := ac

MUDA_MODO Altera modo de funcionamento


MUDA_CONJ

Altera Conjunto de Instruo

100

APNDICE E -- Microinstrues dos conjuntos de


Instrues Fixos

Os Cdigos referentes aos estados esto baseados nos cdigos do uxograma da Mquina
de Estados Global

E.1

Conjunto de instruo 1
Estado

Cdigo

Microinstruo

OP0_1

20

MAR := IR; RD;

OP0_2

21

Acc := MBR; GOTO INT (TESTE INTERRUPCAO);

OP0_3

22

MAR := SP; WR; GOTO INT

OP1_1

23

MAR := IR; MBR := Acc; WR; GOTO INT;

OP2_1

26

MAR := SP + IR; RD; GOTO OP0_2

OP3_1

27

MAR := SP + IR; RD; GOTO OP0_2

OP4_1

30

A := SP + IR;

OP4_2

31

MBR := AC; MAR := A; WR; GOTO INT

OP5_1

34

MAR := SP + IR; RD; GOTO CONT ADD

OP6_1

37

MAR := SP + IR; RD; GOTO CONT SUB;

OP7_1

43

SP := SP - 1;

OP7_2

44

MAR := SP; MBR := PC; WR; GOTO JUMP

OP8_1

45

PC := IR(XXXXXXXXXXXX); GOTO INT;

OP9_1

46

ALU := Acc; IF N THEN GOTO JUMP ELSE GOTO INT;

OP10_1 47

ALU := Acc; IF N THEN GOTO INT ELSE GOTO JUMP;

OP11_1 48

ALU := Acc; IF Z THEN GOTO INT ELSE GOTO JUMP;

OP12_1 49

ALU := Acc; IF Z THEN GOTO JUMP ELE GOTO INT;

101

OP13_1 50

MAR := IR; RD;

OP13_2 51

AC := MBR + AC; GOTO INT;

OP14_1 57

MAR := IR; RD;

OP14_2 58

A := MBR;

OP14_3 59

Acc := Acc - A; GOTO INT

OP15_1 64

MAR := IR; RD;

OP15_2 65

A := MBR;

OP15_3 66

Acc := Acc * A; GOTO INT

OP16_1 71

MAR := SP; PC := MBR; RD

OP16_2 72

SP := SP + 1; GOTO INT

OP17_1 73

MAR := AC; RD;

OP17_2 74

SP := SP - 1

OP17_3 75

MAR := SP; WR; GOTO INT

OP18_1 77

MAR := SP; RD;

OP18_2 78

SP := SP + 1;

OP18_3 79

MAR := AC; WR; GOTO INT

OP19_1 80

SP := SP - 1

OP19_2 81

MAR := SP; MBR := AC; WR; GOTO INT

OP20_1 82

MAR := SP; RD;

OP20_2 83

SP := SP + 1

OP20_3 84

Acc := MBR; GOTO INT

OP21_1 85

A := AC;

OP21_2 86

AC := SP;

OP21_3 87

SP := A; GOTO INT

OP22_1 88

IE := INV(IE); GOTO INT

OP23_1 89

MAR := SP; RD;

OP23_2 90

SP := SP + 1; PC := MBR;

OP23_3 91

MAR := SP; RD;

OP23_4 92

SP := SP + 1;

OP23_5 93

Acc := MBR;

OP23_6 94

MAR := SP; RD;

OP23_7 95

SP := SP + 1;

OP23_8 96

SP := MBR

OP23_9 97

IE := 1; GOTO INT;

102

OP24_1

98

SP := SP + BAND(SMASK, IR); GOTO INT

OP25_1

99

SP := SP - BAND(SMASK, IR); GOTO INT

OP26_1

100

MAR := IR; RD_IO

OP26_2

101

Acc := MBR; GOTO INT;

OP27_1

102

MAR := IR; MBR := Acc; WR_IO; GOTO INT

Muda conj.

50

muda_conj

Muda modo

51

muda_modo

Read1

116

Busca valor na memria

Read2

117

Recebe valor da memria

Write

118

Escreve valor na memria

Total: 59 estados

103

E.2

Conjunto de instruo 2
Estado

Cdigo

Microinstruo

OP0_1

20

MAR := IR; RD;

OP0_2

21

Acc := MBR; GOTO INT (TESTE INTERRUPCAO);

OP1_1

23

MAR := IR; MBR := Acc; WR; GOTO INT;

OP2_1

26

MAR := SP + IR; RD; GOTO OP0_2

OP3_1

27

MAR := BAND(SMASK, IR) + FP; RD;

OP3_2

28

Rx := MBR; GOTO INT;

OP4_1

30

Acc := BAND(SMASK, IR) + FP;

OP4_2

31

MBR := Rx; MAR := Acc; WR; GOTO INT

OP5_1

34

MAR := Rx + Ry; RD;

OP5_2

35

Ra := MBR; GOTO INT;

OP6_1

37

Acc := Rx + Ry;

OP6_2

38

MBR := Ra; MAR := Acc; WR; GOTO INT

OP7_1

43

SP := SP - 1;

OP7_2

44

MAR := SP; MBR := PC; WR; GOTO JUMP

OP8_1

45

PC := IR(XXXXXXXXXXXX); GOTO INT;

OP9_1

46

ALU := Acc; IF N THEN GOTO JUMP ELSE GOTO INT;

OP10_1 47

ALU := Acc; IF N THEN GOTO INT ELSE GOTO JUMP;

OP11_1 48

ALU := Acc; IF Z THEN GOTO INT ELSE GOTO JUMP;

OP12_1 49

ALU := Acc; IF Z THEN GOTO JUMP ELE GOTO INT;

OP13_1 50

Ra := Rx + Ry; GOTO INT;

OP14_1 57

Ra := Rx - Ry; GOTO INT;

OP15_1 64

Ra := Rx * Ry; GOTO INT;

OP16_1 71

MAR := SP; PC := MBR; RD

OP16_2 72

SP := SP + 1; GOTO INT

OP17_1 73

Ra := Rx Z; GOTO INT

OP18_1 77

Ra := Rx Z; GOTO INT

OP19_1 80

SP := SP - 1

OP19_2 81

MAR := SP; MBR := AC; WR; GOTO INT

104

OP20_1

82

MAR := SP; RD;

OP20_2

83

SP := SP + 1

OP20_3

84

Acc := MBR; GOTO INT

OP21_1

85

A := AC;

OP21_2

86

AC := SP;

OP21_3

87

SP := A; GOTO INT

OP22_1

88

IE := INV(IE); GOTO INT

OP23_1

89

MAR := SP; RD;

OP23_2

90

SP := SP + 1; PC := MBR;

OP23_3

91

MAR := SP; RD;

OP23_4

92

SP := SP + 1;

OP23_5

93

Acc := MBR;

OP23_6

94

MAR := SP; RD;

OP23_7

95

SP := SP + 1;

OP23_8

96

SP := MBR

OP23_9

97

IE := 1; GOTO INT;

OP24_1

98

SP := SP + BAND(SMASK, IR); GOTO INT

OP25_1

99

SP := SP - BAND(SMASK, IR); GOTO INT

OP26_1

100

MAR := IR; RD_IO

OP26_2

101

Acc := MBR; GOTO INT;

OP27_1

102

MAR := IR; MBR := Acc; WR_IO; GOTO INT

Muda conj.

50

muda_conj

Muda modo

51

muda_modo

Read1

116

Busca valor na memria

Read2

117

Recebe valor da memria

Write

118

Escreve valor na memria

Totsl: 53 estados

105

E.3

Conjunto de instruo 3
Estado

Cdigo

Microinstruo

OP0_1

20

MAR := IR; RD;

OP0_2

21

SP := SP - 1;

OP0_3

22

MAR := SP; WR; GOTO INT

OP1_1

23

MAR := SP; RD

OP1_2

24

SP := SP + 1;

OP1_3

25

MAR := IR; WR; GOTO INT

OP2_1

26

ACC := BAND(AMASK, IR); GOTO INT;

OP3_1

27

MAR := BAND(SMASK, IR) + FP; RD;

OP3_2

28

SP := SP - 1

OP3_3

29

MAR := SP; WR; GOTO INT

OP4_1

30

MAR := SP; RD;

OP4_2

31

SP := SP + 1

OP4_3

32

A := MBR

OP4_4

33

FP := A - BAND(SMASK, IR); GOTO INT;

OP5_1

34

MAR := SP; RD

OP5_2

35

MAR := MBR; RD

OP5_3

36

MAR := SP; WR; GOTO INT

OP6_1

37

POP (A) (MAR := SP; RD);

OP6_2

38

CONT POP(A) (SP := SP + 1)

OP6_3

39

CONT POP(A) (A := MBR)

OP6_4

40

POP (A) (MAR := SP; RD);

OP6_5

41

CONT POP(ACC) (ACC := MBR)

OP6_6

42

MAR := A; MBR := ACC; WR; GOTO INT

OP7_1

43

SP := SP - 1;

OP7_2

44

MAR := SP; MBR := PC; WR; GOTO JUMP

OP8_1

45

PC := IR(XXXXXXXXXXXX); GOTO INT;

OP9_1

46

ALU := Acc; IF N THEN GOTO JUMP ELSE GOTO INT;

OP10_1 47

ALU := Acc; IF N THEN GOTO INT ELSE GOTO JUMP;

OP11_1 48

ALU := Acc; IF Z THEN GOTO INT ELSE GOTO JUMP;

OP12_1 49

ALU := Acc; IF Z THEN GOTO JUMP ELE GOTO INT;

106

OP13_1 50

MAR := SP; RD

OP13_2 51

SP := SP + 1;

OP13_3 52

A := MBR;

OP13_4 53

MAR := SP; RD

OP13_5 54

B := MBR;

OP13_6 55

ACC := A + B;

OP13_7 56

MAR := SP; MBR := ACC; WR; GOTO INT

OP14_1 57

MAR := SP; RD

OP14_2 58

SP := SP + 1;

OP14_3 59

A := MBR;

OP14_4 60

MAR := SP; RD

OP14_5 61

B := MBR;

OP14_6 62

Acc := A - B;

OP14_7 63

MAR := SP; MBR := ACC; WR; GOTO INT

OP15_1 64

MAR := SP; RD

OP15_2 65

SP := SP + 1;

OP15_3 66

A := MBR;

OP15_4 67

MAR := SP; RD

OP15_5 68

B := MBR;

OP15_6 69

Acc := A * B;

OP15_7 70

MAR := SP; MBR := ACC; WR; GOTO INT

OP16_1 71

MAR := SP; PC := MBR; RD

OP16_2 72

SP := SP + 1; GOTO INT

OP17_1 73

MAR := SP; RD

OP17_2 74

A := MBR;

OP17_3 75

Acc := A Z; GOTO 0P17_4

OP17_4 76

MAR := SP; MBR := ACC; WR; GOTO INT

OP18_1 77

MAR := SP; RD;

OP18_2 78

A := MBR;

OP18_3 79

Acc := A Z; GOTO 17_4

OP19_1 80

SP := SP - 1

OP19_2 81

MAR := SP; MBR := AC; WR; GOTO INT

107

OP20_1

82

MAR := SP; RD;

OP20_2

83

SP := SP + 1

OP20_3

84

Acc := MBR; GOTO INT

OP21_1

85

A := AC;

OP21_2

86

AC := SP;

OP21_3

87

SP := A; GOTO INT

OP22_1

88

IE := INV(IE); GOTO INT

OP23_1

89

MAR := SP; RD;

OP23_2

90

SP := SP + 1; PC := MBR;

OP23_3

91

MAR := SP; RD;

OP23_4

92

SP := SP + 1;

OP23_5

93

Acc := MBR;

OP23_6

94

MAR := SP; RD;

OP23_7

95

SP := SP + 1;

OP23_8

96

SP := MBR

OP23_9

97

IE := 1; GOTO INT;

OP24_1

98

SP := SP + BAND(SMASK, IR); GOTO INT

OP25_1

99

SP := SP - BAND(SMASK, IR); GOTO INT

OP26_1

100

MAR := IR; RD_IO

OP26_2

101

Acc := MBR; GOTO INT;

OP27_1

102

MAR := IR; MBR := Acc; WR_IO; GOTO INT

Muda conj.

50

muda_conj

Muda modo

51

muda_modo

Read1

116

Busca valor na memria

Read2

117

Recebe valor da memria

Write

118

Escreve valor na memria

Total: 87 estados

108

APNDICE F -- Codicao dos formatos de


operaes

Esta codicao foi descrita para operaes do tipo Op C, A, B, D. Os bits da palavra de


recongurao seguem a seqncia Bar C (5 bits), Bar A (5 bits), Bar B (5 bits), Aux (5 bits).
Formato (Bin)
000000
000001
000010
000011
000100
000101
000110
000111
001000
001001
001010
001011
001100
001101
001110
001111
010000
010001

Formato (Dec)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

BAR C
A
A
A
A
A
A
A
A
A
B
B
B
B
B
B
B
B
B

BAR A
A
A
B
B
A
C
C
C
B
B
B
A
A
B
C
C
A
C

BAR B
Efeito
A
A = A op A
B
A = A op A
A
A = A op B
B
A = B op B
C
A = A op C
A
A = C op A
C
A = C op C
B
A = C op B
C
A = B op C
B
B = B op B
A
B = B op A
B
B = A op B
A
B = A op A
C
B = B op C
B
B = C op B
C
B = C op C
C
B = A op C
A
B = C op A

109

Formato (Bin)
010010
010011
010100
010101
010110
010111
011000
011001
011010
011011
011000
011101
011110
011111
100000
100001
100010
100011
100100
100101
100110
100111
101000

Formato (Dec)
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

BAR C
C
C
C
C
C
C
C
C
C
A
A
A
A
A
A
A
B
B
B
B
B
B
B

BAR A
C
C
A
A
B
C
B
A
B
A
B
C
D
D
D
D
A
B
C
D
D
D
D

BAR B
C
A
C
A
C
B
B
B
A
D
D
D
A
B
C
D
D
D
D
A
B
C
D

Efeito
C = C op C
C = C op A
C = A op C
C = A op A
C = B op C
C = C op B
C = B op B
C = A op B
C = B op A
A = A op D
A = B op D
A = C op D
A = D op A
A = D op B
A = D op C
A = D op D
B = A op D
B = B op D
B = C op D
B = D op A
B = D op B
B = D op C
B = D op D

110

Formato (Bin)
101001
101010
101011
101100
101101
101110
101111
110000
110001
110010
110011
110100
110101
110110
110111
111000
111001
111010
111011
111100
111101
111110
111111

Formato (Dec)
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

BAR C
C
C
C
C
C
C
C
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D

BAR A
A
B
C
D
D
D
D
A
D
B
D
C
D
D
A
B
A
C
B
C
A
B
C

BAR B
D
D
D
A
B
C
D
D
A
D
B
D
C
D
B
A
C
A
C
B
A
B
C

Efeito
C = A op D
C = B op D
C = C op D
C = D op A
C = D op B
C = D op C
C = D op D
D = A op D
D = D op A
D = B op D
D = D op A
D = C op D
D = X op C
D = D op D
D = A op B
D = B op A
D = A op C
D = C op A
D = B op C
D = C op B
D = A op A
D = B op B
D = C op C