Descrevendo o Microcontrolador FemtoJava Pipeline em...

108
Descrevendo o Microcontrolador FemtoJava Pipeline em ArchC UFRGS Programa de Pós-graduação em Computação CMP 237 - Arquitetura e Organização de Processadores Prof. Dr. Flávio Rech Wagner¹ Aluno: Dieison Antonello Deprá² Paulo Roberto Miranda Meirelles³ {flavio¹,dadepra²,prmmeirelles³}@inf.ufrgs.br

Transcript of Descrevendo o Microcontrolador FemtoJava Pipeline em...

Descrevendo o Microcontrolador FemtoJava Pipeline em ArchC

UFRGSPrograma de Pós­graduação em Computação

CMP 237 ­ Arquitetura e Organização de ProcessadoresProf. Dr. Flávio Rech Wagner¹

Aluno: Dieison Antonello Deprá²

Paulo Roberto Miranda Meirelles³{flavio¹,dadepra²,prmmeirelles³}@inf.ufrgs.br

Outline

● Objetivos● ArchC● FemtoJava● Metodologia● Análise FemtoJava + ArchC

– Barreira de Registradores– Detalhamento Registradores– Comportamente Pipeline + Estados

● Implementação FemtoJava + Archc● Estatísticas, Considerações, OBS, Sugestões ...

Objetivos

ArchCFj Multi­Ciclo

Nova instrução iCabacR3000

ArchCFJ Pipeline + ArchC

Nova Instrução

ArchC

● ADL “open source”– LSC – UNICAMP– Outras ADLs: MIMOLA, UDL/I, EXPRESSION, LISA, ISDL, nML, AIDL

● Baseada no SystemC– SystemC é uma linguagem de descrição de hardware

● Exploração de novas arquiteturas● Gerar novas ferramentas de softwares

– Assemblers, simuladores ou back­ends

ArchC

● Capacidade de descrição do conjunto de instruções● Mono­ciclo● Multi­ciclo● Pipeline● Hierarquia de memória● Emulação de sistema operacional● Simulação compilada ...

ArchC

ArchC

ArchC

ArchC

Sobrecarga: behavior( )

Sobrecarga: behavior( )

ArchC

● Descrição dos elementos da arquitetura – Lista recursos arquiteturais como os módulos do 

armazenamento e estrutura pipeline– AC_ARCH: 

● arquiteturaProcessador.ac● Descrição do Conjunto de Instruções

– nomes, formatos, tamanhos, informação de decodificação para cada instrução;

– AC_ISA: ● conjunto_formato_instrucoesProcessador_isa.ac● comportamento_instrucoesProcessador­isa.cpp

ArchC

● aceita duas funções de comportamento – independentes da 

arquitetura do projeto

– ac_behavior (begin)– ac_behavior (end)

ArchC Simulator Generator

ArchC Compiled Simulator Generator

ArchC Assembler Generator

Versões ArchC

FemtoJava

● Unidade de processamento baseada em arquitetura de pilha– Banco de Registradores

● Pilha e registradores de controle● Memórias RAM e ROM

– Fisicamente distintas e utilizam espaços de endereçamento separados

– Configurável com a aplicação– Não tem Cache

● Uso da técnica de forwarding

FemtoJava

● Implementa um subconjunto de instruções da JVM– Consistente com a especificação da JVM

● Registradores para armazenar elementos da pilha– ganho de desempenho– redução na área ocupada em FPGA– processamento realizado simultaneamente aos acessos à 

memória● FPGA como o componente alvo para síntese

Metodologia

● ArchC– Estudo Teórico

● Manual, artigos e monografias– Prática

● Instalação e testes● Ferramentas geradas● Simulações (Mips, Sparc­V8)

● FemtoJava– Dissertações: Ito, Beck e Moraes– Manual: 

● Sashimi (gerando VHDL) e CACO­PS (.C e mifs)– Esquemáticos

Metodologia

● Implementação– Fluxo de projeto no ArchC

● Top Down

Descrição Ac_ISA

Descrição Ac_ARCH

.ac ­isa.cpp­isa.ac

Pré­Processador ArchC

Modelo SystemC

GCC

Especificação Executável

Especificação

Metodologia

● Implementação: – Tamanhos: Palavra e Fetch– Mem. RAM e ROM– Registradores (tamanho)– Estágios– Barreira de Registradores– Instruções

● Conjunto, formatos, tipos, compostamentos (geral, tipos e específico)

– Pilha ...– Descrição Funcional

PicoJava

Esquemático 2

Esquemático 1 Desc. CACO­PS

VHDL (Sashimi)

Descrição ArchC

Análise: Esquemático FJ Multi­Ciclo

