1 / 78

GAPH - FACIN - PUCRS

GAPH - FACIN - PUCRS. Síntese e Prototipação de Sistemas Digitais a partir de SystemC. 1º/03/2004 a 05/03/2005. Ney Laert Vilar Calazans. GAPH - PPGCC - FACIN - PUCRS. Sumário. Introdução - SystemC, Síntese, Prototipação Estudos de Caso de Módulos RTL em SystemC

antonie
Download Presentation

GAPH - FACIN - PUCRS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GAPH - FACIN - PUCRS Síntese e Prototipação de Sistemas Digitais a partir de SystemC 1º/03/2004 a 05/03/2005 Ney Laert Vilar Calazans GAPH - PPGCC - FACIN - PUCRS

  2. Sumário • Introdução - SystemC, Síntese, Prototipação • Estudos de Caso de Módulos RTL em SystemC • Usando o Subconjunto Sintetizável de SystemC • Diretivas de Codificação RTL para SystemC • Modelagem e Síntese Comportamental

  3. Introdução - SystemC, Síntese, Prototipação • Projeto a nível de sistema, linguagens sistêmicas e níveis de abstração • apresentação G. Arnout, ESCUG Out/2002 • Nem tudo que se escreve em SystemC é transformável em hardware: • tudo é simulável (em tese!) • simulação pode não funcionar - timing é importante! • nem tudo é sintetizável - subconjunto sintetizável de SystemC • o que sintetiza não necessariamente funciona! • nem tudo é prototipável/implementável • questões tecnológicas + interfaces externas + padrões E/S

  4. Introdução - SystemC, Síntese, Prototipação • Documentação (Versão 2.0.1 de SystemC) • Synopsys,Inc. Describing Synthesizable RTL in SystemC. Version 1.2, November 2002. 136p. (Manual Synopsys RTL) • OSCI. Functional Specification for SystemC 2.0. Update for SystemC 2.0.1. Version 2.0-Q. April 2002. 135p. • OSCI. SystemC Version 2.0 User Guide. Update for SystemC 2.0.1. Version 2.0-Q. 2002. 212p. • OSCI. SystemC 2.0.1 Language Reference Manual. Revision 1.0. 2003. 428p. • Manuais de ferramentas Synopsys: CoCentric SystemC Compiler, Design Compiler, CoCentric SystemC Studio, CoCentric Fixed Point Designer, etc.

  5. Introdução - SystemC, Síntese, Prototipação • Porque sintetizar a partir de SystemC? • HDLs são estáveis e dominadas • Specs - C é quase padrão, junto com planilhas, Matlab, etc • Tradução C -> HDL - propensa a erros de interpretação • Reuso de verificação - evita re-escrita de código de verificação • Produtividade aumentada • modificar um projeto - mais rápido que recodificá-lo • verificar projeto modificado - mais rápido que verificar recodificado

  6. Introdução - SystemC, Síntese, Prototipação • Porque prototipar? • Se simulação OK, projeto funciona em hardware? • NÃO!!!! • Caminho de simulação perfeita para funcionamento em hardware é longo • O que ainda pode estar errado? • Timing - freqüência de operação, • Código de verificação insuficiente • Condições iniciais e de contorno - reset, pinagem, clock, etc. • Prototipação dá garantia muito maior que a implementação final funcionará. Logo, prototipar sempre é a regra!

  7. Introdução - SystemC, Síntese, Prototipação • Questionário • Quem já programou algo em SystemC? Usando que ferramentas? • Quem já simulou hardware? Usando que forma de entrada, que software, que ferramentas? • Quem já simulou algo descrito em SystemC? Usando que ferramentas? • Quem já prototipou hardware? Usando que forma de entrada, que software, que plataforma? • Quem já prototipou hardware a partir de descrições de entrada em SystemC? Usando que software, que plataforma?

  8. Introdução - SystemC, Síntese, Prototipação • Ambiente a ser usado no curso • Linguagem de entrada - SystemC • Ferramentas de simulação - GTKwave - domínio público • porque não CoCentric SystemC Studio? • Ferramentas de Síntese - Design Compiler/CoCentric SystemC Compiler • Ambiente de prototipação: • CAD ISE da Xilinx (projeto, sínteses lógica e física e configuração) • Plataformas variadas de prototipação em FPGAs Xilinx (+ SW específico) • V2MB1000 Insight • XSV-800 da Xess • VW300 da VCC

  9. Sumário • Introdução - SystemC, Síntese, Prototipação • Como criar Módulos RTL em SystemC • Usando o Subconjunto Sintetizável de SystemC • Diretivas de Codificação RTL para SystemC • Modelagem e Síntese Comportamental

  10. Características Gerais de Módulos e Processos • Módulo (SC_MODULE) • Bloco básico para a construção de hardware • Eqüivale a module Verilog e par entity/architecture VHDL • Pode conter: • processos • instâncias de outros módulos • member functions (terminologia C++) chamadas por processos ou módulos internos • Processos (SC_METHOD) • trecho de código executado seqüencialmente • múltiplos processos paralelos -> concorrência

  11. Características Gerais de Módulos e Processos Outros módulos podem estar instanciados internamente

  12. Características Gerais de Módulos e Processos • Registro de processos • Processo - definição similar a member function C++ • registro - declaração do tipo de processo no construtor • SC_METHOD (SC_THREAD proibido em SystemC RTL) • registro diferencia processo paralelo de outras member functions • se processo precisa ser instanciado mais de uma vez, deve estar dentro de módulo, senão erro! • Disparo de execução de processos • baseado na definição da lista de sensitividade • sensitividade - ao nível/à borda (imisturável em processo!)

  13. Características Gerais de Módulos e Processos • Leitura e escrita de valores por processos • processo pode ler escrever em • portas (sc_in, sc_out, sc_inout) • sinais internos ao módulo (signal) • variáveis internas (ao processo) • evitar não-determinismo: • não faça processos se comunicarem via variáveis • usar sinais!!! (Como obrigado em VHDL)

  14. Sintaxe e Semântica de Módulos de Processos • Usar 1 par de arquivos por módulo (.h e .cc) • Cabeçalho de módulos • declarações de portas • declarações de sinais internos • declarações de variáveis internas • declarações de processo • declarações de member functions • construtor do módulo

  15. Sintaxe e Semântica de Módulos de Processos • Portas de um módulo • porta é data member (nomenclatura C++) de um módulo • portas se conectam a sinais de mesmo tipo • tipo de porta deve ser sintetizável!!

  16. Sintaxe e Semântica de Módulos de Processos • Sinais • usados para comunicação entre processos e/ou módulos • sinais não possuem direção!!

  17. Sintaxe e Semântica de Módulos de Processos • Variáveis de módulo (data members) • devem ser usadas para uso interno ao módulo apenas!!

  18. Sintaxe e Semântica de Módulos de Processos • Criando processos em módulos • declarados no módulo e registrados no construtor deste • processo - função com tipo void, sem argumentos

  19. Sintaxe e Semântica de Módulos de Processos • Lista de sensitividade • sensitive() ou sensitive_pos() ou sensitive_neg() -- deprecated • lógica combinacional - incluir todos os sinais de entrada! • Lógica seqüencial síncrona - incluir só clock e sinais com prioridade sobre este, tais como set/reset assíncronos, se existem. Sensitividade ao nível

  20. Sintaxe e Semântica de Módulos de Processos • Sensitividade à Borda • Lista de sensitividade incompleta (Errado!!)

  21. Sintaxe e Semântica de Módulos de Processos • Limitações de listas de sensitividade • não se pode misturar sensitividade ao nível e à borda no mesmo processo • não se pode usar o tipo sc_logic para sinais de relógio ou outros sinais sensíveis à borda, usa-se somente o tipo sc_in<bool> • Member functions • possíveis de serem declaradas em módulos • se não declaradas como processo (SC_METHOD) podem retornar qualquer tipo sintetizável

  22. Sintaxe e Semântica de Módulos de Processos • Implementação do Módulo • arquivo .cc /.cpp • Leitura e escrita de portas e sinais • métodos read() e write() para portas e sinais, = p/ variáveis

  23. Sintaxe e Semântica de Módulos de Processos • Leitura e escrita de bits de portas e sinais • não se pode ler/escrever bits de portas ou sinais direto • para bits individuais ou faixas, usar variáveis temporárias

  24. Sintaxe e Semântica de Módulos de Processos • Atribuições de valor a sinais e portas • a atribuição não se concretiza até que a avaliação do processo seja concluída!

  25. Sintaxe e Semântica de Módulos de Processos • Atribuições de valor a variáveis • são imediatas!

  26. Estudos de Caso de Implementação de Módulos • Módulos com processo SC_METHOD único • exemplo de contador combinacional de zeros (paralelo) • Módulos com múltiplos processos SC_METHOD • exemplo de contador seqüencial de zeros (serial) • Módulos RTL hierárquicos • ver exemplo do filtro FIR (ver manual Synopsys RTL)

  27. Módulos com Processo SC_METHOD Único /****count_zeros_comb.h file***/ #include "systemc.h" SC_MODULE(count_zeros_comb) { sc_in<sc_uint<8> > in; sc_out<sc_uint<4> > out; sc_out<bool> error; bool legal(sc_uint<8> x); sc_uint<4> zeros(sc_uint<8> x); void control_proc(); SC_CTOR(count_zeros_comb) { SC_METHOD(control_proc); sensitive << in; } }; /****count_zeros_comb.cpp file****/ #include "count_zeros_comb.h" sc_uint<4> count_zeros_comb:: zeros(sc_uint<8> x) { int count = 0; for (int i=0; i <= 7; ++i) { if (x[i] == 0) ++count; } return count; } void count_zeros_comb::control_proc() { sc_uint<4> tmp_out; bool is_legal = legal(in.read()); error.write(is_legal != 1); is_legal ? tmp_out = zeros(in.read()) : tmp_out = 0; out.write(tmp_out); } bool count_zeros_comb::legal(sc_uint<8> x) { bool is_legal = 1; bool seenZero = 0; bool seenTrailing = 0; for (int i=0; i <=7; ++i) { if ((seenTrailing == 1) && (x[i] == 0)) { is_legal = 0; break; } else if ((seenZero == 1) && (x[i] == 1)) { seenTrailing = 1; } else if (x[i] == 0) { seenZero = 1; } } return is_legal; }

  28. Módulos com Múltiplos Processos SC_METHOD • Ver código SystemC no manual Synopsys RTL

  29. Módulos RTL Hieráquicos • Passos básicos para a criação de módulos hieráquicos: • criar ponteiros como data members no módulo de nível de hierarquia mais alto para apontar cada instância de módulo • alocar os módulos instanciados dentro do construtor do módulo de nível de hierarquia mais alto, dando a cada um nome distinto • conectar as portas dos módulos instanciados às portas e sinais do módulo de nível de hierarquia mais alto • Ver exemplos no manual Synopsys RTL • atentar para o uso sintetizável de ponteiros

  30. Sumário • Introdução - SystemC, Síntese, Prototipação • Como criar Módulos RTL em SystemC • Usando o Subconjunto Sintetizável de SystemC • Diretivas de Codificação RTL para SystemC • Modelagem e Síntese Comportamental

  31. Conversão para o Subconjunto Sintetizável • Lembrando, qualquer código SystemC/C/C++ pode ser simulado! • conversão p/ SystemC sintetizável - apenas no código Hw • recomenda-se o uso de #ifdef e #endif para evitar alterações. Ex: trace e print • Nesta parte - especificação dos subconjuntos sintetizáveis de SystemC e C++ • ações corretivas - geram código sintetizável a partir de código não-sintetizável • em muitos casos - nenhuma ação corretiva existe!! • óbvio - testbenches não precisam de conversão jamais!!

  32. Conversão para o Subconjunto Sintetizável • Construções SystemC não-sintetizáveis

  33. Conversão para o Subconjunto Sintetizável • Construções C/C++ não-sintetizáveis (1)

  34. Conversão para o Subconjunto Sintetizável • Construções C/C++ não-sintetizáveis (2)

  35. Conversão para o Subconjunto Sintetizável • Construções C/C++ não-sintetizáveis (3)

  36. Conversão para o Subconjunto Sintetizável • Construções C/C++ não-sintetizáveis (4)

  37. Modificação de Dados para Síntese • Problemas mais comuns: • tipos nativos C/C++ - largura em bits é dependente de plataforma • C/C++ não suporta operações sobre lógica de 4 valores (0,1,Z,X) • SystemC - conjunto limitado de tipos com controle de precisão/largura e operações sobre estes • Para modificar SystemC para síntese RTL • avaliar - declarações de variáveis, parâmetros formais e tipos de retorno de funções quanto à largura em bits • isto afeta diretamente o custo do hardware!

  38. Modificação de Dados para Síntese • Tipos de dados não-sintetizáveis C/C++/SystemC • ponto flutuante - float, double • ponto fixo - sc_fixed, sc_ufixed, sc_fix, sc_ufix • tipos de acesso - ponteiros • tipos arquivo - FILE • streams de entrada e saída - stdout, cout

  39. Modificação de Dados para Síntese • Tipos de dados recomendados • variáveis/sinais de 1 bit - bool • variáveis/sinais de até 64bits - sc_int, sc_uint • variáveis/sinais com mais de 64bits usados em operações aritméticas - sc_bigint, sc_biguint • usar sc_logic ou sc_lv para modelar sinais e barramentos tristate. Comparações com valores Z e X -> não-sintetizáveis • usar int para contadores em laços • cuidado com tipos nativos C/C++ • para restringir tamanho em bits, sc_int<n> ao invés de int

  40. Modificação de Dados para Síntese • Tipos de dados sintetizáveis (1)

  41. Modificação de Dados para Síntese • Tipos de dados sintetizáveis (2)

  42. Modificação de Dados para Síntese • Operadores sobre vetores de bits

  43. Modificação de Dados para Síntese • Operadores sobre tipos de dados de precisão simples e arbitrária

  44. Modificação de Dados para Síntese • Tipos enumerados - suportados como em C/C++ • Usando agregados - sintetizável desde que todos os membros o sejam • Tipos C++ - cuidado com a dependência de plataforma no que diz respeito à largura em bits • Dados membros de um módulo - não usar para comunicação entre processos

  45. Modificação de Dados para Síntese • Exemplo de uso incorreto de dados-membro • Problema relacionado a atribuição imediata/deferida

  46. Modificação de Dados para Síntese • Exemplo de uso correto de dados-membro • Problema relacionado a atribuição imediata/deferida

  47. Recomendações sobre Modificação para Síntese • Após cada modificação, reverifique o projeto • Procure avaliar ambos, o impacto na sintetizabilidade e o impacto na qualidade da síntese a cada passo • Refinamento para RTL é tedioso, propenso a erro e incremental • próxima Seção recomenda diretivas de codificação para reduzir o problema!

  48. Sumário • Introdução - SystemC, Síntese, Prototipação • Como criar Módulos RTL em SystemC • Usando o Subconjunto Sintetizável de SystemC • Diretivas de Codificação RTL para SystemC • Modelagem e Síntese Comportamental

  49. Diretivas de Codificação RTL para SystemC • Existem diretivas de codificação para três classes de componentes RTL: • inferência de registradores e latches • inferência de buffers tristate • descrição de máquinas de estados finitas (FSMs) • Aqui - estudo de diretivas de codificação para cada classe acima • ênfase em síntese em prototipação • ergo, de-ênfase em latches

  50. Diretivas de Codificação RTL para SystemC • Lembrando - SystemC e HDLs (e.g. VHDL, Verilog) • sem construções para definir explicitamente componentes RTL (registradores, latches, portas lógicas, buffers, etc) • motivo principal - independência de tecnologia!! • ferramentas específicas de síntese - inferem componentes RTL!

More Related