EKSMIPS: Um Simulador para o Processador MIPS

Propaganda
EKSMIPS: Um Simulador para o Processador MIPS
Elder E. Schemberger1, Kenzo Araujo2, Sidgley C. Andrade3
Departamento de Informática – Universidade Estadual de Maringá (UEM)
CEP 87020-900 – Maringá – PR – Brasil
{1elderes, 2k34z00, 3sidgley}@gmail.com
Abstract. Simulators may be used in several areas of knowledge in order to facilitate
the use of processes which depend on different nested aspects. In the context of
Computer Architecture, simulators are important tools to reinforce learning about the
behavior of real system, to predict error occurrence, and to manipulate specific details
and others. In order to study the processors, there are several simulators in the
literature, from Von Neumann’s architecture model to RISC architecture. This paper
shows a simulator which represents the functionality of MIPS R2000/R3000 (RISC),
and the execution of detailed instructions aimed at facilitating the understanding of its
functionality.
Resumo. Simuladores podem ser usados em diversas áreas do conhecimento, a fim de
facilitar o entendimento de processos que dependem de vários aspectos aninhados. No
contexto de Arquitetura de Computadores, simuladores são ferramentas importantes
para reforçar a aprendizagem sobre o comportamento de um sistema real, prever a
ocorrência de erros, manipular detalhes específicos e afins. Para o estudo de
processadores, há diversos simuladores propostos na literatura, que abordam desde o
modelo da arquitetura de Von Neumann até a arquitetura RISC. Este artigo apresenta
um simulador que representa o funcionamento do processador MIPS R2000/R3000
(RISC), tornando possível visualizar a execução de instruções de maneira detalhada
objetivando facilitar o entendimento do funcionamento das mesmas.
Palavras Chaves: Simulador, Processador, MIPS, RISC.
1. Introdução
Simuladores podem ser usados em diversas áreas do conhecimento como Física, Biologia,
Engenharias, Matemática, entre outras. No contexto de Ciência da Computação há vários
simuladores usados para auxiliar o ensino de conteúdos em disciplinas específicas, haja vista que
na maioria das vezes se trabalha com objetivos não palpáveis, como algoritmos, matemática
computacional, modelagens, e afins.
Especificamente na disciplina de Arquitetura de Computadores, o uso de simuladores é
bastante utilizado para aperfeiçoar o aprendizado acerca de processadores, fornecendo maiores
detalhes do funcionamento dos mesmos no que tange o tipo de instruções e/ou como elas são
executadas, por exemplo.
Os simuladores também propiciam um ambiente mais conveniente do que uma máquina
real. Através deles é possível verificar a existência de erros e prever a necessidade de mudanças,
podendo realizá-las com muito mais facilidade, uma vez que o projeto é construído primeiro no
simulador e não fisicamente. Deste modo é permitida a adição de novas instruções, novas
características, ou simplesmente a coleta de dados estatísticos para uma melhor análise do
funcionamento do processador [4].
Este artigo apresenta uma proposta de simulador para a arquitetura MIPS, o EKSMIPS.
MIPS é bastante utilizado para estudo da arquitetura de processadores por ser de notória
simplicidade e clareza [7]. É a arquitetura base para construção de vários simuladores, a saber:
R10k, ProcSIM, WinMIPS, MARS, WebSimple, SPIM, SimDE, entre outros. Alguns destes
simuladores serão descritos na Seção 3.
A Seção 2 apresenta a arquitetura MIPS, sua evolução e principais características. Na
Seção 3 são relacionados alguns trabalhos correlatos ao tema abordado, mostrando
características e funcionalidades de simuladores que também abordam a arquitetura MIPS. O
simulador proposto é apresentado na Seção 4, onde é detalhado suas características,
funcionamento e demais considerações sobre o projeto. A Seção 5 traz as considerações finais e
a proposição de trabalhos futuros.
2. O Processador MIPS
O MIPS nasceu nos anos 80 a partir de um trabalho realizado por John Hennessy, na
Universidade de Stanford. O trabalho tinha como objetivo explorar o padrão RISC (Reduced
Instruction Set Computing), e é ainda considerado o mais elegante neste contexto. O conceito
introduzido por Hennessy foi tão bem sucedido que em 1984 foi formada a MIPS Technologies,
Inc, a fim de comercializar os microprocessadores MIPS, que conseguem estar entre os mais
eficientes a cada geração, mesmo permanecendo entre os mais simples.
MIPS segue a arquitetura RISC com um número limitado de formatos de instrução, todas
com o mesmo tamanho. Tem 32 registradores de propósito geral que comportam palavras de 32
bits cada [7][8][9].
Há vários modelos do MIPS que serão descritos na Subseção 2.1. Neste artigo, o
processador tomado como base para o projeto do simulador foi o MIPS R2000/R3000, descrito
por Patterson e Hennessy [4].
2.1 Traço Superficial da Evolução do MIPS
Como supracitado, o projeto do MIPS foi tão bem sucedido na Universidade que se decidiu
comercializá-lo. Na segunda metade da década de 1980 o R2000 surgiu no mercado com a MIPS
Technologies, Inc.
O R3000, próximo na sucessão, se aproveitou de um processo de fabricação mais
avançado, juntamente com algumas melhorias de hardware, que combinados deram um impulso
considerável ao desempenho. Do ponto de vista do programador, o R3000 era quase
indistinguível do R2000. No início dos anos 90, já se usava o R3000 em aplicações embarcadas,
como impressoras a laser de alto desempenho e equipamentos de editoração [6].
Em 1991 chegou ao mercado o R4000, um projeto corajoso e inovador. Incluía um
conjunto de instruções de 64 bits, cache interna de 8 KB, um clock inimaginável para a época
(100 MHz), e suporte a memória compartilhada. Foi um projeto ambicioso, mas se comparado
com o R3000, precisava de mais ciclos de clock para executar uma determinada seqüência de
instruções. O R4000 tem um pipeline mais longo, o que o torna menos eficiente [8].
Outra versão do MIPS a se destacar foi o R10000, lançado no início de 1996. Foi o
primeiro a de fato implementar a execução fora de ordem. Há ainda várias outras versões do
MIPS, conforme a Tabela 1 apresenta, na forma de uma linha cronológica com algumas
características marcantes.
Tabela 1. Modelos e características da evolução do MIPS.
Modelo Freqüência (MHz) Ano Transistores (Milhões) R2000 8 – 16.67 1985 0,11 R3000
12–40 1988 0,11 R4000 100 1991 1,35 R4400 100–250
1992
2,3
R4600 100–133
1994
2,2
R4700 133 1996 ‐ R5000 150–200 1996 3.7 R8000 75–90
1994
2.6
R10000 150–250 1996 6.7 R12000 270–400 1998 6.9 R14000 500–600 2001 7.2 R16000 700–1000 2002 ‐ R24K 750+ 2003 ‐ MIPS 34K 750+ 2005 ‐ 2.2 Características
Esta subseção apresenta algumas características dos processadores MIPS, que servem de base
para a implementação do simulador proposto na Seção 4.
2.2.1 Pipeline
A arquitetura MIPS pode trabalhar com pipeline. Esta é dividida em cinco estágios, cada um
tendo uma faixa fixa de tempo, que geralmente é um ciclo de clock do processador (apesar de
que algumas ações têm somente meio clock, de modo que o pipeline MIPS de cinco estágios use
de fato 4 ciclos) [6]. A Figura 1 apresenta uma ilustração padrão dos estágios da pipeline do
MIPS:
Figura 1. Os Cinco estágios do pipeline do MIPS [6].
Cada etapa pode ser resumida conforme o que segue:
• IF: Obtém a próxima instrução a partir da cache de instrução (I-cache);
• RD: Obtém o conteúdo dos registradores;
• ALU: Realiza uma operação aritmética ou lógica em um ciclo de clock;
• MEM: É a fase em que a instrução pode ler/escrever na cache de dados (Dcache);
• WB: Armazena o valor obtido a partir de uma operação no arquivo de registro;
2.2.2 Instruções
Existem várias características/restrições no que tange as instruções da arquitetura MIPS. Uma
delas, por exemplo, é que todas as instruções têm 32 bits, ou seja, nenhuma instrução usa apenas
dois ou três bytes de memória e nenhuma instrução pode ser maior do que 4 bytes.
As instruções MIPS podem ser classificadas em quatro grupos, conforme descrito abaixo
[4][3][6]:
• R-Type: Grupo que contém todas as instruções que não requerem um valor
imediato, deslocamento de endereço de memória, ou endereço de memória para
especificar um operando. Isto inclui a aritmética e lógica, com todos os operandos
em registros, instruções de deslocamento e instruções de salto. Todas as
instruções R-Type usam opcode 000000, e têm o seguinte formato:
opcode (6) rs (5) rt (5) rd (5)
shamt (5) function (6)
Onde:
o Opcode: 000000;
o rs: Registrador com o primeiro operando fonte;
o rt: Registrador como segundo operando fonte;
o rd: registrador destino;
o shamt: campo para o deslocamento;
o function: código de função. É associado ao opcode.
• I-Type: Grupo que contem as instruções com um operando imediato. Com
exceção dos opcodes 000000, 0100xx e 00001x, todos os outros são usados por
instruções I-Type. As instruções deste grupo têm o seguinte formato (onde os
campos têm o mesmo significado listado no tópico acima):
opcode (6) rs (5) rt (5)
Imediado (16)
• J-Type: Grupo composto por duas instruções de salto direto (j e jal). Estas
instruções requerem um endereço de memória para especificar seus operandos.
Usam o opcode 00001x. Instruções deste grupo tem o seguinte formato (os
campos têm os mesmos significados listados no tópico R-Type):
opcode (6)
Alvo (26)
• Coprocessor Instructions: Todos os processadores MIPS tem dois coprocessadores padrão, CP0 e CP1. CP0 é para processos de vários tipos de
exceções. O CP1 é um processador de ponto flutuante. Todas as instruções de uso
do co-processador usam o opcode 0100xx.
Na Seção 4 onde o Simulador proposto é apresentado, serão listadas as instruções
implementadas, enquadrando-as nos respectivos grupos conforme apresentados nesta seção.
2.2.3 Endereçamento e Acesso à Memória
Sistemas baseados no processador MIPS dividem a memória em três partes, conforme ilustra a
Figura 2. Tal convenção não é imposição ou limitação do hardware, e sim uma convenção a fim
de permitir que programas e ferramentas diferentes possam trabalhar em um formato padrão
[4][8].
Figura 2: Estrutura da memória do MIPS.
A primeira parte, que inicia em 40000016 (4194304 em decimal) é o segmento de
instruções, trecho de memória onde são alocadas as instruções do programa.
A seção intermediária, iniciada em 1000000016 (268435456 em decimal) é o segmento de
dados, que por sua vez é seccionado em dois: A primeira secção contém todos os objetos cujo
tamanho é conhecido em tempo de compilação e que devem existir durante a execução do
programa (dados estáticos). Imediatamente acima desta seção ficam os dados dinâmicos, isto é,
aqueles que são alocados durante a execução do programa. Esta seção é gerenciada pelo Sistema
Operacional e pode ser expandida [4].
A terceira parte é o segmento da pilha, que reside no topo do espaço de endereçamento a
partir de 7FFFFFFF16 (2147483647 em decimal), e cresce na direção de endereços abaixo [9].
Algumas outras características podem ser destacadas, entre elas:
• A memória é byte-endereçada: Quando os dados são de um registro de
processador MIPS, todas as operações trabalham no registro inteiro, mesmo não o
ocupando todo;
• Carregar/Armazenar devem ser alinhados: Operações de memória só podem
carregar ou armazenar dados de endereços alinhados para se adequar ao tipo de
dados a ser transferido;
• Saltar instruções: O tamanho das instruções de 32 bits pode ser um problema. O
opcode menor em uma instrução MIPS é de 6 bits, deixando 26 bits para definir o
destino de um salto. Uma vez que todas as instruções são quatro bytes alinhados
na memória, os dois bits de endereço menos significativos necessariamente não
podem ser armazenados, permitindo um intervalo de endereços de 228 = 256 MB,
o que pode ser um problema, dependendo do tamanho do programa.
2.2.4 Registradores
A fim de padronizar, há uma convenção para os nomes dos registradores do MIPS. A Tabela 2
apresenta estes nomes relacionados ao número e à função do registrador [7].
Tabela 2. Relação Número/Nome/Função dos Registradores do MIPS.
Número do Registrador Nome Usado para zero
0 Sempre retorna 0 at
1 (assembly temporary) Reservado para o assembly v0,
v1
2‐3 Receber o valor retornado por subrotinas a0 – a3 (arguments) Parâmetros para subrotinas 4‐7 t0 – t7
8‐15 (temporaries) Para ser usado pelas subrotinas t8, t9
24, 25 s0 – s7 Registro de variáveis das subrotinas 16‐23 26, 27 28 29 30 31 k0, k1
gp
sp
s8/fp
ra
Reservado para ser usado por interrupções do SO (global pointer) Apontador de área global (stack pointer) (frame pointer) Registrador de endereço de retorno Conforme é possível observar na Tabela 2, existem 32 registradores, cada um deles
contendo 32 bits (para o R2000/R3000, especificamente).
Há ainda os registradores especiais, por exemplo: HI e LO. Na arquitetura MIPS a
instrução de multiplicação, por exemplo, tem seu resultado distribuído entre os registradores HI
e LO, onde os bits mais significativos do resultado são armazenados no registrador HI e os bits
menos significativos são alocados no registrador LO [3].
3. Trabalhos relacionados
Esta seção apresenta alguns trabalhos correlatos ao tema abordado, ou seja, outros simuladores
para o processador MIPS.
3.1 MARS (MIPS Assembly and Runtime Simulator)
O MARS (MIPS Assembly and Runtime Simulator) foi desenvolvido em JAVA (J2SE Runtime
Environment) com a IDE gráfica implementada usando Swing. Inicialmente foi desenvolvido
pelo professor Ph.D. Kenneth R. Vollmar (Universidade Estadual de Missouri), e teve sua
continuidade dada pelo professor Dr. Peter Sanderson (Faculdade Otterbein de Westerville). Foi
apresentado em 2005 em formato de painel, no evento Technical Symposium on Cmputer
Science Education – SIGCSE [2].
A versão atual é a 3.8, lançada em Janeiro de 2010, e apresenta algumas melhorias e
correções das versões anteriores. Está disponível para download em sua home page1, onde
também há instruções para sua configuração e execução. Tem como requisito apenas o JRE 1.4
(ou superior). A Figura 3 apresenta uma screenshot do simulador ao final da execução do
algoritmo de Fibonacci.
Figura 3. Screenshot da IDE MARS 3.8 após execução das instruções do algoritmo Fibonacci.
1
Home Page do MARS: http://courses.missouristate.edu/KenVollmar/MARS/
A IDE MARS 3.8 apresenta duas guias: Edit e Execute. Em Edit é possível editar os
comandos ou abrir um arquivo com as extensões *.asm ou *.s. Ao utilizar os comandos o
simulador carrega as instruções no segmento de texto (Text Segment), mostrando-as em decimal
ou hexadecimal e mnemônico no segmento de dados (Data Segment). Os registradores podem
ser visualizados em hexadecimal ou decimal e podem ser alterados, mesmo durante a execução
de um programa (o que ocorre na guia Execute).
Além da execução do programa todo de uma vez, é permitido a execução passo a passo.
As mensagens sobre a execução do programa e seu resultado podem ser visualizadas na parte
inferior da janela nas guias Mars Messages e Run I/O.
Além destes recursos, há outras funcionalidades extras no MARS. Algumas delas são:
• Branch History Table Simulator: Tabela que apresenta o histórico dos desvios que
ocorreram;
• Data Cache Simulation Tool: Apresenta o desempenho dos dados em cache em
forma de ilustração e simulação;
• Floating Point Representation: Representação de ponto flutuante em 32-bit IEEE
754.
• Instruction Counter: Conta o número de instruções executadas por tipo (R, I e J);
• Instruction Statistics: Estatística das instruções ALU, Jump, Branch, Memory e
Other;
• Screen Magnifer: Captura a tela de execução;
• Memory Reference Visualization: Permite visualizar as referências à memória de
forma gráfica.
3.2 ProcSim (Processor Simulator)
O simulador ProcSim (Processor Simulator) foi desenvolvido por James M. Garton para uma
dissertação de mestrado na Universidade de Leicester (Reino Unido) no ano de 2005. Foi
codificado em JAVA, e simula o Processador MIPS R2000 [5].
Ao executar o simulador é possível visualizar o datapath do processador e a dinâmica
dos dados. É possível identificar a funcionalidade de cada componente.
Para visualizar a execução das instruções de um “modo animado”, o ProcSim necessita
de um arquivo *.xml, contendo os detalhes dos componentes para a interatividade das
animações. Ao carregar o arquivo, o simulador apresenta um conjunto de diagramas, ilustrando
os caminhos de cada execução, conforme apresentado na Figura 4.
O ProcSim oferece a possibilidade de executar arquivos no formato *.asm (assembly),
*.sim (ProcSim), e *.xml. Para carregar um arquivo, o simulador mostra-se bastante intuitivo,
bastando seguir o “caminho tradicional”: File; Open Sim ou Open Assembly.
A versão atual do ProcSim é a 2.0 e está disponível para download no site do projeto2.
Está também disponível a documentação para a configuração e execução do simulador, além de
alguns exemplos implementados para análise.
As restrições existentes para o simulador ProcSim são:
• Sistema operacional Windows 95/XP/Vista/7 ou qualquer distribuição Linux;
• Processador com no mínimo de 1Ghz;
• Java (JRE) 1.5 ou superior;
E recomenda-se que a resolução da tela seja pelo menos 1024x768 ou, para uma melhor
visualização 1280x1024.
2
Home Page do ProcSim http://jamesgart.com/procsim.
Figura 4. Screenshot do simulador ProcSim após execução das instruções de um algoritmo com
algumas funções aritméticas.
3.3 R10k
O simulador R10k é baseado no funcionamento do processador MIPS R10000, e foi
implementado utilizando a linguagem Delphi em 2007 pelos acadêmicos Nelson Gonçalves Jr. e
Renata Lopes da Silva, e os professores João Angelo Martini e Ronaldo Gonçalves (DIN –
UEM3). O objetivo da implementação do simulador foi de oferecer suporte ao processo de
ensino-aprendizagem de processadores superescalares [1].
Ao executar instruções no simulador é possível acompanhar o comportamento do
processador através dos painéis que representam as entidades funcionais do processador. A
Figura 5 ilustra a execução de algumas instruções no simulador R10k, após o 7º ciclo.
Entre as funcionalidades exibidas na interface do R10k é possível destacar os seguintes
painéis:
• Memória: É representada a memória de instruções, de dados e a pilha do
processador MIPS R10000;
• Busca: Mostra a fila de instruções (instruções trazidas da memória). Possui
capacidade para armazenar até oito instruções;
• Decodificação: Apresenta as instruções que estão sendo executadas.
• Registradores Especiais: O PC (Program Counter) indica o endereço da
próxima instrução a ser buscada na memória. O SP (Stack Pointer) que indica o
endereço do topo da pilha. O HI e LO são registradores utilizados para o
armazenamento de resultados de operações de multiplicação e divisão;
• Registradores: O simulador R10k possui 64 registradores de inteiros
(identificados pela letra S). Tem também outros 64 registradores para
representar ponto flutuante (identificados T). Tal identificação fica ao lado do
número do registrador;
• Remessa: Apresenta a fila de ponto flutuante, fila de endereços e fila de inteiros;
• Execução: Apresenta a dinâmica da execução de um código carregado para a
memória;
3
Departamento de Informática – Universidade Estadual de Maringá: http://din.uem.br/
•
Instruções Finalizadas: Traz para o usuário um histórico das instruções
executadas.
Figura 5. Screenshot do simulador R10k após execução de algumas instruções.
Ao executar testes no simulador R10k pode-se notar que este é de fácil utilização e
possui uma interface intuitiva, seja criando exemplos ou utilizando os disponíveis. O R10k está
disponível para download, mas não foi possível encontrar informações dos autores sobre
requisitos mínimos tanto de hardware e/ou software.
3.4 WebSimple - MIPS
O WebSimples-MIPS é um simulador do processador MIPS que apresenta uma interface
orientada ao aprendizado e possibilidade de execução via Web, visando a execução em vários
ambientes ou plataformas. Foi implementado na linguagem JAVA a fim de se tornar
independente de Sistema Operacional [10].
O projeto iniciou-se em 2008 na PUCMinas4 pelos acadêmicos Bruno de Sousa, Matheus
Moreira, Rafael Nogueira, Rodrigo Martins e o professor Carlos da Silva Martins. A Figura 6
ilustra o simulador WebSimple – MIPS após a execução de alguma instruções (lado esquerdo da
figura) e um relatório de tais funções executadas (lado direito da figura).
Figura 6. Screenshot do simulador WebSimple-MIPS após a execução de algumas instruções (lado
esquerdo) e do relatório da execução (lado direito).
4
Pontifícia Universidade Católica de Minas Gerais: http://www.pucminas.br//
O simulador WebSimple -MIPS apresenta uma interface dividida em quatro áreas e
permite ao usuário a configuração da simulação, a visualização do fluxo de instruções, a
visualização e edição do código Assembly e o controle da simulação. É possível determinar, por
exemplo, qual o tempo do ciclo do processador e a velocidade da simulação (escolhendo a
velocidade máxima de simulação, o relatório é gerado instantaneamente).
Os controles de simulação também permitem ao usuário a escolha entre simulação
automática ou passo a passo. Através do simulador, a partir do tempo de execução e da carga de
trabalho no processador com pipeline e no processador monociclo, pode ser calculado o speedup.
O simulador WebSimple-MIPS apresenta também, através do speedup, as vantagens de
se explorar o paralelismo fazendo uso de pipeline. Informações como essas que são apresentadas
no relatório permitem a uma análise detalhada do comportamento da técnica pipeline em
situações que ocorrem dependência de dados, por exemplo.
Este simulador está disponível no site do projeto5 tanto para download quanto para ser
executado através de um browser. Como requisito é necessário apenas uma máquina virtual
JAVA (para executar o aplicativo) ou o plugin equivalente para o navegador.
4. Simulador Proposto
Esta seção apresentada a proposta de um simulador para o processador MIPS: o EKSMIPS
R2000/R3000.
O propósito do simulador EKSMIPS é possibilitar a visualização da execução de algumas
instruções do processador MIPS, com direcionamento didático, a fim de facilitar o entendimento
do funcionamento do mesmo. As instruções implementadas e demais detalhes de funcionamento
do simulador são descritos nas subseções a seguir.
4.1 Características do Simulador Proposto
A linguagem de programação escolhida para implementar o simulador EKSMIPS foi Delphi.
Para melhor visualizar o conjunto de instruções e funcionalidades implementadas no
simulador há uma seção de ajuda, acessada facilmente pela interface, a fim de orientar os
alunos/usuários quanto aos detalhes das instruções, correlacionando-as com o funcionamento da
arquitetura MIPS.
A interface gráfica implementada, mostrada na Figura 7, apresenta em uma única tela
todos os campos para visualização do usuário, para que o processo de simulação possa ser
acompanhado por completo.
5
Projeto WebSimple-MIPS: http://201.17.130.17/matheus/simple/
Figura 7. Screenshot do simulador proposto com algumas instruções sendo executadas.
4.2 Funcionamento do Simulador Proposto
Para iniciar uma simulação no EKSMIPS deve-se importar um arquivo com extensão *.asm ou
*.txt contendo as instruções. É possível também adicionar direto pela interface as instruções com
os devidos parâmetros em termos de registradores e/ou valores.
Para inserir uma instrução, o EKSMIPS ajuda o usuário no sentido de listar todas
contempladas, para que não ocorra o constrangimento de ser adicionada uma instrução com
sintaxe incorreta ou que não esteja implementada pelo simulador. Como o propósito do
simulador é de auxílio didático, isso é de fundamental importância.
Se o usuário digitar um caractere inválido ao referenciar um registrador por exemplo, o
EKSMIPS informará ao usuário que tal instrução não pôde ser decodificada, indicando o local
do erro.
Depois de inseridas as instruções, o simulador possibilita a execução das mesmas passo a
passo ou de maneira automática, a fim de acompanhar o comportamento dos registradores,
memória, etc. A execução automática realiza ciclos de 200 milissegundos na configuração
padrão, tempo que pode ser editado pelo usuário.
Para facilitar a dinâmica das partes que compõem o processador, o simulador mostra a
visualização e a identificação dos tipos de instrução e como eles são decodificados,
desmembrando as instruções conforme a especificação do MIPS requer. Os opcodes e functions
são exibidos em hexadecimal. Para os registradores sempre é exibido o nome de cada um. Os
valores contidos nos registradores não são editáveis. Caso seja necessário realizar alguma
edição, esta deve ser feita através das instruções.
Ao encerrar a execução das instruções carregadas e/ou inseridas, é exibido na parte
inferior da interface gráfica o número de ciclos de instruções executadas e o conteúdo da
memória em ASCII.É possível também exportar as instruções inseridas (arquivo *.asm).
Outros detalhes do funcionamento do EKSMIPS são descritos no arquivo de ajuda.
4.3 Considerações sobre o projeto
Esta seção relaciona o funcionamento do simulador proposto com as convenções utilizadas pelo
processador MIPS.
4.3.1 Memória
A Subseção 2.2.3 abordou o funcionamento da memória em sistemas que se baseiam no
processador MIPS. O EKSMIPS foi implementado de acordo com tais convenções descritas
nesta subseção.
Com relação às características do simulador proposto, os endereços são mostrados em
hexadecimal a fim de familiarizar o aluno/usuário com esta notação. Já os dados são exibidos em
formato decimal.
Como o espaço de endereçamento é bastante grande para ser apresentado por inteiro, este
foi restringido, no entanto sem desrespeitar a convenção utilizada. Na interface são exibidos
desde 1000000016 até 100003AC16.
Outra característica do EKSMIPS é a apresentação do segmento de pilha separado do
segmento de memória, a fim de facilitar a localização dos endereçamentos entre os segmentos de
pilha e de dados.
4.3.2 Instruções
Foram implementadas 25 instruções para o EKSMIPS. As instruções implementadas podem ser
visualizadas na Tabela 3, separadas pelo tipo de cada (que foi descrito na Subseção 2.2.2). O
arquivo de ajuda detalha o funcionamento destas instruções de maneira individual.
Grupo
R-Type
I-Type
J-Type
Tabela 3. Operações implementadas pelo EKSMIPS.
Instruções Implementadas
ADD
ADDU
DIV
MULT
SUB
SUBU
AND
OR
XOR
SLT
SLTU
JR
ADDI
ADDIU
SW
LW
XORI
SLTI
SLTIU
BEQ
J
NOP
NOR
ORI
BNE
4.3.3 Overflow aritmético
O EKSMIPS faz o tratamento de overflow em algumas instruções aritméticas onde o MIPS
também realiza. Em valores que ultrapassam os 32 bits, o EKSMIPS apresenta uma mensagem
de erro. As instruções que podem gerar esse tipo de exceção são: ADD, SUB, MULT, DIV, SUBU,
OR, XOR, XORI e ORI.
As operações que executam cálculos verificam o overflow ao somar dois valores que o
resultado seja maior do que 32 bits. As operações lógicas tratam o overflow quando o valor deve
ser convertido para binário e também ultrapassa os 32 bits.
4.3.4 Posição inválida de memória
No processador MIPS, as palavras começam em endereços que sejam múltiplos de quatro. Esta
necessidade é chamada restrição de alinhamento, presente em muitas arquiteturas [4]
O simulador proposto faz o tratamento de referência inválida à memória, nas
instruções SW e LW que trazem endereços que não se encaixam no tamanho da palavra
manipulada pelo MIPS. Caso isso venha a ocorrer, é exibida uma mensagem ao usuário.
4.4 Testes de execução
Esta subseção apresenta alguns programas para testar a execução do EKSMIPS. Como
supracitado, para executá-los basta inserir as instruções manualmente via interface ou importar o
arquivo. A Tabela 4 está subdivida em 6 partes, contendo pequenos trechos de código que
podem ser usados como testes iniciais do simulador..
Tabela 4. Códigos para teste de execução do EKSMIPS.
(a) Contador (b) Violação do Segmento de Dados. ADDI $t1 $t1 10
ADDI $t8 $t0 0x10000001
ADDI $t9 $t8 1
ADDI $t2 $t0 65
ADD $t8 $t9 $t8
SW $t2 4($t8)
BEQ $t8 $t1 0
LW $t1 4($t8)
J 0x00400008
NOP
ADDI $t2 $t0 0x10000000
SW $t8 4($t2)
NOP
(c) Jump. ADDI $t8 $t2 10
ADD $t9 $t9 $t8
ADDI $t7 $t2 1
BEQ $t7 $t7 1
J 0x00400004
ADD $t9 $t9 $t8
NOP
(d) DIV. ADDI $t8 $t2 10
ADDI $t9 $t2 3
ADD $t7 $t8 $t9
DIV $t7 $t9
NOP
(e) XORI. ADDI $t9 $0 7
XORI $t2 $t9 1
NOP
(f) AND. ADDI $t8 $t2 3
ADDI $t9 $t2 1
AND $t2 $t9 $t8
NOP
Os códigos-testes exibidos na Tabela 4 servem de exemplos básicos de algumas das instruções
implementadas pelo EKSMIPS. O Código (a) executa um contador. O Código (b) demonstra um
conjunto de instruções que geram uma violação do segmento de dados. Este exemplo é
interessante de ser executado no simulador proposto para poder visualizar o tratamento que é
feito quando ocorre alguma infração. Em (c) e descrito um código que executa um salto. O
Código (d) apresenta um código que realiza uma divisão. Na parte (e) da tabela é exibido a
sintaxe e parâmetros da instrução XORI. E, finalmente em (f), um exemplo da instrução AND.
4.5 EKSMIPS e outros simuladores
Na Seção 3 foram detalhados quatro trabalhos referentes ao contexto deste: MARS, ProcSim,
R10k e WebSimple-MIPS.
O objetivo desta subseção é traçar um comparativo, em formato de tabela, das principais
características do simulador EKSMIPS com tais trabalhos relacionados. A Tabela 5 apresenta
esta comparação, onde as funcionalidades existentes são identificadas por um X.
Tabela 5. Traço comparativo entre o simulador proposto (em destaque) e outros relativos.
Simuladores
WebSimple EKSMIPS
MARS
ProcSim
R10k
Funcionalidades
Código assembly A partir de arquivo X X X X X Permite edição X X X X Criação do código Direta / Total X X X X X X X X X Passo‐a‐passo X X X X X Tratamento de overflow aritmético X X Permite edição dos registradores diretamente X X X X Hexadecimal X Binário X X X X X X X X Análise Léxica Execução Exibição de dados Decimal Área de mensagem X X X X Através da tabela comparativa é possível perceber que as funcionalidades básicas de um
simulador para a arquitetura MIPS são comuns entre os trabalhos relacionados, e que o
EKSMIPS não deixa a desejar em nenhuma delas.
Entretanto, cada simulador possui características particulares já destacadas quando da
descrição dos mesmos nas Seções 3 e 4. Tais aspectos podem ser diferenciais no momento da
escolha de um simulador no auxílio da aprendizagem.
5 Conclusões e Trabalhos Futuros
Trabalhar com simuladores é de notória relevância no contexto de ensino/aprendizagem,
predição de erros e afins.
Através do estudo de trabalhos relacionados e da implementação do EKSMIPS foi
possível observar que acompanhando a execução das instruções, o usuário pode visualizar toda a
dinâmica existente em um processador MIPS, facilitando o entendimento do mesmo. O propósito
do simulador proposto esteve neste contexto, e foi atingido.
Em todo tempo preocupou-se com o foco didático do simulador, do funcionamento à
exibição das informações na interface.
O tratamento e o que motivou erros também foi considerado, e tal informação é sempre
apresentada como uma mensagem, para que force a interrupção da execução das instruções e
informe ao usuário, visando a aprendizagem do mesmo. Para facilitar o uso do simulador há um
arquivo de ajuda com a descrição das instruções e exemplos, que também está disponível via
Web.
Como trabalhos futuros, sugere-se que sejam implementadas as demais instruções não
contempladas no EKSMIPS. Ao trabalhar neste projeto, também foi possível abstrair a
relevância de um aplicativo que, tendo como entrada um código em uma linguagem de alto nível
(C, por exemplo), converta-o para as instruções do MIPS. Pode-se também implementar outra
versão do EKSMIPS que trabalhe com pipeline, a fim de demonstrar o paralelismo que este tipo
de arquitetura proporciona.
Referências Bibliográficas
[1] JUNIOR, N. G.; SILVA, R. L.; GONÇALVES, R. L.; MARTINI, J. A. R10k: Um
Simulador de Arquitetura Superescalar. In: Workshop sobre Educação em Arquitetura de
Computadores – WEAC, 2007.
[2] MARS. MARS – Mips Assembly and Runtime Simulator. Disponível em:
<http://courses.missouristate.edu/KenVollmar/MARS>. Acessado em 14/06/2010.
[3] MIPS Technologies. MIPS32® Architecture For Programmers. Vol. II: The MIPS32®
Instruction Set, 2008.
[4] PATTERSON, D.; HENNESSY, J. Organização e Projeto de Computadores – A
Interface Hardware/Software, 3ª ed., Campus, 2005.
[5] ProcSIM. A Visual MIPS R2000 Processor Simulator – Freeware. Disponível em:
<http://jamesgart.com/procsim>. Acessado em 11/06/2010.
[6] STALLINGS, W. Computer Organization and Architecture: designing for performance.
4. ed., Prentice-Hall, 1996.
[7] SWEETMAN, D. See MIPS Run, 2ª ed., Morgan Kaufmann, 2006.
[8] TANEMBAUM, A. Organização Estruturada de Computadores. 5ª ed., Prentice-Hall,
2007.
[9] VOLLMAR, K.; SANDERSON, P. A MIPS Assembly Language Simulator Designed for
Education. In: Journal of Circuits, Systems and Computers (JCSC), 2005. pp. 95-101.
[10]
WebSimple.
S|I|M|P|L|E
Simulador
de
Pipeline.
<http://201.17.130.17/matheus/simple>. Acessado em 16/06/2010.
Disponível
em:
Download