Análise:  Esquemático 1 FJ Pipeline

Análise: Esquemático 2 FJ Pipeline

FemtoJava Pipeline: Busca de Instruções

Barreira de Registradores

Selecionando Busca de Instrução

Detalhando Busca de Instrução

Busca de Instruções: Simplificação

FemtoJava Pipeline: Decodificação

Barreira de Registradores

Selecionando Decodificação

Detalhando Decodificação

Decodificação: Simplificação

FemtoJava Pipeline: Busca de Operandos

Barreira de Registradores

Selecionando Busca de Operandos

Detalhando Busca de Operandos

Busca de Operandos: Simplificação

FemtoJava Pipeline: Execução

Barreira de Registradores

Selecionando Execução

Detalhando Execução

Execução: Simplificação

FemtoJava Pipeline: Estágios

Selecionando Escrita de Resultados

Detalhando Escrita de Resultados

Escrita de Resultados: Simplificação

Detalhes dos Registradores FemtoJava

● “Principais”– IMAR: 

● atualizado no primeiro estágio indica endereço de leitura da ROM– SP: 

● atualizado o 3 estágio, é o ponteiro da pilha– VARS: 

● atualizado no 3 estágio, é o ponteiro das variáveis locais– RESULT_EXEC: 

● atualizado no 4 estágio, indica o resultado da instrução– PC: atualizado no 4 estágio

V1V2

V0

FRAMEVARS

S1S0

S2

Inst3Inst2

Inst0Inst1

Dados3Dados2

Dados0Dados1

RAM ROMRB

PC

SP

IMAR

CONST POOL

VARS

CPU FJFila

Registradores e Memórias

V1V2

V0

FRAMEVARS

S1S0

S2

Inst3Inst2

Inst0Inst1

Dados3Dados2

Dados0Dados1

RAM ROMRB

PC

SP

IMAR

CONST POOL

VARS

CPU FJFila

Registradores e Memórias

V1V2

V0

FRAMEVARS

S1S0

S2

Inst3Inst2

Inst0Inst1

Dados3Dados2

Dados0Dados1

RAM ROMRB

PC

SP

IMAR

CONST POOL

VARS

CPU FJFila

Registradores e Memórias

V1V2

V0

FRAMEVARS

S1S0

S2

Inst3Inst2

Inst0Inst1

Dados3Dados2

Dados0Dados1

RAM ROMRB

PC

SP

IMAR

CONST POOL

VARS

CPU FJFila

Registradores e Memórias

V1V2

V0

FRAMEVARS

S1S0

S2

Inst3Inst2

Inst0Inst1

Dados3Dados2

Dados0Dados1

RAM ROMRB

PC

SP

IMAR

CONST POOL

VARS

CPU FJFila

Registradores e Memórias

V1V2

V0

FRAMEVARS

S1S0

S2

Inst3Inst2

Inst0Inst1

Dados3Dados2

Dados0Dados1

RAM ROMRB

PC

SP

IMAR

CONST POOL

VARS

CPU FJFila

Registradores e Memórias

FemtoJava Pipeline + ArchC

Estágios e Estados

iload IF ID OF EX WB

iload

iadd

IF ID OF EX WB

IF ID OF EX WB

iload

iadd

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WB

ST1 ST2 SleepingST0

INT=0

immed = ROM[pc]; pc++; RAM[sp] = b 

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

ST3

ST1 ST2 SleepingST0

INT=0

immed = ROM[pc]; pc++

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WBOF EX WB

ST4

ST3

ST1 ST2 SleepingST0

INT=0

b = a;a = pc; pc = immed; mar = sp­­; ­­ novo pc

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

OF EX WBOF EX WB

ST4

ST5

ST3

ST1 ST2 SleepingST0

INT=0

immed = ROM[pc]; pc++; RAM[sp] = b; sp­­;  ­­ immed = número de var

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

OF EX WBOF EX WBOF EX WB

ST4

ST5ST6

ST3

ST1 ST2 SleepingST0

INT=0

b = a; mar = sp = sp ­ immed;

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

OF EX WBOF EX WBOF EX WBOF EX WB

ST4

ST5ST6

ST3

ST7

ST1 ST2 SleepingST0

INT=0

RAM[sp] = b; a = frm;  ­­ salvou PC

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

OF EX WBOF EX WBOF EX WBOF EX WBOF EX WB

ST4

ST5ST6

ST8

ST3

ST7

ST1 ST2 SleepingST0

INT=0

b = a; mar = sp­­;

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

OF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WB

ST4

ST5ST6

ST9

ST8

ST3

ST7

ST1 ST2 SleepingST0

INT=0

