Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste....

102
Melhoramentos ao Simulador de Exactidão de Ciclo para a Arquitectura FireWorks/SideWorks João Carlos dos Santos Ferreira Dissertação para obtenção do Grau de Mestre em Engenharia Electrotécnica e de Computadores Orientador: Prof. Dr. José João Henriques Teixeira de Sousa Júri Presidente: Prof. Dr. João Manuel Torres Caldinhas Simões Vaz Orientador: Prof. Dr. José João Henriques Teixeira de Sousa Vogais: Prof. Dr. João Manuel Paiva Cardoso Prof. Dr. Nuno Filipe Valentim Roma Abril 2014

Transcript of Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste....

Page 1: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

Melhoramentos ao Simulador de Exactidão de Ciclo para

a Arquitectura FireWorks/SideWorks

João Carlos dos Santos Ferreira

Dissertação para obtenção do Grau de Mestre em

Engenharia Electrotécnica e de Computadores

Orientador: Prof. Dr. José João Henriques Teixeira de Sousa

Júri

Presidente: Prof. Dr. João Manuel Torres Caldinhas Simões Vaz Orientador: Prof. Dr. José João Henriques Teixeira de Sousa

Vogais: Prof. Dr. João Manuel Paiva Cardoso Prof. Dr. Nuno Filipe Valentim Roma

Abril 2014

Page 2: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador
Page 3: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

i

Resumo

O trabalho realizado no âmbito desta tese consistiu no melhoramento de um simulador de ciclo

exacto para o processador FireWorks, anteriormente desenvolvido pelo autor desta tese, com o

objectivo de o dotar com capacidades de depuração e análise de desempenho. O simulador foi

implementado em Java.

Em modo simulador, opera ao nível das instruções assembly, é de ciclo exacto, e obedece a uma

arquitectura modular, permitindo a utilização de módulos de processadores e de periféricos

desenvolvidos posteriormente. O simulador suporta o carregamento do software em formato

Executable and Linking Format (ELF) e a configuração do sistema a simular através de ficheiros

Extensible Markup Language (XML).

Em modo depurador/servidor GNU Debugger (GDB), suporta o protocolo GDB Remote Serial

Protocol (GDB RSP) e opera como um servidor GDB.

Em modo analisador de desempenho, produz relatórios de desempenho em termos de instruções

e em termos de funções do software simulado.

Para aferir o correcto funcionamento e o desempenho do simulador desenvolvido, foram

efectuadas simulações de vários programas de teste.

Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador GNU

Debugger (GDB), Analisador de desempenho.

Page 4: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

ii

Abstract

The work realised in the scope of this thesis consisted in the improvement of a cycle accurate

simulator for the Fireworks processor, previously developed by the author of this thesis, with the

objective of emphasizing the debugging capabilities and performance analysis. The simulator was

implemented in Java.

In simulator mode it operates in assembly instruction mode and is cycle accurate, obeying a

modular architecture, permitting the usage of processor and peripheral modules previously developed.

The simulator supports the software loading in Executable and Linking Format (ELF) format and the

configuration of the system to simulate through Extensible Markup Language (XML) files.

In debugger/GNU Debugger (GDB) server mode, the protocol GDB Remote Serial Protocol (GDB

RSP) is supported and operates as a GDB server.

In performance analyser mode, it produces performance reports in terms of instructions and in

terms of function of the simulated software.

To assess the correct operation and performance of the developed simulator, various test

programs simulations were made.

Keywords: Microprocessors, Executable and Linking Format (ELF), Simulator, Debugger GNU

Debugger (GDB), Performance analyser.

Page 5: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

iii

Índice

RESUMO.................................................................................................................................................. I

ABSTRACT............................................................................................................................................. II

ÍNDICE ................................................................................................................................................... III

LISTA DE TABELAS ............................................................................................................................. VI

LISTA DE FIGURAS ............................................................................................................................. VII

LISTA DE ABREVIATURAS ................................................................................................................. IX

1 INTRODUÇÃO ................................................................................................................................. 1

1.1 MOTIVAÇÃO ............................................................................................................................ 1

1.2 CONTEXTO .............................................................................................................................. 2

1.3 OBJECTIVOS ........................................................................................................................... 2

1.4 APLICAÇÕES ........................................................................................................................... 3

1.5 ORGANIZAÇÃO DA DISSERTAÇÃO ............................................................................................. 3

2 SISTEMAS BASEADOS NO PROCESSADOR FIREWORKS ...................................................... 5

2.1 PROCESSADOR FIREWORKS .................................................................................................... 5

2.1.1 Instruções ...................................................................................................................... 7

2.1.2 Registos ......................................................................................................................... 7

2.1.3 Pipeline .......................................................................................................................... 9

2.1.3.1 Instruções de Salto sem Delay Slot......................................................................................... 9

2.1.3.2 Instruções de Salto com Delay Slot........................................................................................10

2.1.3.3 Instruções de Acesso à Memória ...........................................................................................11

2.1.4 Arquitectura da Memória ............................................................................................. 12

2.1.5 Reset, Excepções e Interrupções ................................................................................ 12

2.1.5.1 Reset ......................................................................................................................................13

2.1.5.2 Excepções de Hardware ........................................................................................................13

2.1.5.3 Interrupções ...........................................................................................................................15

2.1.5.4 Excepções de Software ..........................................................................................................16

2.2 MEMÓRIA E PERIFÉRICOS ...................................................................................................... 16

2.2.1 Barramentos ................................................................................................................ 16

2.2.2 Memória ....................................................................................................................... 16

2.2.3 Periféricos .................................................................................................................... 17

2.2.4 Acesso a Dados e a Instruções ................................................................................... 18

2.2.5 Mapeamento ................................................................................................................ 19

2.3 AMBIENTES E FERRAMENTAS DE SIMULAÇÃO E DEPURAÇÃO .................................................... 20

2.4 DOCUMENTAÇÃO ................................................................................................................... 21

Page 6: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

iv

3 SIMULADOR ................................................................................................................................. 23

3.1 PORQUÊ SIMULAR? ............................................................................................................... 23

3.2 DESCRIÇÃO DO SIMULADOR ................................................................................................... 24

3.3 ARQUITECTURA DO SIMULADOR ............................................................................................. 24

3.3.1 Configuração................................................................................................................ 25

3.3.2 Motor de Simulação ..................................................................................................... 27

3.3.3 Memória ....................................................................................................................... 28

3.3.4 Processador ................................................................................................................. 29

3.3.5 Periféricos .................................................................................................................... 30

4 MELHORAMENTOS ..................................................................................................................... 33

4.1 MODO ANALISADOR DE DESEMPENHO .................................................................................... 33

4.1.1 Motivação? ................................................................................................................... 33

4.1.2 Descrição do Modo Analisador de Desempenho ........................................................ 34

4.1.3 Arquitectura do Modo Analisador de Desempenho ..................................................... 35

4.2 MODO DEPURADOR/SERVIDOR GDB ...................................................................................... 36

4.2.1 Motivação? ................................................................................................................... 36

4.2.2 Descrição do Modo Depurador/Servidor GDB ............................................................ 36

4.2.3 Arquitectura do Modo Depurador/Servidor GDB ......................................................... 38

5 TESTES EXPERIMENTAIS .......................................................................................................... 43

5.1 TESTES DE AFERIÇÃO DO SIMULADOR .................................................................................... 43

5.1.1 Descrição dos Testes .................................................................................................. 43

5.1.2 Resultados dos Testes no Sistema Real ..................................................................... 46

5.1.3 Resultados dos Testes no Simulador .......................................................................... 46

5.2 TESTES MODO SIMULADOR .................................................................................................... 47

5.2.1 Descrição dos Testes .................................................................................................. 47

5.2.2 Resultados dos Testes em Modo Simulador ............................................................... 48

5.2.3 Resultados dos Testes Funcionais do Processador ................................................... 49

5.3 TESTES MODO ANALISADOR DE DESEMPENHO ....................................................................... 49

5.3.1 Descrição dos Testes .................................................................................................. 49

5.3.2 Resultados dos Testes em Modo Analisador de Desempenho .................................. 49

5.4 TESTES MODO DEPURADOR/SERVIDOR GDB ......................................................................... 50

5.4.1 Descrição dos Testes .................................................................................................. 50

5.4.2 Resultados dos Testes em Modo Depurador/Servidor GDB ....................................... 51

6 CONCLUSÕES E TRABALHO FUTURO ..................................................................................... 55

6.1 CONCLUSÕES ....................................................................................................................... 55

6.2 TRABALHO FUTURO ............................................................................................................... 56

Page 7: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

v

APÊNDICES ......................................................................................................................................... 59

A. ESTRUTURA DO CD .................................................................................................................... 61

B. GUIA DE INSTALAÇÃO E REMOÇÃO DO SIMULADOR ....................................................................... 62

B.1 Modo de disponibilização do simulador ............................................................................. 62

B.2 Sistemas operativos suportados ........................................................................................ 62

B.3 Pré-requisitos ..................................................................................................................... 62

B.4 Sistemas operativos Microsoft Windows ............................................................................ 63

B.5 Sistemas operativos GNU/Linux ........................................................................................ 64

B.6 Testes ao simulador no âmbito da tese ............................................................................. 64

C. GUIA DE UTILIZAÇÃO DO SIMULADOR ........................................................................................... 65

C.1 Modos de Operação ........................................................................................................... 65

C.2 Manual de Utilização .......................................................................................................... 66

C.3 Ligação com a Ferramenta mb-gdb ................................................................................... 67

D. FORMATO DOS FICHEIROS DE CONFIGURAÇÃO DO SISTEMA ......................................................... 71

E. FORMATO DOS FICHEIROS DE CONFIGURAÇÃO DOS MÓDULOS ..................................................... 75

F. RELATÓRIO DA ANÁLISE DE DESEMPENHO DA SEQUÊNCIA DE FIBONACCI ...................................... 79

G. PROTOCOLO GDB REMOTE SERIAL PROTOCOL .......................................................................... 85

H. RELATÓRIO DA COMUNICAÇÃO DO MODO DEPURADOR/SERVIDOR GDB ....................................... 87

Page 8: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

vi

Lista de Tabelas

Tabela 1. Mercado global dos sistemas embebidos em milhões de dólares, fonte BCC Inc. [1] ........... 1

Tabela 2. Convenção do modo de utilização dos registos ..................................................................... 8

Tabela 3. Vectores e registo que contém o endereço de retorno ........................................................ 13

Tabela 4. Modos de acesso para leitura de dados através dos barramentos ...................................... 18

Tabela 5. Modos de acesso para escrita de dados através dos barramentos ..................................... 19

Tabela 6. Estados do sistema ............................................................................................................... 28

Tabela 7. Estados da memória ............................................................................................................. 28

Tabela 8. Estados do processador ....................................................................................................... 29

Tabela 9. Instruções especiais do processador.................................................................................... 30

Tabela 10. Pacotes para manipulação de registos ............................................................................... 38

Tabela 11. Pacotes para manipulação da memória ............................................................................. 39

Tabela 12. Pacotes de informação do estado do sistema .................................................................... 39

Tabela 13. Pacotes de controlo do software......................................................................................... 39

Tabela 14. Extensão dos estados do sistema ...................................................................................... 41

Tabela 15. Extensão das instruções do processador ........................................................................... 42

Tabela 16. Nome dos executáveis dos algoritmos com relógio ........................................................... 45

Tabela 17. Tamanho dos executáveis dos algoritmos com relógio ...................................................... 45

Tabela 18. Nome dos executáveis do Dhrystone Benchmark .............................................................. 45

Tabela 19. Tamanho dos executáveis do Dhrystone Benchmark ........................................................ 45

Tabela 20. Número de ciclos obtidos nos testes dos algoritmos com relógio no sistema real ............ 46

Tabela 21. Dhrystones por segundo obtidos nos testes do Dhrystone Benchmark no sistema real ... 46

Tabela 22. Número de ciclos obtidos nos testes dos algoritmos com relógio no simulador ................ 46

Tabela 23. Dhrystones por segundo obtidos nos testes do Dhrystone Benchmark no simulador ....... 47

Tabela 24. Nome dos executáveis dos algoritmos sem relógio ........................................................... 47

Tabela 25. Tamanho dos executáveis dos algoritmos sem relógio ...................................................... 48

Tabela 26. Nome dos executáveis dos testes funcionais do processador ........................................... 48

Tabela 27. Resultados dos testes dos algoritmos sem relógio no simulador ....................................... 48

Tabela 28. Nome dos executáveis sem informação de depuração ...................................................... 51

Tabela 29. Tamanho dos executáveis sem informação de depuração ................................................ 51

Tabela 30. Nome dos executáveis com informação de depuração ...................................................... 51

Tabela 31. Tamanho dos executáveis com informação de depuração ................................................ 51

Tabela 32. Comandos de implementação obrigatória substituídos ...................................................... 52

Tabela 33. Comandos sem resposta imediata ..................................................................................... 86

Page 9: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

vii

Lista de Figuras

Figura 1. Diagrama de blocos de um sistema baseado no processador FireWorks [6] ......................... 6

Figura 2. Formato das instruções do Tipo A ........................................................................................... 7

Figura 3. Formato das instruções do Tipo B ........................................................................................... 7

Figura 4. Comportamento de instruções de salto sem delay slot no pipeline ...................................... 10

Figura 5. Comportamento de uma instrução de salto com delay slot no pipeline, seguida de uma

instrução com um ciclo de relógio de latência no andar Execute (EX) .......................................... 10

Figura 6. Comportamento de uma instrução de salto com delay slot no pipeline, seguida de uma

instrução com três ciclos de relógio de latência no andar Execute (EX) ....................................... 11

Figura 7. Comportamento de instruções de acesso à memória no pipeline ........................................ 12

Figura 8. Mapeamento típico de um sistema baseado no processador FireWorks ............................. 20

Figura 9. Configuração do simulador .................................................................................................... 26

Figura 10. Motor de simulação do simulador ........................................................................................ 27

Figura 11. Processamento de um ciclo de um periférico ...................................................................... 31

Figura 12. Motor de simulação do modo analisador de desempenho .................................................. 35

Figura 13. Interligação entre o hardware e as ferramentas XMD e mb-gdb ........................................ 37

Figura 14. Interligação entre o simulador e a ferramenta mb-gdb........................................................ 38

Figura 15. Configuração do modo depurador/servidor GDB ................................................................ 40

Figura 16. Motor de simulação do modo depurador/servidor GDB ...................................................... 41

Figura 17. Excerto do relatório da análise de desempenho do programa número de Fibonacci ......... 50

Figura 18. Estrutura do CD ................................................................................................................... 61

Figura 19. Janela de selecção das ferramentas e utilidades a instalar ................................................ 63

Figura 20. Janela de escolha da directoria de instalação ..................................................................... 63

Figura 21. Janela de finalização da instalação ..................................................................................... 64

Figura 22. Manual de operação do simulador ...................................................................................... 67

Figura 23. Informação sobre a versão e configuração por defeito ....................................................... 67

Figura 24. Inicialização do simulador em modo depurador/servidor GDB ........................................... 68

Figura 25. Ferramenta mb-gdb em modo janela .................................................................................. 69

Figura 26. Janela Target Selection ............................................................................................... 69

Figura 27. Ferramenta mb-gdb com um executável ELF carregado .................................................... 70

Figura 28. systemconfig.dtd, ficheiro utilizado na definição e validação do sistema ............................ 71

Figura 29. systemconfig.xml ficheiro de configuração do sistema usado nos testes experimentais ... 74

Figura 30. deviceconfig.dtd, ficheiro de definição e validação dos módulos dos periféricos ............... 75

Figura 31. opbuartlite.xml, ficheiro de configuração do módulo OPB UART Lite ................................. 75

Figura 32. opbtimercounter.xml, ficheiro de configuração do módulo OPB Timer/Counter ................. 76

Figura 33. cpuconfig.dtd, ficheiro de definição e validação dos módulos dos processadores ............. 76

Figura 34. fw_3sp.xml, ficheiro de configuração do módulo do processador FireWorks ..................... 78

Figura 35. Relatório da análise de desempenho do programa número de Fibonacci .......................... 84

Figura 36. Excerto do relatório da comunicação, inicialização do programa teste Print ...................... 89

Page 10: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

viii

Figura 37. Excerto do relatório da comunicação, inserção do breakpoint no programa teste Print ..... 89

Figura 38. Excerto do relatório da comunicação, finalização do programa teste Print ........................ 90

Page 11: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

ix

Lista de Abreviaturas

AAGR - Average Annual Growth Rate 1

ASCII - American Standard Code for Information Interchange 63

ASIC - Application-Specific Integrated Circuit 5

BRAM - Block Random Access Memory 16, 43

CAN-bus - Controller-area Network Bus 85

CD – Compact Disc 61

DDR SDRAM - Double Data Rate Synchronous Dynamic Random Access Memory 17

DSP - Digital Signal Processing 17

DTD - Document Type Definition 25

EDK - Embedded Development Kit 20, 24

ELF - Executable and Linking Format passim

FEUP - Faculdade de Engenharia de Universidade do Porto 3

FPGA - Field-Programmable Gate Array 5, 36, 43

FPU - Floating Point Unit 7

FSL - Fast Simplex Link 5

GCC - GNU Compiler Collection 25, 44

GDB – GNU Debugger passim

GDB RSP - GDB Remote Serial Protocol passim

GPIO - General Purpose Input/Output 18

I²C - Inter-Integrated Circuit 17

IP Blocks - Intellectual Property Blocks 20

ISA - Instruction Set Architecture 5, 25

ISS - Instruction Set Simulator 21, 24, 55

IST - Instituto Superior Técnico 3

JTAG - Joint Test Action Group 21, 36

LMB - Local Memory Bus 5, 24

MAC - Media Access Control 17

MIEEC - Mestrado Integrado em Engenharia Electrotécnica e de Computadores 3

MIT License - Massachusetts Institute of Technology License 5

MMU - Memory Management Unit 5

OPB - IBM CoreConnect On-chip Peripheral Bus 5, 17, 25

PC – Personal Computer 36, 43

RISC - Reduced Instruction Set Computing 5

RS-232 - Recommended Standard 232 85

SDRAM - Synchronous Dynamic Random Access Memory 17

SPI - Serial Peripheral Interface 17

SRAM - Static Random Access Memory 17, 43

TCP/IP – Transmission Control Protocol/Internet Protocol 36

Page 12: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

x

UART - Universal Asynchronous Receiver/Transmitter 2, 17

UML - Unified Modeling Language 26, 35

USB – Universal Serial Bus 36

UTL - Universidade Técnica de Lisboa 3

VHDL – VHSIC Hardware Description Language 20

VHSIC – Very High Speed Integrated Circuit 20

XMD - Xilinx Microprocessor Debugger 21, 24, 36, 55

XML - Extensible Markup Language passim

XPS - Xilinx Platform Studio 20, 43

ZBT - Zero Bus Turnaround 17

Page 13: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

1

1 Introdução

1.1 Motivação

Desde o início deste século tem ocorrido um crescimento incessante no uso de sistemas

embebidos, colocando continuamente novos desafios ao desenvolvimento de soluções inovadoras e

de novas aplicações. Os sistemas embebidos encontram-se em todos os aspectos da vida

contemporânea, existindo muitos exemplos do seu uso na área das telecomunicações e dos

computadores, passando pela área da medicina e escritórios, indústria, sector da defesa e espaço,

bem como da electrónica de consumo e indústria automóvel. O mercado dos sistemas embebidos é

extremamente competitivo tendo um grande impacto na economia. A qualidade, inovação,

funcionalidades e o preço são os principais factores de escolha de um sistema embebido.

Os lucros obtidos através do negócio dos sistemas embebidos provêm tanto do hardware como

do software. O hardware é constituído pelas placas de sistema e pelos circuitos integrados; o

software é constituído pelas ferramentas de desenvolvimento, aplicações e sistemas operativos.

Apesar da maior parte das receitas serem provenientes dos circuitos integrados, a mais alta taxa de

crescimento de receitas provem do software. O valor adicionado pelo software embebido ao produto

final é em geral de uma ordem superior ao custo do próprio dispositivo. Na Tabela 1, encontra-se

representado o valor total das receitas em milhões de dólares do mercado global dos sistemas

embebidos, assim como das suas três componentes software, circuitos integrados e placas de

sistema, e os respectivos valores da taxa anual média de crescimento Average Annual Growth Rate

(AAGR), todos os valores são referentes aos anos 2004 e 2009.

Tabela 1. Mercado global dos sistemas embebidos em milhões de dólares, fonte BCC Inc. [1]

2004 2009 AAGR (%)

Software Embebido 1641 3448 16,0

Circuitos Integrados Embebidos 40536 78746 14,2

Placas de Sistema Embebidos 3693 5950 10,0

Total Receitas 45873 88144 14,0

Muitos sistemas embebidos residem em máquinas das quais se espera que funcionem

continuamente durante anos, são aplicados em sistemas críticos, ou mesmo em máquinas de difícil

acesso em funcionamento como é o caso de satélites e robots espaciais. Por estes motivos o

software dos sistemas embebidos é usualmente desenvolvido e testado com muito mais cuidado do

que o software dos computadores pessoais.

Assim, este trabalho foca-se no melhoramento de um simulador de ciclo exacto com novas

funcionalidades para simplificar o desenvolvimento de software embebido, destinado a sistemas

baseados na arquitectura FireWorks da Coreworks [2], nomeadamente as funcionalidades de

depuração e análise de desempenho.

Page 14: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

2

1.2 Contexto

O trabalho desenvolvido no âmbito desta tese foi realizado em colaboração entre o autor da tese

e a empresa startup portuguesa de tecnologia Coreworks, proprietária do processador FireWorks [3].

O autor teve como objectivo o de obter o grau académico de mestre em engenharia electrotécnica e

de computadores no Instituto Superior Técnico, apoiando a empresa Coreworks no seu esforço de

desenvolvimento de ferramentas e aplicações para a sua arquitectura reconfigurável

FireWorks/SideWorks [4].

1.3 Objectivos

Esta tese teve como objectivo o melhoramento de um simulador ciclo exacto para apoio ao

desenvolvimento de software destinado a sistemas embebidos. Apesar do simulador poder ser

facilmente adaptado para sistemas com outros processadores, o seu desenvolvimento teve em

mente sistemas baseados na arquitectura FireWorks.

Os requisitos de desenvolvimento foram:

O simulador deve permitir a simulação de ciclo exacto de sistemas baseados na

arquitectura FireWorks;

O simulador deve ser desenvolvido em Java de forma a facilitar a portabilidade do mesmo

em diferentes sistemas operativos;

O simulador deve ser capaz de ler no formato Executable and Linking Format (ELF) o

código assembly dos programas a carregar;

O simulador deve ter uma arquitectura que facilite a ligação de periféricos e de memórias

aos barramentos do sistema a simular, como por exemplo o processador de sinais digitais

SideWorks da Coreworks;

O simulador deve possibilitar a configuração de todo o sistema, desde o processador, a

latência das instruções, definir os periféricos e memórias que fazem parte do sistema, e

configurar o mapeamento e latência das memórias e dos periféricos utilizados;

O sistema embebido suportado pelo simulador deve incluir memórias, Universal

Asynchronous Receiver/Transmitter (UART), e temporizadores preconcebidos que

possibilitem a interligação ao sistema e respectiva simulação;

A partir do simulador desenvolvido efectuar melhoramentos ao nível das funcionalidades

permitindo o simulador operar como analisador de desempenho e como

depurador/servidor GNU Debugger (GDB).

Page 15: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

3

1.4 Aplicações

O simulador de sistemas baseados no processador FireWorks concebido no âmbito desta tese

tem tido aplicações práticas, enumerando-se na lista seguinte exemplos de trabalhos que utilizaram

ou utilizam o simulador:

“Methods for Dynamic Identification of Program Control-Flow Structures for FPGA-based

Systems”, Tiago José Rocha Alves da Costa, Tese de Mestrado Integrado em Engenharia

Electrotécnica e de Computadores (MIEEC), Faculdade de Engenharia de Universidade

do Porto (FEUP), Porto, Julho 2009;

“Mapping Runtime-Detected Loops from Microprocessors to Reconfigurable Processing

Units”, João Carlos Viegas Martins Bispo, Tese de Doutoramento em Engenharia

Informática e de Computadores, Instituto Superior Técnico (IST), Universidade Técnica de

Lisboa (UTL), Lisboa, Portugal, Julho 2012.

Em ambos os trabalhos o simulador foi usado para gerar relatórios com o traçado do percurso de

programas. No âmbito do trabalho de doutoramento de João Bispo, uma versão do simulador tem

sido utilizada para identificar determinadas sequências de instruções em traçados de execução.

1.5 Organização da Dissertação

No seguimento deste capítulo introdutório, o capítulo 2 apresenta a arquitectura e as

características do processador FireWorks e dos sistemas nele baseado. São apresentadas as

ferramentas de simulação, depuração e os ambientes actualmente utilizados na implementação e

desenvolvimento do software e do hardware de sistemas baseados no processador FireWorks.

O capítulo 3 é dedicado ao simulador de ciclo exacto desenvolvido no âmbito deste trabalho. São

explicados os motivos para o desenvolvimento de um simulador deste tipo e descritas as

características, funcionalidades e arquitectura do mesmo.

