• Nenhum resultado encontrado

Projeto conceitual de um ASIP para processamento digital de áudio

N/A
N/A
Protected

Academic year: 2021

Share "Projeto conceitual de um ASIP para processamento digital de áudio"

Copied!
153
0
0

Texto

(1)

PROJETO CONCEITUAL DE UM ASIP PARA PROCESSAMENTO

DIGITAL DE ´

AUDIO

Eduardo Koerich d’ ´Avila Vinicius Almeida Carlos

Florian´opolis - SC 2004/2

(2)

DEPARTAMENTO DE INFORM ´

ATICA E ESTAT´ISTICA

BACHARELADO EM CI ˆ

ENCIAS DA COMPUTAC

¸ ˜

AO

PROJETO CONCEITUAL DE UM ASIP PARA PROCESSAMENTO

DIGITAL DE ´

AUDIO

Eduardo Koerich d’ ´Avila Vinicius Almeida Carlos

Trabalho de conclus˜ao de curso apresentado como parte dos requisitos para obtenc¸˜ao do grau de Bacharel em Ciˆencias da Computac¸˜ao

Florian´opolis - SC 2004/2

(3)

Vinicius Almeida Carlos

PROJETO CONCEITUAL DE UM ASIP PARA PROCESSAMENTO

DIGITAL DE ´

AUDIO

Trabalho de conclus˜ao de curso apresentado como parte dos requisitos para obtenc¸˜ao do grau de Bacharel em Ciˆencias da Computac¸˜ao

Orientador: Luiz Cl´audio Villar dos Santos

Banca Examinadora:

Lu´ıs Fernando Friedrich

(4)

Agradecimentos

Gostar´ıamos de agradecer primeiramente aos nossos pais, pois sem eles nada ser´ıamos.

Gostar´ıamos de agradecer tamb´em ao nosso orientador, o professor Luiz Cl´audio, que deu todo o suporte para a realizac¸˜ao do trabalho, agindo sempre da forma mais correta e auxiliando-nos sempre que poss´ıvel.

(5)

Esse trabalho trata do projeto de um ASIP para processamento digital de ´audio e a gerac¸˜ao au-tom´atica do seu toolkit, utilizando uma metodologia de projeto baseada em uma linguagem de descric¸˜ao de arquiteturas. O projeto tem como ponto de partida o estudo e a definic¸˜ao dos efeitos a serem supor-tados pelo processador e do conjunto de instruc¸˜oes. O pr´oximo passo ´e a descric¸˜ao do processador nos v´arios n´ıveis de abstrac¸˜ao (funcional e com precis˜ao de ciclos na ADL e RTL em VHDL). A descric¸˜ao na ADL serve de insumo para gerac¸˜ao do toolkit. Os resultados envolvendo tanto o projeto do ASIP quanto `as ferramentas s˜ao apresentadas ao final do trabalho, enfatizando as diferenc¸as entre cada n´ıvel de descric¸˜ao e os problemas levantados na automac¸˜ao da gerac¸˜ao do toolkit.

(6)

Abstract

This text discourses about the design of an ASIP applied to digital audio processing and the auto-matic generation of its software toolkit, applying an ADL-based methodology. The design starting point is the definition of the audio effects to be supported by the ASIP and the definition of the instruction-set architecture. The next step is the ASIP description in some abstraction levels (functional, cycle-accurate and RTL). The ADL description is used as input for the toolkit generation. The results about ASIP design and software toolkit are presented at the end of text, emphasizing the differences among each description level and the problems concerning automatic toolkit generation.

(7)

1 Fluxo de co-projeto de hardware e software . . . . p. 18 2 Fluxo de s´ıntese de software . . . . p. 19 3 Fluxo de s´ıntese de hardware . . . . p. 20 4 Fluxo de Projeto . . . p. 21 5 Fluxo de execuc¸˜ao de efeitos de ´audio . . . p. 23 6 Fluxo do processamento de efeitos digitais de ´audio . . . p. 24 7 Audio original e ´audio modificado pelo efeito Wah-Wah . . . .´ p. 25 8 Amostra normal e modificada pela distorc¸˜ao . . . p. 26 9 Amostra normal e modificada pelo tremolo . . . p. 27 10 Amostra normal e modificada pelo delay . . . p. 28 11 Precis˜ao de cada algoritmo de ganho . . . p. 29 12 Desempenho de cada algoritmo de ganho na execuc¸˜ao do efeito Delay . . . p. 29 13 Arquitetura do Conjunto de Instruc¸˜oes . . . p. 31 14 N´umero de ciclos por instruc¸˜ao . . . p. 34 15 Fluxo da gerac¸˜ao do simulador em ArchC . . . p. 35 16 Fluxo do Gerador de Montadores . . . p. 37 17 Ferramentas de compilac¸˜ao do GCC . . . p. 38 18 Funcionamento do cc1 . . . p. 39 19 Exemplo de adic¸˜ao em C . . . p. 41

(8)

21 Exemplo de instruc¸˜ao RTL . . . p. 42 22 Exemplo de sa´ıda assembly . . . p. 42 23 Tempo de simulac¸˜ao dos efeitos . . . p. 45 24 Tempo de desenvolvimento dos modelos . . . p. 46 25 Tamanho do c´odigo de cada descric¸˜ao do ASIP . . . p. 47 26 Proposta para conjunto de instruc¸˜oes extens´ıvel . . . p. 52

(9)

RTL: Register Transfer Level ou Register Transfer Language HDL: Hardware Description Languages

IP: Intellectual Property

EDA: Electronic Design Automation TL: Transaction-Level

VHDL: Very High Speed Integrated Circuits Hardware Description Language ADL: Architecture Description Language

ASIP: Application-Specific Instruction-set Processor CPU: Central Processing Unit

ASIC: Application-Specific Integrated Circuit UF: Untimed Functional

CA: Cycle-Accurate

ISS: Instruction-Set Simulator CAS: Cycle-Accurate Simulator

FPGA: Field Programmable Gate Arrays GCC: GNU Compiler Collection

(10)

Sum´ario

1 INTRODUC¸ ˜AO p. 13

1.1 O uso de linguagens de descric¸˜ao de arquiteturas (ADLs) . . . p. 13 1.2 Por que ASIPs? . . . p. 14 1.3 Cenas dos pr´oximos cap´ıtulos . . . p. 14

2 TRABALHOS RELACIONADOS p. 16

3 METODOLOGIA p. 18

3.1 Ferramentas de CAD (Computer Aided Design) . . . p. 21 3.1.1 ArchC . . . p. 21 3.1.2 SystemC . . . p. 22 3.1.3 Pacote de ferramentas Mentor Graphics . . . p. 22

4 A CONCEPC¸ ˜AO DO ASIP p. 23

4.1 A Aplicac¸˜ao . . . p. 23 4.2 Efeitos Digitais de ´Audio . . . p. 24 4.3 Estudos preliminares para definic¸˜ao da arquitetura . . . p. 28

5 ARQUITETURA E ORGANIZAC¸ ˜AO DO ASIP p. 31

5.1 Arquitetura . . . p. 31 5.1.1 RISC x Outras arquiteturas: uma vis˜ao pragm´atica . . . p. 32

(11)

5.1.3 Peculiaridades de algumas instruc¸˜oes . . . p. 32 5.2 Organizac¸˜ao do ASIP . . . p. 33

6 FERRAMENTAS DE DESENVOLVIMENTO p. 35

6.1 Simulador do conjunto de instruc¸˜oes . . . p. 35 6.2 Montador Manual . . . p. 36 6.3 Gerador de Montadores . . . p. 36 6.4 Loader . . . . p. 36 6.5 Cross-compiler . . . . p. 37 6.5.1 A cadeia de ferramentas do GCC . . . p. 38 6.5.2 Por dentro do cc1 . . . p. 39 6.5.3 RTL: A linguagem intermedi´aria . . . p. 40 6.5.4 Portando o GCC . . . p. 40 6.5.5 Um exemplo de uma compilac¸˜ao . . . p. 41 6.5.6 Portando o GCC para a nossa arquitetura . . . p. 42

7 RESULTADOS EXPERIMENTAIS p. 44

7.1 Validac¸˜ao do ASIP . . . p. 44 7.1.1 Comparac¸˜oes entre cada n´ıvel . . . p. 44 7.2 Validac¸˜ao das ferramentas . . . p. 46

8 CONCLUS ˜OES E TRABALHOS FUTUROS p. 48

8.1 Das Etapas de Projeto do Processador . . . p. 48 8.2 Das Ferramentas Utilizadas . . . p. 49

(12)

8.4 Trabalhos Futuros . . . p. 50

Referˆencias

Anexo A -- C´odigo fonte: algoritmos em Java

Anexo B -- C´odigo fonte: modelo funcional ArchC

Anexo C -- C´odigo fonte: modelo com precis˜ao de ciclos ArchC

Anexo D -- C´odigo fonte: c´odigo assembly dos efeitos de ´audio

Anexo E -- C´odigo fonte: ASIP descrito em VHDL

Anexo F -- Datapath

Anexo G -- M´aquina de estados do controlador

(13)

1

INTRODUC

¸ ˜

AO

A crescente complexidade dos sistemas embarcados advogam por n´ıveis mais altos de abstrac¸˜ao, reuso de projeto e verificac¸˜ao escal´avel. O projeto de um sistema comec¸ando no n´ıvel RTL como provido pela maioria das linguagens de descric¸˜ao de hardware (HDLs) ´e incapaz de lidar com a demanda de plataformas contendo uma ou mais CPUs, v´arios barramentos, blocos de propriedade intelectural (IP), mem´orias e dispositivos de I/O. Embora grande parte da comunidade de automac¸˜ao de projetos (EDA) aponta SystemC[1]como a futura linguagem padr˜ao para o projeto no n´ıvel de sistemas[2](System-level

design), o gap entre um modelo no n´ıvel de transac¸˜oes (TL) escrito em SystemC e um modelo RTL

escrito em VHDL ´e enorme.

1.1

O uso de linguagens de descric¸˜ao de arquiteturas (ADLs)

Apesar de SystemC permitir o refinamento dos modelos em TL para RTL, alguns mecanismos fo-ram introduzidos para simplificar e agilizar a criac¸˜ao e manutenc¸˜ao de modelos funcionais para CPUs com a introduc¸˜ao de linguagens de descric¸˜ao de arquiteturas (ADLs)[3] [4] [5] [6] [7]. O papel de uma ADL ´e especialmente importante quando um processador de prop´osito geral n˜ao ´e adequado para sa-tisfazer restric¸˜oes de tempo real ou de potˆencia de uma certa aplicac¸˜ao e um processador de aplicac¸˜ao espec´ıfica (ASIP) tem que ser usado. ADLs s˜ao cruciais para usabilidade dos ASIPs, uma vez que n˜ao h´a, previamente, um conjunto de software de desenvolvimento (por exemplo, cross-compiler, simuladores, montadores, ligadores etc) que possa ser usado para fazer a programac¸˜ao do ASIP. Isso faz das ADLs um ponto de partida muito comum para refinamento do modelo, s´ıntese da CPU e gerac¸˜ao autom´atica das ferramentas citadas acima.

Al´em disso, ADLs podem tamb´em ser usadas em disciplinas de Arquitetura de Computadores por exemplo, seja na apresentac¸˜ao de modelos de arquiteturas bem conhecidas, como a do MIPS por

(14)

exem-plo, permitindo melhor compreens˜ao das caracter´ısticas do processador explicados somente na teoria, seja na pesquisa de novas arquiteturas.

1.2

Por que ASIPs?

A utilizac¸˜ao de ASIPs ´e pragm´atica no sentido que eles representam um compromisso entre flexibi-lidade e eficiˆencia. ASIPs s˜ao basicamente uma soluc¸˜ao intermedi´aria entre processadores de prop´osito geral e circuitos integrados de aplicac¸˜ao espec´ıfica (ASIC). Em[8]h´a uma figura que ilustra de forma muito interessante o problema entre flexibilidade e consumo de energia entre as soluc¸˜oes mais comuns para sistemas embarcados. Como dito anteriormente, ASIPs s˜ao utilizados no lugar de processadores de prop´osito geral quando esses n˜ao satisfazem as restric¸˜oes de tempo e potˆencia de uma certa aplicac¸˜ao; e s˜ao utilizados no lugar dos ASICs quando h´a a necessidade de programac¸˜ao da aplicac¸˜ao a ser execu-tada. Esse trabalho apresenta um estudo de caso cujo objetivo maior ´e automatizar os v´arios passos que devem ser percorridos durante o projeto de ASIPs (compreendendo a gerac¸˜ao do seu toolkit). Para abrir caminho em direc¸˜ao `a completa automac¸˜ao, dois elementos chaves s˜ao aqui abordados. Em primeiro lugar, uma metodologia de projeto ´e definida e usada durante o projeto de um ASIP para uma aplicac¸˜ao simples de processamento digital de ´audio. Segundo, os principais passos de refinamento s˜ao percorri-dos, alguns deles automatizapercorri-dos, outros, embora provisoriamente executados manualmente, contribuem para identificac¸˜ao os pontos chaves para automac¸˜oes futuras.

