Professional Documents
Culture Documents
Natal-RN
Maio de 2005
Orientador:
Natal-RN
Maio de 2005
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
p. 10
p. 10
p. 10
p. 11
p. 12
Codicao hardwired . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 13
Codicao xa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 13
Codicao exvel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 14
p. 16
10
p. 17
11
Arquitetura do Chimaera . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 19
12
p. 20
13
Arquitetura do GARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 20
14
p. 21
15
Processador CRISP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 23
16
Processador XiRISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 23
17
p. 24
18
Sinais OCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 25
19
p. 27
20
p. 29
21
p. 30
22
p. 33
23
p. 34
24
p. 36
25
p. 38
26
p. 39
27
p. 42
28
p. 43
29
Unidade de recongurao . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 44
30
p. 45
31
p. 47
32
p. 49
33
p. 50
34
p. 51
35
p. 52
36
p. 53
37
p. 54
38
p. 55
39
p. 55
40
p. 62
41
p. 62
42
p. 63
43
p. 64
44
p. 64
45
p. 65
46
p. 65
47
p. 66
48
p. 66
49
p. 67
50
p. 68
51
p. 68
52
p. 69
53
p. 69
54
p. 70
55
p. 73
56
p. 73
57
p. 74
58
p. 75
59
p. 76
60
p. 76
61
p. 78
Lista de Tabelas
1
p. 26
p. 26
p. 41
p. 56
p. 60
p. 61
p. 72
p. 75
p. 75
10
11
p. 77
p. 78
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
p. 6
2.2
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
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
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
p. 36
3.5
Unidade de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 37
3.6
Instrues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 40
3.7
p. 42
3.8
Unidade de Recongurao . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 44
3.8.1
p. 45
3.8.2
p. 52
p. 55
3.9
4 SIMULAES E RESULTADOS
4.1
p. 59
p. 59
4.1.1
p. 60
Simulaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 61
4.2.1
p. 61
4.2.2
p. 67
4.2.3
4.2
Resultados da Compilao . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 70
5 Consideraes nais
p. 79
Referncias
p. 82
p. 85
p. 88
p. 89
p. 94
D.1 Conjunto 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 94
D.2 Conjunto 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 96
D.3 Conjunto 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p. 98
p. 100
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
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
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,
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
2.1
2.2
[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-
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.
10
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.
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.
12
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
Fixo
13
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
14
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
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.
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.
20
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
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
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.
2.6
O Padro OCP
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.
26
Tipo
Idle
Write
Read
ReadEx
Reservado
Reservado
Reservado
BroadCast
Mnemnico
IDLE
WR
RD
RDEX
BCST
Resposta
Sem resposta
dado vlido/aceito
Reservado
Erro
Mnemnico
NULL
DVA
RD
ERR
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.
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
29
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
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
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
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.
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
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
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.
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
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.
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
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
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
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
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.
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.
50
51
52
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.
53
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.
55
3.9
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.
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
57
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
61
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.
62
63
64
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
66
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
68
69
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.
71
Utilizando como exemplo Acc = "05"D, a aplicao deste algoritmo consiste nos seguintes
passos:
72
PC
00H
01H
02H
03H
04H
05H
06H
07H
08H
09H
0AH
0BH
0CH
0DH
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
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
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
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
Operao
INC R
DEC R
MData
6460041H
6468041H
MAddr
1AH
10H
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
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.
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
78
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
79
Consideraes nais
80
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
86
87
88
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
90
91
92
93
94
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
SETI
Inverte estado de IE
RETI
Retorno da interrupo
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
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
Carrega registrador
Ra := m[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
Adiciona registradores
Ra := Rx + Ry
Subtrai registradores
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
SETI
Inverte estado de IE
RETI
Retorno da interrupo
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
MUDA_CONJ
ac := x(0
16777216)
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
push m[x]
STODp X
pop m[x]
LOCO X
Carrega constante
LODLp X
push m[fp+y]]
STOLp X
pop m[fp+y]
LODI X
Carrega indireto
STOI X
Armazena indireto
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
SHRp
Desloca esquerda
PUSH
Coloca na pilha
sp := sp - 1; m[sp] := ac
POP
Retira da pilha
ac := m[sp]; sp := sp + 1
SWAP
Troca ac, sp
SETI
Inverte estado de IE
RETI
Retorno da interrupo
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
100
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
OP0_2
21
OP0_3
22
OP1_1
23
OP2_1
26
OP3_1
27
OP4_1
30
A := SP + IR;
OP4_2
31
OP5_1
34
OP6_1
37
OP7_1
43
SP := SP - 1;
OP7_2
44
OP8_1
45
OP9_1
46
OP10_1 47
OP11_1 48
OP12_1 49
101
OP13_1 50
OP13_2 51
OP14_1 57
OP14_2 58
A := MBR;
OP14_3 59
OP15_1 64
OP15_2 65
A := MBR;
OP15_3 66
OP16_1 71
OP16_2 72
SP := SP + 1; GOTO INT
OP17_1 73
OP17_2 74
SP := SP - 1
OP17_3 75
OP18_1 77
OP18_2 78
SP := SP + 1;
OP18_3 79
OP19_1 80
SP := SP - 1
OP19_2 81
OP20_1 82
OP20_2 83
SP := SP + 1
OP20_3 84
OP21_1 85
A := AC;
OP21_2 86
AC := SP;
OP21_3 87
SP := A; GOTO INT
OP22_1 88
OP23_1 89
OP23_2 90
SP := SP + 1; PC := MBR;
OP23_3 91
OP23_4 92
SP := SP + 1;
OP23_5 93
Acc := MBR;
OP23_6 94
OP23_7 95
SP := SP + 1;
OP23_8 96
SP := MBR
OP23_9 97
IE := 1; GOTO INT;
102
OP24_1
98
OP25_1
99
OP26_1
100
OP26_2
101
OP27_1
102
Muda conj.
50
muda_conj
Muda modo
51
muda_modo
Read1
116
Read2
117
Write
118
Total: 59 estados
103
E.2
Conjunto de instruo 2
Estado
Cdigo
Microinstruo
OP0_1
20
OP0_2
21
OP1_1
23
OP2_1
26
OP3_1
27
OP3_2
28
OP4_1
30
OP4_2
31
OP5_1
34
OP5_2
35
OP6_1
37
Acc := Rx + Ry;
OP6_2
38
OP7_1
43
SP := SP - 1;
OP7_2
44
OP8_1
45
OP9_1
46
OP10_1 47
OP11_1 48
OP12_1 49
OP13_1 50
OP14_1 57
OP15_1 64
OP16_1 71
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
104
OP20_1
82
OP20_2
83
SP := SP + 1
OP20_3
84
OP21_1
85
A := AC;
OP21_2
86
AC := SP;
OP21_3
87
SP := A; GOTO INT
OP22_1
88
OP23_1
89
OP23_2
90
SP := SP + 1; PC := MBR;
OP23_3
91
OP23_4
92
SP := SP + 1;
OP23_5
93
Acc := MBR;
OP23_6
94
OP23_7
95
SP := SP + 1;
OP23_8
96
SP := MBR
OP23_9
97
IE := 1; GOTO INT;
OP24_1
98
OP25_1
99
OP26_1
100
OP26_2
101
OP27_1
102
Muda conj.
50
muda_conj
Muda modo
51
muda_modo
Read1
116
Read2
117
Write
118
Totsl: 53 estados
105
E.3
Conjunto de instruo 3
Estado
Cdigo
Microinstruo
OP0_1
20
OP0_2
21
SP := SP - 1;
OP0_3
22
OP1_1
23
MAR := SP; RD
OP1_2
24
SP := SP + 1;
OP1_3
25
OP2_1
26
OP3_1
27
OP3_2
28
SP := SP - 1
OP3_3
29
OP4_1
30
OP4_2
31
SP := SP + 1
OP4_3
32
A := MBR
OP4_4
33
OP5_1
34
MAR := SP; RD
OP5_2
35
MAR := MBR; RD
OP5_3
36
OP6_1
37
OP6_2
38
OP6_3
39
OP6_4
40
OP6_5
41
OP6_6
42
OP7_1
43
SP := SP - 1;
OP7_2
44
OP8_1
45
OP9_1
46
OP10_1 47
OP11_1 48
OP12_1 49
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
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
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
OP16_1 71
OP16_2 72
SP := SP + 1; GOTO INT
OP17_1 73
MAR := SP; RD
OP17_2 74
A := MBR;
OP17_3 75
OP17_4 76
OP18_1 77
OP18_2 78
A := MBR;
OP18_3 79
OP19_1 80
SP := SP - 1
OP19_2 81
107
OP20_1
82
OP20_2
83
SP := SP + 1
OP20_3
84
OP21_1
85
A := AC;
OP21_2
86
AC := SP;
OP21_3
87
SP := A; GOTO INT
OP22_1
88
OP23_1
89
OP23_2
90
SP := SP + 1; PC := MBR;
OP23_3
91
OP23_4
92
SP := SP + 1;
OP23_5
93
Acc := MBR;
OP23_6
94
OP23_7
95
SP := SP + 1;
OP23_8
96
SP := MBR
OP23_9
97
IE := 1; GOTO INT;
OP24_1
98
OP25_1
99
OP26_1
100
OP26_2
101
OP27_1
102
Muda conj.
50
muda_conj
Muda modo
51
muda_modo
Read1
116
Read2
117
Write
118
Total: 87 estados
108
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