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
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 Nova instrução icabac R3000 ArchC Fj Multi Ciclo ArchC FJ Pipeline + ArchC Nova Instrução
ArchC ADL open source LSC UNICAMP Outras ADLs: MIMOLA, UDL/I, PRESSION, 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 Memórias RAM e ROM Pilha e registradores de controle 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 Prática Manual, artigos e monografias 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 Especificação Descrição Ac_ARCH.ac Descrição Ac_ISA isa.ac Top Down Pré Processador ArchC Modelo SystemC GCC Especificação Executável isa.cpp
Metodologia Implementação: Descrição ArchC 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 VHDL (Sashimi) Desc. CACO PS
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: SP: atualizado no 3 estágio, é o ponteiro das variáveis locais RESULT_EC: atualizado o 3 estágio, é o ponteiro da pilha VARS: atualizado no primeiro estágio indica endereço de leitura da ROM atualizado no 4 estágio, indica o resultado da instrução PC: atualizado no 4 estágio
Registradores e Memórias CPU FJ Fila RAM Dados0 Dados1 Dados2 Dados3 ROM RB Inst0 Inst1 Inst2 Inst3 FRAME VARS V0 V1 V2 S0 S1 S2 PC IMAR VARS SP CONST POOL
Registradores e Memórias CPU FJ Fila RAM Dados0 Dados1 Dados2 Dados3 ROM RB Inst0 Inst1 Inst2 Inst3 FRAME VARS V0 V1 V2 S0 S1 S2 PC IMAR VARS SP CONST POOL
Registradores e Memórias CPU FJ Fila RAM Dados0 Dados1 Dados2 Dados3 ROM RB Inst0 Inst1 Inst2 Inst3 FRAME VARS V0 V1 V2 S0 S1 S2 PC IMAR VARS SP CONST POOL
Registradores e Memórias CPU FJ Fila RAM Dados0 Dados1 Dados2 Dados3 ROM RB Inst0 Inst1 Inst2 Inst3 FRAME VARS V0 V1 V2 S0 S1 S2 PC IMAR VARS SP CONST POOL
Registradores e Memórias CPU FJ Fila RAM Dados0 Dados1 Dados2 Dados3 ROM RB Inst0 Inst1 Inst2 Inst3 FRAME VARS V0 V1 V2 S0 S1 S2 PC IMAR VARS SP CONST POOL
Registradores e Memórias CPU FJ Fila RAM Dados0 Dados1 Dados2 Dados3 ROM RB Inst0 Inst1 Inst2 Inst3 FRAME VARS V0 V1 V2 S0 S1 S2 PC IMAR VARS SP CONST POOL
FemtoJava Pipeline + ArchC Estágios e Estados
iload ID
iload iadd ID ID
iload iadd invokestatic ID ID ID
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping immed = ROM[pc]; pc++; RAM[sp] = b
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 immed = ROM[pc]; pc++
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST4 b = a; a = pc; pc = immed; mar = sp ; novo pc
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST4 ST5 immed = ROM[pc]; pc++; RAM[sp] = b; sp ; immed = número de var
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST4 ST6 b = a; mar = sp = sp immed; ST5
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST4 ST7 ST6 RAM[sp] = b; a = frm; salvou PC ST5
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST8 ST4 ST7 ST6 b = a; mar = sp ; ST5
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST8 ST9 ST4 ST7 ST6 a = vars; RAM[sp] = b; salvou frm ST5
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST8 ST9 ST4 ST10 ST7 ST6 b = a; mar = sp ; ST5
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST8 ST9 ST4 ST10 ST11 ST7 ST6 ST5 frm = sp + 2; RAM[sp] = b; salvou vars e novo frm
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST8 ST9 ST4 ST10 ST11 ST7 ST6 ST12 mar = sp ; ST5
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST8 ST9 ST4 ST10 ST11 ST7 ST6 ST13 ST12 ST5 immed = ROM[pc]; pc++; vars = frm + immed; novo vars
iload iadd invokestatic iand ID ID ID
INT=0 ST0 ST1 ST2 Sleeping ST3 ST8 ST9 ST4 ST10 ST11 ST7 ST6 ST14 ST13 ST12 vars = vars + immed; ST5
iload iadd invokestatic iand ID ID ID ID
opcode=op_sleep INT=0 ST0 ST1 ST2 Sleeping cycles_ctrl=11 ST8 cycles_ctrl=01 ST9 ST10 ST11 cycles_ctrl=10 ST4 ST7 ST6 ST14 ST13 ST12 ST3 ST5
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 =85%; ID =85%; =50%; =70% e =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 Nº execução de cada instrução Tempo total de simulação 59k/s (Loop: FJ Funcional) 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 Compilado CACO PS (sim) 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 Arquitetura Pipeline do FJ sem separação clara de estágios Shashime em tempo de compilação ArchC não tem docuementação disso É 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 Fisicamente é na Execução = 5º estágio = 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 Abordagem didática para descrição de um modelo FJ Adaptações e resolução de problema encontrados 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.