Al´em disso, no escopo do trabalho de conclus˜ao de curso, o projeto ´e um ´otimo atrativo pois permite o contato com diversas ´areas estudadas no curso como Arquitetura de Computadores, Sistemas Digitais, Projetos de Sistemas Embutidos e Compiladores. ´E importante tamb´em notar que a aplicac¸˜ao em si n˜ao ´e o ponto chave do trabalho, e por isso mesmo foi escolhida uma aplicac¸˜ao que motivasse a dupla na realizac¸˜ao do trabalho.

1.3

Cenas dos pr´oximos cap´ıtulos

O restante do texto ´e organizado da seguinte maneira. O Cap´ıtulo 2 resume os trabalhos relaciona-dos. O Cap´ıtulo 3 descreve a metodologia empregada e as principais ferramentas utilizadas no aux´ılio ao projeto do ASIP. O Cap´ıtulo 4 descreve mais detalhadamente a aplicac¸˜ao alvo e alguns estudos pre-liminares para a definic¸˜ao da arquitetura. O Cap´ıtulo 5 descreve a arquitetura e organizac¸˜ao do ASIP

(15)

projetado. O Cap´ıtulo 6 traz as ferramentas desenvolvidas para o projeto. O Cap´ıtulo 7 resume os resul-tados experimentais obtidos e no Cap´ıtulo 8 as principais considerac¸˜oes sobre o projeto e a perspectiva para futuros trabalhos s˜ao citadas.

´

E tamb´em importante observar que o trabalho j´a produziu alguns resultados interessantes, como a publicac¸˜ao do artigo[9]no SFM 2004, evento ocorrido conjuntamente com o SBCCI 2004 e o SBMicro 2004, dois simp´osios de n´ıvel internacional na ´area de projetos de circuito integrados e microeletrˆonica, al´em da submiss˜ao de um outro artigo para o IBERCHIP 2005, evento ibero-americano tamb´em na ´area de microeletrˆonica.

(16)

2

TRABALHOS RELACIONADOS

Muitas ADLs foram reportadas na literatura. As primeiras ADLs foram desenvolvidas visando compiladores redirecion´aveis (por exemplo, ISDL[4]). Mais tarde, a evoluc¸˜ao do projeto no n´ıvel de sistema abriu caminho para o surgimento de ADLs para a gerac¸˜ao autom´atica tanto de compiladores eficientes quanto de modelos de CPU com precis˜ao de ciclos. Algumas ADLs, como EXPRESSION [3]e ArchC[7], alcanc¸am esse objetivo provendo vis˜oes separadas do conjunto de instruc¸˜oes: uma vis˜ao

semˆantica (para gerac¸˜ao de compiladores) e uma vis˜ao comportamental (para gerac¸˜ao do simulador). Outras ADLs, como nML[5]e PEAS-III [6]buscam o mesmo objetivo combinando as duas vis˜oes em uma gram´atica mais restritiva. Essencialmente, o trabalho nesse dom´ınio foca em melhorias para superar tais restric¸˜oes gramaticais e vis˜oes redundantes[10], a extens˜ao de n´ucleos de processadores gen´ericos [11]

e a caracterizac¸˜ao de aplicac¸˜oes embarcadas para permitir tais extens˜oes no conjunto de instruc¸˜oes [12].

Neste trabalho n´os adotamos a ADL ArchC[7], uma linguagem de descric¸˜ao de arquitetura de c´ogido aberto que tem a vantagem de gerar modelos funcionais em SystemC, desse modo permitindo integrac¸˜ao direta do modelo com uma plataforma descrita em SystemC. Nosso principal objetivo ´e considerar como o hardware do ASIP pode ser sintetizado a partir de uma descric¸˜ao em ADL, juntamente com seu con-junto de ferramentas.

Pesquisas est˜ao sendo feitas com o objetivo de criar ferramentas para a gerac¸˜ao autom´atica de mon-tadores, compiladores, ligadores, etc, a partir de descric¸˜oes utilizando as ADLs. Dentre elas, pode-se citar uma cuja finalidade foi a gerac¸˜ao autom´atica, embora parcial, do back-end do GCC a partir de uma descric¸˜ao utilizando a ADL nML [13]. Uma outra objetivou a gerac¸˜ao autom´atica de um montador a partir de uma descric¸˜ao ArchC[14]. Esta ´ultima ferramenta foi utilizada neste trabalho. A ADL ado-tada n˜ao possui uma ferramenta para a gerac¸˜ao autom´atica do compilador. Sendo assim, optou-se por

(17)

modificar manualmente o back-end do GCC para a arquitetura que foi desenvolvida. Para auxiliar nesta etapa, utilizou-se como referˆencia um trabalho onde foi feita a modificac¸˜ao do back-end do GCC para o processador C6x[15].

(18)

3

METODOLOGIA

O fluxo principal do projeto comec¸a com a descric¸˜ao do ASIP na ADL, primeiramente como um modelo funcional sem precis˜ao de ciclos (UF), e depois refinado para o modelo com precis˜ao de ciclos (CA). Um simulador do conjunto de instruc¸˜oes (ISS) ou um simulador com precis˜ao de ciclos (CAS) ´e automaticamente gerado a partir da descric¸˜ao apropriada na ADL, como mostrado na Figura 1, e alimen-tado com um c´odigo execut´avel gerado pelo fluxo de s´ıntese de software. Esses passos de automac¸˜ao j´a est˜ao implementados pelo pacote ArchC.

Figura 1: Fluxo de co-projeto de hardware e software

O fluxo de s´ıntese de software, que engloba as ferramentas respons´aveis por permitir a programac¸˜ao do ASIP em alto n´ıvel de modo f´acil e eficiente, tamb´em tem como entrada a descric¸˜ao provida na ADL escolhida, como mostra a Figura 2.

Caso a arquitetura n´ucleo seja extens´ıvel, tanto o compilador quanto o montador tem que ser mo-dificados automaticamente para estarem de acordo com as novas instruc¸˜oes. ´E por isso que o back-end

(19)

Figura 2: Fluxo de s´ıntese de software