No capítulo 4 são apresentados os melhoramentos efectuados ao simulador e o porquê de tais

melhoramentos. Sendo descritas as modificações realizadas no simulador tendo em vista os novos

modos de operação análise de desempenho e depurador/servidor GDB.

Os resultados dos testes experimentais efectuados ao simulador encontram-se disponibilizados

no capítulo 5.

No capítulo 6 são apresentadas as conclusões e os trabalhos futuros que podem ser

desenvolvidos a partir do trabalho realizado nesta tese.

Page 16: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

4

Page 17: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

5

2 Sistemas Baseados no Processador FireWorks

Neste capítulo é apresentada a arquitectura FireWorks [3], são descritas as suas características e

funcionalidades, bem como os principais dispositivos que a compõem, desde o processador

FireWorks às memórias e periféricos e suas interligações. É dada uma visão geral sobre os

ambientes e ferramentas de simulação e depuração actualmente utilizadas no desenvolvimento de

software e hardware para esta arquitectura. Na parte final do capítulo, a documentação actualmente

disponível é introduzida.

2.1 Processador FireWorks

O FireWorks é um processador desenvolvido pela Coreworks [2] tendo por referência a versão 3.0

do processador OpenFire [5], e tendo em vista o seu uso em sistemas embebidos. É sintetizável e

optimizado para a implementação em Field-Programmable Gate Array (FPGA) e Application-Specific

Integrated Circuit (ASIC). As suas características permitem a concepção de sistemas tendo em conta

requisitos específicos, bem como o custo/performance. Os sistemas baseados neste processador

têm um variado leque de aplicações: comunicações de dados, multimédia, automação comercial,

controlo industrial, entre outras.

O processador OpenFire é uma implementação em Verilog do processador MicroBlaze da Xilinx,

o seu código fonte é de distribuição livre, disponibilizado sob a licença Massachusetts Institute of

Technology License (MIT License).

A seguinte lista, indica as características partilhadas pelos processadores FireWorks e OpenFire:

Arquitectura Reduced Instruction Set Computing (RISC);

Arquitectura com pipeline;

Instruções de 32 bits;

Instruction Set Architecture (ISA) idêntica ao do processador MicroBlaze da Xilinx;

Trinta e dois registos de uso geral de 32 bits;

Arquitectura totalmente ortogonal (ver subcapítulo 2.1.2);

Arquitectura Harvard (ver subcapítulo 2.1.4);

Barramento de endereçamento de 32 bits;

Formato big-endian é usado para representação dos dados e endereçamento (ver

subcapítulo 2.1.4);

Sem Memory Management Unit (MMU);

Sem sistema de cache;

Sem gestor de energia.

Entre o processador FireWorks e o processador OpenFire existem três grandes diferenças. A

primeira diferença encontra-se nos barramentos suportados. O FireWorks é constituído pelos

barramentos Local Memory Bus (LMB) e IBM CoreConnect On-chip Peripheral Bus (OPB) enquanto

a versão do processador OpenFire é constituída pelo barramento Fast Simplex Link (FSL) . As

características do barramento OPB permitem a interligação ao FireWorks de um grande número e

Page 18: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

6

variedade de periféricos e memória externa, enquanto o barramento FSL do processador OpenFire

só permite interligação até ao máximo de oito dispositivos. A segunda diferença é o suporte de

interrupções e excepções por parte do processador FireWorks, algo que o processador OpenFire não

suporta. A terceira e última diferença está relacionada com os ciclos das instruções. No processador

FireWorks as instruções são executadas no mesmo número de ciclos que o processador MicroBlaze,

isto é o processador FireWorks é de ciclo exacto em relação ao processador MicroBlaze, enquanto

no processador OpenFire as instruções de multiplicação não o são.

Na Figura 1 encontra-se representado um diagrama de blocos de um sistema baseado no

processador FireWorks, contendo memória interna e externa, bem como dois periféricos.

Program

Counter

Instruction

DecodeGeneral

Purpose

Registers

Internal Rapidy Memory

(BRAM)

Inst

ruct

ion

Sid

e B

us In

terfa

ce

Dat

a S

ide

Bus

Inte

rface

UARTTimer/

Counter

Memory

Controller

External

Memory

OPB Bus

Special

Purpose

Registers

ALU

Barrel

Shift

Shift

Multiplier

Divisor

FireWorks Soft Processor

Field-Programmable Gate Array

LMB Bus

8/16/32 bits Memory Bus

LMB Bus

Figura 1. Diagrama de blocos de um sistema baseado no processador FireWorks [6]

Até à data da finalização do desenvolvimento da ferramenta ainda não existia documentação

oficial por parte da Coreworks em relação ao seu processador FireWorks, por este motivo e visto o

funcionamento do processador ser muito idêntico ao processador MicroBlaze pelo menos no ponto

de vista funcional, a documentação usada na descrição das características e funcionalidades do

processador FireWorks é a mesma que a Xilinx fornece para o seu processador MicroBlaze [6] [7] [8].

O manual e o código fonte do processador OpenFire são usados como documentação complementar

[5].

Page 19: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

7

2.1.1 Instruções

Uma das características que o processador FireWorks partilha com o processador OpenFire é o

suporte da mesma ISA. A ISA suportada é idêntica à do processador MicroBlaze v6.00 da Xilinx, com

a excepção das instruções que operam com breaks, com a cache, com a interface FSL e com a

Floating Point Unit (FPU); todas as outras instruções são suportadas e implementadas na íntegra.

As instruções encontram-se agrupadas nas seguintes cinco categorias: aritméticas, lógicas,

saltos, especiais e leitura/escrita. São representadas por 32 bits e definidas num dos dois seguintes

formatos: o Tipo A ou o Tipo B.

O Tipo A é usado para instruções registo – registo. Contém o código de operação (Opcode), um

registo de destino (Destination Reg) e dois registos origem (Source Reg A e Source Reg B). Na

Figura 2 mostra-se este formato; o bit 0 é o mais significativo e o bit 31 é o menos significativo:

Opcode Destination Reg Source Reg A Source Reg B 0 0 0 0 0 0 0 0 0 0 0

0 6 11 16 21 31 Figura 2. Formato das instruções do Tipo A

O Tipo B é usado para instruções registo – imediato. Contém o Opcode, um registo de destino,

um registo de origem e um valor imediato de origem com dimensão de 16 bits. O valor imediato pode

ser estendido para uma dimensão de 32 bits, para isso é necessário preceder a instrução de Tipo B

com a instrução IMM. Na Figura 3 mostra-se este formato; o bit 0 é o mais significativo e o bit 31 é o

menos significativo:

Opcode Destination Reg Source Reg A Immediate Value

0 6 11 16 31 Figura 3. Formato das instruções do Tipo B

2.1.2 Registos

A arquitectura do processador é uma arquitectura totalmente ortogonal, isto é, as instruções têm o

mesmo formato base, permitindo o uso de qualquer registo e modo de endereçamento. Contém trinta

e dois registos de uso geral de 32 bits, enumerados de R0 a R31, e dezoito registos de uso especial

de 32 bits.

Ao se efectuar a chamada de funções, o valor de certos registos e o valor do endereço de retorno

da sub-rotina devem ser guardados para que se não perca o contexto da execução do programa.

Esses registos são todos os não voláteis. Normalmente, os valores destes registos são guardados na

stack durante o prólogo e repostos durante o epílogo.

Na Tabela 2 encontram-se indicados todos os registos de uso geral bem como os de uso especial

do processador FireWorks. Cada registo é identificado pela sua enumeração, sendo indicado o seu

tipo, o seu propósito, e como se efectua a sua modificação.

Page 20: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

8

Tabela 2. Convenção do modo de utilização dos registos

REGISTO TIPO MODIFICAÇÃO PROPÓSITO

R0 Dedicado Inalterável Valor 0

R1 Dedicado Software Stack Pointer

R2 Dedicado Software Ponteiro da área de dados de leitura

R3-R4 Volátil Software Valores de retorno / Temporários

R5-R10 Volátil Software Passagem de parâmetros / Temporários

R11-R12 Volátil Software Temporários

R13 Dedicado Software Ponteiro da área de dados de leitura e escrita

R14 Dedicado Hardware Endereço de retorno de interrupções

R15 Dedicado Software Endereço de retorno de sub-rotinas

R16 Dedicado Hardware Endereço de retorno de depuração

R17 Dedicado Hardware Endereço de retorno de excepções

R18 Dedicado Software Reservado para o Assembler

R19-R31 Não volátil Software Uso geral e devem ser salvos ao chamar funções

RPC Especial Hardware Program Counter (PC)

RMSR Especial Hardware Machine Status Register (MSR)

REAR Especial Hardware Exception Address Register (EAR)

RESR Especial Hardware Exception Status Register (ESR)

RFSR Especial Hardware Floating Point Status Register (FSR)

RBTR Especial Hardware Branch Target Register (BTR)

RPVR0-RPVR11 Especial Hardware Processor Version Register, de 0 a 11 (PVR)

A função e como se procede à leitura e escrita dos registos de uso especial são descritos de

seguida:

Program Counter (PC) guarda o valor do endereço da instrução que se encontra no andar

Execute (EX). Pode ser lido através da instrução MFS, mas não pode ser escrito através

da instrução MTS;

Machine Status Register (MSR) contém os bits de controlo e de estado do processador.

Pode ser lido através da instrução MFS, e ser escrito através da instrução MTS ou pelas

instruções dedicadas MSRSET e MSRCLR;

Exception Address Register (EAR) guarda o endereço completo da instrução de

leitura/escrita que provoque uma excepção, caso contrario o seu conteúdo é indefinido.

Pode ser lido com a instrução MFS, mas não pode ser escrito através da instrução MTS;

Exception Status Register (ESR) contém os bits de estado das excepções do processador.

Pode ser lido com a instrução MFS, mas não pode ser escrito através da instrução MTS;

Floating Point Status Register (FSR) guarda o estado da unidade de vírgula flutuante.

Pode ser lido através da instrução MFS, e ser escrito através da instrução MTS. Este

registo no momento só é utilizado para manter a compatibilidade as ferramentas de

desenvolvimento do processador MicroBlaze. Pode ser utilizado para uma futura

implementação de uma unidade de vírgula flutuante;

Branch Target Register (BTR) no caso de não ocorrerem excepções causadas pelo

hardware, guarda o valor do endereço de destino das instruções de salto. Se uma

Page 21: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

9

excepção for provocada por uma instrução no delay slot a execução retorna para o

endereço contido neste registo ao invés da execução normal guardada no registo R17.

Pode ser lido com a instrução MFS, mas não pode ser escrito através da instrução MTS;

Processor Version Register (PVR) é um conjunto de doze registos que guardam a

configuração do processador, entres outros dados. Estão enumerados de PVR0 a PVR11.

Podem ser lidos através da instrução MFS, e serrem escritos através da instrução MTS.

Estes registos no momento só são utilizados para manter a compatibilidade com as

ferramentas de desenvolvimento do processador MicroBlaze.

2.1.3 Pipeline

O processador é constituído por uma arquitectura em pipeline, dividida em três andares: Fetch

(IF), Decode (OF) e Execute (EX).

A maioria das instruções ao serem executadas demoram três ciclos de relógio, embora o

funcionamento em pipeline permita atingir desempenhos próximos de um ciclo de relógio por

instrução. Existe uma minoria de instruções que não obedecem à situação anterior. Essas instruções

específicas ocupam múltiplos ciclos de relógio no andar Execute (EX). Para que tal seja conseguido,

o funcionamento do pipeline é bloqueado até que a instrução no andar Execute (EX) seja terminada;

este bloqueio é conhecido por stall.

Em cada andar existe um registo interno Program Counter (PC), onde é guardado o valor do

endereço da instrução a executar.

Saltos, bloqueios do funcionamento do pipeline e data forwarding [9] são resolvidos

automaticamente pelo processador.

2.1.3.1 Instruções de Salto sem Delay Slot

Independentemente de ser salto condicional ou incondicional, uma instrução de salto sem delay

slot demora três ciclos de relógio a concluir o salto. O primeiro ciclo é utilizado para se efectuar

execução da instrução de salto, descarregar as instruções que se encontram nos andares Decode

(OF) e Fetch (IF) do pipeline, e carregar o andar Fetch (IF) com a instrução contida no endereço

para onde é efectuado o salto. Os restantes ciclos são utilizados no recarregamento do pipeline. Um

salto só se dá como terminado quando a instrução que se encontra no endereço para onde é

efectuado o salto ocupar o andar Execute (EX).

No caso de um salto condicional, se durante a execução da instrução não houver condições para

a ocorrência do salto a instrução é descartada. Nesta situação a instrução demora um ciclo de

relógio no andar Execute (EX). No ciclo de relógio seguinte é executada a instrução que

anteriormente ocupava o andar Decode (OF).

Na Figura 4 encontra-se representado um pequeno trecho da execução de um programa tendo

em conta o comportamento da execução das instruções no pipeline, onde se exemplifica a execução

da instrução de salto incondicional BRAI [10].

Page 22: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

10

Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4 Ciclo 5 Ciclo 6 BRAI 80 IF OF EX

ADD R0,R0,R0 IF OF

BRAI 5832 IF

80: ADDIK R13,R0,9652 IF OF EX

ADDIK R2,R0,9584 IF OF

ADDIK R1,R0,19760 IF

Figura 4. Comportamento de instruções de salto sem delay slot no pipeline

2.1.3.2 Instruções de Salto com Delay Slot

O termo delay slot é utilizado para definir a posição ocupada pela instrução que se segue a uma

instrução de salto.

Ao ser efectuado um salto através de uma instrução de salto com delay slot a execução da

instrução que ocupa o delay slot é sempre efectuada. O primeiro ciclo da execução do salto é

utilizado para se efectuar a execução da instrução de salto com delay slot, descarregar a instrução

que se encontra no andar Fetch (IF) do pipeline, e carregar no mesmo andar a instrução contida no

endereço para onde é efectuado o salto. Os restantes ciclos são utilizados para o recarregamento do

pipeline e execução da instrução que se encontrava no delay slot. Só se dá um salto com delay slot

por concluído quando a instrução que se encontra no endereço para onde é efectuado o salto ocupar

o andar Execute (EX).

O número de ciclos de relógio necessários para se concluir um salto com delay slot depende da

latência da instrução que se encontra no delay slot.

Se a instrução que se encontra no delay slot, ao ser executada no andar Execute (EX) não

demorar mais de dois ciclos de relógio, o número total de ciclos necessários para se concluir o salto

é igual a três. Na Figura 5 encontra-se exemplificada a execução da instrução de salto com delay slot

BRLID, com o delay slot ocupado pela instrução OR, cuja latência é de um ciclo de relógio no andar

Execute (EX).

Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4 Ciclo 5 Ciclo 6 BRLID R15,136 IF OF EX

OR R0,R0,R0 IF OF EX

ADDI R1,R1,16 IF

ADDI R1,R1,-20 IF OF EX

SW R15,R1,R0 IF OF

Figura 5. Comportamento de uma instrução de salto com delay slot no pipeline, seguida de uma instrução

com um ciclo de relógio de latência no andar Execute (EX)

No caso da instrução contida no delay slot demorar mais do que dois ciclos de relógio a ser

executada no andar Execute (EX), o número de ciclos que um salto deste tipo demora a ser

concluído passa a ser igual ao número de ciclos de relógio que a instrução no delay slot demora a

ser executada no andar Execute (EX) mais o ciclo utilizado na finalização da instrução de salto com

delay slot. Na Figura 6 encontra-se exemplificada a execução da instrução de salto com delay slot

Page 23: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

11

BRLID a efectuar um salto, com o delay slot ocupado por a instrução MUL de latência igual a três

ciclos de relógio no andar Execute (EX).

Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4 Ciclo 5 Ciclo 6 Ciclo 7 BRLID R15,136 IF OF EX

MUL R7,R5,5 IF OF EX EX EX

ADDI R1,R1,16 IF

ADDI R1,R1,-20 IF OF Stall EX

SW R15,R1,R0 IF Stall OF

Figura 6. Comportamento de uma instrução de salto com delay slot no pipeline, seguida de uma instrução

com três ciclos de relógio de latência no andar Execute (EX)

Se o salto não for efectuado as instruções deste tipo demoram um ciclo de relógio no andar

Execute (EX), sendo de seguida executadas as instruções que se encontram no pipeline.

A técnica de salto com delay slot reduz os dois ciclos de relógio de penalização para um ciclo, ao

se efectuar o recarregamento do pipeline durante execução de instruções saltos, aumentando assim

a eficiência do pipeline.

A mnemónica das instruções de salto com delay slot é sempre terminada pelo caracter D. O delay

slot não pode conter nem instruções de salto independentemente do seu tipo, nem a instrução IMM.

2.1.3.3 Instruções de Acesso à Memória

O acesso à memória é efectuado para se proceder a operações de leitura e de escrita. Cada uma

destas operações tem um valor de latência associado. Estes dois valores dependem das

características da memória a que se acede.

A latência de uma dada instrução de acesso à memória é igual à latência da operação que se

pretende efectuar na memória acedida.

Em geral a latência da memória para qualquer tipo de operação é superior a um ciclo de relógio,

esta situação leva a que instruções de acesso à memória ao serem executadas demorem vários

ciclos de relógio no andar Execute (EX) até serem finalizadas. Enquanto uma instrução deste tipo

ocupar o andar Execute (EX) o pipeline encontra-se bloqueado pelo processador até que a instrução

seja finalizada.

Quanto maior for o valor da latência da memória acedida menor vai ser a eficiência do pipeline.

Na Figura 7 encontra-se exemplificada a execução da instrução SW. Esta instrução tem a função

de escrever na memória uma palavra com o tamanho word (32 bits). Nesta execução o processador

acede a uma memória cujo valor da latência é igual a dois ciclos de relógio para operações de

escrita.

Page 24: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

12

Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4 Ciclo 5 Ciclo 6 SW R15,R1,R0 IF OF EX EX

ADDI R6,R0,8476 IF OF Stall EX

ADDI R7,R0,8476 IF Stall OF EX

Figura 7. Comportamento de instruções de acesso à memória no pipeline

2.1.4 Arquitectura da Memória

O FireWorks é um processador baseado na arquitectura Harvard, o que significa que o acesso à

memória é efectuado através de dois barramentos: o de dados e de instruções. Ambos os

barramentos utilizam endereçamento de 32 bits, permitindo assim 4 Gbytes de endereçamento por

cada barramento (de dados e de instruções). A sobreposição dos barramentos é possível. Para tal

ser conseguindo o mapeamento deve ser realizado na mesma memória física.

O barramento de dados do processador suporta três tipos de acesso à memória diferenciados

pelo tamanho: byte (8 bits), halfword (16 bits) e word (32 bits). No acesso o alinhamento à word (os

dois bits menos significativos do endereço ao byte são sempre nulos) deve ser respeitado

independentemente do tipo utilizado. Na situação do alinhamento não ser respeitado é gerado o

evento correspondente para posterior tratamento.

No caso do barramento de instruções o único tipo de acesso suportado é o word (32 bits). No

acesso o alinhamento também deve ser respeitado como na situação anterior, mas se não o for não

será gerado qualquer tipo de evento.

O formato big-endian é utilizado tanto no endereçamento como na representação de dados, isto é,

os bytes são ordenados por ordem decrescente quanto ao seu peso em posições de memória

sucessivas.

Os periféricos utilizados em sistemas embebidos com o processador FireWorks são mapeados

em zonas de endereçamento de dados e acedidos pelo respectivo barramento de dados.

2.1.5 Reset, Excepções e Interrupções

O processador FireWorks suporta os seguintes excepção: reset, interrupções e excepções. O

tratamento dos mesmos é efectuado tendo em conta a sua prioridade. Encontrando-se ordenados

segundo esse factor por ordem decrescente na seguinte lista:

Reset;

Excepção de hardware;

Interrupção;

Excepção de software.

São utilizados certos endereços de memória para guardar vectores para o tratamento das

excepções. O vector não é mais que o endereço (directo ou indirecto) de uma porção de código para

o qual a execução do programa é desviada para tratamento do respectivo evento. Neste caso, o

vector é implementado por uma instrução IMM seguida da instrução BRAI, assim permitindo o

endereçamento de qualquer posição de memória.

Page 25: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

13

A localização dos endereços de memória associados aos vectores e os registos de arquivo com o

endereço de retorno encontram-se definidos na Tabela 3. O intervalo de endereços entre 0x18 e

0x1C e o intervalo entre 0x28 e 0x4F encontram-se reservados para futuro uso e não devem ser

utilizados para que se possa garantir a compatibilidade com aplicações e sistemas desenvolvidos

posteriormente.

Tabela 3. Vectores e registo que contém o endereço de retorno

EVENTO ENDEREÇO DOS VECTORES REGISTO QUE CONTÉM O ENDEREÇO DE RETORNO

Reset 0x00000000 – 0x00000004

Excepção de software 0x00000008 – 0x0000000C Rx

Interrupções 0x00000010 – 0x00000014 R14

Reservado para uso futuro 0x00000018 – 0x0000001C

Excepção de hardware 0x00000020 – 0x00000024 R17 ou BTR

Reservado para uso futuro 0x00000028 – 0x0000004F

2.1.5.1 Reset

Na ocorrência de um reset, o processador esvazia o pipeline e carregar a instrução localizada no

endereço do vector correspondente. Os valores dos registos especiais Program Counter (PC),

Machine Status Register (MSR), Exception Address Register (EAR), Exception Status Register (ESR) e

Floating Point Status Register (FSR) são alterados para o valor 0.

Os registos de uso geral não são alterados pelo evento reset.

2.1.5.2 Excepções de Hardware

Ao se executar certo tipo de instruções no andar Execute (EX), erros internos do sistema ou

certas condições na unidade de divisão de inteiros ou na unidade de vírgula flutuante podem ocorrer.

Estas situações são reportadas ao processador para tratamento através do evento excepção de

hardware.

As excepções de hardware encontram-se em fase de implementação na versão do processador

FireWorks considerada neste trabalho. Na seguinte lista constam as excepções de hardware a

suportar e as descrições das mesmas:

Instruction Bus Exception é causada pela activação do sinal de erro IOPB_errAck por

parte de um dispositivo escravo ligado ao barramento OPB, com o acesso efectuado

através do barramento de instruções, o erro é provocado pelo acesso a uma posição de

memória não mapeada. A excepção também é causada pela activação do sinal

IOPB_timeout por parte do árbitro do barramento OPB ligado ao barramento de

instruções, o sinal é activado devido à não devolução da instrução pretendida dentro de

um determinado prazo. O barramento LMB de acesso à memória de instruções não causa

esta excepção;

Illegal Opcode Exception é causada por instruções que não constam na ISA utilizada pelo

processador FireWorks ou não são suportadas por ele. A instrução add r0,r0,r0

representa por 0x00000000 também causa este tipo de excepção;

Page 26: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

14

Data Bus Exception é causada pela activação do sinal de erro DOPB_errAck por parte de

um dispositivo escravo ligado ao barramento OPB, com o acesso efectuado através do

barramento de dados, o erro é provocado pelo acesso a uma posição de memória não

mapeada. A excepção também é causada pela activação do sinal IOPB_timeout por

parte do árbitro do barramento OPB ligado ao barramento de dados, o sinal é activado

devido à não devolução do dado pretendido dentro de um determinado prazo. O

barramento LMB de acesso à memória de dados não causa esta excepção;

Unaligned Exception é despoletada pelo acesso não alinhado independentemente do tipo

ao barramento de dados;

Divide by Zero Exception é causada quando se efectua operações de divisão inteira onde

o divisor é igual a 0. Este tipo de operações é realizado através das instruções idiv ou

idivu;

FPU Exception é causada quando se efectuam determinadas operações na unidade de

vírgula flutuante. As operações que causam a excepção vão desde operações ilegais,

operações em que o divisor é igual a 0 e operações em que se obtêm determinados

resultados. Só se tirará proveito desta excepção numa futura versão do processador que

contenha uma unidade de vírgula flutuante.

Ao ser despoletada uma excepção o processador só procede ao seu tratamento se o bit

Exception Enable (EE) se encontrar no nível lógico 1 e o bit Exception In Progress (EIP) no nível

lógico 0, estes bits fazem parte do registo especial Machine Status Register (MSR).

A excepção de hardware ao ser tratada leva a que a instrução que provocou a excepção não seja

finalizada, o valor do registo interno Program Counter (PC) do andar Decode (OF) seja guardado no

registo de uso geral R17, o pipeline esvaziado e a instrução que se encontra no endereço do vector

de excepção de hardware (0x20) seja carregada no andar Fetch (IF). O bit Exception Enable (EE) é

inibido para não permitir o tratamento de outras excepções que possam ocorrer durante o tratamento

da actual, e o bit Exception In Progress (EIP) é desinibido para que não seja permitido o tratamento

de outro tipo de excepções. Estes dois bits encontram-se no registo especial Machine Status

Register (MSR). No registo especial Exception Address Register (EAR) é guardado o endereço da

instrução que provocou a excepção. No tratamento de uma excepção do tipo FPU Exception o

registo especial Floating Point Status Register (FSR) é alterado conforme a causa que a provocou.

Sempre que uma excepção é tratada o registo especial Exception Status Register (ESR) é modificado

