Mini Curso PDesigner. 2 Agenda Introdução Principais desafios para o projeto de SoCs IP Cores...

Post on 07-Apr-2016

220 views 2 download

Transcript of Mini Curso PDesigner. 2 Agenda Introdução Principais desafios para o projeto de SoCs IP Cores...

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

53

www.pdesigner.org

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 )