do compilador precisa extrair informac¸˜oes automaticamente a partir da descric¸˜ao ADL, seja para selec¸˜ao de instruc¸˜oes (semˆantica a partir do modelo funcional ou com precis˜ao de ciclos), seja para escalona-mento de c´odigo (latˆencias a partir do modelo com precis˜ao de ciclos). Pela mesma raz˜ao um gerador de montadores ´e necess´ario. Neste projeto, o GNU GCC ´e adotado como front-end e seu back-end ´e modificado para gerar c´odigo para o ASIP. Uma vez que a arquitetura atual n˜ao apresenta a caracter´ıstica de extensibilidade, a modificac¸˜ao autom´atica do back-end n˜ao se faz estritamente necess´aria, embora fac¸a parte dos objetivos a serem alcanc¸ados para total automac¸˜ao do projeto de ASIPs. O mesmo ocorre com o gerador de montadores, embora este j´a tenha sido implementado por parte dos alunos do grupo de pesquisa[14]no qual este trabalho foi desenvolvido. Tendo ent˜ao os algoritmos programados em alto n´ıvel e o compilador criado, pode-se gerar o c´odigo assembly, que depois de passar pelo montador est´a pronto para ser carregado no simulador. A partir dessa etapa o ASIP est´a validado nos n´ıveis funcional e com precis˜ao de ciclos.

Buscou-se um fluxo de s´ıntese de hardware contemporˆaneo usando uma ADL como ponto de par-tida, como mostrado na Figura 3.

A partir da descric¸˜ao em ADL do modelo com precis˜ao de ciclos, um modelo com precis˜ao de ciclos escrito em SystemC ´e gerado. ´E realizada ent˜ao a S´ıntese Arquitetural a partir de SystemC, resultando

(20)

Figura 3: Fluxo de s´ıntese de hardware

numa descric¸˜ao RTL que ´e ent˜ao combinada, por um Loader, com o c´odigo execut´avel gerado na s´ıntese de software; a descric¸˜ao RTL resultante ´e sintetizada visando uma plataforma FPGA. Neste projeto, VHDL ´e a linguagem utilizada na descric¸˜ao RTL. A S´ıntese Arquitetural ´e executada manualmente neste projeto, passando-se ent˜ao diretamente da descric¸˜ao com precis˜ao de ciclos na ADL para a descric¸˜ao RTL. Uma vez que as primeiras gerac¸˜oes de ferramentas de s´ıntese arquitetural assumem uma descric¸˜ao comportamental em uma HDL, a maioria das ferramentas comerciais n˜ao pode ser usada diretamente para automatizar esse passo partindo de uma descric¸˜ao em SystemC. Adicionalmente, a necessidade de uma segunda gerac¸˜ao de s´ıntese arquitetural foi advogada pela comunidade de EDA[2], onde HDLs s˜ao usadas para s´ıntese RTL e n˜ao para s´ıntese arquitetural comportamental. Ao executar “manualmente” a s´ıntese arquitetural, est´a se fazendo uma primeira tentativa em avaliar os desafios e necessidades dessa segunda gerac¸˜ao de ferramentas.

Um fluxo cl´assico de simulac¸˜ao HDL, possivelmente com back annotation, ´e adotado, permitindo assim o uso de ferramentas comerciais.

(21)

Figura 4: Fluxo de Projeto

3.1

Ferramentas de CAD (Computer Aided Design)

No fluxo de projeto explanado acima foram citadas algumas ferramentas utilizadas durante o per-curso. Elas se encaixam no que comumemente se chama de ferramentas de CAD, ou seja, ferramentas de aux´ılio a projetos por computador. Toda metodologia de projeto de hardware est´a apoiada nessas ferramentas e o desenvolvimento e o aprimoramento das mesmas ´e umas das ´areas mais promissoras em Automac¸˜ao de Projetos.

Abaixo segue uma breve descric¸˜ao das ferramentas de CAD utilizadas nesse projeto.

3.1.1 ArchC

A introduc¸˜ao sobre a linguagem de descric¸˜ao de arquiteturas ArchC j´a foi dada nos cap´ıtulos anteri-ores. N˜ao ´e objetivo dessa sec¸˜ao dar uma vis˜ao exaustiva sobre a linguagem, pelo contr´ario, a intenc¸˜ao ´e resumir como ´e a descric¸˜ao de um modelo em ArchC.

O modelo descrito em ArchC ´e composto de duas partes. Uma delas ´e a descric¸˜ao da arquitetura do conjunto de instruc¸˜oes (AC ISA) que cont´em a declarac¸˜ao de todas a instruc¸˜oes e seus formatos. A outra

(22)

parte ´e a descric¸˜ao dos elementos da arquitetura (AC ARCH) onde ´e feita a declarac¸˜ao do tamanho da pa-lavra que ser´a utilizada na arquitetura, n´umero de registradores, pipeline, mem´oria utilizada etc. A partir das duas descric¸˜oes acima, o ArchC Simulator Generator (ACSIM) gera um template comportamental, que dever´a ser preenchido com o comportamento de cada instruc¸˜ao. Com a descric¸˜ao comportamental completa, o modelo ´e compilado gerando um simulador execut´avel da arquitetura modelada. O simulador execut´avel pode ent˜ao utilizar um c´odigo bin´ario ou hexadecimal para fazer a simulac¸˜ao da arquitetura.

3.1.2 SystemC

SystemC[1]´e composto por um conjunto de bibliotecas que estendem C/C++ para permitir projeto e verificac¸˜ao de hardware em n´ıveis maiores de abstrac¸˜ao. O c´odigo fonte para o kernel de simulac¸˜ao ´e freeware e est´a dispon´ıvel em[1]. Embora permita descric¸˜oes em n´ıvel RTL, SystemC n˜ao tem como objetivo substituir as j´a bem conhecidas linguagens de descric¸˜ao de hardware, VHDL e Verilog, mas sim permitir o projeto no n´ıvel de sistema.

3.1.3 Pacote de ferramentas Mentor Graphics

Em um primeiro momento tinha-se a intenc¸˜ao de utilizar o pacote de ferramentas Mentor Graphics, uma das mais importantes fabricantes de ferramentas de CAD, para realizar toda a parte de simulac¸˜ao em VHDL e possivelmente a s´ıntese para FPGA. Por´em, durante o projeto, as licenc¸as para essas ferramentas n˜ao puderam ser renovadas e passou-se ent˜ao para o uso de vers˜oes de avaliac¸˜ao de simuladores VHDL.

(23)

4

A CONCEPC

¸ ˜

AO DO ASIP