tendo em conta o tipo de excepção que se encontra em tratamento.

Se a excepção for causada por uma instrução no delay slot, o endereço de destino resultante da

execução da instrução de salto com delay slot executada anteriormente é guardado no registo

especial Branch Target Register (BTR) e o bit Exception in delay slot (DS) do registo especial

Exception Status Register (ESR) é colocado no nível lógico 1. Apesar de nesta situação se continuar

a guardar o valor do registo interno Program Counter (PC) do andar Decode (OF) no registo de uso

geral R17, o seu valor deixa de ser válido. No delay slot são permitidas instruções que possam

causar excepções de hardware em que a execução normal do programa possa ser retomada, como

Page 27: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

15

é o exemplo das instruções que têm como função a leitura e escrita de dados na memória (estas

podem causar excepção do tipo Unaligned Exception).

A instrução RTED é usada para o retorno deste tipo de evento, coloca automaticamente o bit

Exception Enable (EE) no nível lógico 1 e o bit Exception In Progress (EIP) no nível lógico 0 do

registo especial Machine Status Register (MSR) permitindo assim o tratamento de futuras excepções

e de outros tipos de excepções. O registo especial Exception Address Register (EAR) é modificado

para o valor 0. A execução é continuada a partir do endereço guardado no registo especial Branch

Target Register (BTR), isto se a excepção foi causada por uma instrução no delay slot. Se não, é

continuada a partir do endereço contido no registo de uso geral R17. Para tal basta verificar o bit

Exception in delay slot (DS) do registo especial Exception Status Register (ESR); se o seu valor lógico

for 1 a excepção foi provocada por uma instrução no delay slot; se o seu valor lógico for 0 é porque

não foi.

2.1.5.3 Interrupções

Só uma fonte de interrupção exterior é suportada pelo processador, sendo activada através do

porto de entrada Interrupt do mesmo. Para que possa responder a mais do que uma fonte de

interrupção é necessário o uso de um periférico específico para o caso, i.e., um controlador de

interrupções.

Se surgir uma interrupção no decorrer do tratamento de uma excepção de hardware, o tratamento

da mesma não é efectuado. O tratamento só terá lugar se a interrupção se mantiver activa depois de

terminado o tratamento da excepção de hardware.

Na ocorrência de uma interrupção o processador só procede ao seu tratamento se o valor do bit

Interrupt Enable (IE) for igual a 1 e o nível lógico do bit Exception In Progress (EIP) for igual a 0.

Ambos os bits encontram-se no registo especial Machine Status Register (MSR).

No início do tratamento de uma interrupção é permitida a finalização da execução da instrução

que se encontra no andar Execute (EX). Se esta instrução for do tipo salto com delay slot também é

permitida a finalização da execução da instrução no delay slot.

A instrução seguinte é substituída por uma instrução de salto para o vector de interrupção

localizado no endereço 0x10 e o seu endereço é guardado como endereço de retorno no registo de

uso geral R14. Se a instrução permitida for do tipo salto ou salto com delay slot o endereço de

retorno é guardado durante o último ciclo de relógio da finalização do respectivo salto. Se for de outro

tipo, o mesmo endereço é guardado durante o último ciclo de relógio da finalização da execução

dessa instrução.

Durante o tratamento de uma interrupção não é permitido o tratamento de outras interrupções.

Para tal o processador no início do tratamento coloca a 0 o bit Interrupt Enable (IE) do registo

especial Machine Status Register (MSR), desinibindo assim o tratamento de futuras excepções deste

tipo.

Page 28: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

16

A instrução RTID é usada para o retorno deste tipo de evento, colocando automaticamente o bit

Interrupt Enable (IE) no nível lógico 1 para permitir o tratamento de futuras interrupções e retomado

a execução a partir do endereço guardado no registo de uso geral R14.

O número de ciclos de relógio que o processador demora a entrar na Interrupt Service Routine

(ISR) desde que é inicializado o tratamento da interrupção depende da latência da instrução ou

instruções que foram permitidas finalizar.

2.1.5.4 Excepções de Software

A excepção de software é causada pela inserção da instrução BRALID Rx,0x8 no código de um

programa. Neste tipo de evento o endereço de retorno é guardado no registo Rx. Embora possa ser

usado qualquer registo de uso geral, é recomendada a utilização do registo R15.

A instrução RTSD é usada para o retorno deste tipo de excepção, retomando a execução a partir

do endereço guardado no registo de uso geral utilizado para tal. O vector para este evento encontra-

se localizado no endereço 0x8.

2.2 Memória e Periféricos

2.2.1 Barramentos

O FireWorks sendo um processador baseado na arquitectura Harvard utiliza dois barramentos

para o acesso à memória; um barramento é utilizado para o acesso a dados e outro para o acesso a

instruções. Os barramentos utilizados são os seguintes: o barramento LMB e o barramento OPB.

O barramento LMB é simples, eficiente, síncrono, garantindo o acesso em um único ciclo de

relógio a memórias do tipo Block Random Access Memory (BRAM) e do tipo único mestre. Este

barramento é apenas utilizado para ligação à memória interna rápida do sistema, sendo esta

constituída por memória do tipo BRAM. O processador é constituído por dois barramentos LMB, um é

utilizado para o acesso à memória de instruções e o outro à memória de dados.

Para a ligação de periféricos, bem como de memória externa, a um processador FireWorks é

utilizada a versão 2.0 do barramento OPB. Este barramento é do tipo multi-mestre multi-escravo de

32 bit. A memória externa destina-se só a memória de dados, instruções armazenadas neste tipo de

memória não podem ser carregadas directamente pelo processador.

2.2.2 Memória

Um sistema baseado num processador FireWorks pode conter dois tipos de memória: memória

interna rápida, sempre parte integrante de qualquer sistema, e memória externa presente ou não

dependendo da configuração do mesmo.

A memória interna rápida é constituída por memória do tipo BRAM, apesar de o processador usar

uma arquitectura do tipo Harvard a memória interna rápida encontra-se unificada em uma única

BRAM de dois portos.

Page 29: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

17

Para que um sistema baseado no processador FireWorks possa utilizar memória externa é

necessária a utilização de um controlador de memória. O controlador tem a função de aceder e gerir

os acessos à memória e é colocado entre o barramento OPB e a memória externa. O sistema

FireWorks suporta vários tipos de controladores de memória sendo diferenciados principalmente pelo

tipo de memória a que pretende aceder. Enumeram-se de seguida alguns tipos de controladores

suportados:

Controlador de memória Flash;

Controlador de memória Static Random Access Memory (SRAM);

Controlador de memória Synchronous Dynamic Random Access Memory (SDRAM);

Controlador de memória Double Data Rate Synchronous Dynamic Random Access

Memory (DDR SDRAM);

Controlador de memória BRAM;

Controlador de memória Zero Bus Turnaround (ZBT).

No acesso a dados na memória interna rápida, o valor da latência para operações de escrita

como para operações de leitura é igual a dois ciclos de relógio. No carregamento de instruções o

valor da latência é igual a um ciclo. O motivo da diferença de valores de latência no acesso a dados

e a instruções é devido ao barramento de instruções se encontrar na prática ligado directamente à

memória BRAM e não interligado através do barramento LMB. Com esta solução não existe assim

uma diminuição da eficiência do carregamento do pipeline devido à latência no acesso à memória

interna rápida através do barramento LMB, permitindo evitar o uso de uma unidade de pré-

carregamento de instruções no pipeline.

No caso da memória externa os valores das latências dependem do barramento OPB, do

controlador de memória usado, e do tipo de memória utilizado.

2.2.3 Periféricos

Os periféricos podem ser constituídos por registos de controlo, registos de estado, registos de

dados e memória, etc. Conforme o tipo de periférico pode ser necessário que o processador aceda a

todos esses recursos ou a apenas alguns. Para que tal seja possível é necessário proceder ao

mapeamento desses recursos no barramento OPB do barramento de dados. Todos os registos

mapeados têm o tamanho word (32 bits).

Existe um grande leque de periféricos que podem ser utilizados num sistema FireWorks. Na lista

seguinte constam algumas das funcionalidades de periféricos existentes:

Controlador de interrupções (encontra-se em fase de desenvolvimento);

Ethernet Media Access Control(MAC) ;

Universal Asynchronous Receiver/Transmitter (UART);

Serial Peripheral Interface (SPI);

Digital Signal Processing (DSP), por exemplo, o processador sinal digital SideWorks;

FPU;

Inter-Integrated Circuit (I²C);

Page 30: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

18

Temporizadores/Contadores;

General Purpose Input/Output (GPIO);

Co-processadores;

Controladores de memória.

2.2.4 Acesso a Dados e a Instruções

O barramento de dados tanto para operações de escrita como para operações de leitura suporta

os seguintes tipos de transferências:

byte (8 bits), halfword (16 bits) e word (32 bits) para dispositivos de endereçamento à

word;

byte (8 bits) e halfword (16 bits) para dispositivos de endereçamento à halfword;

byte (8 bits) para dispositivos de endereçamento à byte.

O processador só suporta transferências que respeitem o endereçamento dos dispositivos

presentes no sistema. Outros tipos de transferências não são suportados.

No acesso a dados o alinhamento deve ser respeitado. Considera-se acesso alinhado se for

efectuado num dos seguintes modos: acesso através do tipo byte, acesso através do tipo halfword

onde o bit menos significativo do endereço é igual a 0 e o acesso através do tipo word onde os dois

bits menos significativos do endereço são iguais a 0.

Os modos de acesso para leitura de dados encontram-se representados na Tabela 4, e os modos

de acesso para escrita de dados encontram-se representados na Tabela 5. Nas tabelas

apresentadas os intervalos de bits de um endereço ou registo são representados entre parênteses

rectos e separados por dois pontos. Nessa representação o bit 0 representa o bit mais significativo e

o bit 31 representa o bit menos significativo.

Tabela 4. Modos de acesso para leitura de dados através dos barramentos

DADOS DO REGISTO rD

ENDEREÇO[30:31] TAMANHO DA

TRANSFERÊNCIA rD[0:7] rD[8:15] rD[16:23] rD[24:31]

11 byte Byte 3

10 byte Byte 2

01 byte Byte 1

00 byte Byte 0

10 halfword Byte 2 Byte 3

00 halfword Byte 0 Byte 1

00 word Byte 0 Byte 1 Byte 2 Byte 3

Page 31: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

19

Tabela 5. Modos de acesso para escrita de dados através dos barramentos

DADOS DE UM ENDEREÇO DE UM DOS

BARRAMENTOS

ENDEREÇO[30:31] TAMANHO DA

TRANSFERÊNCIA Byte 0 Byte 1 Byte 2 Byte 3

11 byte rD[24:31]

10 byte rD[24:31]

01 byte rD[24:31]

00 byte rD[24:31]

10 halfword rD[16:23] rD[24:31]

00 halfword rD[16:23] rD[24:31]

00 word rD[0:7] rD[8:15] rD[16:23] rD[24:31]

O barramento de instruções só efectua transferências com o tamanho word (32 bits).

O acesso a instruções processa-se na mesma forma que o acesso a dados através do tipo word

(32 bits). Só que no caso das instruções, o acesso não alinhado não é possível de ocorrer, devido

aos dois bits menos significativos do registo especial Program Counter (PC) serem iguais a 0. Nestes

dois bits não é possível efectuar operações de escrita só operações de leitura, em qualquer operação

de escrita no registo especial Program Counter (PC) estes dois bits são descartados.

2.2.5 Mapeamento

Ambos os barramentos do processador utilizam endereçamento de 32 bits, em resultado acedem

a periféricos e memória num espaço de endereçamento de 0x00000000 a 0xFFFFFFFF. O espaço

de endereçamento começa no endereço de menor valor 0x00000000 e cresce até o endereço

0xFFFFFFFF.

Nos endereços de menor valor é onde se encontra mapeada a memória interna rápida; esta

memória é utilizada para guardar instruções e dados. Sendo este o único tipo de memória utilizado

para armazenar instruções tem de ocupar obrigatoriamente o intervalo de endereços de 0x0 a 0x4F,

devido às posições de memória deste intervalo encontram-se reservadas para o armazenamento dos

vectores de tratamento das excepções: reset, interrupções e excepções. De seguida encontra-se

mapeada a memória externa (caso faça parte da configuração do sistema). Esta memória só é

utilizada para o armazenamento de dados. Por último encontram-se mapeados os periféricos.

No espaço de endereçamento não é permitido o sobre posicionamento dos barramentos. O

barramento LMB só endereça a região mapeada para a memória interna rápida, todo o restante

espaço é endereçado pelo barramento OPB.

No intervalo de endereçamento do barramento OPB, pode-se associar regiões para memória

externa e periféricos, arbitrariamente. O número de periféricos que o barramento suporta depende do

número de recursos necessários a mapear pelos periféricos e do espaço de endereçamento livre que

o barramento dispõe para tal.

Ao se efectuar o mapeamento de periféricos ou memória, tem de se ter em consideração os

modos de acesso suportados pelos barramentos e pelos periféricos, para que não ocorram acessos

não alinhados. No acesso a instruções, apesar de não ocorrer acesso não alinhado, o mapeamento

da memória onde se situam as instruções deve respeitar o modo word (32 bits), para que a instrução

pretendida seja correctamente carregada pelo processador.

Page 32: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

20

Na Figura 8 encontra-se representado o mapeamento típico de um sistema baseado no

processador FireWorks. O sistema é constituído por memória interna rápida, memória externa e por

periféricos. A configuração do sistema é que define os limites das regiões ocupadas pelos vários

dispositivos no espaço de endereçamento.

Memória Interna Rápida

(BRAM)

Memória Externa

Periféricos

(0x00000000)

(0xFFFFFFFF)

Sentido de crescimento

dos endereços

Figura 8. Mapeamento típico de um sistema baseado no processador FireWorks

2.3 Ambientes e Ferramentas de Simulação e Depuração

O processador FireWorks foi projectado para tirar o máximo partido das ferramentas de

desenvolvimento concebidas pela Xilinx para o processador MicroBlaze.

A Xilinx [11] disponibiliza o pacote de desenvolvimento Embedded Development Kit (EDK) para a

implementação de sistemas baseados no processador MicroBlaze em FPGAs da Xilinx. O pacote

EDK é constituído por um variado leque de ferramentas que possibilitam o desenvolvimento tanto do

hardware como do software. O EDK encontra-se disponível para as plataformas Windows, Solaris e

Linux.

Todo o processo de desenvolvimento do hardware de um sistema e sua implementação em FPGA

obedece a uma sequência de etapas. A primeira etapa consiste na síntese do sistema a partir da

descrição do mesmo em VHSIC Hardware Description Language (VHDL) ou Verilog. Na etapa

seguinte efectua-se o mapeamento, a colocação e encaminhamento, e a geração da configuração da

FPGA (bitstream). Na última etapa procede-se ao carregamento do bitstream gerado na FPGA.

Existem duas formas de realizar as etapas do processo de desenvolvimento de software e

hardware com o EDK; uma manual e outra através da ferramenta Xilinx Platform Studio (XPS)

incluída no pacote EDK. Na manual, todos os ficheiros e scripts usados nas várias etapas do

processo de desenvolvimento têm de ser criados e editados pelo utilizador, requerendo

conhecimentos avançados para tal. A ferramenta XPS actua como uma interface gráfica por cima do

EDK, e permite uma maior simplificação e interacção com o utilizador em todo o processo de

desenvolvimento e implementação do hardware. Através do XPS é possível criar e configurar um

sistema na totalidade: configurar o processador MicroBlaze, adicionar Intellectual Property Blocks (IP

Blocks) anteriormente concebidos pelo utilizador ou de bibliotecas, interligar os vários componentes

do sistema, efectuar o carregamento do software, gerar automaticamente o conjunto de scripts

necessários para efectuar a síntese e implementação, e proceder ao carregamento do bitstream

gerado na FPGA.

Para programação e depuração de software, o pacote EDK inclui uma versão modificada da

versão standard do conjunto de ferramentas da GNU, conhecida por GNU Toolchain [12]. As

Page 33: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

21

modificações realizadas têm a finalidade de adaptar e fornecer opções adicionais que são

específicas dos sistemas baseados no processador MicroBlaze. Este conjunto de ferramentas

contém o compilador de C/C++ GNU Compiler Collection (GCC) [13] e o depurador GNU Debugger

(GDB) [14], entre outras ferramentas.

Com a função de depurar software carregado no sistema físico, o pacote EDK inclui a ferramenta

Xilinx Microprocessor Debugger (XMD). A ferramenta XMD permite conectar o computador onde se

efectua o desenvolvimento de programas ao microprocessador MicroBlaze, implementado

fisicamente numa placa de desenvolvimento de FPGA, através da interface Joint Test Action Group

(JTAG), possibilitando assim o carregamento do software na memória do sistema, o controlo da

execução do software, o acesso aos registos do processador, entre outras funcionalidades. Também

permite a depuração através do simulador do processador MicroBlaze de ciclo exacto Instruction Set

Simulator (ISS) disponibilizado no pacote EDK.

O utilizador pode usar a versão gráfica do cliente GDB, também disponibilizada no pacote EDK,

para se ligar à ferramenta XMD, permitindo assim uma maior simplificação da interacção

carregamento, execução e depuração do software.

2.4 Documentação

Até à data da finalização do desenvolvimento da ferramenta a conceber no âmbito desta tese não

existia documentação por parte da Coreworks referente ao processador FireWorks. Durante o

desenvolvimento da ferramenta foi utilizada a documentação referente ao processador OpenFire e ao

processador MicroBlaze e o apoio técnico de membros da Coreworks.

A documentação disponível para o processador MicroBlaze e suas ferramentas de

desenvolvimento é muito elucidativa, pode ser obtida através do sítio da Xilinx na internet [11]. A

documentação do processador OpenFire encontra-se disponível na internet na página do projecto do

processador [5]. Embora limitada, indica como fonte de informação mais detalhada a consulta da

documentação referente ao processador MicroBlaze. O código fonte escrito em Verilog, também

disponível na página do projecto, é uma fonte de informação a ter em conta.

O processador FireWorks bem como o processador MicroBlaze suportam excepções e

interrupções algo que o processador OpenFire não suporta. No entanto, a documentação destas

características é incompleta, tornando assim muito difícil desenvolver um simulador ou um depurador

independente para o processador MicroBlaze [15].

Page 34: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

22

Page 35: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

23

3 Simulador

Este capítulo é dedicado ao simulador ciclo exacto para arquitectura FireWorks. No início é

analisado o porquê de simular, sendo de seguida dada uma visão geral das características e

funcionalidades do simulador. Por último é descrita a arquitectura do simulador tendo em conta os

vários componentes do sistema, o processador, a memória e os periféricos.

3.1 Porquê Simular?

O método mais utilizado para a depuração de erros em software de sistemas embebidos é

proceder à sua execução controlada directamente no hardware do sistema. O controlo da execução

é efectuado através de um computador pessoal ligado ao sistema embebido através de um interface

de comunicação. Mas para que o controlo seja possível é necessário adicionar ao software uma

aplicação de monitorização (debug stub) no momento da criação do executável. Esta aplicação tem a

função de comunicar com o computador pessoal, proceder ao controlo interno da execução do

software, ler e escrever nos registos do processador, entre outras funcionalidades.

Este método de depurar erros traz inconvenientes. Devido à presença extra da aplicação de

monitorização, o software é carregado em posições de memória diferentes para o qual foi concebido,

o que pode causar alterações na execução normal do software, como por exemplo acesso a

posições de memória diferentes para o qual foi programado, o que pode esconder outros erros. Outro

inconveniente deste método é não proporcionar o controlo total sobre o ambiente de execução, se a

execução for interrompida por algum motivo e posteriormente for despoletado uma excepção ele não

será tratado pelo software, outra consequência é ser difícil replicar a ocorrência de certo tipo de

excepções.

O emprego de simuladores para a detecção de erros em software permite ultrapassar estes

inconvenientes e acrescentar funcionalidades não atingíveis pelo método anterior. Um simulador de

ciclo exacto, direccionado a sistemas embebidos é um programa que efectua a modelação parcial ou

mesmo completa de todos os aspectos do hardware em computadores pessoais. Permite a

modificação e acesso a todos os estados de um sistema e o controlo da execução, sem a utilização

de aplicações de monitorização, isto é, de forma não intrusiva. Esta funcionalidade possibilita assim o

seu uso para detecção de erros do software executado no simulador, sem as possíveis

consequências causadas pela utilização de uma aplicação de monitorização ou o não

processamento de excepções devido a paragens na execução do software.

A utilização de simuladores não tem só implicações a nível do software. As implicações também

se repercutem a nível do hardware, pois permite a avaliação de diferentes projectos sem o gasto na

construção física dos sistemas.

Apesar do custo inicial de desenvolvimento de um simulador, a sua utilização possibilita o acesso

a sistemas ou periféricos não existentes e o desenvolvimento e teste do software antecipadamente,

reduzindo drasticamente a duração do projecto e diminuindo significativamente os custos iniciais de

desenvolvimento e de manutenção do software para sistemas embebidos.

Page 36: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

24

3.2 Descrição do Simulador

O simulador actualmente utilizado na simulação de sistemas baseados na arquitectura FireWorks

é o simulador de sistemas baseados na arquitectura MicroBlaze disponibilizado no pacote Embedded

Development Kit (EDK) pela Xilinx. O simulador é do tipo Instruction Set Simulator (ISS), é de ciclo

exacto e não permite o acesso a periféricos. A sua utilização só é possível através da ferramenta

Xilinx Microprocessor Debugger (XMD) e o seu código fonte não se encontra disponível ao público. O

software a simular só pode residir na memória mapeada no barramento Local Memory Bus (LMB) e o

tamanho do mesmo define o tamanho máximo da memória.

No âmbito desta tese é proposto um simulador totalmente concebido de raiz, desenvolvido em

Java de forma a facilitar a sua portabilidade entre diferentes sistemas operativos e a possibilitar uma

arquitectura modular através da utilização do mecanismo de carregamento dinâmico de classes. A

sua concepção permite o carregamento de ficheiros executáveis no formato Executable and Linking

Format (ELF) e a operação de forma autónoma, não dependendo das ferramentas actualmente

existentes. O código fonte é de acesso livre possibilitando assim futuras modificações.

O simulador efectua a modelação total do sistema. Tanto no ponto de vista funcional como do

ponto de vista temporal. A modelação temporal permite ao simulador ser de ciclo exacto e executar a

simulação ciclo a ciclo. Permite desta forma o acesso a todos os estados do sistema, e a obtenção

de resultados de desempenho do software, como o número de instruções e de ciclos processados.

No arranque o simulador carrega um ficheiro do tipo Extensible Markup Language (XML) com

toda a configuração do sistema a simular. Através deste ficheiro é possível definir o processador e os

vários periféricos que constituem o sistema, configurar a latência das instruções, mapeamento e

latência dos registos de cada periférico e definir o tipo, latência, dimensão e mapeamento das

memórias.

Em termos da arquitectura do simulador o processador e os periféricos não são parte integrante

do simulador, são módulos à parte. O seu carregamento é efectuado durante o arranque do

simulador conforme a configuração do sistema a simular. Esta funcionalidade permite o

desenvolvimento posterior de novos módulos, tanto de processadores como de periféricos.

Com o intuito de aferir e demostrar as funcionalidades do simulador foi concebido um sistema

baseado na arquitectura FireWorks constituído por um processador FireWorks com três andares de

pipeline, por um periférico OPB Timer/Counter [16] e por um periférico OPB UART Lite [17], sendo

este modelado parcialmente.

3.3 Arquitectura do Simulador

Os sistemas baseados na arquitectura FireWorks podem ter diferentes configurações,

dependendo da aplicação a que se destinam. Tendo em conta esta característica, o desenvolvimento

do simulador teve em mente uma arquitectura modular.

Page 37: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

25

A estrutura do simulador consiste em duas partes, o núcleo central e os módulos. O núcleo central

desempenha três funções:

Configuração do simulador, procedendo à configuração do sistema pretendido através de

um ficheiro de configuração XML e ao carregamento do ficheiro executável ELF do

software a simular;

Operação do motor de simulação;

Modelação funcional e temporal da memória do sistema.

Os módulos definem e modelam funcionalmente e temporalmente os periféricos e o processador.

A descrição da arquitectura do simulador deve ser acompanhada com a visualização do código

fonte, diagrama de classes Unified Modeling Language (UML) e Javadoc do mesmo. Toda esta

documentação contém informação mais detalhada sobre o seu funcionamento, ver apêndice A. .

3.3.1 Configuração

Para que se possa efectuar a simulação do sistema pretendido, procede-se primeiro à

configuração do simulador. Esta acção decorre durante a inicialização da execução, e é composta

por quatro fases.

Na primeira fase é efectuado o carregamento e a validação do ficheiro XML de configuração do

sistema. Neste ficheiro encontra-se definido o processador e a latência das suas instruções, os

periféricos e o mapeamento e latência dos seus registos, as memórias definidas quanto ao tipo,

mapeamento e latência. A validação do ficheiro de configuração XML é efectuada de duas formas, é

validado quanto ao seu formato através do ficheiro Document Type Definition (DTD), e é validado

quanto ao seu conteúdo. No conteúdo é verificada a coerência do mapeamento das memórias e dos

