High-Level Synthesis with Forte Cynthesizer
Tópicos Avançados em Arquitetura de Computadores
Introdução
• Síntese de Alto Nível
• SystemC + C++
• Diretivas de controle de ferramenta
• Clock alvo + tecnologia
Construções de Alto Nível C++ Sintetizáveis
• Encapsulamento
– Suporte a classes em C++
– Suporte a métodos públicos e privados
• Construção de tipos de dados customizados – Suporte a sobrecarga de operadores
• Desenvolvimento de IP Configurável
– Suporte a templates de C++
Construtores de C++ Sintetizáveis
Construções de C++ Não Sintetizáveis
• Síntese faz uso de propriedades estáticas do código fonte
• Não utiliza informação da execução do código
Construções de C++ Não Sintetizáveis
• Aritmética de Ponteiros
• Dereferenciamento de ponteiros – Suportado em alguns casos
• Alocação dinâmica de memória – Malloc()
– Free() – New()
• Suportado para a alocação de sub-módulos
– Delete()
Estrutura de Módulo Sintetizável
Multiplos Threads
Multiplos Processos SC_Method
Funções C++
Declarações de Variáveis
Processos Concorrentes
• Processos de Alto Nível – SC_CTHREAD
• Processos RTL – SC_METHOD
• Suporte a Combinação de Processos de Alto Nível com Processos de Baixo Nível
– Algoritmo + RTL
Processos SC_CTHREAD
Processo baseado no Clock
Exemplo de SC_CTHREAD
Sinal de reset
Wait indica que dura apenas 1 ciclo Comportamento do reset
Comportamento do módulo
Processos SC_METHOD
Circuitos Síncronos
Circuitos Assíncronos
Interfaces Modulares
• Canais de Alto Nível para Comunicação
• Encapsulam sinais de baixo nível – Sinais
– Portas
– Protocolos
• Conexões feitas por interface
– Não é necessário conectar os fios individualmente
• Reuso de interface
– Projeta e testa uma vez
– Reusa várias vezes
Interfaces Modulares
Socket Modular de Saída
Protocolo Sinais
Socket Modular de Entrada
Protocolo Sinais
Uso de Interfaces Modulares
Declaração das Interfaces
Comportamento no reset
Uso da interface
Canais
Binding
Como realizar a conexão
Operador de conexão
Exemplo de Conexão
Hierarquia Estrutural
Bindings diferentes
Criando RTL com Comportamento Temporal Previsível
• Como garantir que o circuito funcionará na frequencia
e tecnologias selecionadas após a síntese lógica?
Como Cynthesizer Garante Isso
• Uso de informações de biblioteca de células
• Tecnologia de otimização de datapath – Biblioteca
• Somadores
• Multiplicadores
• Multiplexadores
• Criação de unidades funcionais customizadas – Somador de 12-bits + 3-bits
• “a + (b * c) -3”
• Uso de controles adicionais para garantir a síntese
Escalonamento
Escalonamento em modo misto
Diretiva de protocolo fixo
protocolo livre
Restringindo o Escalonamento
Realizar a computação em 4 ciclos
Escalonamento com Restrições
Execução em 4 ciclos
Escalonamento com Restrições
Execução em 6 ciclos
Laços
Loop unrolling