As sec¸˜oes seguintes mostram os passos relacionados `a definic¸˜ao do ASIP, comec¸ando com a delimitac¸˜ao da aplicac¸˜ao a ser suportada pelo ASIP, seguido de uma breve explicac¸˜ao sobre o dom´ınio da aplicac¸˜ao (Efeitos Digitais de ´Audio), finalizando, ent˜ao, com uma explanac¸˜ao de como se definiu o conjunto de operac¸˜oes que o ASIP seria capaz de realizar.

4.1

A Aplicac¸˜ao

Este estudo de caso visa uma aplicac¸˜ao simples para gerac¸˜ao de efeitos digitais de ´audio, como ilus-tra a Figura 5. O ´audio de enilus-trada pode ser produzido por um instrumento musical, pode ser sintetizado a partir de m´ıdia digital, etc. O ´audio de sa´ıda pode ser enviado a um amplificador, gravador de m´ıdia digital, etc. O processamento do ´audio ´e realizado por um sistema integrado de hardware e software. Cada efeito de ´audio corresponde a um software embarcado distinto, que ´e carregado na mem´oria do sistema. O ´audio suportado pela aplicac¸˜ao possui dados codificados em 8 bits, com taxa de amostragem de 16 kHz.

(24)

4.2

Efeitos Digitais de ´

Audio

Efeitos de ´audio podem ser definidos como qualquer tratamento realizado em um determinado si-nal de entrada a fim de se obter um sisi-nal de sa´ıda com suas caracter´ısticas alteradas de acordo com a necessidade. No escopo desse trabalho trata-se apenas dos efeitos de ´audio realizados digitalmente.

O processo de execuc¸˜ao de um efeito de ´audio digital ´e esquematizado na Figura 6.

Figura 6: Fluxo do processamento de efeitos digitais de ´audio

Em primeiro lugar, o ´audio em formato anal´ogico passa por um conversor anal´ogico-digital que vai realizar a amostragem do sinal de entrada. Para que a convers˜ao ocorra corretamente e o sinal resultante n˜ao apresente distorc¸˜oes ´e necess´ario que a taxa de amostragem esteja de acordo com o teorema Nyquist, que diz que se um sinal anal´ogico cont´em componentes de freq¨uˆencia at´e f Hz, a taxa de amostragem deve ser no m´ınimo 2 f Hz. O ´audio em formato digital ´e representado atrav´es de n´umeros que variam de 0 a 2n, onde n ´e o n´umero de bits utilizados na convers˜ao. ´E sobre esses valores que os efeitos de ´audio digitais atuam. Os dados resultantes das operac¸˜oes realizadas pelos efeitos s˜ao ent˜ao convertidos novamente para o formato anal´ogico, usando-se a mesma taxa de amostragem aplicada `a convers˜ao anterior. Nem sempre todas as etapas ocorrem conjuntamente, sendo poss´ıvel aplicar os efeitos `a arquivos previamente gravados, por exemplo.

A Figura 7 mostra o resultado da aplicac¸˜ao do efeito Wah-Wah a uma amostra de ´audio. Os parˆametros mais comuns nas implementac¸˜oes do efeito Wah-Wah s˜ao:

(25)

Figura 7: ´Audio original e ´audio modificado pelo efeito Wah-Wah

- freq¨uˆencia da forma de onda de variac¸˜ao; - fase inicial da forma de onda de variac¸˜ao; - profundidade;

- ressonˆancia;

- freq¨uˆencia de compensac¸˜ao.

Como pode-se ver, a forma de onda resultante da aplicac¸˜ao do efeito sofreu v´arias alterac¸˜oes. Cada um dos parˆametros citados acima ´e respons´avel por determinar o formato final da forma de onda.

Existe uma gama enorme de efeitos que podem ser implementados, como por exemplo: Equalizac¸˜ao, Compress˜ao, Wah-Wah, Echo, Reverb, Chorus, Noise Reduction, Pitch, Tremolo, Flanger, Distorc¸˜ao,

Delay, Phaser etc. Al´em disso, cada efeito possui suas variac¸˜oes, constituindo assim um n´umero enorme

de efeitos poss´ıveis.

Variados tamb´em s˜ao as formas de implementac¸˜ao dos efeitos. Existem hoje centenas de equi-pamentos constru´ıdos especificamente para gerac¸˜ao de efeitos, al´em de in´umeros softwares utilizados para o mesmo fim. Por´em nesses dois casos, a qualidade dos efeitos ´e absolutamente imprescind´ıvel e para se alcanc¸ar tais caracter´ısticas, tanto em implementac¸˜oes em hardware quanto em software, h´a uma complexidade consider´avel, dado que todos efeitos s˜ao baseados em complexas equac¸˜oes matem´aticas.

(26)

implementac¸˜ao com a devida fidelidade. A aplicac¸˜ao no contexto desse projeto ´e o meio e n˜ao o fim. Por esse motivo, a escolha dos efeitos foi feita com base em dois crit´erios:

- Simplicidade: algoritmos com func¸˜oes matem´aticas complexas n˜ao foram inclu´ıdos para simplifi-car a arquitetura e sua implementac¸˜ao.

- Apelo auditivo: preferiu-se selecionar efeitos cujo resultado sonoro ´e facilmente percebido por um ouvinte comum.

Abaixo segue a lista dos efeitos escolhidos e uma breve explicac¸˜ao para cada um deles. Ao final de cada explicac¸˜ao h´a uma figura mostrando a forma de onda original e a forma de onda modificada pelo efeito implemententado, com excec¸˜ao para os efeitos Phaser e Flanger, cujas formas de onda resultantes n˜ao apresentam caracter´ısticas facilmente percebidas.

Distorc¸˜ao: A distorc¸˜ao basicamente satura a onda sonora dando ao som um aspecto meio distorcido ou “sujo”. O algoritmo de distorc¸˜ao recebe como entrada a onda sonora, um ganho e um valor de saturac¸˜ao. Quando a onda ´e processada, primeiramente aplica-se a ela o ganho e em seguida ela ´e saturada com o valor de saturac¸˜ao.

Figura 8: Amostra normal e modificada pela distorc¸˜ao

Trˆemolo: O trˆemolo ´e simplesmente a variac¸˜ao constante de volume de forma linear. S˜ao passados como parˆametros o volume m´aximo e m´ınimo, assim como a velocidade de variac¸˜ao do volume. A onda vai aumentando sua amplitude de acordo com a velocidade de variac¸˜ao. Quando esta atinge

(27)

o volume m´aximo desejado, ela comec¸a a diminuir sua amplitude at´e atingir o volume m´ınimo e voltar a aumentar a amplitude novamente, ficando assim at´e que se pare a execuc¸˜ao do efeito.

Figura 9: Amostra normal e modificada pelo tremolo

Delay: O delay adiciona `a onda uma ou mais amostras atrasadas, mas n˜ao chega a dar uma sensac¸˜ao de eco. O algoritmo de delay recebe como entrada a onda sonora, um ganho para a onda original, um ganho para as amostras atrasadas, a quantidade de feedback e o tempo de atraso. No processamento da onda, aplica-se a ela um ganho (ganho da onda original) e depois pega-se uma amostra atrasada em t (tempo de atraso) segundos e aplica-se a ela um outro ganho (ganho para amostras atrasadas). No caso de haver feedback, a onda processada nesta etapa ser´a adicionada a amostra t segundos seguinte, por´em a ela ser´a aplicado um ganho menor que um para diminuir sua intensidade. A intenc¸˜ao ´e que a amostra atrasada v´a se repetindo seguidas vezes, cada vez mais baixo, at´e que n˜ao mais se possa ouv´ı-la.

Flanger: O flanger utiliza-se da t´ecnica do delay para sua execuc¸˜ao. No entanto ele n˜ao faz uso de

feedback e seu tempo de atraso fica entre 20 e 200 milisegundos. Um diferencial no algoritmo do

flanger, ´e que o tempo de atraso fica constantemente variando para maior e menor atraso. Um dos parˆametros do algoritmo ´e justamente o menor e o maior atraso desejado.

Phaser: O phaser tem um comportamento exatamente igual ao flanger, sendo a ´unica diferenc¸a que a amostra atrasada, antes de ser adicionada a onde original, ´e invertida para dar um outro aspecto sonoro.

(28)

Figura 10: Amostra normal e modificada pelo delay

Explicac¸˜oes detalhadas sobre cada um desses efeitos podem ser encontradas em[16]e[17].

4.3

Estudos preliminares para definic¸˜ao da arquitetura

Uma das maiores preocupac¸˜oes em projetos de sistemas embarcados ´e justamente com a ´area ocu-pada pelo hardware. Em um projeto visando a implementac¸˜ao em FPGA, essa preocupac¸˜ao est´a di-retamente ligada com o n´umero de gates presentes no dispositivo. N˜ao obstante, para a realizac¸˜ao de efeitos de ´audio h´a a necessidade de algumas operac¸˜oes matem´aticas que demandam alta complexidade e por conseguinte, mais espac¸o no FPGA. Outro problema diz respeito `a velocidade de processamento do hardware, que deve atender `as exigˆencias da aplicac¸˜ao.

Face a esses dois problemas, estudos preliminares foram realizados a fim de se buscar a melhor relac¸˜ao custo-benef´ıcio para o projeto. A principal preocupac¸˜ao foi com a operac¸˜ao de multiplicac¸˜ao que poderia demandar bastante espac¸o em hardware, al´em de tornar proibitivo a execuc¸˜ao dos efeitos no per´ıodo necess´ario. A opc¸˜ao foi reprogramar os efeitos, retirando as operac¸˜oes de multiplicac¸˜ao expl´ıcitas e as programando com somas e deslocamentos, criando-se assim o que se chamou de algorit-mos de ganho. Para a tomada de decis˜ao entre multiplicac¸˜ao e algoritalgorit-mos de ganho usando deslocamen-tos, foram criadas tabelas comparando os seguintes fatores de cada opc¸˜ao:

- precis˜ao

(29)

- desempenho em n´umero de ciclos e tempo total de execuc¸˜ao de cada efeito

- n´umero aproximado de componentes necess´arios para implementac¸˜ao em hardware - escalabilidade

Para o caso de se usar deslocamentos, havia a possibilidade de implementar deslocamentos em

hardware usando tanto Shift Register, quanto Barrel Shifter. Essas duas opc¸˜oes foram consideradas para

a tomada da decis˜ao.

As tabelas mais relevantes para a tomada da decis˜ao podem ser vistas abaixo.

Figura 11: Precis˜ao de cada algoritmo de ganho

Para cada algoritmo, foram executados todos os poss´ıveis valores de ganho aceitos e anotada a diferenc¸a entre o valor dado e valor esperado e calculada a m´edia. Nesse crit´erio o algoritmo 2 foi descartado por apresentar precis˜ao mais baixa que os demais e ter uma abrangˆencia menor que os outros, ou seja, seria poss´ıvel somente executar ganhos em uma faixa restrita de valores (por exemplo de 0,5 a 2,75, variando de 0,25 em 0,25).

Figura 12: Desempenho de cada algoritmo de ganho na execuc¸˜ao do efeito Delay

Das comparac¸˜oes realizadas pelos crit´erios acima citados, a Figura 12 apresenta o resultado mais relevante, que ´e a comparac¸˜ao do desempenho de cada um dos algoritmos para um determinado efeito. Ela ´e resultado da contagem do n´umero de instruc¸˜oes do efeito para cada implementac¸˜ao, combinado com o tempo de atraso de cada componente utilizado. Com esses valores foi poss´ıvel calcular qual o tempo de execuc¸˜ao do efeito para cada poss´ıvel implementac¸˜ao.

(30)

Da an´alise das tabelas geradas optou-se pelo uso da multiplicac¸˜ao simples, uma vez que os custos de

hardware, e o tempo de execuc¸˜ao, mostrado na Figura 12, n˜ao tornariam proibitiva, de maneira alguma,

a construc¸˜ao do ASIP em um poss´ıvel FPGA de baixo custo; al´em do uso da multiplicac¸˜ao proporcionar a melhor precis˜ao nos resultados e, por fim, tornar mais intuitiva a programac¸˜ao dos efeitos de ´audio.

(31)

5

ARQUITETURA E ORGANIZAC

¸ ˜

AO DO ASIP

5.1

Arquitetura

A arquitetura do conjunto de instruc¸˜oes foi definida a partir do conjunto de algoritmos de efeitos de ´audio previamente selecionados, implementados e testados em uma linguagem de alto n´ıvel. Fazendo a an´alise dos algoritmos implementados em alto n´ıvel, detectou-se quais seriam as instruc¸˜oes necess´arias para a gerac¸˜ao dos efeitos em um processador espec´ıfico. De modo geral observou-se a presenc¸a de somas, subtrac¸˜oes, multiplicac¸˜oes e saltos, al´em de instruc¸˜oes de acesso a mem´oria, mas, como era de se esperar nesse tipo de aplicac¸˜ao, as instruc¸˜oes aritm´eticas s˜ao a grande maioria.

O conjunto de instruc¸˜oes ´e mostrado na Figura 13.

(32)

5.1.1 RISC x Outras arquiteturas: uma vis˜ao pragm´atica

