PROJETO E IMPLEMENTAÇÃO DE PROCESSADORES RISC EM VHDL 

REDIESS, Fabiane Konrad1; GÜNTZEL, José Luís1.

1Grupo de Arquiteturas e Circuitos Integrados – GACI
Departamento de Informática – DInfo
Instituto de Física e Matemática – IFM/UFPel
Campus Universitário – Caixa Postal 354 – CEP 96010-900. frediess_ifm@ufpel.edu.br

1.	INTRODUÇÃO

O objetivo deste trabalho é o desenvolvimento de arquiteturas de microprocessadores de Conjunto Reduzido de Instruções [5, 6, 7], (RISC – Reduced Instruction Set Computer) adaptados para aplicações específicas de multimídia. Como uma primeira etapa, foram desenvolvidas e avaliadas duas versões de processador RISC, inspiradas no microprocessador MIPS [8], referência na área. 
Este artigo apresenta uma comparação entre estas duas versões de processadores RISC. Esta comparação se baseou nos resultados obtidos em simulações realizadas com a ferramenta Quartus II da empresa Altera[1], a partir das descrições em linguagem VHDL [2, 3, 9] desenvolvidas e sintetizadas para componentes programáveis tipo FPGA [1, 3, 4] da empresa Altera.

2.	MATERIAL E MÉTODOS

Para o desenvolvimento deste trabalho foram escolhidas duas versões (organizações) do processador MIPS, ambas implementando o mesmo sub-conjunto de instruções: uma versão monociclo, onde cada instrução gasta um ciclo de relógio (clock) para ser executada, e uma versão pipeline, na qual até cinco instruções diferentes podem ser executadas simultaneamente. 
A Figura 1 mostra um fluxo de desenvolvimento típico para projetos de sistemas digitais complexos, o qual foi adotado no presente trabalho. Este fluxo baseia-se no uso de componentes programáveis do tipo FPGAs para a implementação material do sistema projetado. Para o presente trabalho, utilizou-se a ferramenta Quartus II, provida gratuitamente pela empresa Altera, uma das duas maiores fabricantes de FPGAs (Field Programming Gate Arrays) do mundo. Primeiramente, foram desenvolvidas as descrições da estrutura e do funcionamento do processador em linguagem VHDL. A seguir, o conjunto de descrições VHDL foi compilado para o dispositivo FPGA EP1S10F484C5 da família Stratix I. Após, foram realizadas simulações para a validação das arquiteturas descritas. Cada componente dos processadores foi descrito, sintetizado e testado individualmente. Após a validação individual dos componentes, estes foram reunidos para a formação da arquitetura completa dos microprocessadores. 

3. 	RESULTADOS E DISCUSSÃO

Para ambas versões desenvolvidas, o registrador de programa (PC) é responsável por indicar o endereço da memória de instruções no qual está armazenada a instrução que deverá ser executada pelo processador. 
A Figura 2 mostra os componentes e o bloco operativo necessários para a implementação da primeira versão do processador. Esta versão do processador gasta somente um ciclo de relógio para buscar a instrução na memória de instruções (i.e., fazer a leitura da instrução cujo endereço está no PC) e realizar todos os demais passos necessários para sua execução. A próxima instrução será executada no próximo ciclo de relógio. Assim, esta versão executa exatamente uma instrução por ciclo de relógio, sendo por isso denominada “versão monociclo”.

Figura 1: Fluxo do projeto
A desvantagem dessa implementação está na necessidade de que o período de relógio deverá permitir que a instrução mais lenta execute completamente. Como o período do relógio precisa ser constante, instruções mais rápidas terminam sua execução bem antes do próximo relógio, o que acaba deixando o processador ocioso durante algum tempo. 

Figura 2: Bloco operativo monociclo
A Figura 3 mostra os componentes que foram necessários para a construção do bloco operativo da segunda versão. Nessa implementação, a execução da instrução é dividida em 5 etapas, referenciadas por “estágios”: busca da instrução, decodificação da instrução, execução, acesso à memória e escrita nos registradores. A busca da instrução ocorre da mesma forma que na versão monociclo. A diferença está na forma como a instrução é executada, a partir desse ponto. Por exemplo, em um ciclo de relógio i o processador faz a busca da primeira instrução. No ciclo seguinte, i+1, a primeira instrução passa a ser decodificada no segundo estágio. Ao mesmo tempo, uma nova instrução é buscada na memória de instruções. Num terceiro ciclo de relógio, i+2, a primeira instrução estará no estágio de execução, a segunda estará sendo decodificada e uma nova instrução estará sendo buscada na memória. E assim sucessivamente.

