Catapult Synthesis
Tópicos Avançados em Arquitetura de Computadores
CatpulC
Introdução
• Primeira Geração de Síntese Comportamental – Não teve sucesso
– Informação de temporização – Informação de interface
– Informação de hierarquia
• Projetos de baixa qualidade
• Poucos ganhos de produtividade
• Pouca flexibilidade
Nova Abordagem Baseada em ANSI C++
• VHDL, (System)Verilog, SystemC
– Não familiares para desenvolvedores de algoritmos – Não aumentam de forma suficiente o nível de
abstração
– Difícil de escrever
• Uso de ANSI C++
– Uma das mais utilizadas linguagens de programação – Reuso de ferramentas de desenvolvimento e
depuração existentes
• Catapult
Data Path vs Controle
• Primeira geração de ferramentas de síntese comportamental
– Foco em síntese de data path
• Ferramentas atuais
– Bom desempenho em aplicação orientadas tanto a fluxo de dados quanto controle
Requisitos Industriais para Ferramentas Modernas de Síntese de Alto Nível
• Ganho com síntese de alto nível – Tempo até o RTL mais rápido
• Risco da síntese de alto nível – Mudança no fluxo de projeto
– Empresas são avessas a riscos no projeto
Lições Importantes do Mercado
• Melhorias localizadas não são aceitas caso:
– Rompimento com métodos existentes – Imposição de novas restrições
– Uso de novas linguagens
• Tecnologias intrusivas são dificilmente adotadas – Projetistas modelam usando C++
• Linguagens não padronizadas ou extensões são um fator de risco
• Ferramentas de síntese de alto nível devem se integrar ao fluxo e ferramentas existentes
• Certificadas por vendors de silício (ASIC e FPGA)
Workflow da Síntese de Catapult
Escrevendo e Testando Código C
• Código ANSI C++ puro
• Modelo do código
– inteiro – Ponto fixo
– Ponto flutuante
• Foco do engenheiro
– algoritmo
• Simulação do algoritmo em ANSI C++
– Várias ordens de magnitude mais rápida
Ajustando Restrições de Síntese
• Restrições Gerais
– Tecnologia alvo – Freqüência de clock
Ajustando Restrições de Síntese
• Restrições Gerais
– Tecnologia alvo – Freqüência de clock
– Objetivo: escalonamento otimizado
Ajustando Restrições de Síntese
• Restrições Gerais
– Tecnologia alvo – Freqüência de clock
– Objetivo: escalonamento otimizado
• Restrições específicas
– I/Os – Laços
– Armazenamento – Recursos de projeto
Ajustando Restrições de Síntese
• Restrições Gerais
– Tecnologia alvo – Freqüência de clock
– Objetivo: escalonamento otimizado
• Restrições específicas
– I/Os – Laços
– Armazenamento – Recursos de projeto
– Objetivo: Exploração de arquitetura
Ajustando Restrições de Síntese
• Síntese de Interface
– Uso de diretivas que definem como será implementada a movimentação de dados para dentro e fora do hardware
• Síntese de laços
– Adicionam paralelismo
– Negociam área, consumo e desempenho
• Síntese de Memória
– Restringem os tipos de memória – Definem a arquitetura de memória
Exemplo de Janela de Restrição de Arquitetura
loop
Iterações
Forma de implementação
Analisando Par Algoritmo/Arquitetura
Geração e Verificação de RTL
• Código gerado em minutos
• VHDL, Verilog e SystemC
• Relatórios
– Voltados para o hardware – Voltados para o algoritmo
• Fluxo de verificação integrado
– Comparação do HDL com ANSI C++ original
Fluxo de Verificação
Codificação de C++ para Síntese
• Restrições
– Código deve ser determinado estaticamente
• Definido em tempo de compilação
• Estruturas dinâmicas não são permitidas
– Malloc – Free – New – delete
Codificação de C++ para Síntese
• Ponteiros
– Sintetizáveis se apontam para estruturas estáticas
• Convertidos para índices de matrizes
Suporte a templates
Tipos de Dados com Precisão de Bits (Bit Accurate)
• Uso de tipos de dados “Algorithm C”
parametrizados
• Largura
• Sinal
• Largura
• Posição do ponto
• Sinal
• Quantização
Vantagens dos Tipos de Dados “Algorithm C”
• Tamanho arbitrário
• Semântica precisa
• Velocidade de simulação
– Otimizados para alto desempenho de simulação quando comparados com tipos de SystemC
• Corretude
• Velocidade de compilação e tamanho pequeno de código
• Consistência
• Suporte a tipos nativos de C++ e SystemC
Sintetizando a Interface do Design
• Separação de computação e comunicação
• Definição de handshake completo, parcial ou inexistente
• Mapeamento de matrizes para fios, memórias, barramentos ou streams
• Controle da largura em bits das portas
• Uso opcional de sinais de start/done
• Definição de protocolos personalizados
• Sinais padrão (clock, reset, etc) gerados automaticamente
Controle de Laços: Loop Unrolling
Loop Merging
Loop Pipelining
Síntese de Hierarquia
Generalização de Pipeline para Tarefas
Escalonamento e Alocação Orientados a Tecnologia
Estudo de Caso: JPEG
Código Fonte C++: Top Level
Código Fonte: rgb2ycbcr
Mapeamento dos Pixels na Memória
Bloco DCT: Gantt Chart
Exploração da Arquitetura: Variação de Throughput
Reordenador e Bloco de Quantização
Loop Merging
Blocos com Natureza de Controle
Integração do Hardware
Estruturas de comunicação