M´aquinas RISC, por definic¸˜ao, apresentam um conjunto reduzido de instruc¸˜oes, geralmente com for-matos mais regulares que outros tipos de arquitetura, acesso a mem´oria apenas com o uso de instruc¸˜oes LOAD/STORE (tamb´em conhecidas como m´aquinas Load/Store), etc. Al´em de apresentarem hardware menos complexo que outras arquiteturas, essas caracter´ısticas contribuem para facilitar a gerac¸˜ao au-tom´atica de ferramentas de programac¸˜ao do processador (toolkit).

5.1.2 Principais caracter´ısticas

Al´em da escolha por uma arquitetura RISC, algumas considerac¸˜oes importantes precisam ser citadas sobre a arquitetura projetada:

- Tamanho da palavra: 16 bits; foi o menor tamanho encontrado capaz de comportar a definic¸˜ao das instruc¸˜oes em formatos regulares. A escolha do menor tamanho visa contribuir para a minimizac¸˜ao do tamanho c´odigo.

- Precis˜ao estendida: embora os dados de entrada/sa´ıda (amostras de ´audio) tenham precis˜ao de 8 bits, internamente s˜ao tratados com precis˜ao de 16 bits. Esta escolha visa minimizar os pro-blemas com overflow e arredondamento ocasionados pelas instruc¸˜oes aritm´eticas. Al´em disso, a representac¸˜ao para as amostras de ´audio em 8 bits minimiza a quantidade de mem´oria ocupada por dados.

- Banco de registradores: os registradores tˆem comprimento de 16 bits e h´a um total de 16 registra-dores de uso geral, o que garante uma boa alocac¸˜ao de registraregistra-dores[18].

- Espac¸o de enderec¸amento: o espac¸o de enderec¸amento de 64 kbytes ´e mais que o atualmente necess´ario, o que garante a possibilidade de futuras extens˜oes no projeto.

5.1.3 Peculiaridades de algumas instruc¸˜oes

A maioria das instruc¸˜oes apresenta comportamento similar as encontradas em outras m´aquinas RISC, por´em, trˆes delas merecem um pouco mais de atenc¸˜ao. S˜ao elas:

(33)

Semˆantica dos operandos:

RD: n´umero inteiro de 16 bits, recebe o resultado da multiplicac¸˜ao entre RS e RT. RS: n´umero inteiro de 16 bits sinalizado

RT: n´umero em ponto fixo de 16 bits, onde os 12 bits mais significativos representam a parte inteira e os 4 bits menos significativos representam a parte fracion´aria.

LBX RD RS IMM4 : Carrega byte da mem´oria enderec¸ada pelo conte´udo de RS mais o valor do campo IMM4, fazendo extens˜ao do sinal do bit mais significativo do byte lido.

Semˆantica dos operandos:

RD: recebe byte da mem´oria com sinal extendido

RS: cont´em o enderec¸o da mem´oria onde o byte ser´a buscado.

IMM4: constante de 4 bits sinalizada, somada ao conte´udo de RS para a busca do byte na mem´oria.

SBS RD RS IMM4 : Carrega byte na mem´oria enderec¸ada pelo conte´udo de RS mais o valor do campo IMM4, fazendo saturac¸˜ao do conte´udo de RD para representar valores na faixa de 8 bits.

Semˆantica dos operandos:

RD: registrador de 16 bits com valor a ser saturado e armazenado na mem´oria. RS: cont´em o enderec¸o da mem´oria onde o byte ser´a armazenado.

IMM4: constante de 4 bits sinalizada, somada ao conte´udo de RS para armazenamento do byte na mem´oria.

5.2

Organizac¸˜ao do ASIP

A arquitetura foi implementada segundo uma organizac¸˜ao cl´assica composta de um datapath e de um controlador. Como a aplicac¸˜ao n˜ao demanda alto desempenho, decidiu-se implementar as instruc¸˜oes em m´ultiplos ciclos de rel´ogio e sem qualquer paralelismo entre instruc¸˜oes. A escolha por uma implementac¸˜ao multiciclo sem pipeline resulta em um datapath compacto (devido ao compartilhamento das unidades funcionais) e permite a operac¸˜ao em freq¨uˆencia adequada aos requisitos da aplicac¸˜ao.

(34)

A Figura 14 e os anexos F e G resumem as principais definic¸˜oes do projeto do caminho de dados e controlador do processador.

(35)

6

FERRAMENTAS DE DESENVOLVIMENTO

Um processador sem ferramentas que permitam sua programac¸˜ao em alto n´ıvel n˜ao tem grande utilidade. Realizar a programac¸˜ao em bin´ario, embora poss´ıvel, n˜ao ´e uma alternativa vi´avel, ainda mais para processadores com um grande n´umero de instruc¸˜oes. Nesse sentido, um toolkit de programac¸˜ao do ASIP se faz absolutamente necess´ario.

As ferramentas presentes nesse projeto s˜ao explicitadas abaixo.

6.1

Simulador do conjunto de instruc¸˜oes

O simulador do conjunto de instruc¸˜oes ´e gerado automaticamente pelo pacote ArchC a partir da descric¸˜ao do modelo, tanto no n´ıvel funcional quanto no n´ıvel com precis˜ao de ciclos. O fluxo de gerac¸˜ao autom´atica do simulador ´e mostrado na Figura 15.

(36)

6.2

Montador Manual

O montador ´e respons´avel por transformar um c´odigo de montagem (c´odigo assembly) em c´odigo bin´ario. Essa foi a primeira ferramenta desenvolvida para o projeto, pois seria invi´avel testar o modelo descrito em ArchC com c´odigo bin´ario criado manualmente.

O montador foi implementado em Java e ´e respons´avel tamb´em por transferir para o c´odigo bin´ario, na sec¸˜ao de dados, o conte´udo de um arquivo de ´audio no formato wave com amostras de 8 bits. Dessa forma foi poss´ıvel aplicar aos efeitos implementados em assembly `a mesma entrada de ´audio aplicada aos efeitos implementados em Java.

6.3

Gerador de Montadores

Um dos objetivos da metodologia de projeto adotada ´e justamente permitir explorar de modo r´apido e eficiente novas soluc¸˜oes de projeto. Desse modo, o gerador de montadores resolve dois problemas importantes na construc¸˜ao de ASIPs: em primeiro lugar retira a necessidade da construc¸˜ao manual do montador, o que representa grande ganho de tempo, e em segundo lugar permite que alterac¸˜oes na arqui-tetura sejam rapidamente reavaliadas atrav´es da programac¸˜ao em assembly.

O fluxo do gerador de montadores ´e mostrado na Figura 16.

O gerador de montadores foi desenvolvido por parte do grupo de alunos do LAPS (Laborat´orio de Automac¸˜ao e Projeto de Sistemas) e est´a descrito mais detalhadamente em[14].

6.4

Loader

A descric¸˜ao VHDL do ASIP compreende todos os elementos do caminho de dados mais o contro-lador. A mem´oria, como um dos elementos do caminho de dados, precisa ser alimentada com o c´odigo da aplicac¸˜ao a ser executada. Para tanto, uma ferramenta simples, por´em de grande utilidade, foi de-senvolvida com o intuito de transferir o c´odigo hexadecimal gerado da montagem para o c´odigo VHDL correspondente `a mem´oria. A ferramenta, que nada mais ´e que um script, recebe como entrada o arquivo em assembly e, caso necess´ario, o arquivo de ´audio contendo os dados a serem processados, e de posse de um template de mem´oria pr´e-existente, constr´oi o novo arquivo de mem´oria em VHDL.

(37)

Figura 16: Fluxo do Gerador de Montadores

6.5

Cross-compiler

