Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouHeitor Salvado Lombardi Alterado mais de 8 anos atrás
1
Electronic System Level Curso PDesigner
2
2 Agenda Introdução Principais desafios para o projeto de SoCs IP Cores Electronic System Level (ESL) –Projeto Baseado em Plataforma SystemC TLM SPIRIT Consortium PDesigner –Visão geral –Arquitetura –Tutorial –exercícios
3
3 Cenário Design House Oportunidade Especificação Circuito Integrado
4
4 Cenário Especificação Circuito Integrado
5
5 Erros de Projeto
6
6 Janela de Mercado
7
Platforms + Electronic System Level (ESL)
8
8 Plataformas MPSoC Utilização de múltiplos processadores SoCs Alta performance Baixa potência Baixa frequência de clock Utilização de processadores heterogêneos
9
9 Linguagens de Projeto & Tarefas LanguageTask Requirements AlgorithmExploration ArchitectureAnalysis Verification RTL Design Text / UML TransactionLevelSystemC VHDLVerilog HVLs extend & accelerate the RTL design process and enable RTL designers to cross the chasm to system level design AssertionsPSL/SVA SystemVerilog C/C++UntimedSystemC
10
10 What is ESL? SoC Technology System specification Processor core Bus core memory IP (Devices)
11
11 What is ESL? SoC Technology FUNC BEH RTL GATE System specification Abstraction Levels
12
12 What is ESL? SoC Technology FUNC BEH RTL GATE System specification System Abstraction Levels
13
13 What is ESL? UML SysMLMatlab SystemC SystemVerilog SW HW SW HW Synthesizable Simulation Modeling Languages ESL
14
14 Problems UML SysMLMatlab SystemC SystemVerilog SW HW SW HW Synthesizable Simulation Modeling Languages ESL Methodologies & Tools
15
SystemC TLM
16
16 SystemC TLM – Arquitetura Básica Initiator Target sc_portsc_export tlm_transport_iftransport(.) transport() tlm_transport_if virtual RSP transport( const REQ & ) = 0; transport(.) sc_export exports tlm_transport_if for use by outside world RSP transport( const REQ & ) is implemented in the slave tlm_transport_if is the tlm bidirectional blocking interface template class tlm_transport_if : public virtual sc_interface { public: virtual RSP transport( const REQ & ) = 0;
17
17 SystemC TLM (Transaction Level Modeling) Comunicação utilizando chamada de funções Pontos Fortes: –Simplicidade –Rápido e compacto –Integração de modelos de hardware e software –Suporte a reuso de design e verificação de IP –Usabilidade –Transparente a: Nível de Abstração Diferentes arquiteturas de comunicação (barramento, NOC,...) Diferentes protocolos Principais conceitos: –Fluxo de dados Unidirecional x Bidirecional –Requisições e respostas separadas –Blocking x Nonblocking –Uso de sc_port e sc_export
18
SPIRIT Consortium
19
19 SPIRIT Consortium
20
20 SPIRIT Padrão definido por um consórcio de empresas para distribuição de IPs Baseado em XML Descrição de IPs independente de linguagem
21
21 SPIRIT
22
22 SPIRIT Consortium
23
23 SoC Design Tool
24
24 Geradores/Configuradores
25
25 Interações de Objetos IP-XACT
26
26 Bus definition: é um objeto que descreve uma interface interface de barramento (nomes de sinais, direção, largura, uso) e as restrições que se aplicam a estes sinais. Meta Data: é um modo que pode ser interpretado por ferramentas para se descrever diversos aspectos do projeto
27
27 Design: descreve as instâncias de um componente e as interconexões entre as instâncias. As interconexões definem as conexões ponto-a-ponto entre interfaces dos componentes. Gerador/Configurador: são objetos executáveis utilizados para gerar os componentes ou configurá-los.
28
28 Exemplo Simples de um SoC
29
29 Exemplo Simples de um SoC: Design File Identificador da versão Nome do SoC Nome da Biblioteca
30
30 Exemplo Simples de um SoC: Design File
31
31 Exemplo Simples de um SoC: Design File
32
PDesigner
33
33 Framework MPSoC Modeling MPSoC Simulation Architecture Exploration Processor Modeling and Integration
34
34 Framework SPIRIT 1.2 web page
35
35 Modelagem de Plataformas Modelagem gráfica de plataformas Framework baseado no Eclipse Ambiente Gráfico SPIRIT 1.2 SystemC 2.1
36
36 Simulação de Plataformas Tela de Console com resultados da simulação Controle de Simulação –Parar simulação
37
37 Exploração de Arquiteturas Simulação em um único passo Integrado ao Ambiente de modelagem de plataformas (PBuilder)
38
38 Modelagem de Processadores ArchC 2.0 Exporta componentes para o PBuilder Descrição Processador Geração Processador
39
39 Modelagem de Plataformas: PBuilder Graphical Editor Properties View Platform View Palette
40
40 PDBuilder - Views PEditor –Editor que possibilita a modelagem de plataformas graficamente –Componentes da biblioteca distribuídos na paleta de componentes
41
41 Conexão de Componentes MipsSimple Bus ArchC (TLM) Simple BusFastMem SimpleBus (TLM) Wrapper ArchC - SimpleBus
42
42 PDBuilder - Views Platform View –Miniatura da plataforma modelada Outline –Lista de componentes instanciados
43
43 PDBuilder - Views Properties –Tabela editável com as propriedades do componente/platafor ma selecionada Console –Mostra resultado de compilação, simulação e análise
44
44 Biblioteca de Componentes: PDLibrary Biblioteca de Componentes Wrappers Adicionar Componente Remover Componente SystemC TLM
45
45 Distribuição de IP: IPZip Descrição do IP TLM IPZip(Wizards) Biblioteca de Componentes Descrição do IP TLM IPZip(Wizards)
46
46 Plugin IPZip Wizard de geração de distribuição de componente Gera pacote de distribuição com arquivos de configuração SPIRIT a partir da descrição alto nível do componente
47
47 Fluxo de Distribuição do IPZip /******************************************************************/ /* The ArchC MIPS-I functional model. */ /* Author: Sandro Rigo and Marcus Bartholomeu */ /* */ /*...*/ /* */ /* The ArchC Team */ /* Computer Systems Laboratory (LSC) */ /* IC-UNICAMP */ /* http://www.lsc.ic.unicamp.br */ /* Version: 0.75 */ /*****************************************************************/ #include "mips1_arch.H" mips1_arch::mips1_arch() : ac_arch_dec_if<mips1_parms::ac_word, mips1_parms::ac_Hword>(mips1_parms::AC_MAX_BUFFER), ac_pc("ac_pc", 0, time_step), DM_port("DM_port", 5242880), DM(*this, DM_port), RB("RB", time_step) { ac_mt_endian = mips1_parms::AC_MATCH_ENDIAN; ac_tgt_endian = mips1_parms::AC_PROC_ENDIAN; IM = &DM; APP_MEM = &DM; } class simple_bus_fast_mem : public simple_bus_slave_if, public sc_module { public: // constructor simple_bus_fast_mem(sc_module_name name_, unsigned int start_address, unsigned int end_address) : sc_module(name_), m_start_address(start_address), m_end_address(end_address) {... private: char * MEM; unsigned int m_start_address; unsigned int m_end_address; } Cycle Accurate Timing Estimated Untimed RTL Verilog #include "mips1.H"... const char *project_name="mips1"; const char *project_file="mips1.ac";... int sc_main(int ac, char *av[]){ //Platform Components simple_bus_fast_mem mem("fast_mem",0x00,0x9fffff); mips1 p1("p1");... //Platform Conenctions p1.DM_port(DM_wrapper1.target_export);... p1.init();... cerr << endl; sc_start(-1); p1.PrintStat();... cerr << endl; return p1.ac_exit_status&& p2.ac_exit_status; }
48
48 Modelagem de Processador: ArchC
49
49 Elementos da linguagem ArchC Descrição ArchC Descrição dos Recursos (AC_ARCH) 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). Registradores. Memória. Estrutura de Pipeline
50
50 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 add, mul; ac_instr 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 Declaração de instruções Seqüência de decodificação
51
51 Descrição do Comportamento void ac_behavior( add ){ RB[rd] = RB[rs] + RB[rt]; } Acesso a dispositivo de armazenamento Acesso a campo de instrução
52
52 Descrevendo Comportamentos void ac_behavior( instruction ){ ac_pc = ac_pc + 4; } void ac_behavior( add ){ RB[rd] = RB[rs] + RB[rt]; }
53
53 Modelagem de Processador: PArchC
54
54 Modelagem de Processador: PArchC Plugin focado na construção de Processadores Ambiente gráfico para edição de código –Inclusão do destaque para palavras reservadas do ArchC Compilação e Simulação do processador –Possibilita ao usuário verificar o comportamento do componente Distribuição de Componente –Gera automaticamente um pacote de distribuição do componente baseado no padrão SPIRIT Biblioteca de Componentes Descrição do Processador
55
55 Análise de Cache: PCacheAnalyzer Análise preliminar de cache Análise de diversas configurações de caches (+ de 50) com apenas uma simulação Geração de relatório, identificando: –Configuração da cache (tamanho de palavra e associatividade) –Hit Rate –Miss Rate Relatório mostrado em formato HTML
56
56 Plugin PCacheAnalyzer
57
57 Documentação: Plugin do Help
58
58 Documentação: Site SITE
59
59 Arquitetura Arquitetura Extensível Arquitetura Modular
60
Modelando Plataformas PBuilder Tutorial
61
61 Instalar Pré-requisitos –SystemC 2.1 –ArchC 2.0 –SystemC TLM No site do PDesigner, baixar os arquivos: –pdesigner-v1.0.0- beta.zippdesigner-v1.0.0- beta.zip –pdlibrary-v1.0.0.zippdlibrary-v1.0.0.zip SITE
62
62 Configurar Ambiente Configurar variáveis do sistema –ArchC –SystemC –TLM Deve ser configurado para cada workspace novo!
63
63 Selecionar Biblioteca 1.Selecionar biblioteca de componentes –Apenas uma biblioteca por workspace 2.Editar biblioteca –Importar componente –Remover componente
64
64 Fluxo de Projeto
65
65 Passo 1 : Criar Projeto 1.Selecionar a opção File > New > Project 2. Definir o nome do projeto 4. Projeto criado no workspace 3. Dados do projeto
66
66 Passo 2 : Adicionar Componentes 1.Selecionar tipo do componente na paleta 2. Escolher posição no editor 3. Inserir componente
67
67 Passo 3 : Editar Componentes 1.Tipo do componente 2. Nível de Abstração 3. Parâmetros
68
68 Passo 4 : Conectar Componentes 1.Selecionar origem (porta mestre) 2. Selecionar destino (porta escrava) 4. Ver / Editar propriedades da conexão e/ou wrappers 3. Criação automática de wrappers
69
69 Passo 5 : Carregar Aplicação para o Processador 1.O que significa? Carregar na memória uma aplicação binária compilada pelo crosscompiler do processador. O processador busca o código da aplicação na memória e a executa. 2. Selecionar a opção Load Application File no menu de contexto 3. Selecionar a aplicação (arquivo executável) 5. Definir o endereço 4. Selecionar Memória
70
70 Passo 6 : Compilar Plataforma 1.O que significa? Na compilação é gerado o código systemc da plataforma, que é compilado gerando um arquivo executável da plataforma. 2. Selecionar PDesigner > Compile Platform 3. Resultados e Logs da compilação são mostrados na view Console
71
71 Passo 7 : Simular 1.Selecionar a opção Run PDesigner no menu de contexto do projeto 2. Resultado da simulação é mostrado na view Console
72
Exercício PBuilder
73
73 Exercício 1 1.Modelar no PDesigner a plataforma ao lado. 2.Mapear as aplicações FFT na plataforma acima.FFT 1.FFT – iniciando na posição 0x00 2.FFT inversa - – iniciando na posição 0x500000 3.Adicionar uma cache no nível de abstração untimed para cada processador, utilizando os seus valores default. 4.Modifique o tipo do barramento para Amba e compare a velocidade de processamento (instruções/seg) com a do exercício 2 e 3. P1 (mips) P2 (mips) Bus
74
IPZip
75
75 Fluxo
76
76 Passo 1 : Criar Projeto IPZip 1.Selecionar a opção File > New > Project 2.IPZip > IPZip Project 3. Selecionar diretório onde o arquivo zip será criado
77
77 Passo 2 : Informações do Componente 1.Name –Nome do componente 2.Type –Tipo do componente : processador, barramento, memória,... 3.Owner –Desenvolvedor (es) 4.Vendor –Empresa ou grupo responsável pelo desenvolvimento 5.Library –Nome da biblioteca que ele deveria estar inserido 6.Description –Breve descrição do componente
78
78 Passo 3 : Configurar Interfaces 1.Name –nome da interface 2.Protocol Direction –direção da comunicação da interface (master, slave, system) 3.Protocol Name –nome do protocolo de comunicação: Amba, ArchC, Avalon, OCP,... 4.Connection –Define se a interface deve estar conectada 5.Address Space Size –Tamanho de endereçamento da interface. 6.Multiplicity –Single : há apenas uma interface –Multiple Dynamic : há várias interfaces iguais podendo existir de 0 a N (número máximo) instanciadas –Multiple Static : há exatamente N interfaces iguais instanciadas #include "mips1_arch.H" mips1_arch::mips1_arch() : ac_arch_dec_if<mips1_parms::ac_word, mips1_parms::ac_Hword>(mips1_parms::AC_MAX_BUFFER), ac_pc("ac_pc", 0, time_step), DM_port("DM_port", 5242880), DM(*this, DM_port), RB("RB", time_step) { ac_mt_endian = mips1_parms::AC_MATCH_ENDIAN; ac_tgt_endian = mips1_parms::AC_PROC_ENDIAN; IM = &DM; APP_MEM = &DM; }
79
79 Passo 4 : Configurar Parâmetros 1.Name –Nome do parâmetro 2.Description –Descrição do parâmetro informando seu papel 3.Group –Nome do grupo que o parâmetro deve pertencer, organizando os parâmetros do componente por grupos 4.Data Type –Tipo do dado 5.Resolved by –Informa se o parâmetro deve ser modificado pelo usuário ou pelo sistema 6.Format –Informa se o parâmetro tem valores diversos (texto) ou restritos (choice) 7.Default Value –Valor default do parâmetro
80
80 Passo 5 : Arquivos Fonte e Makefile 1.Listar os arquivos fonte do IP 2.Identificar Makefile do IP
81
81 Passo 6 : Nível de Abstração 1.Definir nome do nível de abstração –Normalmente são denominados TL1, TL2,... 2.Selecionar o nível de abstração do componente –Pode ter mais de um, sendo necessário configurar cada um deles –Possíveis níveis: Cycle accurate Timing estimated Untimed
82
82 Configurar Nível de Abstração #Includes Declarações globais sc_main(){ Instância de componentes; Conexão de componentes; Funções pré-simulações; sc_start(); Funções pós-simulação; } #include "mips1.H"... const char *project_name="mips1"; const char *project_file="mips1.ac";... int sc_main(int ac, char *av[]){ //Platform Components simple_bus_fast_mem mem("fast_mem",0x00,0x9fffff); mips1 p1("p1");... //Platform Conenctions p1.DM_port(DM_wrapper1.target_export);... p1.init();... cerr << endl; sc_start(-1); p1.PrintStat();... cerr << endl; return p1.ac_exit_status&& p2.ac_exit_status; }
83
83 Passo 6.1 : Selecionar “include files” 1.Selecionar arquivos fonte do componente que deverão ser incluídos para possibilitar sua utilização..... const char *project_name="mips1"; const char *project_file="mips1.ac"; const char *archc_version="2.0beta1"; const char *archc_options="-abi -dy "; …. #include "mips1.H“ #include “loader.h”... int sc_main(int ac, char *av[]){... }
84
84 Passo 6.2 : Descrever Atribuição de Constantes 1.Define constantes e namespaces –Function : namespace, const,... –Name : nome da constante ou do namespace –Value : valor associado.... const char *project_name="mips1"; const char *project_file="mips1.ac"; const char *archc_version="2.0beta1"; const char *archc_options="-abi -dy "; …. #include "mips1.H“ #include “loader.h”... int sc_main(int ac, char *av[]){... }
85
85 Passo 6.3 : Configurar Instanciação de Componentes 1.Define a estrutura para instanciar o componente –Class : nome da função/classe que implementa a instância –Name : nome default da instância, se for variar deve ser o nome do componente –Parameters : parâmetros passados para inicializar Symbol : símbolo do parâmetro – ponteiro, aspas, referência Type : define se o parâmetro é constante ou variável Value : valor do parâmetro. Se for variável será um dos parâmetros do componente..... int sc_main(int ac, char *av[]) { …. mips1 mips1_proc1("mips1"); AvalonController bus ("bus", clock, 2, 1, 1);... }
86
86 Passo 6.4 : Configurar Estrutura de Conexão 1.Define a estrutura para configuração de uma conexão –Type : define a estrutura da conexão com portas escravas ou mestres –Name : nome do componente –Function : função utilizada para conexão ou nome da interface –TLM Connection : define se a conexão segue o padrão TLM –Parameters : parâmetros passados para viabilizar a conexão Symbol : símbolo do parâmetro – ponteiro, aspas, referência Type : define se o parâmetro é constante ou variável Value : valor do parâmetro. Se for variável será um dos parâmetros do componente ou instâncias conectadas a ele int sc_main(int ac, char *av[]) { … AvalonController bus ("bus", clock, 2, 1, 1); mips1 mips_proc("mips1"); simple_bus_fast_mem mem_fast("mem_fast", 0x00, 0x9FFFFF); … bus.addMaster(WORD, false, 1, 1); bus.addSlave(WORD, false, 0x00,0x9FFFFF, 0, 0, 2, true); mips_proc.DM_port(wrap_mips1.target_export);... }
87
87 Passo 6.5 : Configurar Estrutura das Funções 1.Define a estrutura para configuração de funções –Class : nome do componente –Name : nome da função –Log Function : define se a função gera um log –Parameters : parâmetros passados para viabilizar a função Symbol : símbolo do parâmetro – ponteiro, aspas, referência Type : define se o parâmetro é constante ou variável Value : valor do parâmetro. Se for variável será um dos parâmetros do componente int sc_main(int ac, char *av[]) { … mips1 mips_proc("mips1"); … // Function mips_proc.init(); … // Log Function mips_proc.PrintStat();... }
88
Exercício IPZip
89
89 Exercício 2 1.Criar arquivo IPZip do componente memória fast_mem conhecendo: Arquivo fonte Exemplo de main Não possui makefile Interface escrava: Nome: bus_port Protocolo: simple_bus Addredd space: 5M 2.Adicionar IPZip gerado a biblioteca do PDesigner e criar exemplo para testar.
90
Gerenciar Biblioteca
91
91 Importar IPZip 1.Selecionar a opção: Window > Preferences > PDesigner Library 2.Selecionar Import Component 3.Selecionar o arquivo IPZip 4.Selecionar Apply
92
92 Exercício 3 Importar IPZip do barramento AMBA e modificar a plataforma do Exercício 1.1, trocando o barramento.AMBA
94
94 Importar IPZip 1.Selecionar a opção: Window > Preferences > PDesigner Library 2. Selecionar Import Component 3. Selecionar o arquivo IPZip 4. Selecionar Apply
95
95 Referências www.pdesigner.org www.archc.org www.systemc.org www.spiritconsortium.org www.eclipse.org
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.