registos dos periféricos do sistema a simular com a arquitectura FireWorks, e é verificado se as

instruções do processador e os registos dos periféricos estão definidos mais do que uma vez.

A segunda fase consiste no carregamento e validação dos ficheiros de configuração XML dos

módulos dos periféricos e do processador, os quais são referenciados no ficheiro de configuração do

sistema. No ficheiro de configuração do processador encontra-se definido o nome e número total de

instruções, e o número (0xbaab) de identificação do processador utilizado pelo compilador GNU

Compiler Collection (GCC). Nos ficheiros de configuração dos periféricos é definido o número e o

nome dos registos. Estes ficheiros são validados quanto ao seu formato através dos respectivos

ficheiros DTD, e é verificada a concordância entre os dados da configuração do sistema e os dados

da configuração dos módulos.

Na terceira fase é efectuada toda a configuração do sistema. É inicializada a memória com a

definição dos seus limites, tanto para o barramento LMB como para o barramento IBM CoreConnect

On-chip Peripheral Bus (OPB). O processador é inicializado efectuando-se o carregamento dinâmico

das classes do módulo correspondente e registando-se a Instruction Set Architecture (ISA) no

sistema de modelação da memória do núcleo central, com o objectivo de descodificar as instruções.

Os periféricos são inicializados efectuando-se o carregamento dinâmico das classes dos módulos

correspondentes, e alocando-se os registos na memória do sistema.

Page 38: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

26

Na quarta e última fase é efectuada a validação e o carregamento do ficheiro executável ELF do

software a simular. É verificado se o ficheiro executável se destina ao processador do sistema a

simular e verifica se o mapeamento definido no ficheiro executável esta em conformidade com o

mapeamento da memória do sistema. Com as verificações realizadas é efectuado o carregamento do

conteúdo do ficheiro executável na memória do sistema e a sua descodificação em instruções.

Sempre que ocorra algum erro de configuração ou de validação o processo é interrompido,

provocando-se a finalização da execução do simulador. O simulador ao ser configurado com sucesso

fica pronto para iniciar a simulação através do motor de simulação.

No diagrama de actividades UML da Figura 9 representam-se as quatro fases da configuração do

simulador, implementadas através da classe system.SystemConfiguration.

Carrega ficheiro XMLde

configuração do sistema

Carrega ficheiros XMLdos módulos dos

periféricos e do processador

Configura o sistema- Inicializa Memória

- Inicializa Processador- Inicializa Periféricos

Carrega ficheiro ELF(ficheiro executável do software)

Simulador configurado(simulador pronto para dar inicio à simulação)

[não válido]

[não válidos]

[válido]

[válidos]

Finaliza execução(erro na configuração)

[válido]

[não válido]

[configuração errada]

[configuração correcta]

Figura 9. Configuração do simulador

Page 39: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

27

3.3.2 Motor de Simulação

O controlo e a execução da simulação de todo o sistema são realizados através do motor de

simulação. O motor de simulação é uma máquina de estados em que as transições são despoletadas

pelo processador e a execução da simulação efectuada ciclo a ciclo.

O motor de simulação processa a cada ciclo de sistema um ciclo de processamento do

processador e um ciclo de processamento de cada periférico do sistema. Com os ciclos de

processamento do processador e dos periféricos a serem executados de forma sequencial torna-se

necessário manter o contexto temporal da simulação, uma vez que na realidade essas acções

ocorrem em simultâneo.

Para tal, a implementação de um registo de escrita deve conter um atributo temporário e um

atributo real. O atributo real é o atributo que é utilizado no processamento interno do periférico, visto

ser este que guarda o valor coerente com a contextualização da simulação. O processador ao

escrever num registo de escrita de um periférico o valor é guardado no atributo temporário do registo,

e ao ocorrer a finalização do processamento do ciclo do periférico é realizada a actualização do valor

do atributo real com o valor presente no atributo temporário.

Na Figura 10 encontra-se representado o diagrama de actividades UML do motor de simulação do

simulador do sistema baseado na arquitectura FireWorks utilizado durante os testes experimentais

realizados no âmbito desta tese. A implementação do motor de simulação foi realizada através do

método continue_ da classe system.SysteM.

Processa cicloprocessador FireWorks

Processa cicloperiférico OPB Timer/Counter

Processa cicloperiférico OPB UART Lite

[System Status = sys_status.Normal][System Status <> sys_status.Normal]

Figura 10. Motor de simulação do simulador

Page 40: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

28

Na Tabela 6 apresentam-se os estados do sistema do motor de simulação. O sistema ao se

encontrar num estado diferente do estado Normal efectua a paragem da simulação.

Tabela 6. Estados do sistema

ESTADOS DESCRIÇÃO

Normal sistema a executar a simulação do software

Stop sistema finalizou a simulação do software

3.3.3 Memória

A modelação funcional e temporal da memória do sistema é efectuada no núcleo central do

simulador através da classe system.memory.Memory. A modelação efectuada no núcleo central

engloba o barramento LMB, o barramento OPB e a interligação do barramento OPB com os registos

dos periféricos, permitindo operações de escrita e leitura de dados e instruções.

Em operações de acesso e transferência de dados, a modelação é efectuada através de uma

máquina de estados. Os estados definem o comportamento da memória durante as operações

efectuadas pelas instruções. As transições de estado estão relacionadas com os tempos de acesso

das diferentes memórias e registos que compõem o sistema e com a forma de acesso aos dados.

Através da classe system.memory.Memory são disponibilizados métodos de leitura e escrita que

implementam os vários tipos de transferências suportados pela arquitectura FireWorks. Na Tabela 7

mostram-se os estados da máquina de estados da memória.

Tabela 7. Estados da memória

ESTADOS DESCRIÇÃO

Standby memória em estado de espera

Access acesso a uma posição de memória

Unaligned acesso a uma posição de memória de forma não alinhada

Mapped acesso a uma posição de memória não mapeada

Ready posição de memória pronta para ser lida ou escrita

Como o carregamento de instruções pelo processador num sistema baseado na arquitectura

FireWorks só pode ocorrer a partir da memória mapeada no barramento LMB, demorando esta

operação um ciclo de relógio, não existe a necessidade de implementar formalmente uma máquina

de estados. Foi antes implementado um método simples que permite ao processador carregar as

instruções.

No simulador os dados e as instruções contidas nas memórias e registos do sistema são

armazenados através da classe java.util.HashMap. A classe system.memory.Memory que

modela a memória do sistema contém três instâncias da classe java.util.HashMap: uma guarda

os dados, outra armazena as instruções e a outra guarda as instâncias das classes dos registos dos

periféricos. Ao se escrever um determinado dado numa posição de memória no barramento LMB o

núcleo central armazena o valor do dado na classe java.util.HashMap referente aos dados, e a

partir do mesmo dado efectua a descodificação da instrução, criando uma instância da classe da

instrução na classe java.util.HashMap referente às instruções.

Page 41: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

29

3.3.4 Processador

A modelação temporal e funcional do processador é implementa no simulador através de um

módulo desenvolvido para o efeito. A implementação de processadores através de módulos

possibilita o desenvolvimento de várias versões de um dado processador, variando as suas

funcionalidades, como por exemplo, suporte ou não de interrupções, suporte ou não de excepções,

número de andares de pipeline, ISA, sem haver necessidade de se efectuar qualquer modificação ao

simulador. A utilização de módulos permite também a elaboração de uma biblioteca de módulos de

processadores possibilitando o teste de várias soluções de hardware para uma dada aplicação.

Os módulos de processadores obedecem a certas regras. Os módulos só podem ser instalados

na directória de instalação do simulador, mais propriamente na directória dtool/processors. A

implementação dos módulos é efectuada a partir das classes abstractas do pacote system.cpu. As

classes abstractas pertencentes ao pacote system.cpu são as seguintes:

system.cpu.CPU: classe que implementa o processador propriamente dito;

system.cpu.Instruction: classe que implementa a instrução genérica;

system.cpu.InstructionSetArchitecture: classe que efectua a descodificação

das instruções pertencentes ao processador.

A implementação propriamente dita do processador é efectuada a partir da classe do módulo do

processador instanciada por herança da classe system.cpu.CPU. A modelação do funcionamento

do processador é efectuada tanto temporalmente como funcionalmente através de uma máquina de

estados. As transições de estados estão relacionadas com a execução das instruções. Para tal o

comportamento das instruções é modelado a nível de ciclo e de pipeline. A modelação do

processador suporta o tratamento de interrupções e de excepções.

Na Tabela 8 descrevem-se os estados do processador FireWorks com três andares de pipeline

utilizado nos testes experimentais no âmbito desta tese.

Tabela 8. Estados do processador

ESTADOS DESCRIÇÃO

Normal processador a executar uma instrução normal

Delay_Slot processador a executar uma instrução com delay slot

Jump processador a executar uma instrução de salto

Stall processador a executar paragem do pipeline

Empty processador a executar uma instrução vazia

Mem_Access processador a executar uma instrução que acede à memória

DBZ processador a processar excepção de divisão por zero

Mem_Mapped processador a processar excepção de acesso a uma posição de memória de dados não mapeada

Mem_Unaligned processador a processar excepção de acesso a uma posição de memória de dados de forma não alinhada

Illegal processador a processar excepção de execução de uma instrução ilegal

Mapped processador a processar excepção de execução de acesso a uma posição de memória de instruções não mapeada

Stop processador para a execução do software

Page 42: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

30

O processador pode evoluir do estado Normal para qualquer um dos outros estados.

Independentemente do processador modelado, uma vez atingido o estado Stop, o sistema

permanece nesse estado até ser reiniciado. Todos os restantes estados transitam para o estado

Normal.

As instruções do processador no simulador são implementadas através de classes, uma classe

por cada instrução. As classes de instruções são instanciadas por herança a partir da classe

system.cpu.Instruction. O processador ao efectuar o carregamento de uma dada instrução

não efectua internamente a sua descodificação, visto esta já se encontrar previamente descodificada

no sistema de memória do núcleo central do simulador.

No simulador o processador não é só constituído pelas instruções pertencentes à ISA, é também

constituído por instruções especiais. As instruções especiais têm o objectivo de definir estados que o

processador pode operar e não são despoletados pelas instruções da ISA.

A classe que define as instruções contém referência a uma classe do mesmo tipo. Esta

funcionalidade possibilita uma instrução ter o mesmo comportamento de outra instrução. Esta

funcionalidade é utilizada na implementação das instruções especiais, tem o mesmo comportamento

da instrução referenciada mas causa diferente transição do estado do processador.

Na Tabela 9 as instruções especiais pertencentes ao módulo do processador FireWorks com três

andares de pipeline utilizado nos trabalhos realizados no âmbito desta tese.

Tabela 9. Instruções especiais do processador

INSTRUÇÕES DESCRIÇÃO

empty instrução vazia

illegal instrução ilegal

mapped instrução não mapeada numa posição de memória

stop instrução de finalização da execução da simulação

A classe do módulo do processador é registada no sistema de memória do núcleo central do

simulador ao se efectuar o carregamento dinâmico das classes do módulo do processador, durante o

processo de configuração do simulador. A sua função é descodificar as instruções do processador.

3.3.5 Periféricos

Num sistema baseado na arquitectura FireWorks o número e tipo de periféricos variam

dependendo da configuração usada. A modelação temporal e funcional é implementada através de

módulos. A utilização de módulos permite a elaboração de uma biblioteca de módulos de periféricos,

possibilitando assim o teste de várias soluções e configurações de hardware.

Como os módulos de processadores, os módulos de periféricos obedecem a certas regras. Os

módulos só podem ser instalados na directória de instalação do simulador, mais propriamente na

directória dtool/opbdevices. A implementação dos módulos é efectuada a partir das classes

abstractas do pacote system.opb_device. Há duas as classes abstractas pertencentes ao pacote

system.opb_device:

system.opb_device.OPBDevice, classe que implementa o periférico;

Page 43: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

31

system.opb_device.OPBRegister, classe que implementa o registo genérico do

periférico.

Os periféricos podem conter vários registos. Os registos no simulador são classes instanciadas

por herança a partir da classe system.opb_device.OPBRegister. Durante o processo de

configuração, ao se efectuar o carregamento dinâmico das classes do módulo do periférico as

classes referentes aos registos são alocadas no sistema de memória do núcleo central.

Na Figura 11 encontra-se representado o diagrama de actividades UML do processamento de um

ciclo de um periférico genérico com a funcionalidade de gerar interrupções. Na primeira fase é

efectuado o processamento propriamente dito do periférico. Na segunda são efectuadas as

actualizações dos registos de escrita modificados pelo processador, mantendo-se assim o contexto

da simulação. Na última fase é gerada a interrupção do periférico se as condições para tal se

verificarem.

Processa ciclo

Actualiza os registos de escrita

Gera interrupção

[necessita gerar interrupção]

[não necessita gerar interrupção]

[necessita actualizar registos de escrita]

[não necessita actualizar registos de escrita]

Figura 11. Processamento de um ciclo de um periférico

Page 44: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

32

Page 45: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

33

4 Melhoramentos

Este capítulo explica as melhorias efectuadas ao simulador de ciclo exacto da arquitectura

FireWorks. São analisados as motivações dos melhoramentos, e apresentadas as modificações

realizadas ao simulador que permitiram o funcionamento em modo de analisador de desempenho

(profiler) e modo de depurador/servidor GNU Debugger (GDB).

4.1 Modo Analisador de Desempenho

4.1.1 Motivação?

Dependendo da função para o qual um dado software é concebido, podem existir requisitos

específicos quanto ao desempenho que obrigatoriamente têm de ser compridos. Se não se verificar o

cumprimento desses requisitos corre-se o risco de o software não desempenhar correctamente a

função para a qual foi desenvolvido. Em sistemas embebidos, devido a recursos limitados e ao tipo

de aplicações a que se destinam, esta situação é de extrema importância, como é o caso dos

sistemas multimédia e de tempo-real. Para se efectuar a validação do cumprimento destes requisitos

recorre-se à utilização de uma ferramenta de desenvolvimento, conhecida como analisador de

desempenho.

O analisador de desempenho é uma ferramenta que recolhe informação acerca do

comportamento de um programa, no decorrer da sua execução, com o objectivo de medir a

frequência e duração das chamadas das funções, e assim determinar que secções do software

devem ser optimizadas.

Com a informação recolhida consegue-se saber se o número de vezes que as funções foram

executadas eram as esperadas, podendo assim detectar possíveis erros cuja origem poderia ser

difícil de detectar de outra forma. Como o analisador de desempenho usa informação recolhida

durante a execução do programa, pode ser usado em programas muito grandes e complexos cujo

código fonte é extenso e difícil de analisar. É uma forma dinâmica de análise, por oposição a outras

formas estática de análise do código fonte.

Os analisadores de desempenho usam uma larga variedade de técnicas para a recolha dos

dados, onde se incluem:

Instrumentação: coloca código no programa para recolha dos dados;

Estatísticos: utiliza métodos de amostragem para recolha de dados;

Excepções: utiliza excepções para a recolha de dados;

Simulador: recolhe dados utilizando um simulador de instruções.

Todas estas técnicas têm as suas vantagens e desvantagens, sendo usadas dependendo do fim

a que se destinam e das respostas a que se pretende chegar. Existem analisadores que usam uma

mistura de algumas destas técnicas para a recolha da informação.

Page 46: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

34

4.1.2 Descrição do Modo Analisador de Desempenho

Para a análise de desempenho a ferramenta actualmente utilizada é o gprof [18] da GNU. O gprof

efectua análise de desempenho por amostragem e de forma intrusiva. Para que a ferramenta possa

gerar os resultados da análise de desempenho é necessário adicionar ao software a analisar código

para efectuar a recolha dos dados. Esta adição é efectuada durante a compilação de forma

automática através da opção de compilação –pg. A inclusão do código de recolha de dados de

desempenho no software pode causar respostas diferentes para as quais foi programado.

Adicionalmente, a utilização do método de amostragem para a recolha de dados leva com que os

resultados obtidos não sejam precisos.

Com as funcionalidades do simulador já referidas anteriormente, a capacidade de identificar que

instrução foi executada e que posição memória a mesma ocupa, a capacidade de efectuar a

contagem do número de ciclos realizados e o suporte de carregamento de ficheiros executáveis no

formato Executable and Linking Format (ELF) [19], foi desenvolvido o modo de funcionamento

analisador de desempenho.

A partir da informação contida no ficheiro executável ELF sobre as funções que constituem o

software, foi desenvolvido um novo motor de simulação com a habilidade de efectuar a contagem

das funções e das instruções executadas bem como o número de ciclos realizados. Efectua-se assim

a recolha dos dados de desempenho ao nível do simulador, isto é, de forma não intrusiva, sem a

necessidade de introduzir código para efectuar essa recolha. Outra consequência da recolha de

dados de desempenho ao nível do simulador é a contabilização de todas as ocorrências, obtendo-se

assim dados precisos.

A análise de desempenho é efectuada desde o começo da execução do software até à sua

finalização, considerando-se como fim de execução a execução da função exit.

Os resultados obtidos são apresentados através de um relatório de análise de desempenho

baseado no formato dos relatórios produzidos pela ferramenta GNU gprof, e fornecido ao utilizador

na forma de ficheiro de texto, ver apêndice F. para mais detalhes. O relatório é composto por quatro

secções: flat profile, general profile, instruction profile e function profile.

Na secção flat profile os resultados são apresentados por função quanto ao número de

chamadas, número de ciclos realizados, fracção do tempo de execução e número de ciclo realizados

por chamada.

A secção general profile apresentada os resultados por função quanto ao número total de ciclos

realizados, número total de instruções executadas, número de execuções e número de chamadas.

Na secção instruction profile os resultados são apresentados por instrução quanto ao número total

e frequência relativa das execuções.

Na última secção, function profile, os resultados reportados são os mesmos que os reportados na

secção general profile adicionando-se os resultados da execução das instruções nas funções. Os

resultados das instruções reportam o tipo de instrução, o número de execuções por instrução e a

frequência relativa das instruções executadas.

Page 47: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

35

4.1.3 Arquitectura do Modo Analisador de Desempenho

A arquitectura do modo analisador de desempenho é na generalidade idêntica à arquitectura do

modo simulador, exceptuando-se a configuração e o motor de simulação.

Na configuração a diferença encontra-se na fase do carregamento do ficheiro executável em

formato ELF. No modo analisador de desempenho não é só efectuado o carregamento do código

executável do software; é também efectuado o carregamento da informação com a descrição das

funções que fazem parte do software. Esta informação igualmente disponibilizada através do ficheiro

ELF contém as referências de todas as funções bem como o espaço de memória que ocupam.

A partir do motor de simulação do simulador foi desenvolvido um novo motor de simulação para o

modo analisador de desempenho com o intuito de permitir a contabilização dos ciclos e instruções

executadas por função do software simulado. O motor de simulação foi implementado através do

método profile da classe system.SysteM. Na sua implementação recorreu-se a certas

funcionalidades do simulador como capacidade do processador identificar se uma instrução foi

executada ou não e que posição de memória ocupa, e de efectuar a contagem do número de ciclos

processados. Toda a recolha de dados é efectuada ao nível do simulador e não ao nível do software

simulado, logo, de forma não intrusiva. O método desenvolvido para a recolha de dados no motor de

simulação permite a contabilização de todas as ocorrências, o que permite uma análise precisa e não

aproximada.

No fim de cada ciclo processado e se uma instrução foi executada, os dados da instrução são

cruzados com a informação disponibilizada pelo ficheiro ELF sobre as funções para saber a que

função pertence a instrução. O resultado é armazenado em tabelas para posterior tratamento. No

final da simulação processam-se os dados e o resultado é disponibilizado um relatório de análise de

desempenho do software em formato de texto.

Na Figura 12 representa-se o diagrama de actividades Unified Modeling Language (UML) do

motor de simulação do analisador de desempenho.

Processa cicloprocessador FireWorks

Processa cicloperiférico OPB Timer/Counter

Processa cicloperiférico OPB UART Lite

[System Status = sys_status.Normal] [System Status <> sys_status.Normal]

Contabilizaciclos e instruções

por função

Contabilizaciclos e instruções

por função

[instrução ISAexecutada]

[instrução ISA não executada]

Figura 12. Motor de simulação do modo analisador de desempenho

Page 48: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

36

4.2 Modo Depurador/Servidor GDB

4.2.1 Motivação?

No processo de desenvolvimento de software destinado a sistemas embebidos, boa parte do

tempo é gasto na correcção de erros, validação e eliminação de defeitos do programa. A todo este

procedimento dá-se o nome depuração.

A depuração é um trabalho demorado e com algum grau de complexidade. Todos estes factores

dependem do ambiente de desenvolvimento utilizado, do qual fazem parte a linguagem de

programação e as ferramentas de desenvolvimento, as quais incluem o depurador.

O depurador é um programa de computador, cuja função é verificar e controlar a execução de

outros programas com o objectivo de detectar os seus erros e defeitos. O controlo consiste em

examinar/alterar valores dos registos e da memória, definir posições no programa onde a execução

deve ser suspensa (breakpoints), reinicializar ou voltar atrás na execução, etc. Todas estas

características variam de depurador para depurador, até para um dado depurador as suas

características podem variar dependendo do sistema para o qual foi implementado.

A importância de uma ferramenta destas pode ser um factor decisivo a favor da escolha de um

dado sistema ou linguagem de programação. A sua inexistência ou existência de poucas

capacidades podem conduzir mesmo à situação de se preterir um sistema ou linguagem de

programação melhor adaptada à tarefa pretendida, a favor de outras menos adequadas.

Não se deve subestimar o impacto de uma ferramenta como o depurador num projecto de

concepção de software de sistemas embebidos. Esta provoca a diminuição do tempo gasto em

desenvolvimento e em suporte, e a diminuição do número de erros e defeitos do programa.

Reduzindo os custos com o desenvolvimento, e aumentando a qualidade do suporte e do produto

final.

4.2.2 Descrição do Modo Depurador/Servidor GDB

Actualmente na depuração de software para sistemas baseados na arquitectura FireWorks são

utilizadas duas ferramentas, a ferramenta mb-gdb e a ferramenta Xilinx Microprocessor Debugger

(XMD). O princípio de funcionamento de ambas as ferramentas obedece a uma arquitectura

cliente/servidor, com a comunicação efectuada através do protocolo GDB Remote Serial Protocol

(GDB RSP) (ver apêndice G. ) [14] sobre o protocolo Transmission Control Protocol/Internet Protocol

(TCP/IP). A ferramenta mb-gdb é uma versão adaptada da ferramenta cliente GDB para o

processador MicroBlaze. A ferramenta XMD actua como servidor GDB. Ambas as ferramentas

correm no Personal Computer (PC), ligado ao hardware (placa de Field-Programmable Gate Array

(FPGA)) por um cabo Universal Serial Bus (USB) do lado do PC, ligado a um conversor físico

USB/Joint Test Action Group (JTAG) que por sua vez está ligado ao conector JTAG da placa de

FPGA. Esta montagem está ilustrada na Figura 13.

Page 49: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

37

mb-gdb

(Cliente GNU Debugger)

XMD

(servidor GNU Debugger)

ISS (Instruction Set Simulator)

ProtocoloGDB RSP

(Protocolo TCP/IP)

Hardware Baseado na Arquitectura FireWorks

Personal Computer

(Interface JTAG)

(Interface USB)

Conversor USB/JTAG

Figura 13. Interligação entre o hardware e as ferramentas XMD e mb-gdb

A ferramenta XMD tem dois modos de depuração; o modo de hardware e o modo de simulador.

Em modo hardware a execução do software ocorre no hardware, sendo necessário, no acto da

compilação do software adicionar uma porção de código com o nome de stub. A função do stub é a

de controlar a execução do software e efectuar a comunicação entre o hardware e a ferramenta

XMD. A adição do stub é efectuada de forma automática no acto da compilação através da opção –

xl-mode-xmdstub. Este modo acarreta alguns inconvenientes já referidos: é necessário ter acesso

ao hardware físico o que nem sempre é possível; não se consegue ter o controlo total sobre o

ambiente de execução; ao se introduzir o stub pode haver efeitos colaterais durante a execução do

software.

No modo de simulador a ferramenta XMD em conjunto com o simulador do processador

MicroBlaze de ciclo exacto ISS da Xilinx permite a depuração não intrusiva. Como já foi referido,

nesta abordagem o simulador contém as seguintes limitações:

Não pode aceder a periféricos;

O software só pode residir na memória interna do sistema;

A dimensão do software define o tamanho máximo da memória a que o simulador pode

aceder;

Só é possível a utilização através da ferramenta XMD;

O seu código fonte é fechado.

Para que a ferramenta mb-gdb possa fornecer depuração ao nível do código fonte o ficheiro

executável ELF deve conter informação no formato Debug With Attributed Record Format (DWARF),

versão 2 [20]. Esta informação é adicionada automaticamente durante a compilação do software

através da opção –g.

Uma das alterações efectuadas ao simulador foi a eliminação da ferramenta XMD no processo de

depuração do software. A alteração foi implementada através da concepção de um novo modo de

funcionamento do simulador: o modo depurador/servidor GDB. A arquitectura usada continua a

Page 50: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

38

permitir o uso da ferramenta cliente GDB mb-gdb no processo de depuração. A arquitectura