Um conjunto de ferramentas de programac¸˜ao completo ´e composto tamb´em por um compilador que permite gerar c´odigo para a m´aquina alvo a partir de uma descric¸˜ao em uma linguagem de alto n´ıvel. Isto ´e muito importante tamb´em no que diz respeito `a comercializac¸˜ao do produto, uma vez que a grande maioria dos programadores est´a mais acostumada com a programac¸˜ao em alto n´ıvel.

(38)

essa raz˜ao, ao inv´es de se criar um desde o in´ıcio, optou-se por portar o GNU GCC[19], um compilador bem conhecido, resultando ent˜ao em um compilador cruzado (cross-compiler) para a nossa arquitetura. A situac¸˜ao ideal seria portar o GCC automaticamente a partir da descric¸˜ao em uma ADL. Embora, neste trabalho, isto tenha sido executada manualmente, foi importante para identificar problemas e pontos de automac¸˜ao para a execuc¸˜ao autom´atica. Para entender como portar o GCC para a nossa arquitetura ´e necess´ario entender o seu funcionamento, explicado a seguir.

6.5.1 A cadeia de ferramentas do GCC

Figura 17: Ferramentas de compilac¸˜ao do GCC

A execuc¸˜ao do GCC ´e controlada atrav´es do compiler driver, que utiliza v´arias ferramentas para realizar a compilac¸˜ao, sendo ele o respons´avel por fazer o controle e a comunicac¸˜ao entre elas. Um esquema de como estas ferramentas s˜ao usadas est´a representado na Figura 17.

Ao ser executado, o primeiro passo do GCC ´e iniciar a execuc¸˜ao do cc1, ou C Compiler, e passar para ele o arquivo C/C++ que foi fornecido como entrada do compilador. O cc1, ao iniciar, executa o cpp, ou Preprocessor, que ir´a percorrer todos os arquivos de entrada, procurando por diretivas tais como #include e #define, por exemplo, expandindo qualquer macro que encontrar. O cpp, ao fim de sua execuc¸˜ao, repassa o controle da execuc¸˜ao ao cc1, que analisa o c´odigo C/C++ pr´e-processado. O

cc1 compreende a parte mais importante da compilac¸˜ao. ´E aqui que s˜ao feitas todas as an´alises l´exica,

sint´atica, semˆantica, al´em de todas as otimizac¸˜oes de c´odigo. Ao final de sua execuc¸˜ao, o cc1 gera um c´odigo assembly para a arquitetura alvo escolhida.

O GCC retoma a execuc¸˜ao e inicia a execuc¸˜ao do gas, ou GNU Assembler, passando para ele o c´odigo assembly gerado pelo cc1. O gas ´e respons´avel por traduzir o c´odigo assembly gerado no passo anterior em um c´odigo bin´ario para a arquitetura alvo.

(39)

Ao fim da execuc¸˜ao do gas, o GCC passa a execuc¸˜ao para o ld, ou GNU Linker, que combina os m´odulos gerados nas etapas anteriores transformando-os em um ´unico arquivo execut´avel, que ´e o c´odigo fornecido como sa´ıda do compilador.

Neste trabalho, somente a primeira parte, ou o cc1 e o cpp foram utilizados para compilac¸˜ao. O gas e o ld n˜ao foram utilizados, e no lugar deles usou-se o montador gerado automaticamente pelo gerador de montadores e o script de carga que foi criado manualmente.

6.5.2 Por dentro do cc1

Figura 18: Funcionamento do cc1

Como o objetivo deste trabalho foi somente portar o GCC para gerar c´odigo assembly para a nossa arquitetura, n˜ao foi necess´ario estudar a fundo o funcionamento do gas e o ld. No entanto, n˜ao se pode dizer o mesmo do cc1, j´a que toda a parte de gerac¸˜ao de c´odigo assembly esta compreendida nesta etapa. A execuc¸˜ao do cc1 ´e dividida em trˆes etapas, o Front-End, o Middle-End e o Back-End, executados nesta seq¨uˆencia, como mostrado na Figura 18.

O primeiro passo do Front-End, ´e criar uma representac¸˜ao em ´arvore, chamada parse tree, da func¸˜ao que est´a sendo compilada. Para isso, o cc1 executa o parser, que divide as declarac¸˜oes C/C++ em

tokens, associa a cada token um valor e depois inclui este valor, junto com alguns valores semˆanticos,

em um ramo da ´arvore de representac¸˜ao. Em seguida, s˜ao feitas algumas otimizac¸˜oes independentes da plataforma alvo, como simplificac¸˜oes aritm´eticas, etc, utilizando a ´arvore de representac¸˜ao.

(40)

fazer a gerac¸˜ao do c´odigo intermedi´ario utilizado pelo cc1, conhecido como RTL, ou Register Transfer

Language. Para executar este passo, o cc1 necessita de algumas informac¸˜oes da m´aquina destino, tais

como, quais as instruc¸˜oes suportadas pela m´aquina etc. Estas informac¸˜oes s˜ao dadas ao cc1 atrav´es de um arquivo, chamado machine description.

Ap´os a gerac¸˜ao do c´odigo intermedi´ario, encerra-se a etapa do Front-End e inicia-se a do

Middle-End. Nesta etapa, ocorrem varias otimizac¸˜oes de c´odigo bem conhecidas, tais como otimizac¸˜ao de

desvio, otimizac¸˜ao de loops, escalonamento de c´odigo, alocac¸˜ao de registradores, etc. Para realizar esta etapa, informac¸˜oes da m´aquina alvo precisam ser fornecidas ao cc1 para que ele possa fazer as otimizac¸˜oes corretamente. Parte dos dados s˜ao fornecidos atrav´es do arquivo machine description, no entanto a maior parte das informac¸˜oes ´e dada pelo arquivo target description macros.

A ´ultima etapa do cc1 ´e o Back-End, onde ´e feita a traduc¸˜ao do c´odigo RTL gerado e otimizado nas etapas anteriores para o c´odigo assembly da m´aquina alvo, casando as instruc¸˜oes RTL com as definic¸˜oes que foram descritas no arquivo machine description.

6.5.3 RTL: A linguagem intermedi´aria

Tal como explicado anteriormente, quase todo trabalho do GCC ´e feito utilizando a linguagem inter-medi´aria. As otimizac¸˜oes de c´odigo s˜ao feitas utilizando esta linguagem, al´em da traduc¸˜ao para c´odigo

assembly.

Inspirada em listas LISP, a linguagem intermedi´aria possui duas formas de representac¸˜ao. Uma delas utiliza um formato interno, em que estruturas apontam para outras estruturas e assim v˜ao formando as express˜oes. E a outra, utiliza uma forma textual usada no machine description e em sa´ıdas escritas para fins de depurac¸˜ao.

6.5.4 Portando o GCC

Para portar o GCC, n˜ao ´e necess´ario modificar seu c´odigo fonte de modo que se adapte a arquitetura alvo. Ele requer que apenas trˆes arquivos lhe sejam fornecidos para que possa gerar c´odigo para o processador. Estes arquivos s˜ao: machine.md ou machine description e o machine.h em conjunto com o

machine.c, formando o target description macros and functions.

(41)

da m´aquina. Dentre eles, os mais usados s˜ao o define_insn e o define_expand. O segundo ´e utilizado durante a gerac¸˜ao do c´odigo intermedi´ario, a partir da ´arvore de representac¸˜ao, enquanto o primeiro pode ser usado tanto na gerac¸˜ao do c´odigo intermedi´ario quanto na fase final de compilac¸˜ao, para gerar o c´odigo assembly.

O define_expand ´e usado para dizer ao compilador como gerar um c´odigo RTL espec´ıfico de uma arquitetura alvo. Se ele for usado, ´e preciso definir um define_insn sem nome que corresponda a estrutura definida no define_expand. Isto precisa ser feito, sen˜ao, durante a gerac¸˜ao de c´odigo

assembly, o compilador n˜ao ir´a encontrar uma definic¸˜ao de instruc¸˜ao RTL que combine com a estrutura

criada na hora da gerac¸˜ao de c´odigo intermedi´ario.

H´a muitas outras definic¸˜oes al´em das duas citadas acima. Entre elas, duas bastante importantes s˜ao o define_split e o define_peephole, utilizados na etapa de otimizac¸˜ao. Todas as definic¸˜oes do

machine description est˜ao presentes em[20], no Cap´ıtulo 12.

O target description macros and functions cont´em v´arias macros que precisam ser definidas, mas que n˜ao cabem no esquema do machine description. Dentre estas macros pode-se citar o tamanho dos tipos de dados, pois algumas m´aquinas n˜ao suportam operac¸˜oes inteiras de 16 bits, por exemplo, e a vari´avel int tem de ser emulada para que caiba em um registrador de 16 bits, o tamanho do banco de registradores, se a m´aquina ´e big endian ou little endian etc. Todas as macros que podem ser definidas est˜ao presente em[20], no Cap´ıtulo 13.

6.5.5 Um exemplo de uma compilac¸˜ao

C´odigo em C (supondo que as vari´aveis s˜ao do tipo int):

a = b + c;

Figura 19: Exemplo de adic¸˜ao em C

O compilador, ao receber o c´odigo C mostrado na Figura 19, faz o parser e cria uma representac¸˜ao em ´arvore para a express˜ao. Em seguida, o compilador identifica que se trata de uma instruc¸˜ao de adic¸˜ao entre inteiros, gera o nome addsi3 e procura no machine description por uma definic¸˜ao RTL que tenha o mesmo nome. Veja um exemplo de definic¸˜ao na Figura 20. Ao encontrar, o compilador gera uma instruc¸˜ao RTL n˜ao otimizada, de acordo com a estrutura descrita na definic¸˜ao encontrada, como mostrado na Figura 21 (os n´umeros de registradores adotados foram escolhidos ao acaso).

(42)

Definic¸˜ao de instruc¸˜ao RTL (machine description):

define_insn ("addsi3"

[(set (match_operand:SI 0 "register_operand" "")

(plus:SI (match_operand:SI 1 "register_operand" "") (match_operand:SI 2 "register_operand" "")))] ""

"add %0 %1 %2" "")

Figura 20: Exemplo de definic¸˜ao RTL

Na express˜ao RTL n˜ao otimizada, o compilador adota um n´umero arbitr´ario qualquer para os regis-tradores. Mesmo que a m´aquina alvo tenha, por exemplo, 16 registradores de uso geral, o compilador assume que ela possui infinitos. Somente depois da etapa de otimizac¸˜ao de c´odigo ´e que o compilador troca os n´umeros arbitr´arios por n´umeros de registradores reais, como se pode ver na Figura 21.

Express˜ao RTL (n˜ao otimizada):

(set (reg:SI 46) (plus:SI (reg:SI 47) (reg:SI 48)))

Express˜ao RTL (otimizada):

(set (reg:SI 6) (plus:SI (reg:SI 7) (reg:SI 8)))

Figura 21: Exemplo de instruc¸˜ao RTL

A ´ultima etapa, ´e a gerac¸˜ao do c´odigo assembly. Para isso, o compilador percorre o machine

des-cription a procura de uma definic¸˜ao RTL que coincida com a instruc¸˜ao RTL otimizada. Neste caso, ele

ir´a encontrar a mesma definic¸˜ao addsi3. O compilador ent˜ao pega a sa´ıda assembly da definic¸˜ao RTL e troca os valores em % pelo respectivo valor do registrador, gerando a sa´ıda mostrada na Figura 22.

Sa´ıda Assembly:

add 6 7 8

Figura 22: Exemplo de sa´ıda assembly

6.5.6 Portando o GCC para a nossa arquitetura

At´e o momento, somente uma parte do machine description foi descrito. Isto se deve ao fato de que estudar o GCC acabou tomando muito tempo e n˜ao foi poss´ıvel terminar as descric¸˜oes no prazo estabelecido. Um dos objetivos do trabalho, no entanto, ´e identificar pontos de automac¸˜ao para a gerac¸˜ao

(43)

autom´atica do machine description e do target description macros atrav´es do ArchC. Quanto a esse aspecto, pode-se observar que o ArchC, apesar de f´acil de entender e usar devido a sua simplicidade, acaba apresentando algumas deficiˆencias para a gerac¸˜ao autom´atica da machine description, pois seria necess´ario extrair informac¸˜oes do c´odigo de comportamento para portar a arquitetura para o GCC auto-maticamente. Isso seria uma tarefa extremamente complicada, uma vez que o c´odigo de comportamento n˜ao apresenta uma estrutura r´ıgida, pois ´e escrito em C. Aparentemente, utilizar um descric¸˜ao ArchC para portar a arquitetura automaticamente para o GCC parece ser t˜ao complicado quanto fazer uma fer-ramenta para gerac¸˜ao autom´atica de c´odigo RTL (VHDL) e necessita de um longo tempo de estudo para ser desenvolvido.

(44)

7

RESULTADOS EXPERIMENTAIS

Os principais produtos de trabalho resultantes do projeto s˜ao o ASIP propriamente dito, nos diversos n´ıveis de descric¸˜ao, e as ferramentas desenvolvidas para o mesmo.

7.1

Validac¸˜ao do ASIP

Projetos de processadores s˜ao tipicamente top-down, ou seja, comec¸am em um n´ıvel elevado de abstrac¸˜ao e atrav´es de refinamentos sucessivos se alcanc¸a um n´ıvel que possa ser diretamente mapeado em hardware; e a validac¸˜ao do mesmo ´e geralmente feita comparando os resultados de um n´ıvel com outro. Embora o n´ıvel algor´ıtmico n˜ao fac¸a parte das v´arias etapas do projeto de uma CPU, no projeto em quest˜ao o ponto de partida foi justamente a definic¸˜ao dos algoritmos de efeito para se realizar a identificac¸˜ao das instruc¸˜oes necess´arias e avaliar a qualidade dos mesmos. Para tanto, os efeitos foram implementados em Java e testados com in´umeras amostras de ´audio para avaliar o impacto sonoro de cada efeito. Como dito anteriormente, n˜ao se buscou fidelidade nos efeitos, mas sim alterac¸˜oes interessantes no ´audio que pudessem ser percebidas por um ouvinte leigo no assunto.

O pr´oximo passo foi executar os efeitos de ´audio em ArchC no n´ıvel funcional com a mesma amostra de ´audio aplicada aos efeitos em Java. O mesmo foi feito para o modelo com precis˜ao de ciclos descrito em ArchC e o modelo em VHDL. Uma vez que os resultados foram equivalentes em todos os n´ıveis, cada n´ıvel foi considerado validado.

7.1.1 Comparac¸˜oes entre cada n´ıvel

A descric¸˜ao e simulac¸˜ao do ASIP em v´arios n´ıveis de abstrac¸˜ao permitem a comparac¸˜ao da comple-xidade relativa entre n´ıveis. Obviamente, quanto mais abstrato o modelo, menor sua complecomple-xidade e o tempo de simulac¸˜ao a ele associado.

(45)

A Figura 23 quantifica essa noc¸˜ao em termos de tempo de simulac¸˜ao em cada n´ıvel de abstrac¸˜ao. Note que o tempo de simulac¸˜ao do modelo RTL ´e cerca de 13 vezes maior do que o tempo de um modelo funcional e 4 vezes maior do que o modelo com precis˜ao de ciclos.

Tempo de execução/simulação dos efeitos

0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Java ArchC

Funcional ArchC Precisãode Ciclos VHDL

Modelos Te m po (m s) Tremolo Phaser Flanger Distort Delay

Figura 23: Tempo de simulac¸˜ao dos efeitos

A Figura 24 mostra o tempo de desenvolvimento do modelo do ASIP em v´arios n´ıveis de abstrac¸˜ao: algor´ıtmico, funcional, funcional com precis˜ao de ciclos e RTL. Note que o tempo de desenvolvimento do modelo RTL foi cerca de 6 vezes maior do que o correspondente ao modelo algor´ıtmico. A Figura 24 quantifica o ganho de produtividade obtido nos mais altos n´ıveis de abstrac¸˜ao e deixa claro que um projeto iniciado diretamente no n´ıvel RTL tem menos chances de satisfazer restric¸˜oes de time-to-market muito severas. (Com a excec¸˜ao de Java, n˜ao havia conhecimento relevante pr´evio nem de ArchC nem de VHDL no projeto em quest˜ao).

Para finalizar as comparac¸˜oes entre os v´arios n´ıveis de descric¸˜ao, o n´umero de linhas de c´odigo de cada n´ıvel foi computado e o resultado est´a mostrado na Figura 25. ´E importante observar que, para o cˆomputo do n´umero de linhas de c´odigo nos modelos descritos em ArchC e em VHDL, tamb´em foram considerados o c´odigo em assembly dos efeitos de ´audio. Como era de se esperar, a complexidade

(46)

Tempo de desenvolvimento por modelo 30 60 85 180 0 20 40 60 80 100 120 140 160 180 200

Java ArchC – UF ArchC – CA VHDL

Modelo Te m po (h )

Figura 24: Tempo de desenvolvimento dos modelos

crescente dos modelos com o menor n´ıvel de abstrac¸˜ao correlata com os tempos de desenvolvimento da Figura 24.

7.2

Validac¸˜ao das ferramentas

Para um arquitetura simples, com apenas 12 instruc¸˜oes, a validac¸˜ao do montador manual poderia ser feita simplesmente comparando o c´odigo gerado pela ferramenta com o c´odigo correspondente pro-gramado diretamente em bin´ario. Essa comparac¸˜ao foi feita para cada instruc¸˜ao presente na arquitetura, por´em o montador foi considerado realmente validado quando os c´odigos dos efeitos programados ma-nualmente em assembly foram transformados em c´odigo execut´avel pelo montador e introduzidos no simulador gerado pelo ArchC e os resultados produzidos pelo simulador foram exatamente iguais aos obtidos nos algoritmos implementados em Java.

J´a a validac¸˜ao do gerador de montadores foi bem mais simples, uma vez que foi necess´ario somente comparar o c´odigo execut´avel resultante com o c´odigo execut´avel produzido pelo montador manual,

(47)

Tamanho do código 360 398 650 1185 0 200 400 600 800 1000 1200 1400

Java ArchC – UF ArchC – CA VHDL

Modelos C ód ig o (e m li nh as )

Figura 25: Tamanho do c´odigo de cada descric¸˜ao do ASIP

considerado j´a validado. Para todos os efeitos programados em assembly, o resultado foi exatamente igual entre o montador manual e o montador gerado automaticamente.

A comparac¸˜ao com o c´odigo do cross-compiler ainda n˜ao foi realizada pois este n˜ao est´a pronto at´e o presente momento.

(48)

8

CONCLUS ˜

OES E TRABALHOS FUTUROS

Um exerc´ıcio de projeto completo, como o realizado nesse trabalho, tem como um dos objetivos dar a noc¸˜ao exata das dificuldades encontradas ao se realizar o projeto de um processador e seu toolkit, al´em de, apoiado por uma metodologia que segue as tendˆencias da EDA, possibilitar a identificac¸˜ao de poss´ıveis passos a serem automatizados e efetivamente automatizando outros. Os pontos mais importan-tes e as perspectivas de trabalhos futuros com base nesse projeto s˜ao citados abaixo:

8.1

Das Etapas de Projeto do Processador

Embora o projeto Top-Down de um processador n˜ao tenha como ponto de partida uma descric¸˜ao algor´ıtmica, as primeira etapas do projeto: pesquisa, definic¸˜ao, implementac¸˜ao e testes de forma al-gor´ıtmica e alto n´ıvel dos efeitos a serem suportados pelo processador, s˜ao essenciais para a delimitac¸˜ao do trabalho e assim garantir a factibilidade do mesmo. Juntamente com a definic¸˜ao do conjunto de instruc¸˜oes, esses dois passos representam uma parte consider´avel do trabalho, que ´e necess´aria para o bom andamento do mesmo, embora n˜ao tragam contribuic¸˜oes cient´ıficas.

Dos v´arios passos de refinamento realizados no projeto, a transic¸˜ao de um modelo com precis˜ao de ciclos descrito em ArchC para o modelo RTL descrito em VHDL foi o mais dif´ıcil e demorado, como mostrado na Figura 24. Por´em, a descric¸˜ao com precis˜ao de ciclos em ArchC fornece mais pistas para esse refinamento do que simplesmente a definic¸˜ao da arquitetura do conjunto de instruc¸˜oes. Al´em de representar o refinamento mais demorado, a transic¸˜ao de uma descric¸˜ao em ArchC para uma descric¸˜ao em VHDL acarreta na mudanc¸a tamb´em dos vetores de testes utilizados, na maneira de se realizar a simulac¸˜ao e na velocidade que ´e realizada tal simulac¸˜ao. Garantir o funcionamento de uma descric¸˜ao em VHDL ´e uma tarefa muito mais trabalhosa que em ArchC, justamente pelo n´ıvel de detalhamento que uma descric¸˜ao RTL permite. Aqui, portanto, se identifica um importante passo a ser considerado como

(49)

uma oportunidade de automac¸˜ao no projeto.

Al´em disso, os resultados obtidos mostraram claramente a necessidade se aumentar o n´ıvel de abstrac¸˜ao no projeto de ASIPs, pois, para uma aplicac¸˜ao muito simples, a descric¸˜ao do ASIP em RTL foi respons´avel, aproximadamente, por 61% do tempo gasto com sua implementac¸˜ao nos seus v´arios n´ıveis. Al´em disso, o tempo de simulac¸˜ao para o n´ıvel RTL em VHDL ´e praticamente 100 vezes maior que o tempo de simulac¸˜ao em Java. Isso implica que um projeto comec¸ando no n´ıvel RTL, embora poss´ıvel, n˜ao ´e vi´avel.

8.2

Das Ferramentas Utilizadas

ArchC tem como grande atrativo a usabilidade. A documentac¸˜ao provida no site [21] ´e de grande utilidade. O fato de ser de dom´ınio p´ublico ´e mais um ponto positivo para a ferramenta. N˜ao obstante, o grupo respons´avel pelo ArchC na Unicamp incentiva o uso do ArchC e se disp˜oe a ajudar o quanto for poss´ıvel. Por´em, uma descric¸˜ao em ArchC precisou de algumas extens˜oes para se realizar a gerac¸˜ao de montadores e provavelmente precisa de outras extens˜oes, ou at´e mesmo poss´ıveis restric¸˜oes precisam ser feitas ao se descrever o comportamento das instruc¸˜oes, para se permitir tanto a gerac¸˜ao autom´atica do

back-end quanto a s´ıntese arquitetural.

Por outro lado, as ferramentas utilizadas na parte do fluxo de projeto envolvendo a descric¸˜ao RTL em VHDL s˜ao dominadas por grandes empresas de CAD como Cadence, Synopsis, Mentor Graphics, Synplicty etc; por esse motivo, ferramentas de simulac¸˜ao e s´ıntese de VHDL s˜ao muito caras e de dif´ıcil acesso. O projeto contava previamente com a utilizac¸˜ao das ferramentas da Mentor Graphics, por´em, por um problema com as licenc¸as, n˜ao foi poss´ıvel mais utiliz´a-las. O ponto cr´ıtico para o projeto foi o simulador VHDL, ferramenta necess´aria para validac¸˜ao do processador no n´ıvel RTL. A soluc¸˜ao encontrada foi a utilizac¸˜ao da vers˜ao de avaliac¸˜ao da ferramenta ActiveHDL 6.3 da Aldec.

Uma das primeiras tarefas do projeto foi a familiarizac¸˜ao com as ferramentas do pacote da Mentor Graphics, que foram utilizadas nos estudos preliminares para a definic¸˜ao da arquitetura do conjunto de instruc¸˜oes, por´em, ao iniciar a descric¸˜ao em VHDL n˜ao se contava mais com as ferramentas da Mentor, sendo necess´ario um per´ıodo de reaprendizado em outro pacote de ferramentas, o que de certa forma contribuiu para uma demora maior na conclus˜ao da descric¸˜ao RTL.

(50)

8.3

Das Ferramentas Desenvolvidas

A primeira ferramenta desenvolvida foi o montador manual, impresc´ındivel para a validac¸˜ao do modelo descrito em ArchC nos seus est´agios iniciais. Dada a escolha por uma arquitetura RISC com um conjunto de instruc¸˜oes reduzido, o desenvolvimento do montador manual transcorreu de forma bem r´apida.

O gerador de montadores, por outro lado, ´e uma ferramenta muito mais poderosa e complexa, por isso exigiu bem mais tempo para ser completado. Um pr´e-processamento do c´odigo assembly, al´em de algumas extens˜oes na linguagem ArchC precisaram ser feitas para viabilizar total automac¸˜ao da gerac¸˜ao de montadores. Dados mais representativos sobre essa ferramenta podem ser encontrados em[14].

O script de carregamento de mem´oria, embora muito simples, ´e de grande utilidade. Os testes finais com a descric¸˜ao VHDL exigiam diretamente a execuc¸˜ao de pequenos c´odigos em assembly, por´em, embora j´a de posse do montador, a transferˆencia do c´odigo hexadecimal para a mem´oria descrita em VHDL era feita de forma manual, caracterizando um trabalho extremamente massante e demorado. O

script agilizou consideralvemente o processo de validac¸˜ao e testes da descric¸˜ao em VHDL.

A criac¸˜ao de um cross-compiler para a nossa arquitetura, e at´e mesmo a gerac¸˜ao autom´atica desse

cross-compiler, representava, com certeza, um dos maiores desafios do projeto, pois incluia um estudo

aprofundado do funcionamento do GNU GCC, al´em de todo processo de modificac¸˜ao do back-end do mesmo. Embora n˜ao tenha sido completamente terminada, os passos percorridos e descritos no trabalho s˜ao extremamente ´uteis para futuros trabalhos na mesma linha.

8.4

Trabalhos Futuros

Como dito anteriormente, o refinamento mais cr´ıtico foi da descric¸˜ao em ArchC do modelo com precis˜ao de ciclos para o modelo RTL descrito em VHDL. Por´em, ´e justamente nesse passo que est´a uma das mais importantes contribuic¸˜oes a ser feita. Uma ferramenta, ou um conjunto de ferramentas, que realize essa convers˜ao, mesmo que parcial, traria um grande avanc¸o no projeto do ASIP. No caso ideal, a ferramenta faria todo o refinamento e juntamente com a gerac¸˜ao autom´atica do toolkit teria-se uma plataforma de prototipac¸˜ao de ASIPs muito poderosa. Por´em a descric¸˜ao em ArchC n˜ao ´e poderosa o suficiente para lidar com todas essas necessidades e extens˜oes precisam ser feitas, no entanto, a natureza

(51)

das extens˜oes precisa ser melhor estudada.

Outro poss´ıvel trabalho futuro diz respeito `a automac¸˜ao da gerac¸˜ao de back-ends para o GNU GCC tendo como entrada a descric¸˜ao em ArchC. Alguns pontos precisam ser melhor estudados a fim de se garantir a possibilidade desse projeto, pois a descric¸˜ao ArchC, embora muito simples e funcional, talvez necessite de extens˜oes para permitir essa gerac¸˜ao autom´atica.

