No processo de projecto, a síntese é procedimento através do qual se converte uma especificação ou uma descrição comportamental de um componente numa descrição estrutural usando componentes de níveis de abstracção inferiores pertencentes a uma dada biblioteca [Gajski97, Micheli94]. A síntese pode ser vista como um processo de refinamento da descrição comportamental à qual é adicionada informação estrutural em cada iteração. Na prática, isto traduz-se normalmente na partição da descrição comportamental em vários blocos. A descrição estrutural resultante contém cada um dos blocos obtidos e suas interligações, bem como as suas descrições comportamentais. Este procedimento é repetido até cada bloco representar um dos componentes da biblioteca alvo. Nos procedimentos de síntese estão geralmente integrados mecanismos de optimização, os quais permitem melhorar o desempenho e/ou reduzir o custo do sistema projectado.
Tendo por base os níveis de abstracção da Tabela 1.1, podem ser identificadas as seguintes tarefas distintas de síntese:
• Síntese de sistema – decompõe uma especificação abstracta da funcionalidade do sistema em várias tarefas e efectua a sua partição entre uma implementação em hardware ou em software. No caso do hardware, as tarefas são implementadas numa estrutura de componentes ao nível do sistema, tais como processadores, memórias e ASICs. No caso do software as várias tarefas poderão corresponder a diferentes módulos ou objectos do programa. Um dos possíveis objectivos da síntese de sistema é reutilizar componentes predefinidos, dos quais os blocos de propriedade intelectual (Intellectual Property – IP) são um bom exemplo. Na área dos sistemas embutidos (embedded systems), a síntese de sistema é também vulgarmente designada por co-síntese ou co-projecto de hardware-software [GupMic93, ThoAdaSch93, Wolf94, IsmJer95, MicGup97, StaWol97].
• Síntese arquitectural – um modelo comportamental ao nível arquitectural pode ser abstraído como um conjunto de operações e dependências, normalmente descritas por algoritmos, fluxogramas ou conjuntos de instruções. A partir desse modelo, a síntese arquitectural gera uma representação estrutural ao mesmo nível que descreve a forma como essas operações devem ser implementadas. Isto consiste na identificação do tipo e determinação da quantidade dos recursos de hardware que implementam as respectivas operações, na sua interligação, no escalonamento temporal das operações e na sua associação com os recursos alocados. Por outras palavras, a síntese arquitectural define um modelo estrutural de uma unidade de execução, como uma interligação de recursos e um modelo lógico de uma unidade de controlo, que emite os sinais que vão controlar a unidade de execução de acordo com o escalonamento efectuado. Exemplos de componentes utilizados neste nível de abstracção são contadores, registos, pilhas, filas, somadores e multiplicadores. Outras designações para a síntese arquitectural são síntese de alto nível ou síntese estrutural, uma vez que determina a estrutura macroscópica do circuito. No entanto, por uma questão de uniformidade e clareza, é preferível a utilização da primeira designação. Os parâmetros macroscópicos da implementação, tais como área do circuito e desempenho, dependem fortemente deste processo, o qual, determina também o nível de paralelismo das operações. A síntese arquitectural é muito útil no projecto de circuitos de interface, coprocessadores específicos, algoritmos para processamento digital de sinal, entre outros. A síntese arquitectural está bem documentada em [McFParCam90, CamWol91, GajDutWuLin92, MicLauDuz92, GajRam94, Micheli94, WalCha95].
• Síntese lógica – é o processo através do qual é gerada uma representação estrutural de um modelo comportamental ao nível lógico. Isto consiste na manipulação das especificações lógicas, normalmente expressões Booleanas, para criar modelos baseados em primitivas lógicas e interconexões, tentando ao mesmo tempo reduzir a quantidade de lógica necessária, o atraso de
propagação, ou consumo de potência. Assim, a síntese lógica determina a estrutura microscópica (i. e. ao nível das portas lógicas) do circuito. A transformação de um modelo lógico numa interconexão de instâncias de células de uma dada biblioteca é o último passo da síntese lógica sendo normalmente designada por mapeamento na tecnologia. Um modelo ao nível lógico de um circuito pode ser representado por um diagrama de transição de estados, por uma tabela de verdade, por um diagrama esquemático ou por uma linguagem de descrição de hardware. Em qualquer dos casos o modelo pode ser elaborado pelo projectista ou sintetizado a partir de outro de nível superior. A síntese lógica está documentada em [MicLauDuz92, Micheli94].
• Síntese sequencial – corresponde a um caso particular da síntese lógica, sendo utilizada para gerar circuitos que contenham elementos de memória, tais como unidades de controlo descritas por máquinas de estados finitos. O resultado da síntese sequencial é uma interligação de portas lógicas e flip- flops. Os objectivos da síntese sequencial são a minimização do número de elementos de memória usados no circuito, a geração de uma codificação de estados e entradas que reduza o seu custo, a diminuição do atraso entre as entradas e saídas e por último a simplificação das expressões Booleanas resultantes dos passos anteriores e necessárias para a implementação do circuito. A síntese sequencial está documentada em [AshDevNew92, Micheli94].
Abaixo do nível lógico, as técnicas de síntese estão divididas de acordo com as áreas de aplicação especificas e são altamente dependentes das tecnologias de implementação utilizadas [Gajski97]. O modelo do sistema resultante do processo de síntese encontra-se na região estrutural do plano de abstracção (ver Figura 1.3).
Na Figura 1.4 está ilustrada a sequência de tarefas de síntese de um sistema a partir de uma descrição comportamental abstracta. Por uma questão de generalidade, considera-se também que o sistema pode ser constituído por componentes de software.
A síntese pode ser realizada manualmente ou de forma automática por ferramentas de CAD especificas. Devido à sua complexidade o processo manual é bastante moroso, sujeito a erros e actualmente virtualmente impossível, principalmente no caso de projectos com milhões de portas lógicas, como os circuitos integrados VLSI. Além disso, as ferramentas de CAD disponíveis actualmente são capazes de sintetizar circuitos complexos, em espaços de tempo relativamente reduzidos e na maioria dos casos a qualidade do resultado final é superior àquela que se conseguiria manualmente.
As ferramentas de síntese lógica são muito úteis no projecto de circuitos combinatórios tais como unidades aritméticas, comparadores, codificadores, descodificadores, etc. Por outro lado, as ferramentas de síntese sequencial são usadas essencialmente no projecto de unidades de controlo.
Quanto às ferramentas de síntese arquitectural, são utilizadas para converter expressões aritméticas, conjuntos de instruções ou descrições algorítmicas em
estruturas ao nível dos registos, minimizando a área do circuito e/ou o tempo de execução.
Por último, as ferramentas de síntese de sistema são as que se encontram menos desenvolvidas actualmente. No entanto, esta é uma área de investigação bastante activa em grande parte devido às elevadas capacidades de integração disponíveis, sendo possível implementar num único circuito integrado um sistema bastante complexo.
Síntese de Sistema Decomposição do sistema Síntese Arquitectural Alocação Escalonamento Associação Geradores de Software Síntese Lógica/ Sequencial Minimização lógica Minim./codifica. de estados Mapeamento na tecnologia Projecto Físico Implantação Interligação Especificação comportamental abstracta Circuito Implementado Decomposição modular do software Decomposição modular do hardware Descrição comportamental da(s) unidade(s) de controlo Descrição estrutural da(s)
unidade(s) de execução
Descrição estrutural do circuito ao nível lógico
Software Hardware