Post on 07-Apr-2016
Mini Curso PDesigner
3
Cenário
Design House Oportunidade Especificação Circuito Integrado
4
Janela de Mercado
5
Projeto, Fabricação e Comercialização de CIs
DH
PROJETO
FAB 1
FABRICAÇÃO TESTE MERCADO
FAB 2
Permite negociar preço e prazo !!
99% erros !!
1% erros !!Erro: volta !!
7
System
Aumento da Produtividade I
Circuito Integrado
FUNC
BEH
RTL
GATE
Espeificação do Sistema
NíveisAbstração
Subir nível de abstração
8
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
9
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;
10
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
11
Aumento da Produtividade II
• Reuso de IPs
• Grande parte do projeto baseado em reuso de módulos
• Uso de IPs de terceiros
• Confiança no desenvolvedor do IP
• Problemas de integração
Interconnection network
CPU CPU CPU CPU
Memory (IP) (IP)
12
Aumento da Produtividade III
• Utilização de Plataformas
• Grande parte do projeto em software
• Flexibilidade
• Reuso de grande parte do circuito
• Desenvolvimento ou utilização de IPs em pequena parte do projeto
Interconnection network
CPU CPU CPU CPU
Memory (IP) (IP)
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
Interações de Objetos IP-XACT
24
SPIRIT Schemas
• Bus definition: descreve uma 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
• Design: descreve as instâncias de um componente e as interconexões entre as instâncias
• Gerador/Configurador: são objetos executáveis utilizados para gerar os componentes ou configurá-los
25
Exemplo Simples de um SoC
26
Exemplo Simples de um SoC: Design File
Identificador da versão
Nome do SoCNome da Biblioteca
27
Exemplo Simples de um SoC: Design File
28
Exemplo Simples de um SoC: Design File
PDesigner
30
Framework
SPIRIT 1.2
web page
31
Modelagem de Plataformas
• Modelagem gráfica de plataformas
• Framework baseado no Eclipse
• Ambiente Gráfico• SPIRIT 1.2• SystemC 2.1
32
Simulação de Plataformas
• Tela de Console com resultados da simulação
• Controle de Simulação– Parar simulação
MPSoC
execute
EXE
33
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
34
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
35
Modelagem de Plataformas: PBuilder
Graphical Editor
Properties View
Platform View
Palette
36
PBuilder - Views
• PEditor– Editor que possibilita a modelagem de plataformas
graficamente– Componentes da biblioteca distribuídos na paleta de
componentes
37
Conexão de Componentes
Mips Simple Bus
ArchC (TLM)
Simple Bus FastMem
SimpleBus (TLM) SimpleBus (TLM)
SimpleBus (TLM)Wrapper
ArchC - SimpleBus
38
PBuilder - Views
• Platform View– Miniatura da plataforma
modelada
• Outline– Lista de componentes
instanciados
39
PDBuilder - Views
• Properties– Tabela editável
com as propriedades do componente/plataforma selecionada
• Console– Mostra
resultado de compilação, simulação e análise
40
Biblioteca de Componentes: PDLibrary
Biblioteca de Componentes•Wrappers
•Adicionar Componente•Remover Componente
SystemC TLM
41
Distribuição de IP: IPZip
Descrição do IP
TLM
IPZip (Wizards) Biblioteca de Componentes
Descrição do IP
TLM
IPZip (Wizards)
42
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
43
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 *//*****************************************************************/
template<typename ac_word, typename ac_Hword> class ac_memport : public ac_arch_ref<ac_word, ac_Hword> {
private: ac_inout_if* storage; ac_word aux_word; ac_Hword aux_Hword; uint8_t aux_byte;public:... ///Default constructor explicit ac_memport(ac_arch<ac_word, ac_Hword>& ref) : ac_arch_ref<ac_word, ac_Hword>(ref) {}... ///Default constructor with initialization explicit ac_memport(ac_arch<ac_word, ac_Hword>& ref, ac_inout_if& stg) : ac_arch_ref<ac_word, ac_Hword>(ref), storage(&stg\) {}
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;
}
44
Modelagem de Processador: ArchC
45
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
46
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
47
Descrevendo Comportamentos
void ac_behavior( instruction ){
ac_pc = ac_pc + 4;
}
void ac_behavior( add ){
RB[rd] = RB[rs] + RB[rt];
}
48
Modelagem de Processador: PArchC
49
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
50
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
51
Plugin PCacheAnalyzer
52
Documentação: Plugin do Help
Modelando Plataformas PBuilder Tutorial
55
Instalar
• Baixar o arquivo gspm_2006.11-232_i386.tar.gz no site www.greensocs.com
• Descompactar o arquivo• Dentro do diretório
gspm :– ./gsconfig– source gspm.bashrc– gs-use –update
pdesigner/1.0.0• No diretório gspm
– gs-use pdesigner– pdesigner
56
Configurar Ambiente
• Configurar variáveis do sistema– ArchC– SystemC– TLM
• Deve ser configurado para cada workspace novo!
57
Selecionar Biblioteca
1. Selecionar biblioteca de componentes– Apenas uma
biblioteca por workspace
2. Editar biblioteca– Importar
componente– Remover
componente
58
Fluxo de Projeto
59
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
60
Passo 2 : Adicionar Componentes
1. Selecionar tipo do componente na paleta
2. Escolher posição no editor
3. Inserir componente
61
Passo 3 : Editar Componentes
1. Tipo do componente
2. Nível de Abstração
3. Parâmetros
62
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
63
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
64
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
65
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
67
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
69
Fluxo
70
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
71
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
72
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
template<typename ac_word, typename ac_Hword> class ac_memport : public ac_arch_ref<ac_word, ac_Hword> {
private: ac_inout_if* storage; ac_word aux_word; ac_Hword aux_Hword; uint8_t aux_byte;public:... ///Default constructor explicit ac_memport(ac_arch<ac_word,
ac_Hword>& ref) : ac_arch_ref<ac_word, ac_Hword>(ref) {}... ///Default constructor with initialization explicit ac_memport(ac_arch<ac_word,
ac_Hword>& ref, ac_inout_if& stg) : ac_arch_ref<ac_word, ac_Hword>(ref), storage(&stg\)
73
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
74
Passo 5 : Arquivos Fonte e Makefile
1. Listar os arquivos fonte do IP
2. Identificar Makefile do IP
75
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
76
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;
}
77
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[]){
... }
78
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[]){
... }
79
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);...
}
80
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);
...}
81
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
83
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• Direção: slave• Protocolo: simple_bus• Address space: 5M
2. Adicionar IPZip gerado a biblioteca do PDesigner e criar exemplo para testar.
Gerenciar Biblioteca
85
Importar IPZip
1. Selecionar a opção: Window > Preferences > PDesigner Library
2. Selecionar Import Component
3. Selecionar o arquivo IPZip
4. Selecionar Apply
86
Exercício 3
• Importar IPZip do barramento AMBA e modificar a plataforma do Exercício 1.1, trocando o barramento.
88
Importar IPZip
1. Selecionar a opção: Window > Preferences > PDesigner Library
2. Selecionar Import Component
3. Selecionar o arquivo IPZip
4. Selecionar Apply
89
Referências
• www.pdesigner.org• www.archc.org• www.systemc.org• www.spiritconsortium.org• www.eclipse.org• www.greensocs.com
90
Contatos
• Cristiano Araujo (cca2@cin.ufpe.br )• André Souza ( arss@cin.ufpe.br)• Gleibson Oliveira (grso@cin.ufpe.br )• João Victor (jvgl@cin.ufpe.br )• Millena Gomes (maag@cin.ufpe.br)• Williams Azevedo (wtoa@cin.ufpe.br )