O projeto do processador em hardware n˜ao fazia parte do escopo desse trabalho. Chegou-se, ent˜ao, a um n´ıvel de descric¸˜ao em RTL simulado e validado, por´em n˜ao se realizou a s´ıntese do mesmo visando um FPGA alvo, nem mesmo a simulac¸˜ao com os atrasos reais de cada componente de hardware. Um futuro trabalho seria a continuac¸˜ao desse projeto at´e a implementac¸˜ao final em uma plataforma FPGA com todos os componentes necess´arios a se realizar propriamente dito a gerac¸˜ao de efeitos de ´audio.

Um dos objetivos perseguidos com esse trabalho era a criac¸˜ao de um n´ucleo do conjunto de instruc¸˜oes que pudesse ser estendido simplesmente pela adic¸˜ao de novas instruc¸˜oes. Dessa forma, o n´ucleo j´a esta-ria validado e com suporte de ferramentas e a gerac¸˜ao das novas ferramentas para a nova arquitetura n˜ao traria grandes dificuldades. Por´em, visando minimizar o tamanho do c´odigo e manter a regularidade no formato das instruc¸˜oes que uma arquitetura RISC pede, o campo de opcode acabou ficando com apenas 4 bits, que d´a o total de 16 instruc¸˜oes poss´ıveis. Dado que 12 instruc¸˜oes foram criadas, um espac¸o de 4 instruc¸˜oes a mais n˜ao d´a ao ASIP a caracter´ıstica de um processador extens´ıvel. Por esse motivo, uma nova proposta para a arquitetura do conjunto de instruc¸˜oes foi pensada. Essa arquitetura n˜ao foi imple-mentada durante o projeto pois ela apresenta algumas peculiaridades que necessitam de um certo estudo antes de realmente ser adotada. A Figura 26 mostra a arquitetura do conjunto de instruc¸˜oes sugerida.