cliente/servidor é mantida: a ferramenta mb-gdb continua a operar como cliente GDB e o simulador

no modo depurador/servidor GDB opera como servidor. A interligação é igualmente efectuada

através do protocolo GDB RSP sobre o protocolo TCP/IP. Na Figura 14 ilustra-se a interligação entre

o simulador e a ferramenta mb-gdb.

Personal Computer

mb-gdb

(Cliente GNU Debugger)

simulador

(servidor GNU Debugger)

Modo Depurador/Servidor GNU Debugger

ProtocoloGDB RSP

(Protocolo TCP/IP)

Figura 14. Interligação entre o simulador e a ferramenta mb-gdb

Os comandos implementados do protocolo GDB RSP possibilitam a execução normal do

software, a execução instrução a instrução, a inserção e remoção de breakpoints e a visualização e

modificação dos registos, memória e variáveis.

O simulador foi adaptado para permitir paragens de execução do software através de breakpoints.

A técnica utilizada é efectuada ao nível do simulador de uma forma não intrusiva, visto não se

adicionar ou alterar código ao software, esta técnica não tem restrições quanto ao número de

breakpoints que se pode utilizar num sistema. Uma vantagem desta técnica é a de suspender toda a

simulação do sistema num breakpoint, eliminando-se assim a possibilidade de ocorrerem excepções

não tratadas.

4.2.3 Arquitectura do Modo Depurador/Servidor GDB

A arquitectura do modo depurador/servidor GDB do ponto de vista geral, é um servidor do tipo

GDB integrado com simulador da FireWorks.

A implementação do servidor GDB consistiu no desenvolvimento de uma interface de

comunicação entre a ferramenta mb-gdb e o simulador. As funcionalidades desta interface foram

implementadas através de métodos na classe tools.Gdb.

Os pacotes do protocolo GDB RSP suportados pela interface estão descritos nas tabelas

seguintes. Os pacotes implementam comandos que o cliente dá ao servidor, para mais detalhes

consultar apêndice G. . Na Tabela 10 listam-se os pacotes utilizados para a manipulação de registos

do processador, tanto em operações de escrita como de leitura.

Tabela 10. Pacotes para manipulação de registos

PACOTE DEFINIÇÃO DO packet-data

retorna o valor de todos os registos g

retorna o valor do registo n... pn...

modifica os registos para XX... GXX...

modifica o registo n... para r... Pn...=r...

Page 51: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

39

Na Tabela 11 são indicados os pacotes para a manipulação da memória. Com estes, pacotes é

possível efectuar operações de escrita e leitura na memória do sistema.

Tabela 11. Pacotes para manipulação da memória

PACOTE DEFINIÇÃO DO packet-data

lê length bytes da memória a partir do endereço addr maddr,length

modifica length bytes da memória a partir do endereço addr com os

dados XX...

Maddr,length:XX...

modifica length bytes da memória a partir do endereço addr com os

dados binários XX... codificado no sistema de oito bit

Xaddr,length:XX...

Os pacotes utilizados para obtenção da informação sobre o estado do sistema encontram-se

representados na Tabela 12.

Tabela 12. Pacotes de informação do estado do sistema

PACOTE DEFINIÇÃO DO packet-data

inquire sobre o offset das secções Text , Data, Bss do software qOffsets

O controlo da simulação do software é efectuado através dos pacotes indicados na Tabela 13,

estes pacotes permitem a inserção e remoção de breakpoints, a definição das tarefas e o controlo da

execução do software. Neste último caso os pacotes implementados permitem a execução de uma

só instrução como a execução contínua do software.

Tabela 13. Pacotes de controlo do software

PACOTE DEFINIÇÃO DO packet-data

define tarefa para as operações subsequentes (m, M, g, G, …),

tarefa usada nos comandos C e s:

. T igual a -1 é aplicado a todas as tarefas

. T igual a 0 é aplicado a qualquer a tarefa

HcT

define tarefa para as operações subsequentes (m, M, g, G, …),

tarefa usada em outras operações:

. T igual a 0 é aplicado a qualquer a tarefa

HgT

executa o programa a partir do ponto onde actualmente se encontra c

executa uma única instrução do programa a partir do ponto onde actualmente se encontra

s

remove software breakpoint z0,addr,length

insere software breakpoint Z0,addr,length

termina o programa K

reporta o último sinal ?

Com a excepção da fase final, todo o procedimento de configuração do simulador no modo

depurador/servidor GDB é realizado da mesma forma que na configuração no modo simulador. A

fase destinada a efectuar o carregamento do ficheiro executável ELF foi removida no modo

depurador/servidor GDB, uma vez que a ferramenta md-gdb já inclui esta funcionalidade. Foi

adicionada uma nova fase no final da configuração para efectuar a configuração da comunicação e

colocar a interface em modo de espera no final. Na Figura 15 encontra-se representado o diagrama

de actividades UML das fases da configuração do modo depurador/servidor GDB.

Page 52: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

40

Carrega ficheiro XMLde

configuração do sistema

Carrega ficheiros XMLdos módulos dos

periféricos e do processador

Configura o sistema- Inicializa Memória

- Inicializa Processador- Inicializa Periféricos

Configura a comunicação da interface

[não válido]

[não válidos]

[válido]

[válidos]

Finaliza execução(erro na configuração)

[configuração correcta]

[configuração errada]

[configuração errada]

[configuração correcta]

Interface em modo espera(simulador pronto para dar inicio à simulação)

Figura 15. Configuração do modo depurador/servidor GDB

Dois dos comandos implementados do protocolo GDB RSP estão relacionados com o controlo da

execução do software. Um dos pacotes efectua a execução contínua do software parando em

breakpoints. O outro pacote efectua a execução de uma só instrução do software.

Para que o simulador opere destas duas formas a parte da arquitectura referente ao motor de

simulação foi alterada para suportar dois motores de simulação. Um motor para a execução contínua

e outro para a execução de uma só instrução. A arquitectura foi reformulada para permitir a utilização

Page 53: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

41

de vários motores de simulação, podendo apenas um operar a cada instante. A arquitectura

possibilita durante a paragem de execução do software efectuar a troca do motor de simulação, esta

troca só é possível de realizar devido ao facto do simulador guardar a cada instante todo o contexto

da simulação do sistema.

O motor de simulação que permite a execução contínua do software é o mesmo que foi utilizado

no modo de simulador. O motor de simulação que possibilita a execução de uma só instrução

encontra-se representado no diagrama de actividades UML da Figura 16, tendo sido implementado

pelo do método step da classe system.SysteM.

Processa cicloprocessador FireWorks

Processa cicloperiférico OPB Timer/Counter

Processa cicloperiférico OPB UART Lite

[instrução ISA não executada]

[instrução ISA executa]

Figura 16. Motor de simulação do modo depurador/servidor GDB

Foi adicionado um novo estado ao sistema, o estado Breakpoint para implementar a paragem

do sistema num breakpoint durante a execução do software. Este estado provoca a paragem de todo

o sistema. Na Tabela 14 listam-se novamente os estados do processador com inclusão do estado

Breakpoint.

Tabela 14. Extensão dos estados do sistema

ESTADOS DESCRIÇÃO

Normal sistema a executar a simulação do software

Stop sistema finalizou a simulação do software

Breakpoint sistema com execução parada devido a breakpoint

Nas operações de leitura e escrita efectuadas com a ferramenta mb-gdb na memória do sistema

não se justifica a modelação funcional e temporal da memória; são efectuadas de forma directa ao

nível do simulador. Para possibilitar esta funcionalidade foram implementados novos métodos de

Page 54: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

42

acesso à memória na classe system.memory.Memory. Para permitir ao mb-gdb efectuar operações

de leitura e escrita nos registos do processador foram implementados métodos com essa finalidade

na classe system.cpu.CPU.

Devido ao facto de serem as instruções a causar a mudança de estado do processador, houve a

necessidade de desenvolver uma nova instrução especial, a instrução breakpoint, que leva o

processador para o estado Breakpoint. Na Tabela 15 listam-se novamente as instruções do

processador com a inclusão especial breakpoint.

Tabela 15. Extensão das instruções do processador

INSTRUÇÕES DESCRIÇÃO

empty instrução vazia

illegal instrução ilegal

mapped instrução não mapeada numa posição de memória

stop instrução de finalização da execução da simulação

breakpoint instrução breakpoint

A instrução especial breakpoint é semelhante à instrução especial Stop com a excepção de

não provocar a paragem final da execução do software, mas apenas a paragem por breakpoint, de

onde a execução do software pode ser retomada novamente.

A inserção e remoção dos breakpoints na memória do sistema são efectuadas pela interface entre

o servidor GDB e o simulador, em consequência do envio de comandos por parte da ferramenta mb-

gdb. Este tipo de comando contém informação sobre a posição de memória onde deve ser colocado

o breakpoint. A inserção de um breakpoint na memória do sistema é efectuada da mesma forma que

a inserção da instrução especial Stop. Na remoção de um breakpoint a interface coloca na sua

posição de memória a instrução referenciada pela instrução breakpoint, deixando assim o

breakpoint estar guardado na memória do programa.

Page 55: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

43

5 Testes Experimentais

Neste capítulo são descritos os testes experimentais realizados no simulador e num sistema real

baseado na arquitectura FireWorks, e são apresentados os resultados obtidos, efectuando-se a

aferição do simulador. As funcionalidades das melhorias implementadas, o modo de analisador de

desempenho e o modo de depurador/servidor GNU Debugger (GDB), são demonstradas através de

testes funcionais.

5.1 Testes de Aferição do Simulador

5.1.1 Descrição dos Testes

Devido à complexidade de implementação de um simulador de um sistema baseado num

microprocessador não se consegue provar a sua funcionalidade. Consegue-se sim dar um certo grau

de confiança sobre o seu funcionamento através de testes de aferição. Os testes de aferição

consistem na realização de testes no simulador tendo como referência o sistema real. Isto é, são

executados tanto no sistema real como no simulador um conjunto de testes julgados adequados para

a função, os resultados obtidos comparados com o objectivo de detectar erros. Com a inexistência de

erros a confiança na funcionalidade do simulador aumenta.

O sistema real usado no âmbito desta tese foi fornecido pela CoreWorks através de uma placa de

desenvolvimento Field-Programmable Gate Array (FPGA) da Digilent [21]. O modelo da placa

fornecida Spartan-3 Board é constituído pela FPGA Spartan-3 da Xilinx [11]. O sistema FireWorks

configurado foi o seguinte:

Processador FireWorks de três andares de pipeline;

Periférico OPB Timer/Counter;

Periférico OPB UART Lite;

64kBytes de memória interna rápida, tipo Block Random Access Memory (BRAM);

64kBytes de memória externa, tipo Static Random Access Memory (SRAM);

Frequência do relógio do sistema 50MHz.

As operações necessárias para se realizar os testes no sistema real são efectuadas através de

um Personal Computer (PC), interligado à placa de desenvolvimento FPGA através de um cabo null

modem ligado nas respectivas portas séries de ambos os dispositivos. Para se descarregar os

programas de teste utilizou-se o programa Xilinx Platform Studio (XPS) da Xilinx e para visualizar os

resultados obtidos um programa do tipo HyperTerminal [22].

Para se realizar os testes no simulador à que primeiro efectuar a sua instalação num PC, como

indicado no apêndice B. . E saber como opera-lo, ver apêndice C. para mais detalhes.

O ficheiro Extensible Markup Language (XML) com a configuração do sistema baseado no

processador FireWorks utilizada nos testes é instalado com o simulador e usado por defeito pelo

mesmo, o conteúdo do ficheiro é auto-explicativo ver apêndice D. . Os ficheiros XML com a

configuração dos módulos dos periféricos e do processador encontram-se no apêndice E. .

Page 56: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

44

Todos os programas de teste utilizados nos testes do simulador foram compilados com a versão

mb-gcc 3.4.1 do compilador GNU Compiler Collection (GCC) presente no Microblaze GNU Toolchain

(Xilinx EDK 8.1.0i). E compilados por defeito com os seguintes opções:

-mxl-barrel-shift, para o compilador utilizar instruções Barrel Shift;

-mno-xl-soft-div, para o compilador utilizar as instruções Interger Divide;

-mno-xl-soft-mul, para o compilador utilizar as instruções Multiply;

-xl-mode-executable, para o compilador usar o modo por defeito na compilação, o

programa começa no endereço 0x00000000 e é ligado com o crt0.o;

-Wall, para activar todos os avisos opcionais durante a compilação;

-O2, para o compilador gerar código executável com o nível dois de optimização.

O objectivo de forçar o compilador utilizar as instruções acima referidas é de testar o máximo

número de instruções diferentes.

Os ficheiros executáveis dos testes realizados no âmbito dos testes de aferição encontram-se na

subdirectoria benchmark da directoria test_programs_executable referenciada no apêndice

B.6 . O código fonte e os respectivos ficheiros de compilação Makefile dos testes de aferição

encontram-se na subdirectoria benchmark da directoria test_programs_source_code

referenciada no apêndice B.6 .

Os testes de aferição encontram-se divididos em dois grupos. O primeiro, constituído por oito

algoritmos e o segundo por cinco versões do Dhrystone Benchmark diferenciadas pelo nível de

optimização do código executável gerado. A utilização Dhrystone Benchmark deve-se ao facto de ser

um dos principais benchmarks utilizados pela indústria neste tipo de sistemas.

Para se poder validar os testes de aferição, os testes realizados para o efeito devem produzir

informação tanto a nível funcional com a nível temporal. No caso dos algoritmos esse requisito não é

completamente satisfeito, principalmente a nível temporal. Com o objectivo de contornar esta

situação os programas dos algoritmos sofreram alterações. Na função main() de cada algoritmo foi

introduzido um sistema de contagem de ciclos de relógio, a contagem começa a ser efectuada antes

do começo da execução do algoritmo propriamente dito e finalizada depois da sua finalização. O

número de ciclos obtidos é mostrado no final. No caso do Dhrystone Benchmark esta situação não se

coloca porque o resultado disponibilizado pelo benchmark está relacionado com o número de

iterações do loop principal por segundo, logo apresenta informação tanto a nível funcional como a

nível temporal.

O Dhrystone Benchmark ao ser executado pede ao utilizador que indique o número de vezes que

o benchmark internamente deve ser executado, nos testes realizados no âmbito desta tese foi

indicado quatro.

Page 57: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

45

Os nomes dos ficheiros executáveis dos algoritmos com relógio usados nos testes de aferição do

simulador encontram-se listados na Tabela 16.

Tabela 16. Nome dos executáveis dos algoritmos com relógio

ALGORITMOS EXECUTÁVEIS

Autocorrelation autocorrelation.clock

Discrete Cosine Transform Algorithm fdct.clock

Fibonacci Number fibonacci.clock

Intel/DVI ADPCM Coder adpcm-coder.clock

Intel/DVI ADPCM Decoder adpcm-decoder.clock

Quicksort Algorithm quicksort.clock

Tak Benchmark tak.clock

Tower of Hanoi hanoi.clock

Na Tabela 17 encontram-se indicados o tamanho total e das secções dos ficheiros executáveis

dos algoritmos com relógio usados nos testes de aferição do simulador.

Tabela 17. Tamanho dos executáveis dos algoritmos com relógio

ALGORITMOS text data bss TOTAL

Autocorrelation 3093 48 1384 4525

Discrete Cosine Transform Algorithm 3925 48 2568 6541

Fibonacci Number 3113 48 1032 4193

Intel/DVI ADPCM Coder 3333 456 3592 7393

Intel/DVI ADPCM Decoder 3273 456 3080 6821

Quicksort Algorithm 3293 248 1232 4773

Tak Benchmark 3197 48 1032 4277

Tower of Hanoi 3133 48 1032 4213

Os nomes dos ficheiros executáveis das várias versões do Dhrystone Benchmark usados nos

testes de aferição do simulador encontram-se listados na Tabela 18.

Tabela 18. Nome dos executáveis do Dhrystone Benchmark

BENCHMARK EXECUTÁVEIS

Dhrystone Benchmark (–O0) dhrystone.-O0

Dhrystone Benchmark (–O1) dhrystone.-O1

Dhrystone Benchmark (–O2) dhrystone.-O2

Dhrystone Benchmark (–O3) dhrystone.-O3

Dhrystone Benchmark (–Os) dhrystone.-Os

Na Tabela 19 encontram-se indicados o tamanho total e das secções dos ficheiros executáveis

das várias versões do Dhrystone Benchmark usado nos testes de aferição do simulador.

Tabela 19. Tamanho dos executáveis do Dhrystone Benchmark

BENCHMARK text data bss TOTAL

Dhrystone Benchmark (–O0) 10569 80 11296 21945

Dhrystone Benchmark (–O1) 7793 80 11296 19169

Dhrystone Benchmark (–O2) 7549 80 11296 18925

Dhrystone Benchmark (–O3) 8325 80 11296 19701

Dhrystone Benchmark (–Os) 7245 80 11296 18621

Page 58: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

46

5.1.2 Resultados dos Testes no Sistema Real

Encontram-se listados na Tabela 20 o número de ciclos de relógio obtidos nos testes dos

algoritmos com relógio no sistema real.

Tabela 20. Número de ciclos obtidos nos testes dos algoritmos com relógio no sistema real

ALGORITMOS NÚMERO DE CICLOS

Autocorrelation 43750

Discrete Cosine Transform Algorithm 10119

Fibonacci Number 4711

Intel/DVI ADPCM Coder 64033

Intel/DVI ADPCM Decoder 59423

Quicksort Algorithm 49605243

Tak Benchmark 89760594

Tower of Hanoi 53477387

Na Tabela 21 encontram-se indicados os Dhrystones por segundo obtidos através dos testes do

Dhrystone Benchmark realizados no sistema real.

Tabela 21. Dhrystones por segundo obtidos nos testes do Dhrystone Benchmark no sistema real

BENCHMARK DHRYSTONES POR SEGUNDO

Dhrystone Benchmark (–O0) 17

Dhrystone Benchmark (–O1) 38

Dhrystone Benchmark (–O2) 38

Dhrystone Benchmark (–O3) 45

Dhrystone Benchmark (–Os) 39

5.1.3 Resultados dos Testes no Simulador

Encontram-se listados na Tabela 22 o número de ciclos de relógio obtidos nos testes dos

algoritmos com relógio no simulador.

Tabela 22. Número de ciclos obtidos nos testes dos algoritmos com relógio no simulador

ALGORITMOS NÚMERO DE CICLOS

Autocorrelation 43750

Discrete Cosine Transform Algorithm 10119

Fibonacci Number 4711

Intel/DVI ADPCM Coder 64033

Intel/DVI ADPCM Decoder 59423

Quicksort Algorithm 49605243

Tak Benchmark 89760594

Tower of Hanoi 53477387

Page 59: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

47

Na Tabela 23 encontram-se indicados os Dhrystones por segundo obtidos através dos testes do

Dhrystone Benchmark realizados no simulador.

Tabela 23. Dhrystones por segundo obtidos nos testes do Dhrystone Benchmark no simulador

BENCHMARK DHRYSTONES POR SEGUNDO

Dhrystone Benchmark (–O0) 17

Dhrystone Benchmark (–O1) 38

Dhrystone Benchmark (–O2) 38

Dhrystone Benchmark (–O3) 45

Dhrystone Benchmark (–Os) 39

Efectuando a comparação entre os resultados obtidos nos testes efectuados no sistema real e no

simulador no âmbito dos testes de aferição pode-se concluir que os resultados obtidos são iguais,

validando assim o funcionamento do simulador para este conjunto de testes.

5.2 Testes Modo Simulador

5.2.1 Descrição dos Testes

Os testes modo simulador são compostos por dois conjuntos de testes, são eles os testes modo

simulador propriamente ditos e os testes funcionais do processador.

Os ficheiros executáveis, código fonte e respectivos ficheiros de compilação Makefile dos testes

realizados no âmbito dos testes modo simulador situam-se nas mesmas subdirectorias dos testes de

aferição.

Na realização dos testes modo simulador foi utilizado o grupo dos algoritmos. Os algoritmos

sofreram uma modificação em relação ao grupo de algoritmos usados nos testes de aferição, o

sistema de contagem de ciclos de relógio foi retirado. O número de ciclos que o algoritmo levou a ser

executado passou a ser dado directamente pelo simulador, com a diferença de serem resultados

totais e não de trechos como acontece nos testes realizados para aferir o simulador.

O objectivo dos testes modo simulador é de demostrar o seu funcionamento e a capacidade do

simulador obter o número de ciclos de relógio e de instruções executadas sem a necessidade de

inserir código extra nos programas.

Os nomes dos ficheiros executáveis dos algoritmos sem relógio usados nos testes do modo

simulador encontram-se listados na Tabela 24.

Tabela 24. Nome dos executáveis dos algoritmos sem relógio

ALGORITMOS EXECUTÁVEIS

Autocorrelation autocorrelation

Discrete Cosine Transform Algorithm fdct

Fibonacci Number fibonacci

Intel/DVI ADPCM Coder adpcm-coder

Intel/DVI ADPCM Decoder adpcm-decoder

Quicksort Algorithm quicksort

Tak Benchmark tak

Tower of Hanoi hanoi

Page 60: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

48

Na Tabela 25 encontram-se indicados o tamanho total e das secções dos ficheiros executáveis

dos algoritmos sem relógio usados nos testes do modo simulador.

Tabela 25. Tamanho dos executáveis dos algoritmos sem relógio

ALGORITMOS text data bss TOTAL

Autocorrelation 572 36 1384 1992

Discrete Cosine Transform Algorithm 1428 36 2568 4032

Fibonacci Number 2633 36 1032 3701

Intel/DVI ADPCM Coder 828 456 3592 4876

Intel/DVI ADPCM Decoder 776 456 3080 4312

Quicksort Algorithm 2837 236 1232 4305

Tak Benchmark 2717 36 1032 3785

Tower of Hanoi 2665 36 1032 3733

Os ficheiros executáveis dos testes realizados no âmbito dos testes funcionais do processador

encontram-se na subdirectoria cpu_tests da directoria test_programs_executable

referenciada no apêndice B.6 . O código fonte e os respectivos ficheiros de compilação Makefile

dos testes de aferição encontram-se na subdirectoria cpu_tests da directoria

test_programs_source_code referenciada no apêndice B.6 .

O objectivo dos testes funcionais do processador é demonstrar a implementação e o

funcionamento das interrupções e excepções do processador modelado no simulador.

Os nomes dos ficheiros executáveis dos testes funcionais do processador constam na Tabela 26.

Tabela 26. Nome dos executáveis dos testes funcionais do processador

TESTES EXECUTÁVEIS

Interrupções clock

Excepções exceptions

5.2.2 Resultados dos Testes em Modo Simulador

Na Tabela 27 encontram-se listados os resultados obtidos através dos testes realizados em modo

simulador. Por cada teste efectuado é indicado o número de ciclos, número de instruções, Cycles Per

Instruction (CPI) e o tempo de execução num sistema real equivalente.

Tabela 27. Resultados dos testes dos algoritmos sem relógio no simulador

ALGORITMOS NÚMERO

DE CICLOS NÚMERO DE INSTRUÇÕES

CPI

TEMPO DE EXECUÇÃO

REAL

Autocorrelation 44489 31342 1,42 0,00088978

Discrete Cosine Transform Algorithm 12981 8125 1,60 0,00025962

Fibonacci Number 5347 3556 1,50 0,00010694

Intel/DVI ADPCM Coder 68659 48753 1,41 0,00137318

Intel/DVI ADPCM Decoder 63148 45166 1,40 0,00126296

Quicksort Algorithm 49605730 31304147 1,58 0,99211454

Tak Benchmark 89761134 59217380 1,52 1,79522280

Tower of Hanoi 53477516 37748824 1,42 1,06955030

Comparando os resultados dos testes modo simulador a nível funcional com os testes

equivalentes efectuados na aferição do simulador obtiveram-se resultados idênticos.

Page 61: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

49

Como o número de ciclos em modo simulador é um valor total e não de um trecho do programa

não se consegue comparar directamente os valores. Mas pode-se efectuar comparação através da

grandeza dos mesmos, o valor do número de ciclos em modo simulador teoricamente será sempre

maior que o valor obtido através dos testes de aferição. Efectuando a comparação tendo em conta a

grandeza entre os valores obtidos foi esse o resultado obtido.

Os outros resultados demostram a capacidade do simulador em recolher dados para efectuar

análise de desempenho sem a necessidade de inserir código nos programas para essa finalidade.

5.2.3 Resultados dos Testes Funcionais do Processador

Os resultados dos testes funcionais do processador deram os resultados esperados.

O teste Interrupções não passa de um relógio, com o processador a tratar e a efectuar contagem

do número de interrupções geradas pelo periférico OPB Timer/Counter. Periférico OPB

Timer/Counter foi configurado para gerar uma interrupção a cada segundo.

Para testar as excepções foi utilizado o teste Excepções, uma excepção de cada tipo é provocada

pelo programa teste e tratada pelo processador. Até à finalização da tese o tratamento de excepções

ainda não tinha sido totalmente implementado no processador FireWorks real, como tal a

implementação efectuada no módulo do processador disponibilizado no simulador foi parcial.

5.3 Testes Modo Analisador de Desempenho

5.3.1 Descrição dos Testes

Os programas de testes utilizados em modo analisador de desempenho são os mesmos que

