Electronic System Level Curso PDesigner. 2 Agenda Introdução Principais desafios para o projeto de...

Post on 07-Apr-2016

216 views 2 download

Transcript of Electronic System Level Curso PDesigner. 2 Agenda Introdução Principais desafios para o projeto de...

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

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