A principal mudanc¸a diz respeito ao tamanho do campo de opcode das instruc¸˜oes que passaria a ter 7 bits, comportando um total de 128 instruc¸˜oes, um n´umero com certeza suficiente para viabilizar futuras extens˜oes. Por outro lado, mantendo o tamanho da palavra em 16 bits, o n´umero de bits dedicado aos registradores passa a ser 3 contra os 4 da arquitetura anterior. Dessa forma, o banco de registradores tem seu tamanho reduzido pela metada, pois apenas 8 registradores podem ser enderec¸ados com o novo formato das instruc¸˜oes. Para permitir uma boa alocac¸˜ao de registradores foi criada a instruc¸˜ao SWRB, que faz a troca de qual banco de registradores est´a sendo utilizado no momento. A conseq¨uˆencia imediata da adic¸˜ao dessa instruc¸˜ao ´e a necessidade de m´ultiplos bancos de registradores, acarretando dificuldades tanto no projeto do hardware quanto na construc¸˜ao do compilador.

(52)

Referências

Documentos relacionados

c.4) Não ocorrerá o cancelamento do contrato de seguro cujo prêmio tenha sido pago a vista, mediante financiamento obtido junto a instituições financeiras, no

[r]

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Reconhecimento de face utilizando banco de imagens monocromáticas e coloridas através dos métodos da análise do componente principal (PCA) e da Rede Neural Artificial (RNA)

Os candidatos reclassificados deverão cumprir os mesmos procedimentos estabelecidos nos subitens 5.1.1, 5.1.1.1, e 5.1.2 deste Edital, no período de 15 e 16 de junho de 2021,

• Capacitação e Transferência da metodologia do Sistema ISOR ® para atividades de Coaching e/ou Mentoring utilizando o método das 8 sessões;.. • Capacitação e Transferência

DEPARTAMENTO DE GENÉTICA Unidade de Citogenética Unidade de Genética Médica Unidade de Genética Molecular Unidade de Rastreio Neonatal Unidade de Investigação e

Se no cadastro da administradora, foi selecionado na aba Configurações Comissões, para que as comissões fossem geradas no momento da venda do contrato, já é