foram usados em o modo simulador.

O objectivo dos testes modo analisador de desempenho é de mostrar o funcionamento do

simulador na recolher de dados detalhados e precisos para a análise de desempenho. E na produção

de um relatório de desempenho com esses mesmos dados.

5.3.2 Resultados dos Testes em Modo Analisador de Desempenho

Na demonstração dos resultados obtidos dos testes modo analisador de desempenho, tomou-se o

algoritmo Fibonacci Number como referência. O algoritmo foi configurado para efectuar o cálculo

( ). A Figura 17 exibe um excerto do relatório de desempenho do algoritmo Fibonacci Number. O

excerto do relatório mostra a informação contida na secção General Profile. Os dados apresentados

estão organizados por função. Sendo indicado o número de ciclos e instruções executadas, o

número de vezes que a função foi executada e chamada, bem como os resultados totais. Para a

visualização completa do relatório da análise de desempenho do algoritmo ver apêndice F. .

Page 62: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

50

General profile

cycles instructions execute calls function

6 1 1 1 _start

0 0 0 0 _vector_sw_exception

0 0 0 0 _vector_interrupt

0 0 0 0 _vector_hw_exception

7 6 2 1 _start1

1 1 1 1 exit

22 13 1 1 __do_global_dtors_aux

13 7 1 1 frame_dummy

40 29 6 1 _crtinit

4687 3183 1 1 fib

17 12 3 1 main

0 0 0 0 RS232_readByte

66 30 3 3 RS232_writeByte

33 21 6 3 cw_outbyte

0 0 0 0 cw_inbyte

54 34 2 2 cw_padding

195 85 6 1 cw_outnum

0 0 0 0 cw_getnum

124 80 3 1 cw_printf

0 0 0 0 _exception_handler

0 0 0 0 _hw_exception_handler

0 0 0 0 _interrupt_handler

3 2 1 1 _program_clean

3 2 1 1 _program_init

31 22 1 1 strlen

20 12 1 1 __do_global_ctors_aux

14 9 3 1 __init

11 7 2 1 __fini

5347 3556 45 24

Figura 17. Excerto do relatório da análise de desempenho do programa número de Fibonacci

Com os testes modo analisador de desempenho mostrou-se a capacidade do simulador gerar

relatórios detalhados de desempenho sem a necessidade de se inserir código nos programas a

analisar.

5.4 Testes Modo Depurador/Servidor GDB

5.4.1 Descrição dos Testes

Os ficheiros executáveis dos testes realizados no âmbito dos testes funcionais do processador

encontram-se na subdirectoria gdb_tests da directoria test_programs_executable

referenciada no apêndice B.6 . O código fonte e os respectivos ficheiros de compilação Makefile

dos testes de aferição encontram-se na subdirectoria gdb_tests da directoria

test_programs_source_code referenciada no apêndice B.6 .

O propósito da realização dos testes em modo depurador/servidor GDB é demostrar as

funcionalidades do simulador quando aplicado na depuração de software. Com o objectivo de realizar

os testes foram concebidos dois programas para o efeito. Cada programa tem duas versões

diferenciadas pela configuração usada na compilação. Em ambas as versões foi utilizada a

configuração de compilação usada nos programas de teste dos outros modos de funcionamento.

Sendo numa versão adicionado a essa configuração a opção de compilação –g, como já referido

anteriormente esta opção dá indicação ao compilador para adicionar informação de depuração ao

programa.

Page 63: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

51

Os nomes dos ficheiros executáveis sem informação de depuração usados nos testes modo

depurador/servidor GDB do simulador encontram-se listados na Tabela 28.

Tabela 28. Nome dos executáveis sem informação de depuração

TESTES EXECUTÁVEIS

Loop loop

Print print

Interrupções clock

Na Tabela 29 encontram-se indicados o tamanho total e das secções dos ficheiros executáveis

dos testes sem informação de depuração realizados em modo depurador/servidor GDB do simulado.

Tabela 29. Tamanho dos executáveis sem informação de depuração

TESTES text data bss TOTAL

Loop 536 36 1032 1604

Print 2717 60 1032 3809

Interrupções 3213 36 1040 4289

Os nomes dos ficheiros executáveis com informação de depuração usados nos testes modo

depurador/servidor GDB do simulador encontram-se listados na Tabela 30.

Tabela 30. Nome dos executáveis com informação de depuração

TESTES EXECUTÁVEIS

Loop (debug) loop.debug

Print (debug) print.debug

Interrupções (debug) clock.debug

Na Tabela 31 encontram-se indicados o tamanho total e das secções dos ficheiros executáveis

dos testes com informação de depuração realizados em modo depurador/servidor GDB do simulado.

Tabela 31. Tamanho dos executáveis com informação de depuração

TESTES text data bss TOTAL

Loop (debug) 536 36 1032 1604

Print (debug) 2717 60 1032 3809

Interrupções (debug) 3213 36 1040 4289

A intenção de efectuar testes com o programa Interrupções é de testar se o simulador em modo

depurador/servidor GDB ao efectuar uma paragem da execução do software devido a uma

breakpoint todo o funcionamento do sistema fica suspenso, incluindo os periféricos (neste caso o

periférico OPB Timer/Counter). Eliminando-se assim a possibilidade de ocorrerem excepções não

tratadas.

5.4.2 Resultados dos Testes em Modo Depurador/Servidor GDB

O simulador em modo depurador/servidor GDB funcionou como o esperado, possibilitou ao

programa cliente mb-gdb o controlo da execução dos programas testados.

Page 64: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

52

Através do programa cliente mb-gdb foram efectuadas um conjunto de operações durante as

execuções dos programas com o objectivo de validar e testar os comandos do protocolo GDB

Remote Serial Protocol (GDB RSP) implementados no simulador. As operações consistiram em

inserir e remover breakpoints, ler e alterar valores dos registos e de posições de memória, visualizar

valores de variáveis, acompanhar a execução do programa através do código assembly e através do

código fonte escrito em linguagem C entre outras. Excertos da comunicação podem ser visualizadas

no apêndice H. .

Todos os comandos opcionais implementados no simulador com a excepção do comando pn...

(retorna o valor do registo n...) foram testados com êxito. Não foi possível testar o comando

anterior devido não ter sido utilizado pelo programa cliente mb-gdb em todos os testes efectuados.

Quanto aos comandos de implementação obrigatória foram todos validados com êxito através dos

testes efectuados.

À que salientar a seguinte situação, existem dois comandos de implementação obrigatória que o

programa cliente mb-gdb em operação substitui por outros comandos de implementação opcional,

ver Tabela 32. Esta situação deve-se ao facto de o programa cliente mb-gdb dar prioridade ao uso de

comandos mais eficientes, apesar de se atingir os mesmos objectivos com ambos os comandos, os

opcionais pelos quais os obrigatórios são substituídos são mais eficientes em termos de

comunicação, necessitam de menos largura de banda para efectuar a mesma transmissão de dados.

O programa cliente mb-gdb só utiliza os comandos de implementação obrigatória substituídos se os

comandos opcionais não se encontrarem implementados no servidor GDB, algo que não acontece no

modo depurador/servidor GDB. Com o intuito de testar os dois comandos de implementação

obrigatória utilizou-se uma versão do simulador em que os dois comandos opcionais em causa não

foram implementados.

Tabela 32. Comandos de implementação obrigatória substituídos

COMANDOS OBRIGATÓRIOS COMANDOS OPCIONAIS

GXX...

(modifica os registos para XX...)

Pn...=r...

(modifica o registo n... para r...)

Maddr,length:XX...

(modifica length bytes da memória a partir

do endereço addr com os dados XX...)

Xaddr,length:XX...

(modifica length bytes da memória a partir do endereço

addr com os dados binários XX... codificado no sistema

de oito bit)

As versões dos programas de teste sem a informação de depuração apesar de terem funcionado

correctamente só permitiram o acompanhamento da execução através do código assembly.

Enquanto as versões dos programas de teste com a informação de depuração permitiram o

acompanhamento da execução tanto através do código assembly com através do código fonte

escrito em linguagem C. Como se pode constatar pelos tamanhos dos executáveis de ambas as

versões dos programas de teste a adição da informação de depuração num programa não vai

provocar a inserção qualquer código, sendo assim a adição da informação de depuração não vai

influenciar o correcto funcionamento dos mesmos.

Page 65: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

53

O comportamento do simulador em modo depurador/servidor GDB ao executar o programa de

teste Interrupções foi o esperado. Foi inserido um breakpoint na linha if(minute == 60) da

função void timer_counter() do ficheiro clock.c, com o objectivo de parar a execução do

programa após se ter atingido a contagem do primeiro minuto. Ao atingir o breakpoint o simulador

suspendeu a execução do programa, parando não só o processador como os periféricos que fazem

parte do sistema. A pausa da execução dos periféricos que compõem o sistema pode ser constada

pela paragem de geração de interrupções por parte do periférico OPB Timer/Counter.

Page 66: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

54

Page 67: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

55

6 Conclusões e Trabalho Futuro

6.1 Conclusões

O trabalho desenvolvido no âmbito desta tese consistiu no melhoramento de um simulador de

ciclo exacto para sistemas baseados na arquitectura FireWorks.

Foi apresentado um estudo sobre as vantagens da utilização de simuladores, analisando-se os

simuladores actualmente utilizados, de modo a propor um simulador com uma arquitectura flexível,

possibilitando a configuração das funcionalidades desejadas.

A arquitectura concebida possibilita a utilização de módulos de processadores e periféricos

posteriormente desenvolvidos, e efectua a modelação total do sistema. A simulação é realizada ao

nível da instrução, sendo de ciclo exacto, o que permite a obtenção de resultados de desempenho. O

software é carregado no formato Executable and Linking Format (ELF), e o sistema pode ser

configurado usando ficheiros Extensible Markup Language (XML). O código fonte é aberto e permite

futuras modificações.

O simulador do processador MicroBlaze de ciclo exacto Instruction Set Simulator (ISS) contém as

seguintes limitações:

Não pode aceder a periféricos;

O software só pode residir na memória interna do sistema;

A dimensão do software define o tamanho máximo da memória a que o simulador pode

aceder;

Só é possível a utilização através da ferramenta Xilinx Microprocessor Debugger (XMD);

O seu código fonte é fechado.

As melhorias efectuadas ao simulador permitem a operação como analisador de desempenho e

como depurador/servidor GNU Debugger (GDB) de uma forma não intrusiva, e possibilitando a

obtenção de valores exactos na análise de resultados, sem os problemas normalmente observados

em outros métodos.

Na análise de desempenho a ferramenta actualmente utilizada, o gprof, adiciona código ao

software a analisar, podendo assim originar efeitos colaterais, e efectua análise por amostragem, não

obtendo desta forma resultados precisos. Na depuração a ferramenta actualmente utilizada, o XMD,

adiciona ao software a depurar uma porção de código com o nome de stub com o intuito de controlar

a execução do software e efectuar a comunicação com o programa cliente mb-gdb, o que também

pode originar efeitos colaterais na execução do software.

Os resultados obtidos nos testes realizados num sistema real e no simulador, através da

execução de benchmarks adaptados para o efeito, permitiram aferir e demonstrar as funcionalidades

do simulador concebido. O trabalho atingiu todos os objectivos a que se propunha e pode ser

aperfeiçoado para integrar o pacote de ferramentas de desenvolvimento de sistemas baseados no

processador FireWorks.

Page 68: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

56

6.2 Trabalho Futuro

Apesar de terem sido atingidos os objectivos do trabalho, várias funcionalidades podem ser

melhoradas e muitas outras adicionadas.

No que respeita ao modo simulação, vários melhoramentos podem ser implementados mas

seleccionámos três pela sua importância face às necessidades observadas na Coreworks:

O motor de simulação pode ser melhorado para suportar sistemas com múltiplos

processadores, a operar em diferentes frequências;

O funcionamento com ficheiros de estímulos, simulando assim a interacção com o mundo

exterior;

A monitorização da stack do software simulado para depuração de problemas associados

a violações da dimensão da stack.

O modo de análise de desempenho poderia ser melhorado para suportar a análise parcial de

programas em vez da análise global ora implementada, o que permitia focar numa dada zona

problemática do problema. A extensão deste modo a sistemas com múltiplos processadores seria

também bastante útil.

O modo depurador/servidor GDB poderia ser melhorado de forma a ser possível o acesso e a

visualização de registos de periféricos. O suporte de sistemas com múltiplos processadores é

também útil neste modo.

Numa perspectiva de facilitar a sua utilização, podia pensar-se em integrar o simulador

desenvolvido no ambiente integrado de desenvolvimento Eclipse [23]. À semelhança de outros

ambientes de desenvolvimento, seria assim possível efectuar todo o processo de desenvolvimento

de software embebido a partir de um único programa: desenvolvimento do código fonte, compilação,

configuração do simulador para o sistema pretendido, controlo do simulador, depuração, análise de

desempenho e visualização dos relatórios da informação gerada.

Podia também adaptar-se o simulador ao ambiente de simulação dinâmica Simulink [24],

permitindo assim a simulação de software embebido em interacção com sistemas dinâmicos.

Page 69: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

57

Referências

[1] BCC Inc, “Future of Embedded Systems Technology,” Abril 2009.

[2] Coreworks, “Coreworks,” Coreworks, 6 Junho 2013. [Online]. Available: http://www.coreworks-sa.com. [Acedido em 6 Junho 2013].

[3] Coreworks, “Fireworks,” Coreworks, 6 Junho 2013. [Online]. Available: http://www.coreworks-sa.com/index.php?view=fireworks_tech. [Acedido em 6 Junho 2013].

[4] Coreworks, “SideWorks,” Coreworks, 6 Junho 2013. [Online]. Available: http://www.coreworks-sa.com/index.php?view=computing_text. [Acedido em 6 Junho 2013].

[5] S. Craven, “OpenFire Processor Core,” 10 Março 2009. [Online]. Available: http://opencores.org/project,openfire_core. [Acedido em 7 Fevereiro 2011].

[6] Xilinx, MicroBlaze Processor Reference Guide, Embedded Development Kit EDK 9.1i, Xilinx, 2007.

[7] Xilinx, MicroBlaze™ RISC 32-Bit Soft Processor, Xilinx, 21 de Agosto de 2002.

[8] Xilinx, MicroBlaze™ Software Reference Guide, Xilinx, Abril 2002.

[9] D. A. Patterson e J. L. Hennessy, Computer Organization and Design, The Hardware/Software Interface (4th ed.), Morgan Kaufmann, 2009, pp. 335-343.

[10] Xilinx, MicroBlaze Processor Reference Guide, Embedded Development Kit EDK 9.1i, Xilinx, 2007, pp. 73-153.

[11] Xilinx, 6 Junho 2013. [Online]. Available: http://www.xilinx.com. [Acedido em 6 Junho 2013].

[12] GNU, “GNU toolchain,” 6 Junho 2013. [Online]. Available: http://en.wikipedia.org/wiki/GNU_toolchain. [Acedido em 6 Junho 2013].

[13] Richard M. Stallman and the GCC Developer Community, Using the GNU Compiler Collection (GCC), for GCC 3.4.6, Free Software Foundation, 23 de Maio de 2004.

[14] Richard Stallman, Roland Pesch, Stan Shebs, et al., Debugging with gdb, The gnu Source-Level Debugger, Ninth Edition, for gdb version 6.7.50.20071027, Free Software Foundation, 2004.

[15] Daniel Mattsson and Marcus Christensson, Evaluation of synthesizable CPU cores, Master's Thesis, Chalmers University of Technology, 2004.

[16] Xilinx, OPB Timer/Counter (v1.00b) DS465, Xilinx, 2 de Dezembro de 2005.

[17] Xilinx, OPB UART Lite (v1.00b) DS422, Xilinx, 2 de Dezembro de 2005.

[18] Jay Fenlason and Richard Stallman, GNU gprof, The gnu Profiler, Version 2.18.50, Free Software Foundation, 2003.

[19] TIS Committee, Tool Interface Standard (TIS), Executable and Linking Format (ELF) Specification, Version 1.2, TIS Committee, Maio 1995.

[20] UNIX International, Inc., DWARF Debugging Information Format, Revision: 2.0.0, UNIX International, Inc., 27 de Julho de1993.

[21] Digilent, “Digilent Inc. - Digital Design Engineer's Source,” 6 Junho 2013. [Online]. Available: http://www.digilentinc.com. [Acedido em 6 Junho 2013].

[22] Hilgraeve, “HyperTerminal Windows 7 Terminal Emulation Program,” 6 Junho 2013. [Online]. Available: http://www.hilgraeve.com/hyperterminal/. [Acedido em 6 Junho 2013].

[23] Eclipse Foundation, “Eclipse.org home,” 6 Junho 2013. [Online]. Available: http://www.eclipse.org. [Acedido em 6 Junho 2013].

[24] MathWorks, “Simulink - Simulation and Model-Based Design,” 6 Junho 2013. [Online]. Available: http://www.mathworks.com/products/simulink. [Acedido em 6 Junho 2013].

[25] Dropbox, Inc., “Dropbox,” 11 Abril 2014. [Online]. Available: https://www.dropbox.com/. [Acedido em 11 Abril 2014].

[26] Oracle, “For Java Developers,” Oracle, 6 Junho 2013. [Online]. Available: http://www.oracle.com/technetwork/java/index.html. [Acedido em 6 Junho 2013].

Page 70: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

58

Page 71: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

59

Apêndices

Page 72: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

60

Page 73: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

61

A. Estrutura do CD

No âmbito desta tese é fornecido um Compact Disc (CD) com o simulador e toda a documentação

requerida. O simulador é disponibilizado em duas versões, uma para sistema operativo Microsoft

Windows e outra para o sistema operativo GNU/Linux. É fornecido o código fonte do simulador e dos

programas de teste, o diagrama de classes UML e o Javadoc do simulador.

Na Figura 18 mostra-se a estrutura do CD, a estrutura é auto-explicativa.

raiz

[Simulador]

[Código Fonte]

dtool codigo fonte 1.0.0.1.zip

programas de teste codigo fonte.zip

dissertação.pdf

identificação.pdf

resumo.pdf

[Instalação]

[Javadoc]

[UML]

dtool-1.0.0.1-1.i686.rpm

dtool-1.0.0.1-Setup.exe

dtool javadoc 1.0.0.1.zip

diagrama de classes uml rev.1.pdf

Figura 18. Estrutura do CD

Caso o utilizador não tenha acesso ao CD disponibilizado no âmbito desta tese, pode aceder ao

seu conteúdo através do serviço de armazenamento e partilha de arquivos Dropbox [25], o pedido de

partilha do conteúdo deve ser efectuado através do seguinte endereço electrónico

[email protected].

Page 74: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

62

B. Guia de Instalação e Remoção do Simulador

B.1 Modo de disponibilização do simulador

O simulador de sistemas baseados no processador FireWorks concebido no âmbito desta tese é

disponibilizado em conjunto com o pacote de ferramentas de desenvolvimento MicroBlaze GNU

Toolchain, juntamente com o código fonte e executáveis dos programas de teste. Deste modo, todos

os meios utilizados durante os testes experimentais para validação e demostração das

funcionalidades do simulador são facultados ao utilizador. Todo este pacote de ferramentas e

utilitários são fornecidos por um programa de instalação desenvolvido para o efeito.

Com este conjunto de ferramentas é possível efectuar as etapas de concepção, simulação e

depuração de software para sistemas embebidos baseados no microprocessador FireWorks.

B.2 Sistemas operativos suportados

O pacote de ferramentas de desenvolvimento MicroBlaze GNU Toolchain e o simulador

desenvolvido suportam os seguintes sistemas operativos Windows da Microsoft:

Microsoft Windows XP (32 bit/64 bit)

Microsoft Windows Vista (32 bit/64 bit)

Microsoft Windows 7 (32 bit/64 bit)

As distribuições do sistema operativo GNU/Linux suportadas são as seguintes:

Red Hat Enterprise Linux (32 bit/64 bit)

Fedora (32 bit/64 bit)

B.3 Pré-requisitos

O simulador requer a instalação de uma máquina virtual Java no sistema operativo onde vai

operar. São suportadas os seguintes pacotes:

Java SE Development Kit 6 (JDK)

Java SE Runtime Enviroment 6 (JRE)

Se o sistema operativo não tiver instalada uma das versões de Java referidas, o utilizador poderá

obter uma através do sítio da internet da Oracle [26] e proceder à sua instalação.

Page 75: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

63

B.4 Sistemas operativos Microsoft Windows

O conjunto de ferramentas é fornecido através de um programa de instalação com o nome

dtool-1.0.0.1-Setup.exe, o qual deve ser executado para se proceder à instalação. No caso

de ter acesso ao suporte informático fornecido no âmbito desta tese o programa de instalação pode

ser encontrado na directoria /Simulador/Instalação.

No início da instalação aparecer a janela da Figura 19, onde é dada ao utilizador a opção de

seleccionar as ferramentas e utilitários a instalar. Por defeito, todas as ferramentas e utilitários estão

inicialmente seleccionados para instalação, esta deve ser a opção a tomar pelo utilizador caso

pretenda efectuar os testes do simulador no âmbito da tese.

Figura 19. Janela de selecção das ferramentas e utilidades a instalar

A próxima janela da Figura 20 dá ao utilizador a opção de escolher a directoria onde pretende

instalar o conjunto de ferramentas. Ter em atenção à directoria que se escolhe, pois as ferramentas

mb-gdb e mb-uclinux-gdb incluídas no pacote de ferramentas MicroBlaze GNU Toolchain só

funcionam correctamente em directorias cujo caminho total contenha caracteres visíveis do código

American Standard Code for Information Interchange (ASCII), não estendido, e não inclua o caracter

espaço.

Figura 20. Janela de escolha da directoria de instalação

Page 76: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

64

Na janela de finalização da instalação na Figura 21 existe a opção de visualizar o ficheiro Readme.

É aconselhável a sua visualização, visto conter informação quanto ao funcionamento e

características da ferramenta de simulação e depuração.

Figura 21. Janela de finalização da instalação

B.5 Sistemas operativos GNU/Linux

Neste sistema operativo o pacote de instalação do simulador efectua a instalação de todo o

conjunto das ferramentas e utilitários por defeito, não dando opções de selecção de componentes ao

utilizador.

Num terminal, coloque-se na directoria onde se encontra o programa de instalação do conjunto de

ferramentas. No caso de ter acesso ao suporte informático fornecido no âmbito desta tese o

programa de instalação encontra-se na directoria /Simulador/Instalação. E execute o seguinte

comando:

$ rpm –i dtool-1.0.0.1-1.i686.rpm

Caso exista uma versão anterior instalada o comando a usar é o seguinte:

$ rpm –Uvh dtool-1.0.0.1-1.i686.rpm

Após finalização da instalação as ferramentas podem ser encontradas na directoria /opt/dtool, e

estão prontas para utilização.

Para se proceder à remoção do conjunto das ferramentas e utilitários execute o comando:

$ rpm –e dtool-1.0.0.1-1

B.6 Testes ao simulador no âmbito da tese

Todo o material relacionado com os testes ao simulador é instalado na directoria de instalação

das ferramentas e utilitários. Na subdirectoria test_programs_source_code encontra-se o código

fonte e na subdirectoria test_programs_executable encontra-se os executáveis.

Page 77: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

65

C. Guia de Utilização do Simulador

C.1 Modos de Operação

O simulador é disponibilizado através de um programa que funciona em modo terminal. É

constituído por quatro modos de operação indicados na lista seguinte, entre parênteses rectos

encontra-se o parâmetro a utilizar para a selecção do respectivo modo de operação:

Modo de simulador [sim]: neste modo é efectuada a simulação do software. No final é

reportado o número total de instruções e de ciclos realizados.

Modo de análise de desempenho [prf]: neste modo é efectuada a simulação do software

com análise de desempenho. Os resultados são disponibilizados através de um ficheiro

criado para o efeito.

Modo de depurador/servidor GDB [gdb]: através deste modo é efectuada a simulação

com depuração do software. Este modo opera em ligação com a ferramenta mb-gdb

através do protocolo GDB RSP sobre o protocolo TCP/IP.

Modo de traçador de percurso [trc]: através desde modo é efectuada a simulação do

software, sendo reportado para um ficheiro o percurso traçado pelas instruções.

Tendo em mente o desenvolvimento e depuração do próprio simulador foram desenvolvidos três

modos de operação auxiliares, indicados na lista seguinte. Entre parênteses rectos, o parâmetro a

utilizar para a selecção do respectivo modo de operação:

Modo de teste [tst]: através deste modo pode-se efectuar a simulação podendo-se ter

acesso a todos os registos internos do processador, visualizar as instruções que se

encontram nos vários andares de pipeline do processador bem como ao conteúdo da

memória e dos registos dos periféricos. A simulação pode ser controlada instrução a

instrução, ciclo a ciclo, por número de ciclos, por número de instruções e executada até a

finalização normal do software.

Modo de configuração [cfg]: neste modo pode-se efectuar a validação do ficheiro de

configuração XML do sistema a simular.

Modo de ficheiro executável ELF [elf]: neste modo pode-se visualizar a informação

contida neste ficheiro, tais como as funções que fazem parte do software e as posições

de memória que ocupam, o tamanho total e das várias secções do código executável do

