1 / 62

Construção de Modelos de Processadores Usando Uma Linguagem de Descrição de Arquiteturas

Construção de Modelos de Processadores Usando Uma Linguagem de Descrição de Arquiteturas. Sandro Rigo, Rodolfo Azevedo, Guido Araujo, Paulo Centoducatte Computer Systems Laboratory http://www.lsc.ic.unicamp.br IC-UNICAMP. Roteiro. Introdução O que é uma ADL Características de ArchC

carter
Download Presentation

Construção de Modelos de Processadores Usando Uma Linguagem de Descrição de Arquiteturas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Construção de Modelos de Processadores Usando Uma Linguagem de Descrição de Arquiteturas Sandro Rigo, Rodolfo Azevedo, Guido Araujo, Paulo Centoducatte Computer Systems Laboratoryhttp://www.lsc.ic.unicamp.br IC-UNICAMP

  2. Roteiro • Introdução • O que é uma ADL • Características de ArchC • O Modelo SUB-MIPS em ArchC • Descrição do ISA • Descrição da Estrutura • Ferramentas de ArchC • Demonstração

  3. Introdução • Projeto de Sistemas Dedicados • 90% dos processadores programáveis são dedicados • Requisitos/Restrições • Projeto em Nível de Sistema • Sistemas terão mais de 1 Bi. de transistores • Modelos Flexíveis de Simulação • Especialização de ISA • Geração de Ferramentas de Software • Hardware/Software Codesign

  4. Hardware / Software Codesign

  5. Desenvolvimento do Software

  6. Linguagens de descrição de arquitetura • Modelagem da arquitetura em diversos níveis de abstração • Comportamental • Precisão de ciclos • Geração automática de ferramentas de produção de software • Verificação do modelo a cada nível de abstração • Exploração do espaço de projeto

  7. SystemC • É uma Hardware Description Language (HDL) • Extensão de C++ • Modelagem em vários níveis de abstração • Open-source (www.systemc.org) • Não é ideal para redirecionamento automático de ferramentas

  8. ArchC • Informação de ISA e estrutura • Gera simuladores em SystemC e C++ • Gera montadores baseado no GNU Binutils • Modela hierarquia de memória • Interface de depuração • Emulação de chamadas de SO • Integração com IPs SystemC

  9. Descrição ArchC Descrição dos Recursos (AC_ARCH) . Registradores . Memória . Estrutura de Pipeline Descrição do ISA (AC_ISA) Descrição do formato, tipo e codificação/decodifição das instruções Descrição do comportamento das instruções (C++/SystemC) Elementos da linguagem ArchC

  10. Construção do Modelo SUB-MIPS

  11. Instruções do SUB-MIPS

  12. Modelando usando ArchC

  13. P C S r c M A d d u x A L U A d d 4 r e s u l t S h i f t l e f t 2 R e g i s t e r s A L U o p e r a t i o n 3 R e a d M e m W r i t e A L U S r c R e a d r e g i s t e r 1 P C R e a d a d d r e s s R e a d M e m t o R e g d a t a 1 Z e r o r e g i s t e r 2 I n s t r u c t i o n A L U A L U R e a d W r i t e R e a d A d d r e s s r e s u l t M d a t a r e g i s t e r d a t a 2 M u I n s t r u c t i o n u x W r i t e m e m o r y D a t a x d a t a m e m o r y W r i t e R e g W r i t e d a t a 3 2 1 6 S i g n M e m R e a d e x t e n d Modelagem Funcional Detalhes estruturais abstraídos → monociclo

  14. Modelagem Funcional Recursos da Arquitetura (AC_ARCH) AC_ARCH(submips){ ac_mem MEM:64K; ac_regbank RB:32; ac_wordsize 32; ARCH_CTOR(submips) { ac_isa(“submips_isa.ac"); set_endian(“big”); }; };

  15. Definição do ISA • Descrição dos formatos das instruções • ac_format • Declaração das instruções • ac_instr • Descrição da sintaxe assembly, codificação e decodificação • ac_asm_map • set_asm • set_decoder

  16. Formatos de Instrução 31 26 25 21 20 16 15 11 10 6 5 0 op rs rt rd shamt funct R-Type (Register) 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits ac_format Type_R = "%op:6 %rs:5 %rt:5 %rd:5 %shamt:5 %funct:6 "; 31 26 25 21 20 16 15 0 op rs rt immediate I-Type (Immediate) 6 bits 5 bits 5 bits 16 bits ac_format Type_I = "%op:6 %rs:5 %rt:5 %imm:16:s";

  17. Declaração de Instruções AC_ISA(submips){ ac_format Type_R = "%op:6 %rs:5 %rt:5 %rd:5 0x00:5 %func:6"; ac_format Type_I = "%op:6 %rs:5 %rt:5 %imm:16"; ac_instr<Type_R>add, mul; ac_instr<Type_I>lw, bne, addi; ISA_CTOR(submips) { add.set_asm("add %reg, %reg, %reg“, rd,rs,rt); add.set_decoder(op=0x00, func=0x20); lw.set_asm("lw %reg, %imm(%reg)“,rt,imm,rs); lw.set_decoder(op=0x23); ... }; }; Declaração de instruções Seqüência de decodificação

  18. Descrição do Comportamento Acesso a dispositivo de armazenamento Acesso a campo de instrução void ac_behavior( add ){ RB[rd] = RB[rs] + RB[rt]; }

  19. Hierarquia de Comportamentos • Existem operações que são executadas por todas as instruções de um mesmo tipo, ou ainda por todas as instruções do ISA. • Exemplo típico: incremento do PC. • Objetivo: • Fatorar essas operações de maneira que sejam codificadas apenas uma vez, e executadas por todas as instruções das quais fariam parte.

  20. Execução Hierarquia de Comportamentos Executado para todas as instruções Executado todas as instruções do tipo J Instrução (Genérico) Type_R Type_I Type_J j lw, sw, addi add, sub, mul

  21. void ac_behavior( add ){ RB[rd] = RB[rs] + RB[rt]; } Descrevendo Comportamentos void ac_behavior( instruction ){ ac_pc = ac_pc + 4; }

  22. Exemplo 1 SUB-MIPS executando o programa Fatorial

  23. Programa Fatorial main: add $4,$0,4 # n = 4 add $2,$0,1 # f = 1 $L1: mul $2,$2,$4 # f = f * n add $4,$4,-1 # n = n - 1 bne $4,$0,$L1 # if (n != 0) goto $L1 add $0,$0,0

  24. Especialização do ISA SUB-MIPS executando o programa produto interno

  25. Especialização de ISA • Identificar pontos críticos na execução de uma aplicação • Verificar se a implementação em hardware de alguma tarefa pode acelerar a execução • Exemplo: Cálculo de produto e soma. • Conhecido como MAC • Muito presente em programas de processamento de sinais (DSP)

  26. Programa Produto Interno # Atualiza apontadores para valores # (32 bits, 4bytes) add $4, $4, 4 # x++; add $5, $5, 4 # y++; # Subtrai contador de repeticao add $3, $3, -1 # N = N-1; # Se contador nao for 0, repete bne $3, $0, $L1 # Marcador de fim: quando chegar aqui acabou a repeticao add $0, $0, 0 # Dados usados no programa .data a: .word 2, 3, 4 b: .word 5, 6, 7 n: .word 3 main: # Inicializa apontadores para valores la $4, a # x = a la $5, b # y = b # Inicializa variaveis auxiliares add $6, $0, 0 # acc = 0; add $7, $0, 0 # mul = 0; add $8, $0, 0 # val1 = 0; add $9, $0, 0 # val2 = 0; # Carrega contador de repeticao lw $3, n # N = n; # Repete n vezes $L1: # Carrega os valores de cada vetor lw $8, ($4) # val1 = *x; lw $9, ($5) # val2 = *y; # Multiplica e acumula mul $7, $8, $9 # mul = val1 * val2; add $6, $6, $7 # acc = acc + mul;

  27. Programa Produto Interno Modificado # Atualiza apontadores para # valores (32 bits, 4bytes) add $4, $4, 4 # x++; add $5, $5, 4 # y++; # Subtrai contador de repeticao add $3, $3, -1 # N = N-1; # Se contador nao for 0, repete bne $3, $0, $L1 # Marcador de fim: quando chegar aqui acabou a repeticao add $0, $0, 0 # Dados usados no programa .data a: .word 2, 3, 4 b: .word 5, 6, 7 n: .word 3 main: # Inicializa apontadores para valores la $4, a # x = a la $5, b # y = b # Inicializa variaveis auxiliares add $6, $0, 0 # acc = 0; add $7, $0, 0 # mul = 0; add $8, $0, 0 # val1 = 0; add $9, $0, 0 # val2 = 0; # Carrega contador de repeticao lw $3, n # N = n; # Repete n vezes $L1: # Carrega os valores de cada vetor lw $8, ($4) # val1 = *x; lw $9, ($5) # val2 = *y; # Multiplica e acumula mac $6, $8, $9 #acc = acc + val1*val2;

  28. Declaração de Instruções AC_ISA(submips){ ac_format Type_R = "%op:6 %rs:5 %rt:5 %rd:5 0x00:5 %func:6"; ac_format Type_I = "%op:6 %rs:5 %rt:5 %imm:16"; ac_instr<Type_R>add, mul, mac; ac_instr<Type_I>lw, bne, addi; ISA_CTOR(submips) { add.set_asm("add %reg, %reg, %reg“, rd,rs,rt); add.set_decoder(op=0x00, func=0x20); mac.set_asm("mac %reg, %reg, %reg", rd, rs, rt); mac.set_decoder(op=0x00, func=0x30); ... }; }; Inclusão da instrução MAC Inclusão da instrução MAC

  29. Descrevendo Comportamentos ... //!Instruction mul behavior method. void ac_behavior( mul ) { RB[rd] = RB[rs] * RB[rt]; }; //!Instruction mac behavior method. void ac_behavior( mac ) { RB[rd] += RB[rs] * RB[rt]; }; ... Inclusão da instrução MAC

  30. Ajuste Simulação de Hierarquia de Memória Configuração da Hierarquia de Memória Aplicação Processador (SUB-MIPS) Arquitetura do Sistema Desempenho da Cache Memória

  31. Declaração de Hierarquia de Memória AC_ARCH(submips){ ac_mem MEM:64K; ac_icache IC("dm", 32, 4, "wb", "wal"); ac_dcache DM("2w", 64, 2,"lru", "wt", "war"); ac_regbank RB:32; ac_wordsize 32; ARCH_CTOR(submips) { ac_isa(“submips_isa.ac"); set_endian(“big”); IC.bindsTo( MEM ); DM.bindsTo( MEM ); }; };

  32. I D / E X . M e m R e a d H a z a r d d e t e c t i o n u n i t I D / E X e W B t i E X / M E M r W D M I / F C o n t r o l u M W B I M E M / W B x 0 E X M W B I F / I D e t i r W M n C o P u i t c x u r t s R e g i s t e r s n D a t a I I n s t r u c t i o n A L U P C m e m o r y M m e m o r y u x M u x I F / I D . R e g i s t e r R s I F / I D . R e g i s t e r R t R t I F / I D . R e g i s t e r R t M E X / M E M . R e g i s t e r R d u I F / I D . R e g i s t e r R d R d x I D / E X . R e g i s t e r R t R s F o r w a r d i n g M E M / W B . R e g i s t e r R d u n i t R t Modelagem com Precisão de Ciclos

  33. Recursos da Arquitetura (AC_ARCH) AC_ARCH(submips){ ac_mem MEM:64K; ac_regbank RB:32; ac_pipe PIPE = {IF,ID,EX,MEM,WB}; ac_format Fmt_EX_MEM = "%alures:32 %wdata:32 %rdest:5 %regwrite:1 %memread:1 %memwrite:1"; ac_reg<Fmt_EX_MEM> EX_MEM; ... ac_wordsize 32; ARCH_CTOR(submips) { ac_isa(“submips_isa.ac"); set_endian("big"); }; };

  34. Descrição do Comportamento void ac_behavior( insnX ) { switch( stage ) { case IF: break; case ID: break; case EX: break; case MEM: break; case WB: break; } As ações devem ser descritas para cada estágio do pipeline Esboço de todo comportamento para a estrutura de pipeline definida

  35. Exemplo de Comportamento void ac_behavior( Type_R, int stage ){ switch(stage){ case IF: case ID: /* Checking forwarding for the rs register */ if ( (EX_MEM.regwrite == 1) && (EX_MEM.rdest != 0) && (EX_MEM.rdest == ID_EX.rs) ) operand1 = EX_MEM.alures.read(); else if( (MEM_WB.regwrite == 1) && (MEM_WB.rdest != 0) && (MEM_WB.rdest == ID_EX.rs) ) operand1 = MEM_WB.wbdata.read(); else operand1 = RB.read(rs); ... default: break; } }

  36. Ferramentas de ArchC

  37. Infra-estrutura de geração de ferramentas Descrição do Modelo (ArchC) Pré-processador (acpp) Representação Intermediária (Memória) Gerador Gerador Gerador Gerador Backend de Montador Simulador de Linkeditor Compilador (acasm) (acsim, accsim) Ferramentas Geradoras

  38. Simulação Interpretada • Busca, Decodificação e execução dinâmicas • Flexível • Simuladores gerados são escritos em SystemC

  39. Simulador Interpretado (acsim)

  40. Simulação Compilada • Melhorias • Decodificação estática • Cálculos estáticos especializados a uma aplicação • Desempenho melhora em duas ordens de magnitude • Redirecionamento • Architecture Description Languages (ADL) • Otimizações usando mais informações sobre a arquitetura

  41. Simulador Compilado (accsim)

  42. Experimentos (Compiled-simulator) MIPS MIPS

  43. Geração de Montadores (acasm) • Utiliza a estrutura de redirecionamento do pacote GNU/Binutils • Os arquivos gerados são mesclados na árvore de diretórios original Binutils • Características • Arquivo objeto ELF relocável • Possui todas as características do núcleo do montador gas: diretivas de montagem, rótulos, geração de listagens, ... • Código gerado pode ser utilizado pelos simuladores ArchC

  44. Geração de Montadores (acasm) Representação Intermediária ArchC Arquivos GNU Binutils Gerador de Montador (independentes de máquina) (acasm) Arquivos GNU Binutils Processo de (dependentes de máquina) compilação Montador Executável

  45. Interface Gnu GDB • O GDB permite um controle da execução (breakpoints) e do valor de variáveis (leitura e escrita) • A comunicação entre o simulador e o GDB é feita por meio de um socket • É preciso implementar serviços de leitura e escrita de registradores e de memória no simulador

  46. Interface Gnu GDB ac_word submips::reg_read( int reg ) { /* general purpose registers */ if ( ( reg >= 0 ) && ( reg < 32 ) ) return RB.read( reg ); /* pc */ else if ( reg == 37 ) return ac_pc; return 0; } ...

  47. System Call Library Simulador S.O. da máquina host Aplicação Ferramentas em ArchC • Emulação de Sistema Operacional • Chamada de sitema: open, close, fstat, etc; • Linux + Newlib

  48. Verificação de Modelos

  49. Rodmap para Modelos ArchC

  50. Modelos ArchC

More Related