a = vars; RAM[sp] = b; ­­ salvou frm 

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

OF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WB

ST4

ST5ST6

ST9

ST8

ST3

ST7

ST1 ST2 SleepingST0

ST10

INT=0

b = a; mar = sp­­;

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

OF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WB

ST4

ST5ST6

ST11

ST9

ST8

ST3

ST7

ST1 ST2 SleepingST0

ST10

INT=0

frm = sp + 2; RAM[sp] = b; ­­ salvou vars e novo frm

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

OF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WB

ST4

ST5ST6

ST11

ST12

ST9

ST8

ST3

ST7

ST1 ST2 SleepingST0

ST10

INT=0

mar = sp­­;

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

OF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WB

ST4

ST5ST6

ST11

ST12

ST9

ST8

ST3

ST7

ST1 ST2 SleepingST0

ST10

ST13

INT=0

immed = ROM[pc];pc++; vars = frm + immed; ­­novo vars

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF OF EX WBOF EX WB

OF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WB

ST4

ST5ST6

ST11

ST12

ST9

ST8

ST3

ST7

ST1 ST2 SleepingST0

ST10

ST13

ST14

INT=0

vars = vars + immed;

iload

iadd

iand

invokestatic

IF ID OF EX WB

IF ID OF EX WB

IF ID OF EX WB

IF

ID OF EX WB

OF EX WBOF EX WB

OF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WBOF EX WB

ST4

ST5ST6

ST11

ST12

ST9

ST8

ST3

ST7

ST1 ST2 SleepingST0

opcode=op_sleep

ST10

ST13

ST14

cycles_ctrl=11

cycles_ctrl=10cycles_ctrl=01

INT=0

Abordagem FJ Pipeline

● Mecanismo de controle de separação da memória RAM (dados) e memória ROM (instruções ou programa)– modificando os arquivos gerados pelo ArchC (systemC) 

● rotina de carga de memória de dados antes do início da inicialização● Mecanismo de gerenciamento de pilha não documentado 

na especificação do ArchC– implementação de um banco de registradores apontado por um 

registrador SP (Stack Pointer) que marca o topo da pilha– sem controle de estouro de pilha

Abordagem FJ Pipeline

● FemtoJava possuir tamanaho de palavra e tamanho de instrução variável– Incremento do PC 

● sempre dado em relação ao tamanho da palavra– Analisando  o código systemC descobriu­se dois recursos não 

documentados da linguagem ArchC● AC_PC += AC_INSTR_SIZE/AC_FETCH_SIZE.

Abordagem FJ Funcional (mono­ciclo)

● Imlementação de todos os opcodes definidos pela arquitetura (com exceção do tratamento de portas)– simulador em systemC gerado plea ArchC– simulador executável– geração de um montador assembly

● Testes de algoritmos (CACO­PS e Sashimi)– arquivos ram.mif e rom.mif– carga do arquivo de inicialização da memória de dados– alteração da descrição systemC

Abordagem FJ Funcional (mono­ciclo)

● Avaliação das funcionalidades– programa não estava começando a execução no endereço 

inicial correto– montador assembly não estava gerando código adequado– arquivos de entrada para a simulação

● ram.mif e rom.mif● Programa ficava em loop infinito/Falhas de seguimentação

– falhas na atribuição de valores aos registradores de controle da pilha e PC 

● getStatic, putStatic e inovokStatic (solucionados)● continua em loop infinito

FemtoJava + ArchC

Implementação

Pipeline: femtoJava.ac (1)

Pipeline: femtoJava.ac (2)

Funcional: femtoJava.ac

Pipeline e Funcional: femtoJava_isa.ac

Pipeline: femtoJava_isa.cpp

Funcional: femtoJava_isa.cpp

Pipeline: femtoJava_syscall.cpp

Funcional: femtoJava_syscall.cpp

Estatísticas da Codificação Pipeline

● femtojava.ac = 52 linhas● femtojava_isa.ac = 287 linhas● femtojava_isa.cpp = 3423 linhas● femtojava_syscall.cpp = 132 linhas● femtojava_utils.h = 293 linhas● 63 instruções descritas

– IF =85%; ID =85%; – OF =50%; EX=70% e WB=60%

Estatísticas da Codificação Funcional

● femtojava.ac = 30 linhas● femtojava_isa.ac = 277 linhas● femtojava_isa.cpp = 1667 linhas● femtojava_syscall.cpp = 86 linhas● femtojava_utils.h = 305 linhas

Estatísticas Geradas pelo ArchC

● Nº instruções executadas– 59k/s (Loop: FJ Funcional)

● Nº execução de cada instrução● Tempo total de simulação

– máquina local: (final ­ inicial)● Tempo estimado de execução