ficheiro, bem como verificar a existência da função exit utilizada para a finalização da

execução da simulação.

Page 78: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

66

C.2 Manual de Utilização

O simulador é evocado no terminal através do comando dtool. Para aceder ao manual utilização

do simulador basta executar o seguinte comando:

$ dtool –-help

Na Figura 22 visualiza-se o manual de operação do simulador obtido através da execução do

comando, com os parâmetros e opções a utilizar nos diferentes modos de operação.

Development Tool 1.0.0.1 (dtool) [09/04/2014]

by Joao Ferreira (email: [email protected])

Test mode:

usage: dtool -tst [OPTION]... <binary_file>

[OPTION]...

--syscf <systemconfig_file> ,XML file with the system configuration

--prff <profile_file> ,output file with the simulation profile

--trcf <trace_file> ,output file with the simulation trace

--eventv ,verbose the exceptions and interruptions

<binary_file> ,ELF binary file for FireWorks CPU

Simulator mode:

usage: dtool -sim [OPTION]... <binary_file>

[OPTION]...

--syscf <systemconfig_file> ,XML file with the system configuration

--eventv ,verbose the exceptions and interruptions

<binary_file> ,ELF binary file for FireWorks CPU

GDB Server mode:

usage: dtool -gdb [OPTION]...

[OPTION]...

--syscf <systemconfig_file> ,XML file with the system configuration

--portc <port_number> ,port number for the TCP/IP protocol

--prtclv ,verbose the GDB remote serial protocol

--eventv ,verbose the exceptions and interruptions

Profile mode:

usage: dtool -prf [OPTION]... <binary_file>

[OPTION]...

--syscf <systemconfig_file> ,XML file with the system configuration

--prff <profile_file> ,output file with the simulation profile

Trace mode:

usage: dtool -trc [OPTION]... <binary_file>

[OPTION]...

--syscf <systemconfig_file> ,XML file with the system configuration

--trcf <trace_file > ,output file with the simulation trace

ELF binary file mode:

usage: dtool -elf <binary_file>

<binary_file> ,ELF binary file for the system cpu

System configuration file mode:

usage: dtool -cfg [OPTION]... <systemconfig_file>

or: dtool -cfg [OPTION]...

[OPTION]...

Page 79: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

67

--sysv ,show system configuration

--cpuv ,show cpu configuration

--devv ,show OPB Devices configuration

<systemconfig_file> ,XML file with the system configuration

Others options:

--version ,output version information and defaults

--help ,display this help

Figura 22. Manual de operação do simulador

Com o parâmetro -–version é disponibilizada a localização das directorias onde se encontra

instalado o simulador, os módulos dos processadores e os periféricos bem como dos ficheiros de

configuração. É indicado o ficheiro de configuração XML do sistema utilizado nos testes

experimentais e na demonstração de funcionalidades do simulador. Também são disponibilizados os

nomes por defeitos dos ficheiros gerados pelo modo de análise de desempenho e pelo modo de

traçador de percurso, bem como do número por defeito da porta do protocolo TCP/IP utilizado pelo

modo de depurador/servido GDB. Exemplificação do comando:

$ dtool –version

Na Figura 23 visualiza-se a informação sobre a versão, configuração e valores dos parâmetros

por defeito do simulador.

Development Tool 1.0.0.1 (dtool) [09/04/2014]

by Joao Ferreira (email: [email protected])

Instalation folders:

Program : C:\dtool\dtool\

Configuration : C:\dtool\dtool\configuration_files

OPB Devices : C:\dtool\dtool\opbdevices

Processors : C:\dtool\dtool\processors

Default files:

<systemconfig_file> : systemconfig.xml

<profile_file> : profile.txt

<trace_file> : trace.txt

<systemconfig_file> file path:

Folder : C:\dtool\dtool\configuration_files

Default values:

<port_number> : 1234

Figura 23. Informação sobre a versão e configuração por defeito

C.3 Ligação com a Ferramenta mb-gdb

O primeiro passo para efectuar a ligação entre o simulador e a ferramenta mb-gdb é correr o

simulador em modo depurador/servidor GDB. O utilizador tem a opção de configurar o número da

porta TCP/IP e de iniciar o ficheiro de configuração do sistema. Neste exemplo utilizam-se os valores

por defeito. Abrir um terminal e executar o seguinte comando:

Page 80: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

68

$ dtool –gdb

Development Tool 1.0.0.1 (dtool) [09/04/2014]

by Joao Ferreira (email: [email protected])

GDB Server mode:

System

. File: C:\dtool\dtool\configuration_files\systemconfig.xml

Memory Latency

. LMB, Read: 2 Write: 2

. OPB, Read: 2 Write: 1

. Mapped: 16

Memory Range

. LMB, Begin: 0x00000000 End: 0x0000ffff

. OPB, Begin: 0x80200000 End: 0x8020ffff

Memory Size

. LMB, Size: 65536bytes Size: 64.0kbytes

. OPB, Size: 65536bytes Size: 64.0kbytes

Devices

. Device: OPB Timer Counter Number: 0

- Read latency: 8 Write latency: 4

- Register: TCSR0 Address: 0x80004000

- Register: TLR0 Address: 0x80004004

- Register: TCR0 Address: 0x80004008

- Register: TCSR1 Address: 0x80004010

- Register: TLR1 Address: 0x80004014

- Register: TCR1 Address: 0x80004018

. Device: OPB UART Lite Number: 1

- Read latency: 8 Write latency: 4

- Register: RX Address: 0x80004100

- Register: TX Address: 0x80004104

- Register: STATUS Address: 0x80004108

- Register: CONTROL Address: 0x80004110

CPU

. Name : FireWorks three stage pipeline

. Pipeline stages: 3

. GCC id : 0xbaab

. Frequency : 50.0MHz

--------------------------------------------------------------------------------

Waiting for connections...

. hostname: Windows

. ip: 10.0.2.15

. port: 1234

Figura 24. Inicialização do simulador em modo depurador/servidor GDB

No segundo passo efectua-se a execução da ferramenta mb-gdb. Existem duas formas de o

fazer. A primeira é executar a ferramenta num terminal, correndo o seguinte comando:

$ mb-gdb

A segunda forma é em modo janela, sendo esta forma a utilizada no resto explicação. No sistema

operativo Microsoft Windows executar a ferramenta através do botão Início, escolhendo Início >

Development Tool > mb-gdb. No sistema operativo GNU/Linux executar a ferramenta através do

menu de aplicações, escolhendo Application Menu > Programming > mb-gdb. No ecrã irá

aparecer a janela da Figura 25.

Page 81: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

69

Figura 25. Ferramenta mb-gdb em modo janela

No terceiro passo configurar-se a ferramenta mb-gdb para que a ligação com o simulador possa

ser efectuada. Para tal no menu File seleccione a opção Target Selection. Irá aparecer a

janela da Figura 26 na qual deve ser introduzida a seguinte configuração:

Target: Remote/TCP : XMD/gdbserver

Hostname: localhost

Port: 1234

Figura 26. Janela Target Selection

De salientar que o número da porta a usar tem de ser o mesmo em ambos tanto no simulador

como na ferramenta mb-gdb; nesta demostração foi usado o número da porta por defeito 1234.

Page 82: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

70

O último passo a efectuar é carregamento do software a depurar e proceder à sua execução. No

menu File do mb-gdb seleccione Open… e escolha o executável ELF depurar. Na Figura 27 é

exibida a ferramenta mb-gdb com um executável ELF carregado.

Figura 27. Ferramenta mb-gdb com um executável ELF carregado

De seguida executar o programa seleccionando Run no menu Run. Relembrar que, para obter

todas as potencialidades da ferramenta mb-gdb, deve colocar a opção –g no acto da compilação do

software.

Page 83: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

71

D. Formato dos Ficheiros de Configuração do Sistema

Os sistemas a simular são configurados através de ficheiros do tipo XML Pode-se configurar o

tipo de processador e a latência das suas instruções, o número e tipo de periféricos, o mapeamento

e latência dos registos dos periféricos. Pode-se também configurar, o tipo, mapeamento e latência

das memórias e a frequência de operação do sistema. O ficheiro de configuração XML é definido e

validado através do ficheiro systemconfig.dtd do tipo DTD da Figura 28.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!ELEMENT SYSTEMCONFIGURATION (DESCRIPTION,MEMORY,DEVICE*,CPU)>

<!ELEMENT DESCRIPTION (NAME,VERSION,AUTHOR,COMPANY,DATE,OBS)>