Figura 3: Bloco operativo pipeline
Esse processo de divisão da instrução em etapas permite que cada estágio seja realizado num tempo mínimo, o qual será o período de relógio desta segunda versão. A principal vantagem dessa implementação é que podem ser executadas até 5 instruções ao mesmo, uma em cada estágio, o que resulta em uma média de instruções por ciclo de relógio (CPI) de aproximadamente 1. Esta versão é denominada “pipeline”, em função da similaridade com uma linha de produção.
Entretanto, é preciso considerar que ocorrerá um aumento no uso de recursos e na complexidade geral do projeto, devido à inclusão de novos componentes para controle do fluxo de execução, como os registradores entre os estágios (registradores de pipeline) e unidades de previsão de conflitos e de adiantamento de dados. Um exemplo típico da necessidade de adiantamento de dados é o caso de uma instrução precisar utilizar um dado que deveria ter sido calculado pela instrução anterior. A unidade de adiantamento deverá perceber esse conflito e disponibilizar o dado para a nova instrução antes mesmo deste dado ser escrito no registrador-destino.
A Tabela 1 apresenta resultados preliminares do projeto, gerados pela ferramenta Quartus II. Podemos verificar que a implementação pipeline, apesar de usar 30 elementos lógicos a mais que a monociclo, apresenta uma redução no período de relógio.

	Monociclo	Pipeline	
Elementos Lógicos	90	120	
Bits de memória	2.048	2.048	
Período do relógio	75,6 ns	42,37 ns	
Tabela 1: Resultados de síntese
A Tabela 2 apresenta a comparação entre o tempo de execução de seqüências de 3, 10 e 20 instruções “load word” que não apresentem conflitos de dados. É importante notar que para 3 instruções não há ganho no pipeline, o que é devido ao tempo de latência, ou seja, a primeira instrução precisa passar pelos cinco estágios, gastando 5 ciclos de relógio para ser concluída. Após esse tempo, a cada ciclo uma nova instrução será concluída. Conforme aumentamos a quantidade de instruções executadas, o ganho aumenta significativamente. 

Nº de instruções executadas	Tempo de execução	Ganho	
	Monociclo	Pipeline		
3	226,8 ns	296,59 ns	0,76	
10	756 ns	593,18 ns	1,27	
20	1512 ns	1016,88 ns	1,48	
Tabela 2: Tempo de execução para seqüências de instruções “load word”.

4. CONCLUSÕES

A meta do trabalho realizado foi implementar em VHDL e comparar as arquiteturas de microprocessadores RISC monociclo e pipeline, voltadas para FPGAs da Altera. Com isso, concluímos que o processador monociclo leva pequena vantagem no que diz respeito ao uso de elementos lógicos, perdendo, no entanto, em velocidade de execução, pois apresentou período de relógio superior ao pipeline. O impacto desta diferença na velocidade de execução é maior na medida em que o número de instruções a serem executadas é maior.
Este trabalho também oferecerá subsídios para posteriores implementações dos microprocessadores em projetos maiores, pois com as informações aqui obtidas o projetista poderá optar pela versão que melhor atender às necessidades do seu projeto.
Como o objetivo do trabalho como um todo é o desenvolvimento de arquiteturas de microprocessadores para aplicações multimídia, e estas aplicações exigem cada vez mais velocidade para maior interatividade com o usuário, a arquitetura mais adequada é a pipeline. 

5.REFERÊNCIAS BIBLIOGRÁFICAS

[1] ALTERA Corporation, “Altera: The Programmable Solutions Company”. Disponível em: http://www.altera.com. Acesso em: 26 ago 2005.
[2] ASHENDEN, Peter J. The Student’s Guide to VHDL. San Francisco: Morgan Kaufmann, 1998. 312p.
[3] BROWN, Stephen; VRANESIC, Zvonko. Fundamentals of Digital Logic with VHDL design. 2.ed. New York: McGrawHill, 2005. 939p.
[4] CARRO, Luigi. Projeto e Prototipação de Sistemas Digitais. Porto
Alegre: Editora da Universidade (UFRGS), 2001.
[5] HENNESSY, John L.; JOUPPI, Norman P.; PRZYBYLSKI, Steven; ROWEN, Christopher; GROSS, Thomas. Design of a High Performance VLSI Processor. In: Caltech VLSI Conference, 3, 1983, Springer-Verlag. Proceedings... Stanford: Stanford University, 1983, p. 33 - 54.
[6] JUNQUEIRA, Alexandre A. Projeto de um Microprocessador RISC. Porto Alegre: CPGCC da UFRGS, 1993. Dissertação de Mestrado.
[7] KATAVENIS, Manolis G. H. Reduced Instruction Set Computer Architectures for VLSI. 1983. 215f. Ph. D. – University of California, Berkeley, 1983.
[8] PATTERSON, David A.; HENNESSY, John L. Organização e projeto de computadores: a interface hardware/software. 2.ed. Rio de Janeiro: LTC – Livros Técnicos e Científicos Editora S.A., 2000. 551 p.
[9] PEDRONI, Volnei A. Circuits Design with VHDL. Cambridge, London: MIT Press, 2004. 363p.