– Base de acesso o hardware● 20 ns x chamadas (recursos)

– reconfigurável ● Dump dos dispositivos de armazenamento

Outras características do ArchC

● Não faz análise de potência– CACO­PS (sim)

● Compilado– CACO­PS (Interpretado)

● Gera SystemC ­> VHDL

Consideração

● Documentação do FemtoJava:– Incompleta– Discrepância entre:

●  Esquemáticos, VHDL e descrição do CACO­PS● ArchC não descreve (sem exemplos) alguns recursos 

avançados– Recursos específico de Pilha

● Resolvido com RB e SP– Memória Principal separadas entre dados e programas– Portas de comunicação com periféricos

Consideração

● OBSs sobre FemtoJava– Memórias de dados pré­inicializada

● Shashime em tempo de compilação● ArchC não tem docuementação disso

– Arquitetura Pipeline do FJ sem separação clara de estágios● É Pipeline, porém trabalha, para cada instrução, com núm. 

Variável de ciclo no mesmo estágio– Execução e Acesso a memória no mesmo estágio

● Não tem bloco de acesso à memória no esquemático do FJ

Consideração

● Cálculo do Incremento do PC:– No esquemático é na Escrita de Resultados

● WB = 5º estágio– Fisicamente é na Execução

● EX = 4º estágio● Barreira de Registradores:

– Saber qual é barreira pela descrição do CACO­PS– Mas saber o tamanho da barreira pelo VHDL

Sugestão de Trabalhos

● ArchC– Descrição de recursos funcionais

● ex.: somador vinculado ao estágio do pipeline● setar sinais de controle

● FemtoJava– Documentação e esquemáticos em conformidade com os 

códigos VHDL.● Facilitaria a utilização didática● Diminuiria o tempo para a curva de aprendizado● Menos tempo despendido com análise da arquitetura = mais tempo 

para produção científica;

Contribuições

● Aproximadamente 75% da descrição do FemtoJava Pipeline em ArchC– Adaptações e resolução de problema encontrados

● Abordagem didática para descrição de um modelo FJ– Funcional (mono­ciclo)

● Funcionalidade não especificadas no ArchC encontradas

● Pontos de melhoria para esquemáticos e especificação para o FemtoJava

Referências

(1) ITO, S. A.; CARRO, L.; JACOBI, R. P. Making Java Work for Microcontroller Applications. IEEE Design & Test of Computers, [S.l.], v.18, n.5, p.100­110, Sep./Oct. 2001.

(2) BECK, Antonio Carlos S. Uso da Técnica VLIW para Aumento de Performance e Redução do Consumo de Potência em Sistemas Embarcados Baseados em Java. 2004. 118 f. Dissertação de Mestrado (Programa de Pós­Graduação em Ciência da Computação)­ UFRGS, Porto Alegre, maio de 2004.

(3) MORAES, Marcelos de Souza. STEP: Planejamento, Geração e Seleção de Auto­Teste On­Line para Processadores Embarcados. 2006. 157 f. Dissertação de Mestrado (Programa de Pós­Graduação em Ciência da Computação)­ UFRGS, Porto Alegre, 2006.

(4) VENNERS, B. Inside the Java Virtual Machine. New York, USA: McGraw­Hill, 1998.(5) Sashimi ­ Manual do usuário: Versão 0.9. UFRGS, Janeiro de 2006.(6) Rigo, Azevedo and Araujo,The ArchC Archicteture Description Language 

Technical Report Intitute of Computation, State University of Campinas, Brazil, June 2003.

(7) Rigo, Azevedo and Araujo The ArchC Language Reference Manual, vs 1.5, June 2005.

Referências

(8)SystemC Community. Disponível em http://www.systemc.org.(9)Martin, G. SystemC and the future of design languages: opportunities for users and research. Integrated Circuits and Systems Design, 2003. SBCCI 2003. Proceedings. 16th Symposium on.(10)Daniel Carlos Casarotto, Jose Otavio Carlomagno Filho. Geração Automática de Montadores a Partir de ArchC: Um Estudo de Caso com o PowerPC 405. 2004. Trabalho de Conclusao de Curso em Barachel em Ciência da Computação, UFSC.(11)Felipe Camilo e Silva Martins,Wesley Tambani da Silva. A linguagem de descrição de arquitetura ArchC. Unicamp ...(12)Alexandro Baldassin , Paulo C. Centoducatte. Geracao Automatica de Montadores para Modelos de Arquiteturas Escritos em ArchC. Unicamp ...(13)http://www.gnu.org/software/bison/. The Bison Parser Generator.(14)http://www.gnu.org/software/flex/. The Flex Lexical Analyser Generator.