<!ELEMENT NAME (#PCDATA)>

<!ELEMENT VERSION (#PCDATA)>

<!ELEMENT AUTHOR (#PCDATA)>

<!ELEMENT COMPANY (#PCDATA)>

<!ELEMENT DATE (#PCDATA)>

<!ELEMENT OBS (#PCDATA)>

<!ELEMENT MEMORY (LMB,OPB?,MAPPED)>

<!ELEMENT LMB EMPTY>

<!ELEMENT OPB EMPTY>

<!ELEMENT MAPPED EMPTY>

<!ATTLIST LMB read CDATA "1" write CDATA "1" end CDATA #REQUIRED>

<!ATTLIST OPB read CDATA "1" write CDATA "1" begin CDATA #REQUIRED end CDATA #REQUIRED>

<!ATTLIST MAPPED cycle CDATA "1">

<!ELEMENT DEVICE (DEVCLASS,LATENCY,REG*)>

<!ELEMENT DEVCLASS (#PCDATA)>

<!ELEMENT LATENCY EMPTY>

<!ELEMENT REG EMPTY>

<!ATTLIST LATENCY read CDATA "1" write CDATA "1">

<!ATTLIST REG name CDATA #REQUIRED address CDATA #REQUIRED>

<!ELEMENT CPU (CPUCLASS,FREQ?,INST*)>

<!ELEMENT CPUCLASS (#PCDATA)>

<!ELEMENT FREQ (#PCDATA)>

<!ELEMENT INST EMPTY>

<!ATTLIST INST name CDATA #REQUIRED latency CDATA "1" cond_latency CDATA "0">

Figura 28. systemconfig.dtd, ficheiro utilizado na definição e validação do sistema

Na Figura 29 mostra-se o ficheiro de configuração do sistema usado nos testes experimentais e

na demonstração das funcionalidades do simulador.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE SYSTEMCONFIGURATION SYSTEM "systemconfig.dtd">

<SYSTEMCONFIGURATION>

<DESCRIPTION>

<NAME>FireWorks System</NAME>

<VERSION>1.0</VERSION>

<AUTHOR>João Ferreira</AUTHOR>

<COMPANY>Alentejo, S.A.</COMPANY>

Page 84: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

72

<DATE>24/04/2008</DATE>

<OBS>Test system</OBS>

</DESCRIPTION>

<MEMORY>

<LMB read="2" write="2" end="0000ffff"/>

<OPB read="2" write="1" begin="80200000" end="8020ffff"/>

<MAPPED cycle="16"/>

</MEMORY>

<DEVICE>

<DEVCLASS>OPBTimerCounter</DEVCLASS>

<LATENCY read="8" write="4"/>

<REG name="TCSR0" address="80004000"/>

<REG name="TLR0" address="80004004"/>

<REG name="TCR0" address="80004008"/>

<REG name="TCSR1" address="80004010"/>

<REG name="TLR1" address="80004014"/>

<REG name="TCR1" address="80004018"/>

</DEVICE>

<DEVICE>

<DEVCLASS>OPBUARTLite</DEVCLASS>

<LATENCY read="8" write="4"/>

<REG name="RX" address="80004100"/>

<REG name="TX" address="80004104"/>

<REG name="STATUS" address="80004108"/>

<REG name="CONTROL" address="80004110"/>

</DEVICE>

<CPU>

<CPUCLASS>FW_3SP</CPUCLASS>

<FREQ>50000000</FREQ>

<INST name="add"/>

<INST name="addc"/>

<INST name="addi"/>

<INST name="addic"/>

<INST name="addik"/>

<INST name="addikc"/>

<INST name="addk"/>

<INST name="addkc"/>

<INST name="and"/>

<INST name="andi"/>

<INST name="andn"/>

<INST name="andni"/>

<INST name="beq"cond_latency="1"/>

<INST name="beqd"cond_latency="1"/>

<INST name="beqi"cond_latency="1"/>

<INST name="beqid"cond_latency="1"/>

<INST name="bge"cond_latency="1"/>

<INST name="bged"cond_latency="1"/>

<INST name="bgei"cond_latency="1"/>

<INST name="bgeid"cond_latency="1"/>

<INST name="bgt"cond_latency="1"/>

<INST name="bgtd"cond_latency="1"/>

<INST name="bgti"cond_latency="1"/>

<INST name="bgtid"cond_latency="1"/>

<INST name="ble"cond_latency="1"/>

<INST name="bled"cond_latency="1"/>

<INST name="blei"cond_latency="1"/>

<INST name="bleid"cond_latency="1"/>

<INST name="blt"cond_latency="1"/>

<INST name="bltd"cond_latency="1"/>

<INST name="blti"cond_latency="1"/>

<INST name="bltid"cond_latency="1"/>

<INST name="bne"cond_latency="1"/>

<INST name="bned"cond_latency="1"/>

<INST name="bnei"cond_latency="1"/>

<INST name="bneid"cond_latency="1"/>

<INST name="br"/>

<INST name="bra"/>

<INST name="brad"/>

<INST name="brai"/>

<INST name="braid"/>

<INST name="brald"/>

<INST name="bralid"/>

<INST name="brd"/>

<INST name="bri"/>

<INST name="brid"/>

<INST name="brk"latency="3"/>

<INST name="brki"latency="3"/>

Page 85: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

73

<INST name="brld"/>

<INST name="brlid"/>

<INST name="bsll"latency="2"/>

<INST name="bslli"latency="2"/>

<INST name="bsra"latency="2"/>

<INST name="bsrai"latency="2"/>

<INST name="bsrl"latency="2"/>

<INST name="bsrli"latency="2"/>

<INST name="cget"latency="2"/>

<INST name="cmp"/>

<INST name="cmpu"/>

<INST name="cput"latency="2"/>

<INST name="fadd"latency="6"/>

<INST name="fcmpeq"latency="3"/>

<INST name="fcmpge"latency="3"/>

<INST name="fcmpgt"latency="3"/>

<INST name="fcmple"latency="3"/>

<INST name="fcmplt"latency="3"/>

<INST name="fcmpne"latency="3"/>

<INST name="fcmpun"latency="3"/>

<INST name="fdiv"latency="30"/>

<INST name="fmul"latency="6"/>

<INST name="frsub"latency="6"/>

<INST name="get"latency="2"/>

<INST name="idiv"latency="34"/>

<INST name="idivu"latency="34"/>

<INST name="imm"/>

<INST name="lbu"/>

<INST name="lbui"/>

<INST name="lhu"/>

<INST name="lhui"/>

<INST name="lw"/>

<INST name="lwi"/>

<INST name="mfs"/>

<INST name="msrclr"/>

<INST name="msrset"/>

<INST name="mts"/>

<INST name="mul"latency="3"/>

<INST name="mulh"latency="3"/>

<INST name="mulhu"latency="3"/>

<INST name="muli"latency="3"/>

<INST name="ncget"latency="2"/>

<INST name="ncput"latency="2"/>

<INST name="nget"latency="2"/>

<INST name="nput"latency="2"/>

<INST name="or"/>

<INST name="ori"/>

<INST name="pcmpbf"/>

<INST name="pcmpeq"/>

<INST name="pcmpne"/>

<INST name="put"latency="2"/>

<INST name="rsub"/>

<INST name="rsubc"/>

<INST name="rsubi"/>

<INST name="rsubic"/>

<INST name="rsubik"/>

<INST name="rsubikc"/>

<INST name="rsubk"/>

<INST name="rsubkc"/>

<INST name="rtbd"/>

<INST name="rted"/>

<INST name="rtid"/>

<INST name="rtsd"/>

<INST name="sb"latency="1"/>

<INST name="sbi"latency="1"/>

<INST name="sext16"/>

<INST name="sext8"/>

<INST name="sh"latency="1"/>

<INST name="shi"latency="1"/>

<INST name="sra"/>

<INST name="src"/>

<INST name="srl"/>

<INST name="sw"latency="1"/>

Page 86: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

74

<INST name="swi"latency="1"/>

<INST name="wdc"/>

<INST name="wic"/>

<INST name="xor"/>

<INST name="xori"/>

</CPU>

</SYSTEMCONFIGURATION>

Figura 29. systemconfig.xml ficheiro de configuração do sistema usado nos testes experimentais

Page 87: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

75

E. Formato dos Ficheiros de Configuração dos Módulos

Os módulos dividem-se em dois grupos periféricos e processadores, ambos são configurados

através de ficheiros do tipo XML. Cada módulo tem o seu próprio ficheiro de configuração. O ficheiro

situa-se na directoria do respectivo módulo.

No caso dos módulos dos periféricos o ficheiro de configuração permite definir os registos que

fazem parte do dispositivo. O ficheiro de configuração XML é validado e definido através do ficheiro

deviceconfig.dtd to tipo DTD da Figura 30.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!ELEMENT DEVICECONFIGURATION (DESCRIPTION,DEVCLASS,REG*)>

<!ELEMENT DESCRIPTION (NAME,VERSION,AUTHOR,COMPANY,DATE,OBS)>

<!ELEMENT NAME (#PCDATA)>

<!ELEMENT VERSION (#PCDATA)>

<!ELEMENT AUTHOR (#PCDATA)>

<!ELEMENT COMPANY (#PCDATA)>

<!ELEMENT DATE (#PCDATA)>

<!ELEMENT OBS (#PCDATA)>

<!ELEMENT DEVCLASS EMPTY>

<!ELEMENT REG (#PCDATA)>

<!ATTLIST DEVCLASS name CDATA #REQUIRED number CDATA #REQUIRED> Figura 30. deviceconfig.dtd, ficheiro de definição e validação dos módulos dos periféricos

Na Figura 31 mostra-se o ficheiro de configuração do módulo do periférico OPB UART Lite [17],

usado nos testes experimentais e na demostração das funcionalidades do simulador.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE DEVICECONFIGURATION SYSTEM "deviceconfig.dtd">

<DEVICECONFIGURATION>

<DESCRIPTION>

<NAME>OPB UART Lite</NAME>

<VERSION>1.00b</VERSION>

<AUTHOR>João Ferreira</AUTHOR>

<COMPANY>Alentejo, S.A.</COMPANY>

<DATE>24/04/2008</DATE>

<OBS>Test System</OBS>

</DESCRIPTION>

<DEVCLASS name="opbuartlite" number="4"/>

<REG>control</REG>

<REG>status</REG>

<REG>rx</REG>

<REG>tx</REG>

</DEVICECONFIGURATION> Figura 31. opbuartlite.xml, ficheiro de configuração do módulo OPB UART Lite

Page 88: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

76

Na Figura 32 mostra-se o ficheiro de configuração do módulo do periférico OPB Timer/Counter

[16], usado nos testes experimentais e na demostração das funcionalidades do simulador.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE DEVICECONFIGURATION SYSTEM "deviceconfig.dtd">

<DEVICECONFIGURATION>

<DESCRIPTION>

<NAME>OPB Timer/Counter</NAME>

<VERSION>1.00b</VERSION>

<AUTHOR>João Ferreira</AUTHOR>

<COMPANY>Alentejo, S.A.</COMPANY>

<DATE>24/04/2008</DATE>

<OBS>Test system</OBS>

</DESCRIPTION>

<DEVCLASS name="opbtimercounter" number="6"/>

<REG>tcsr0</REG>

<REG>tcsr1</REG>

<REG>tlr0</REG>

<REG>tlr1</REG>

<REG>tcr0</REG>

<REG>tcr1</REG>

</DEVICECONFIGURATION>

Figura 32. opbtimercounter.xml, ficheiro de configuração do módulo OPB Timer/Counter

Nos módulos dos processadores o ficheiro de configuração permite definir as instruções que

fazem parte da ISA do processador, a latência das instruções, o número de andares de pipeline e o

código de identificação do processador com o qual é identificado pelo compilador. O ficheiro de

configuração XML é validado e definido através do ficheiro cpuconfig.dtd da Figura 33.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!ELEMENT CPUCONFIGURATION (DESCRIPTION,CPUCLASS,PIPELINE,INST*)>

<!ELEMENT DESCRIPTION (NAME,VERSION,AUTHOR,COMPANY,DATE,OBS)>

<!ELEMENT NAME (#PCDATA)>

<!ELEMENT VERSION (#PCDATA)>

<!ELEMENT AUTHOR (#PCDATA)>

<!ELEMENT COMPANY (#PCDATA)>

<!ELEMENT DATE (#PCDATA)>

<!ELEMENT OBS (#PCDATA)>

<!ELEMENT CPUCLASS EMPTY>

<!ELEMENT PIPELINE EMPTY>

<!ELEMENT INST EMPTY>

<!ATTLIST CPUCLASS name CDATA #REQUIRED gcc_id CDATA #REQUIRED number CDATA #REQUIRED>

<!ATTLIST PIPELINE stages CDATA #REQUIRED execute CDATA #REQUIRED>

<!ATTLIST INST name CDATA #REQUIRED cond (1|0) "0">

Figura 33. cpuconfig.dtd, ficheiro de definição e validação dos módulos dos processadores

Page 89: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

77

Na Figura 34 mostra-se o ficheiro de configuração do módulo do processador FireWorks com três

andares de pipeline usado nos testes experimentais e na demostração das funcionalidades do

simulador.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE CPUCONFIGURATION SYSTEM "cpuonfig.dtd">

<CPUCONFIGURATION>

<DESCRIPTION>

<NAME>FireWorks Three Stage Pipeline</NAME>

<VERSION>6.0</VERSION>

<AUTHOR>João Ferreira</AUTHOR>

<COMPANY>Alentejo, S.A.</COMPANY>

<DATE>24/04/2008</DATE>

<OBS>Test cpu</OBS>

</DESCRIPTION>

<CPUCLASS name="fw_3sp" gcc_id="baab" number="126"/>

<PIPELINE stages="3" execute="3"/>

<INST name="add"/>

<INST name="addc"/>

<INST name="addi"/>

<INST name="addic"/>

<INST name="addik"/>

<INST name="addikc"/>

<INST name="addk"/>

<INST name="addkc"/>

<INST name="and"/>

<INST name="andi"/>

<INST name="andn"/>

<INST name="andni"/>

<INST name="beq"cond="1"/>

<INST name="beqd"cond="1"/>

<INST name="beqi"cond="1"/>

<INST name="beqid"cond="1"/>

<INST name="bge"cond="1"/>

<INST name="bged"cond="1"/>

<INST name="bgei"cond="1"/>

<INST name="bgeid"cond="1"/>

<INST name="bgt"cond="1"/>

<INST name="bgtd"cond="1"/>

<INST name="bgti"cond="1"/>

<INST name="bgtid"cond="1"/>

<INST name="ble"cond="1"/>

<INST name="bled"cond="1"/>

<INST name="blei"cond="1"/>

<INST name="bleid"cond="1"/>

<INST name="blt"cond="1"/>

<INST name="bltd"cond="1"/>

<INST name="blti"cond="1"/>

<INST name="bltid"cond="1"/>

<INST name="bne"cond="1"/>

<INST name="bned"cond="1"/>

<INST name="bnei"cond="1"/>

<INST name="bneid"cond="1"/>

<INST name="br"/>

<INST name="bra"/>

<INST name="brad"/>

<INST name="brai"/>

<INST name="braid"/>

<INST name="brald"/>

<INST name="bralid"/>

<INST name="brd"/>

<INST name="bri"/>

<INST name="brid"/>

<INST name="brk"/>

<INST name="brki"/>

<INST name="brld"/>

<INST name="brlid"/>

<INST name="bsll"/>

<INST name="bslli"/>

<INST name="bsra"/>

<INST name="bsrai"/>

<INST name="bsrl"/>

<INST name="bsrli"/>

Page 90: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

78

<INST name="cget"/>

<INST name="cmp"/>

<INST name="cmpu"/>

<INST name="cput"/>

<INST name="fadd"/>

<INST name="fcmpeq"/>

<INST name="fcmpge"/>

<INST name="fcmpgt"/>

<INST name="fcmple"/>

<INST name="fcmplt"/>

<INST name="fcmpne"/>

<INST name="fcmpun"/>

<INST name="fdiv"/>

<INST name="fmul"/>

<INST name="frsub"/>

<INST name="get"/>

<INST name="idiv"/>

<INST name="idivu"/>

<INST name="imm"/>

<INST name="lbu"/>

<INST name="lbui"/>

<INST name="lhu"/>

<INST name="lhui"/>

<INST name="lw"/>

<INST name="lwi"/>

<INST name="mfs"/>

<INST name="msrclr"/>

<INST name="msrset"/>

<INST name="mts"/>

<INST name="mul"/>

<INST name="mulh"/>

<INST name="mulhu"/>

<INST name="muli"/>

<INST name="ncget"/>

<INST name="ncput"/>

<INST name="nget"/>

<INST name="nput"/>

<INST name="or"/>

<INST name="ori"/>

<INST name="pcmpbf"/>

<INST name="pcmpeq"/>

<INST name="pcmpne"/>

<INST name="put"/>

<INST name="rsub"/>

<INST name="rsubc"/>

<INST name="rsubi"/>

<INST name="rsubic"/>

<INST name="rsubik"/>

<INST name="rsubikc"/>

<INST name="rsubk"/>

<INST name="rsubkc"/>

<INST name="rtbd"/>

<INST name="rted"/>

<INST name="rtid"/>

<INST name="rtsd"/>

<INST name="sb"/>

<INST name="sbi"/>

<INST name="sext16"/>

<INST name="sext8"/>

<INST name="sh"/>

<INST name="shi"/>

<INST name="sra"/>

<INST name="src"/>

<INST name="srl"/>

<INST name="sw"/>

<INST name="swi"/>

<INST name="wdc"/>

<INST name="wic"/>

<INST name="xor"/>

<INST name="xori"/>

</CPUCONFIGURATION>

Figura 34. fw_3sp.xml, ficheiro de configuração do módulo do processador FireWorks

Page 91: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

79

F. Relatório da Análise de Desempenho da Sequência de Fibonacci

Na Figura 35 encontra-se o ficheiro gerado com o resultado da análise de desempenho de um

programa que gera a sequência de Fibonacci. Este programa foi usado para efectuar os testes

experimentais e de funcionalidades do simulador. O programa foi executado com o valor do

argumento da sequência de Fibonacci igual a 11, este argumento representa o número de números

da sequência de Fibonacci a gerar. O formato do ficheiro é auto-explicativo.

System configuration file

C:\dtools\tools\configuration_files\systemconfig.xml

Binary file

fibonacci

Performance

instructions: 3556

cycles : 5347

cpi : 1.5036558

<frequency> : 50.0MHz

simulation : 0.022666685s

real : 1.0694E-4s

ratio : 210.95703

Flat profile

% cumulative self self

time cycles cycles calls cycles/call function

87,66 4687 4687 1 4687,00 fib

3,65 4882 195 1 195,00 cw_outnum

2,32 5006 124 1 124,00 cw_printf

1,23 5072 66 3 22,00 RS232_writeByte

1,01 5126 54 2 27,00 cw_padding

0,75 5166 40 1 40,00 _crtinit

0,62 5199 33 3 11,00 cw_outbyte

0,58 5230 31 1 31,00 strlen

0,41 5252 22 1 22,00 __do_global_dtors_aux

0,37 5272 20 1 20,00 __do_global_ctors_aux

0,32 5289 17 1 17,00 main

0,26 5303 14 1 14,00 __init

0,24 5316 13 1 13,00 frame_dummy

0,21 5327 11 1 11,00 __fini

0,13 5334 7 1 7,00 _start1

0,11 5340 6 1 6,00 _start

0,06 5343 3 1 3,00 _program_clean

0,06 5346 3 1 3,00 _program_init

0,02 5347 1 1 1,00 exit

0,00 5347 _vector_sw_exception

0,00 5347 _vector_interrupt

0,00 5347 _vector_hw_exception

0,00 5347 RS232_readByte

0,00 5347 cw_inbyte

0,00 5347 cw_getnum

0,00 5347 _exception_handler

0,00 5347 _hw_exception_handler

0,00 5347 _interrupt_handler

General profile

cycles instructions execute calls function

6 1 1 1 _start

0 0 0 0 _vector_sw_exception

0 0 0 0 _vector_interrupt

Page 92: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

80

0 0 0 0 _vector_hw_exception

7 6 2 1 _start1

1 1 1 1 exit

22 13 1 1 __do_global_dtors_aux

13 7 1 1 frame_dummy

40 29 6 1 _crtinit

4687 3183 1 1 fib

17 12 3 1 main

0 0 0 0 RS232_readByte

66 30 3 3 RS232_writeByte

33 21 6 3 cw_outbyte

0 0 0 0 cw_inbyte

54 34 2 2 cw_padding

195 85 6 1 cw_outnum

0 0 0 0 cw_getnum

124 80 3 1 cw_printf

0 0 0 0 _exception_handler

0 0 0 0 _hw_exception_handler

0 0 0 0 _interrupt_handler

3 2 1 1 _program_clean

3 2 1 1 _program_init

31 22 1 1 strlen

20 12 1 1 __do_global_ctors_aux

14 9 3 1 __init

11 7 2 1 __fini

5347 3556 45 24

Instruction profile

instruction # %

addi 12 0,337

addik 1028 28,909

addk 380 10,686

and 3 0,084

andi 13 0,366

beqi 4 0,112

beqid 5 0,141

bgei 4 0,112

bgeid 177 4,978

bgti 1 0,028

blei 2 0,056

blti 1 0,028

bltid 2 0,056

bnei 7 0,197

bneid 6 0,169

bra 1 0,028

brai 1 0,028

bralid 3 0,084

bri 3 0,084

brid 3 0,084

brlid 194 5,456

bslli 1 0,028

bsrli 6 0,169

cmp 177 4,978

cmpu 4 0,112

idivu 2 0,056

imm 8 0,225

lbu 8 0,225

lbui 6 0,169

lw 194 5,456

lwi 382 10,742

mul 2 0,056

or 110 3,093

rsub 3 0,084

rsubk 9 0,253

rtsd 197 5,540

sb 3 0,084

sbi 3 0,084

sext8 6 0,169

sw 193 5,427

swi 385 10,827

xori 7 0,197

3556

Function profile

Page 93: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

81

cycles instructions execute calls function

6 1 1 1 _start

instruction # %

brai 1 100,000

cycles instructions execute calls function

7 6 2 1 _start1

instruction # %

addi 1 16,667

addik 3 50,000

brlid 1 16,667

or 1 16,667

cycles instructions execute calls function

1 1 1 1 exit

instruction # %

bri 1 100,000

cycles instructions execute calls function

22 13 1 1 __do_global_dtors_aux

instruction # %

addik 4 30,769

beqi 1 7,692

bneid 1 7,692

lbui 1 7,692

lw 2 15,385

lwi 1 7,692

rtsd 1 7,692

sbi 1 7,692

sw 1 7,692

cycles instructions execute calls function

13 7 1 1 frame_dummy

instruction # %

addik 2 28,571

beqi 1 14,286

lw 1 14,286

lwi 1 14,286

rtsd 1 14,286

sw 1 14,286

cycles instructions execute calls function

40 29 6 1 _crtinit

instruction # %

addi 10 34,483

bgti 1 3,448

blei 2 6,897

brlid 5 17,241

lw 1 3,448

or 4 13,793

rsub 3 10,345

rtsd 1 3,448

sw 2 6,897

cycles instructions execute calls function

4687 3183 1 1 fib

instruction # %

addik 973 30,569

addk 353 11,090

bgeid 177 5,561

brlid 176 5,529

cmp 177 5,561

lw 177 5,561

lwi 354 11,122

Page 94: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

82

or 88 2,765

rtsd 177 5,561

sw 177 5,561

swi 354 11,122

cycles instructions execute calls function

17 12 3 1 main

instruction # %

addik 4 33,333

addk 2 16,667

brlid 2 16,667

lw 1 8,333

or 1 8,333

rtsd 1 8,333

sw 1 8,333

cycles instructions execute calls function

66 30 3 3 RS232_writeByte

instruction # %

andi 6 20,000

bnei 3 10,000

bsrli 3 10,000

imm 6 20,000

lwi 3 10,000

or 3 10,000

rtsd 3 10,000

swi 3 10,000

cycles instructions execute calls function

33 21 6 3 cw_outbyte

instruction # %

addik 6 28,571

andi 3 14,286

brlid 3 14,286

lw 3 14,286

rtsd 3 14,286

sw 3 14,286

cycles instructions execute calls function

54 34 2 2 cw_padding

instruction # %

addik 4 11,765

addk 2 5,882

and 2 5,882

bgei 2 5,882

lw 2 5,882

lwi 6 17,647

or 4 11,765

rsubk 4 11,765

rtsd 2 5,882

sw 2 5,882

swi 4 11,765

cycles instructions execute calls function

195 85 6 1 cw_outnum

instruction # %

addik 10 11,765

addk 13 15,294

beqid 1 1,176

bgei 2 2,353

blti 1 1,176

bltid 1 1,176

bneid 2 2,353

brlid 5 5,882

bsrli 2 2,353

cmpu 3 3,529

idivu 2 2,353

Page 95: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

83

lbu 2 2,353

lbui 3 3,529

lw 1 1,176

lwi 9 10,588

mul 2 2,353

or 3 3,529

rsubk 4 4,706

rtsd 1 1,176

sb 3 3,529

sbi 1 1,176

sext8 2 2,353

sw 2 2,353

swi 7 8,235

xori 3 3,529

cycles instructions execute calls function

124 80 3 1 cw_printf

instruction # %

addi 1 1,250

addik 12 15,000

addk 9 11,250

andi 2 2,500

beqid 4 5,000

bltid 1 1,250

bneid 3 3,750

bra 1 1,250

brid 3 3,750

brlid 2 2,500

bslli 1 1,250

bsrli 1 1,250

cmpu 1 1,250

lbu 3 3,750

lbui 2 2,500

lw 2 2,500

lwi 6 7,500

or 1 1,250

rtsd 1 1,250

sbi 1 1,250

sext8 4 5,000

sw 1 1,250

swi 16 20,000

xori 2 2,500

cycles instructions execute calls function

3 2 1 1 _program_clean

instruction # %

or 1 50,000

rtsd 1 50,000

cycles instructions execute calls function

3 2 1 1 _program_init

instruction # %

or 1 50,000

rtsd 1 50,000

cycles instructions execute calls function

31 22 1 1 strlen

instruction # %

addik 3 13,636

addk 1 4,545

and 1 4,545

andi 2 9,091

beqi 2 9,091

bnei 3 13,636

bri 1 4,545

imm 2 9,091

lbu 3 13,636

lw 1 4,545

rsubk 1 4,545

Page 96: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

84

rtsd 1 4,545

xori 1 4,545

cycles instructions execute calls function

20 12 1 1 __do_global_ctors_aux

instruction # %

addik 3 25,000

bnei 1 8,333

bri 1 8,333

lw 1 8,333

lwi 2 16,667

rtsd 1 8,333

sw 1 8,333

swi 1 8,333

xori 1 8,333

cycles instructions execute calls function

14 9 3 1 __init

instruction # %

addik 2 22,222

bralid 2 22,222

lw 1 11,111

or 2 22,222

rtsd 1 11,111

sw 1 11,111

cycles instructions execute calls function

11 7 2 1 __fini

instruction # %

addik 2 28,571

bralid 1 14,286

lw 1 14,286

or 1 14,286

rtsd 1 14,286

sw 1 14,286

Figura 35. Relatório da análise de desempenho do programa número de Fibonacci

Page 97: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

85

G. Protocolo GDB Remote Serial Protocol

O processo de comunicação entre o cliente GDB e sistema alvo é definido através do protocolo

GDB Remote Serial Protocol (GDB RSP) [14]. Este protocolo é baseado num sistema de pacotes

constituídos por caracteres ASCII e desenhado para ser usado em qualquer meio de comunicação

que suporte a transferência de dados do tipo half-duplex. É adequado para o uso em redes locais,

como por exemplo Ethernet e comunicações série, como por exemplo a interface Recommended

Standard 232 (RS-232), interface Controller-area Network Bus (CAN-bus), entre outras.

O cliente GDB envia comandos, o sistema alvo envia repostas. Tanto os comandos como as

respostas são enviados através de pacotes. Independentemente do tipo de pacote recebido é

necessário enviar uma notificação acerca da validade do pacote ao emissor. Se o checksum do

pacote recebido estiver correcto é enviado para o emissor o carácter ‘+’; no caso do checksum do

pacote estar errado o carácter enviado é o ‘-‘, indicando que o pacote deve ser reenviado.

A partir da versão 5.0 do protocolo, cada pacote é inicializado pelo carácter cifrão ‘$’, seguido do

campo packet-data e terminado pelo campo checksum. Os campos encontram-se separados

pelo caracter cardinal ‘#’. Os pacotes representam-se assim seguinte forma: $packet-

data#checksum.

O packet-data é o campo que define o comando no caso do cliente GDB ou a reposta no caso

do stub. É composto por uma sequência de caracteres dividido em uma ou mais secções separadas

por um dos caracteres ‘,’, ‘;’ ou ‘:’. São permitidos todos os caracteres com excepção dos

caracteres ‘#’, ‘$’ e dos caracteres com valor numericamente superior a 126. Assim, o protocolo pode

ser usado sobre ligações que só suportam sistemas de caracteres de sete bits, encontradas com

frequência em sistemas anteriores a meados da década de noventa. Actualmente o protocolo já

permite enviar, nalguns tipos de respostas e comandos, dados binários codificados em sistemas de

caracteres de oito bits, tornando assim a transmissão mais eficiente.

O checksum consiste num valor de oito bits sem sinal, obtido através da soma de todos os

caracteres do packet-data no formato de oito bits sem sinal. É representado por dois dígitos no

sistema hexadecimal utilizando os seguintes caracteres [0-9] e [a-f], sem suprimir os zeros à

esquerda.

O envio de dados binários é efectuado através da codificação de cada byte em ASCII, utilizando

os caracteres [0-9], [a-f] e [A-F], para representarem os dois dígitos hexadecimais do byte. Os bytes

são enviados pela ordem utilizada pelo sistema alvo para a representação de dados. Com a

excepção de dados binários da memória ou de registos, todos os zeros à esquerda são suprimidos.

Os dados da resposta podem ser comprimidos de forma a diminuir o tamanho do pacote a ser

enviado, tornando assim mais rápido o seu envio, mas essa característica não é abordada neste

texto.

Certos comandos permitem o envio de dados binários no formato binário, sem recorrer à sua

codificação em ASCII. Para tal seja possível são usados os caracteres de escape ‘#’, ‘$’ e ‘}’. Nas

respostas, o carácter ‘*’ também deve ser considerado um carácter de escape devido à sua

utilização no sistema de compressão de dados.

Page 98: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

86

A comunicação é sempre iniciada pelo cliente GDB que envia um comando ao stub, ficando à

espera da deste. Em geral a resposta é imediata excepto para os comandos ‘C’, ‘c’, ‘s’ e ‘S’ descritos

na Tabela 33. Para estes comandos a resposta só é enviada quando o processamento for suspenso,

por exemplo, um ponto predefinido de interrupção ter sido encontrado.

Tabela 33. Comandos sem resposta imediata

COMANDO DESCRIÇÃO

caddr executa o programa a partir do endereço addr. Se o endereço addr for omisso, a execução começa no ponto onde actualmente se encontra.

Csig;addr executa o programa a partir do endereço addr e envia um número sinal (sig). O número sig não se encontra bem definido no protocolo. Em geral usa-se o sistema de numeração dos sinais do UNIX. Se o endereço addr for omisso, a execução começa no ponto onde actualmente se encontra.

saddr executa uma única instrução do programa a partir do endereço addr. Se o endereço addr for omisso, a execução começa no ponto onde actualmente se encontra.

Ssig;addr executa o programa a partir do endereço addr e envia um número sinal (sig) . O número sig não se encontra bem definido no protocolo. Em geral usa-se o sistema de numeração dos sinais do UNIX. Se o endereço addr for omisso, a execução começa no ponto onde actualmente se encontra.

O stub deve suportar obrigatoriamente os seguintes comandos: ‘g’ (lê registos), ‘G’ (escreve

registos), ‘m’ (lê a memória), ‘M’ (escreve memória), ‘c’ (executa o programa) e ‘s’ (efectua um passo

da execução do programa). Todos os outros comandos são opcionais. Caso o cliente GDB envie um

comando não suportado o stub envia uma resposta vazia (‘$#00‘). Desta forma pode-se adicionar

mais comandos ao protocolo sem causar qualquer tipo de problemas de retro compatibilidade. Se

certos comandos não são suportados o cliente GDB pode substituir por um equivalente ou utilizar

uma sequência de comandos para obter a resposta pretendida.

Se na sequência da execução de um comando ocorrer um erro é enviada como resposta uma

mensagem de erro ($EXX#xx). ‘XX’ são dois caracteres que representam um número no sistema

hexadecimal utilizado para identificar o erro; o número a enviar não vem definido no protocolo. Neste

caso os zeros à esquerda não são suprimidos.

Os dois caracteres ‘xx’ representam o checksum do packet-data do pacote. No caso de

sucesso na execução muitos comandos enviam a resposta OK ($OK#9a).

Page 99: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

87

H. Relatório da Comunicação do Modo Depurador/Servidor GDB

A comunicação efectuada através do protocolo GDB Remote Serial Protocol (GDB RSP) entre o

simulador a operar em modo depurador/servidor GDB e o programa cliente mb-gdb pode ser

visualizada e acompanhada pelo utilizador, ao executar o simulador em modo depurador/servidor

GDB com a opção –-prtclv, ver apêndice B. para mais detalhes.

Os seguintes excertos com a visualização da comunicação apresentados foram obtidos através

da depuração do programa teste Print.

Na Figura 36 encontra-se o excerto inicial da comunicação. Este excerto ocorre logo após o

estabelecimento da comunicação entre ambos os programas. Nesta fase o sistema no simulador é

inicializado, sendo de seguida preparado pelo programa cliente mb-gdb para se efectuar o

descarregamento do programa a depurar. A preparação ao ser finalizada é efectuado o

descarregamento do programa teste para a memória do sistema simulado. Com o descarregamento

efectuado o programa cliente mb-gdb insere automaticamente dois breakpoints, um no inicio da

função main() e outro no inicio da função exit(). A inserção destes breakpoints é efectuada por

defeito, o utilizador tem a opção de remover ambos ou um dos breakpoints da configuração, ou

mesmo de inserir no começo da inicialização do sistema um breakpoint na posição de memória que

pretender. Como se pode ver no fim do excerto da comunicação os dois breakpoints foram inseridos

na posição de memória 0x16c, referente ao inicio da função main(), e na posição 0x68, referente ao

inicio da função exit(). No fim desta fase o simulador e o programa cliente mb-gdb ficam pronto

para inicializar a depuração, aguardando ordens do utilizador.

<-: $Hc-1#09...Ack

->: $OK#9a...Ack

<-: $qC#b4...Ack

->: $#00...Ack

<-: $qOffsets#4b...Ack

->: $Text=0;Data=0;Bss=0#04...Ack

<-: $?#3f...Ack

->: $S05#b8...Ack

<-: $Hg0#df...Ack

->: $OK#9a...Ack

<-: $g#67...Ack

->: $0000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000#00...nAck

->: $0000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000#00...nAck

->: $0000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000#00...nAck

->: $0000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000#00...Ack

<-: $qSymbol::#5b...Ack

->: $#00...Ack

<-: $qxil,D0,2f746573745f70726f6772616d735f65786563757461626c652f6764625f74657374732f70726

96e742f7072696e742e6465627567#f6...Ack

Page 100: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

88

/test_programs_executable/gdb_tests/print/print.debug

->: $OK#9a...Ack

<-: $X0,0:#1e...Ack

->: $OK#9a...Ack

<-: $X0,4:#32...Ack

->: $OK#9a...Ack

<-: $X8,4:#72...Ack

->: $OK#9a...Ack

<-: $X10,4:#4e...Ack

->: $OK#9a...Ack

<-: $X20,4:#47...Ack

->: $OK#9a...Ack

<-: $X50,400:#42...Ack

->: $OK#9a...Ack

<-: $X450,388:#7b...Ack

->: $OK#9a...Ack

<-: $X7d8,24:#94...Ack

->: $OK#9a...Ack

<-: $X7fc,1c:#d3...Ack

->: $OK#9a...Ack

<-: $X818,8:#93...Ack

->: $OK#9a...Ack

<-: $X820,8:#8c...Ack

->: $OK#9a...Ack

<-: $X828,2c5:#7f...Ack

->: $OK#9a...Ack

<-: $Xaf0,28:#df...Ack

->: $OK#9a...Ack

<-: $Xb18,4:#bd...Ack

->: $OK#9a...Ack

<-: $Mf,0:f#af...Ack

->: $OK#9a...Ack

<-: $m68,4#3b...Ack

->: $b8000000#ba...Ack

<-: $m68,4#3b...Ack

->: $b8000000#ba...Ack

<-: $m68,4#3b...Ack

->: $b8000000#ba...Ack

<-: $m68,4#3b...Ack

->: $b8000000#ba...Ack

<-: $m168,4#6c...Ack

->: $30a00828#c6...Ack

<-: $m168,4#6c...Ack

->: $30a00828#c6...Ack

<-: $m16c,4#97...Ack

->: $3021ffd0#26...Ack

<-: $m170,4#65...Ack

->: $d9e00800#fa...Ack

<-: $m174,4#69...Ack

->: $b9f40304#fc...Ack

<-: $m168,4#6c...Ack

->: $30a00828#c6...Ack

<-: $m168,4#6c...Ack

->: $30a00828#c6...Ack

<-: $m16c,4#97...Ack

->: $3021ffd0#26...Ack

<-: $m170,4#65...Ack

->: $d9e00800#fa...Ack

<-: $m174,4#69...Ack

->: $b9f40304#fc...Ack

<-: $m168,4#6c...Ack

->: $30a00828#c6...Ack

<-: $m168,4#6c...Ack

->: $30a00828#c6...Ack

<-: $m16c,4#97...Ack

->: $3021ffd0#26...Ack

<-: $m170,4#65...Ack

->: $d9e00800#fa...Ack

<-: $m174,4#69...Ack

->: $b9f40304#fc...Ack

<-: $Z0,68,4#84...Ack

->: $OK#9a...Ack

Insert breakpoint at 0x00000068.

Page 101: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

89

<-: $Z0,16c,4#e0...Ack

->: $OK#9a...Ack

Insert breakpoint at 0x0000016c.

<-: $Hc0#db...Ack

->: $OK#9a...Ack

Figura 36. Excerto do relatório da comunicação, inicialização do programa teste Print

Na Figura 37 encontra-se um excerto da comunicação referente à inserção de um breakpoint pelo

utilizador. Com a simulação parada o utilizador coloca um breakpoint na linha vinte e quatro

(cw_printf("a - 5 = %d\n",a - 5);) do ficheiro print.c, sendo 0x1a4 a posição de

memória correspondente. E dá ordem para simulação arrancar.

Com o desenrolar da simulação é atingido o breakpoint colocado pelo utilizador provocando a

interrupção da simulação.

<-: $Z0,1a4,4#dc...Ack

->: $OK#9a...Ack

Insert breakpoint at 0x000001a4.

<-: $Hc0#db...Ack

->: $OK#9a...Ack

<-: $c#63...Ack

--------------------------------------------------------------------------------

Print Test Program !!!

Hello Development Tools !!!

a = 30

--------------------------------------------------------------------------------

->: $S05#b8...Ack

Program stopped with signal 5. (breakpoint)

Figura 37. Excerto do relatório da comunicação, inserção do breakpoint no programa teste Print

Na Figura 38 encontra-se o excerto da comunicação referente à finalização da depuração. No

início a simulação encontra-se parada, sendo dada ordem pelo utilizador para o seu arranque. Com o

desenrolar da simulação é atingido o breakpoint que se situa no começo da função exit(),

provocando a interrupção da simulação. O programa cliente mb-gdb remove os breakpoints e finaliza

a comunicação com o simulador, ficando este à espera de uma nova ligação para se reinicializar

novamente o processo de depuração.

<-: $c#63...Ack

--------------------------------------------------------------------------------

a - 5 = 25

a + 5 = 35

a * 5 = 150

a / 5 = 6

--------------------------------------------------------------------------------

->: $S05#b8...Ack

Program stopped with signal 5. (breakpoint)

<-: $g#67...Ack

->: $0000000000000f2800000bc80000000100000000000000000000088700ff0eff34ff2fffc9ffceff36003

100000000000000000000000bf8000000000000005c00000068000000000000002f00000000000000000000000

Page 102: Melhoramentos ao Simulador de Exactidão de Ciclo … simulações de vários programas de teste. Palavras-chave: Processadores, Executable and Linking Format (ELF), Simulador, Depurador

90

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000680

000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000#78...nAck

->: $0000000000000f2800000bc80000000100000000000000000000088700ff0eff34ff2fffc9ffceff36003

100000000000000000000000bf8000000000000005c00000068000000000000002f00000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000680

000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000#78...nAck

->: $0000000000000f2800000bc80000000100000000000000000000088700ff0eff34ff2fffc9ffceff36003

100000000000000000000000bf8000000000000005c00000068000000000000002f00000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000680

000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000#78...nAck

->: $0000000000000f2800000bc80000000100000000000000000000088700ff0eff34ff2fffc9ffceff36003

100000000000000000000000bf8000000000000005c00000068000000000000002f00000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000680

000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000#78...Ack

<-: $z0,68,4#a4...Ack

->: $OK#9a...Ack

Remove breakpoint at 0x00000068.

<-: $z0,16c,4#00...Ack

->: $OK#9a...Ack

Remove breakpoint at 0x0000016c.

<-: $z0,1a4,4#fc...Ack

->: $OK#9a...Ack

Remove breakpoint at 0x000001a4.

<-: $k#6b...Ack

--------------------------------------------------------------------------------

Connection close by GDB client.

--------------------------------------------------------------------------------

Waiting for connections...

. hostname: Windows

. ip: 10.0.2.15

. port: 1234

Figura 38. Excerto do relatório da comunicação, finalização do programa teste Print