Electronic System LevelCurso PDesigner
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
Cenário
Design House Oportunidade Especificação Circuito Integrado
4
Cenário
Especificação Circuito Integrado
5
Erros de Projeto
6
Janela de Mercado
Platforms + Electronic System Level (ESL)
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
Interconnection network
CPU CPU CPU CPU
Memory Device (IP)
Device (IP)
9
Linguagens de Projeto & Tarefas
LanguageLanguageTaskTask
RequirementsRequirements
AlgorithmAlgorithmExplorationExploration
Architecture Architecture AnalysisAnalysis
VerificationVerification
RTL DesignRTL Design
Text / UMLText / UML
TransactionTransactionLevelLevel
SystemCSystemC
VHDLVHDLVerilogVerilog
HVLs extend & accelerate theRTL design process and enable RTL designers to cross
the chasm to system level design
AssertionsAssertionsPSL/SVAPSL/SVA
SystemSystemVerilogVerilog
C/C++C/C++UntimedUntimedSystemCSystemC
10
What is ESL?
SoC TechnologySystem specification
Processor core
Bus core
memory
IP (Devices)
11
What is ESL?
SoC Technology
FUNC
BEH
RTL
GATE
System specification
Abstraction Levels
12
What is ESL?
SoC Technology
FUNC
BEH
RTL
GATE
System specification
System
Abstraction Levels
13
What is ESL?
UML SysML Matlab
SystemC SystemVerilog
SW HW
SW HW Synthesizable
Simulation
Modeling Languages
ESL
14
Problems
UML SysML Matlab
SystemC SystemVerilog
SW HW
SW HW Synthesizable
Simulation
Modeling Languages
ESL
Methodologies&
Tools
SystemC TLM
16
SystemC TLM – Arquitetura Básica
InitiatorTarget
sc_portsc_port sc_exportsc_exporttlm_transport_iftlm_transport_if
transport(.)transport(.)
transport()
tlm_transport_ifvirtual 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 < typename REQ , typename RSP >class tlm_transport_if : public virtual sc_interface{public: virtual RSP transport( const REQ & ) = 0;
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
SPIRIT Consortium
19
SPIRIT Consortium
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
SPIRIT
22
SPIRIT Consortium
23
SoC Design Tool
24
Geradores/Configuradores
25
Interações de Objetos IP-XACT
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
• 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
Exemplo Simples de um SoC
29
Exemplo Simples de um SoC: Design File
Identificador da versão
Nome do SoCNome da Biblioteca
30
Exemplo Simples de um SoC: Design File
31
Exemplo Simples de um SoC: Design File
PDesigner
33
FrameworkMPSoC ModelingMPSoC SimulationArchitecture ExplorationProcessor Modeling and Integration
34
Framework
SPIRIT 1.2
web page
35
Modelagem de Plataformas
• Modelagem gráfica de plataformas
• Framework baseado no Eclipse
• Ambiente Gráfico• SPIRIT 1.2• SystemC 2.1
36
Simulação de Plataformas
• Tela de Console com resultados da simulação
• Controle de Simulação– Parar simulação
MPSoC
execute
EXE
37
Exploração de Arquiteturas
• Simulação em um único passo
• Integrado ao Ambiente de modelagem de plataformas (PBuilder)
Model the Platfom(Including cache analyzer component)
Platfom Simulation
Trace of referenced addresses
Single-PassCache Analysis
Cache Configuration Space
Cache miss rate reportfor the entire Configuration space
Configure cache devices
Final Platform Simulation
38
Modelagem de Processadores
• Modelagem de Processadores
• ArchC 2.0• Exporta componentes para
o PBuilder
Export to Library
ISAproc.
Structure
ISS
component Library
Generate Simulator
DescriçãoProcessador
GeraçãoProcessador
39
Modelagem de Plataformas: PBuilder
Graphical Editor
Properties View
Platform View
Palette
40
PDBuilder - Views
• PEditor– Editor que possibilita a modelagem de plataformas
graficamente– Componentes da biblioteca distribuídos na paleta de
componentes
41
Conexão de Componentes
Mips Simple Bus
ArchC (TLM)
Simple Bus FastMem
SimpleBus (TLM) SimpleBus (TLM)
SimpleBus (TLM)Wrapper
ArchC - SimpleBus
42
PDBuilder - Views
• Platform View– Miniatura da plataforma
modelada
• Outline– Lista de componentes
instanciados
43
PDBuilder - Views
• Properties– Tabela editável
com as propriedades do componente/plataforma selecionada
• Console– Mostra
resultado de compilação, simulação e análise
44
Biblioteca de Componentes: PDLibrary
Biblioteca de Componentes•Wrappers
•Adicionar Componente•Remover Componente
SystemC TLM
45
Distribuição de IP: IPZip
Descrição do IP
TLM
IPZip (Wizards) Biblioteca de Componentes
Descrição do IP
TLM
IPZip (Wizards)
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
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 Componentssimple_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
Modelagem de Processador: ArchC
49
Elementos da linguagem ArchC
Descrição ArchCDescrição dos Recursos (AC_ARCH)
Descrição do ISA (AC_ISA)
Descrição do formato, tipo e codificação/decodifiçãodas instruções
Descrição do comportamento das instruções(C++/SystemC)
. Registradores
. Memória
. Estrutura de Pipeline
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<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
Declaração de
instruções
Seqüência de decodificação
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
Descrevendo Comportamentos
void ac_behavior( instruction ){
ac_pc = ac_pc + 4;
}
void ac_behavior( add ){
RB[rd] = RB[rs] + RB[rt];
}
53
Modelagem de Processador: PArchC
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
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
Model the Platfom(Including cache analyzer component)
Platfom Simulation
Trace of referenced addresses
Single-PassCache Analysis
Cache Configuration Space
Cache miss rate reportfor the entire Configuration space
Configure cache devices
Final Platform Simulation
56
Plugin PCacheAnalyzer
57
Documentação: Plugin do Help
58
Documentação: Site
SITE
59
Arquitetura
Arquitetura Extensível
Arquitetura Modular
Modelando Plataformas PBuilder Tutorial
61
Instalar
• Pré-requisitos– SystemC 2.1– ArchC 2.0– SystemC TLM
• No site do PDesigner, baixar os arquivos:– pdesigner
-v1.0.0-beta.zip – pdlibrary-v1.0.0.zip
SITE
62
Configurar Ambiente
• Configurar variáveis do sistema– ArchC– SystemC– TLM
• Deve ser configurado para cada workspace novo!
63
Selecionar Biblioteca
1. Selecionar biblioteca de componentes– Apenas uma
biblioteca por workspace
2. Editar biblioteca– Importar
componente– Remover
componente
64
Fluxo de Projeto
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
Passo 2 : Adicionar Componentes
1. Selecionar tipo do componente na paleta
2. Escolher posição no editor
3. Inserir componente
67
Passo 3 : Editar Componentes
1. Tipo do componente
2. Nível de Abstração
3. Parâmetros
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
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
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
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
Exercício PBuilder
73
Exercício 1
1. Modelar no PDesigner a plataforma ao lado.
2. Mapear as aplicações FFT na plataforma acima.1. FFT – iniciando na posição 0x002. 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
IPZip
75
Fluxo
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
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 desenvolvimento5. Library
– Nome da biblioteca que ele deveria estar inserido
6. Description– Breve descrição do
componente
78
Passo 3 : Configurar Interfaces1. Name
– nome da interface2. 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
Passo 4 : Configurar Parâmetros1. Name
– Nome do parâmetro2. 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
Passo 5 : Arquivos Fonte e Makefile
1. Listar os arquivos fonte do IP
2. Identificar Makefile do IP
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
Configurar Nível de Abstração
#IncludesDeclarações globaissc_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 Componentssimple_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
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
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
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
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
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(); ...}
Exercício IPZip
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.
Gerenciar Biblioteca
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
Exercício 3
• Importar IPZip do barramento AMBA e modificar a plataforma do Exercício 1.1, trocando o barramento.
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
Referências
• www.pdesigner.org• www.archc.org• www.systemc.org• www.spiritconsortium.org• www.eclipse.org
Top Related