Post

Arquivo Liberty

Arquivo Liberty

O arquivo Liberty Timing (Lib) contém informações detalhadas sobre a temporização e o consumo de energia das células lógicas (std cells) de uma biblioteca de células para um determinado nó tecnológico. Essencialmente, o Liberty é um modelo de temporização que inclui dados como o atraso das células, o tempo de transição, os tempos de setup e hold, leakage power, entre outros. Esse arquivo, geralmente com a extensão .lib, é um padrão desenvolvido pela Synopsys e distribuído como código aberto. Ele é amplamente utilizado no projetos de circuitos por descrever características das células, que são fundamentais para a análise de timing em várias etapas do fluxo de projetos.

Tipos de arquivos Liberty

Os parâmetros de temporização e consumo de potência de uma célula lógica são obtidos por meio de simulações elétricas realizadas em diferentes condições de operação — como variações de processo, temperatura e tensão. Os resultados dessas simulações são organizados e armazenados nos chamados arquivos Liberty (.lib), que são utilizados por ferramentas de EDA para análise de temporização (STA) e consumo. Existem três modelos principais utilizados para caracterizar células e gerar esses arquivos .lib:

  • NLDM (Non-Linear Delay Model)
  • CCS (Composite Current Source)
  • ECSM (Effective Current Source Model)

NLDM (Non-Linear Delay Model)

É o modelo mais tradicional e amplamente utilizado. Nele, a célula é modelada com base em tabelas que relacionam o atraso de propagação e a transição de saída com dois parâmetros principais:

  • Transição na entrada (input net transition)
  • Capacitância de carga na saída (Cload)

As simulações são feitas com fontes de tensão e os resultados são armazenados em tabelas 2D no arquivo .lib. O modelo NLDM é mais simples e leve, o que garante execução rápida das ferramentas de STA e arquivos menores. No entanto, ele apresenta limitações de precisão, especialmente em designs de alta performance, onde efeitos secundários têm maior impacto.

CCS (Composite Current Source)

É um modelo mais avançado, desenvolvido pela Synopsys, no qual a célula é caracterizada usando uma fonte de corrente para modelar com maior fidelidade o comportamento elétrico, incluindo efeitos como queda de tensão (IR drop), acoplamento e variações de forma de onda. O arquivo gerado, chamado CCS Lib, oferece maior precisão na análise de temporização e integridade de sinal, sendo ideal para tecnologias mais avançadas (por exemplo, abaixo de 28 nm). Por outro lado, o CCS requer mais parâmetros de entrada, tem maior tempo de simulação e gera arquivos .lib maiores.

ECSM (Effective Current Source Model)

O ECSM é uma alternativa ao CCS, também baseado em uma fonte de corrente, mas com um modelo mais compacto e eficiente. Ele tenta equilibrar precisão e desempenho, oferecendo resultados comparáveis ao CCS, mas com menor complexidade computacional e arquivos menores. O ECSM é amplamente adotado por ferramentas da Cadence e se destaca pela boa precisão na modelagem da forma de onda de saída e transições internas, sem penalizar tanto a performance da análise. Cada modelo tem seus prós e contras, e a escolha entre NLDM, CCS e ECSM depende dos requisitos de precisão, tempo de execução e tecnologia do processo utilizados no projeto. A Figura 1 mostra uma comparação do tamanho de um arquivo CCS e um NLDM.

Desktop View Figura 1. Tamanho arquivos Liberty CSS e NLDM

Contexto no VLSI

No fluxo de design de circuitos integrados, especialmente durante as etapas de síntese lógica e análise estática de temporização (STA), é essencial contar com informações precisas sobre os atrasos de propagação e o consumo das células (como portas lógicas e flip-flops) que compõem o circuito. Realizar simulações SPICE para todo o circuito seria extremamente complexo e demorado. Por isso, utiliza-se modelos de temporização simplificados, conhecidos como timing models, para estimar o atraso de forma mais eficiente.

Para cada cell arc — ou seja, para cada combinação de entrada e caminho específico entre uma entrada e uma saída de uma célula lógica, como mostrado na Figura 2 — deseja-se determinar dois parâmetros principais: o atraso de propagação (propagation delay, tpd) e a transição de saída (output transition time, trise/tfall). O propagation delay representa o tempo que leva para uma mudança na entrada refletir na saída. Já a output transition time indica quanto tempo a saída leva para estabilizar após essa mudança.

Desktop View Figura 2: Exemplos de diferentes cell arcs para uma standard cell

Os modelos NLDM (Non-Linear Delay Models) são amplamente utilizados para essa finalidade. Eles consideram dois fatores principais como entrada: a transição de entrada (input net transition, trise/tfall) e a capacitância de carga na saída (output load capacitance, cload). Com base nesses dois parâmetros — que são tabulados no arquivo .lib — as ferramentas de EDA utilizadas para STA conseguem calcular tanto o atraso de propagação quanto a transição de saída, conforme ilustrado na figura abaixo.

Desktop View Figura 3: Parâmetros utilizados e calculados usando NLDM

Esses dados presentes no arquivo Liberty são fornecidos pela foundry, que os obtém por meio de simulações detalhadas durante o processo de caracterização elétrica das células padrão (standard cells). É importante destacar que cada arquivo Liberty é gerado considerando diferentes condições de operação — como variações de processo, temperatura e tensão (chamadas de corners). Assim, os valores de atraso de propagação e transição de saída dependerão diretamente do corner utilizado durante a análise de temporização.

O liberty é construído por declarações (statements) que podem conter várias linhas. Todas as informações do liberty são descritas usando três tipos de declarações:

  • Declarações de grupo (Group Statements)
  • Declarações de atributo (Attribute Statements)
  • Declarações define (Define Statements)

Desktop View Figura 4: Declarações básicas do arquivo Liberty

Grupo (Group Statements)

Um grupo é uma coleção de declarações que pode descrever uma biblioteca, uma célula, um pino, um arco de temporização, e assim por diante. Chaves ({}), são usadas em pares, delimitando o conteúdo do grupo. Além disso um grupo pode conter vários atributos e ainda outros grupos como seus elementos.

    group_name (name) {
        … statements …
    }

Atributo (Attribute Statements)

Uma declaração de atributo determina uma característica específica de um objeto da biblioteca, como uma célula, um pino, etc. Os atributos são sempre colocados dentro de uma declaração de grupo. Os atributos ainda podem ser divididos, com base na sua sintaxe, em dois tipos: Atributos simples e atributos complexos.

  • Atributo simples (Simple Attributes)

    Atributos simples possuem uma sintaxe básica, independente do valor. É necessário separar o nome do atributo do valor do atributo com um espaço, seguido por dois pontos e outro espaço. As declarações de atributo devem estar em uma única linha.

        attribute_name : attribute_value ;

  • Atributo complexo (Complex Attributes)

    Um atributo complexo inclui um ou mais parâmetros entre parênteses. A sintaxe da declaração de atributo complexo é:

        attribute_name (parameter1, [parameter2, parameter3 …] );

Define (Define Statements)

Você pode ainda criar novos atributos simples personalizados com a declaração define.

    define (attribute_name, group_name, attribute_type) ;

Arquivos liberty grandes podem comprometer a capacidade do disco e os recursos de memória. Para reduzir o tamanho do arquivo Lib e melhorar o gerenciamento de arquivos, a sintaxe permite que você combine vários arquivos-fonte. As referências são feitas no arquivo-fonte que contém a descrição do grupo da library. Durante a compilação da biblioteca, as informações referenciadas são recuperadas, incluídas no ponto de referência, e então a compilação continua. A sintaxe da declaração de include é:

    include_file (file_nameid) ;

Principais campos do Liberty

Grupo library

O grupo library abrange toda a descrição da biblioteca de células contida em um arquivo Liberty. Todos os atributos e grupos são definidos dentro de uma library, além disso os atributos gerais que se aplicam a todas as células são estabelecidos nesse nível. Cada arquivo .lib deve conter apenas um grupo do tipo library, e sua declaração deve ser a primeira linha executável do arquivo.

Desktop View

Templates

Os modelos de tabela (table templates) armazenam informações comuns que podem ser usadas por várias tabelas de consulta (lookup tables). Um modelo de tabela especifica os parâmetros da tabela e os pontos de interrupção para cada eixo. É necessário atribuir um nome a cada modelo para que as tabelas de consulta possam se referir a ele ao longo do liberty. O modelo de tabela que especifica os atrasos de temporização pode ter até três variáveis (variable_1, variable_2 e variable_3). As variáveis indicam os parâmetros usados para indexar a tabela de consulta ao longo do primeiro, segundo e terceiro eixos da tabela. Os parâmetros incluem o tempo de transição de entrada de um pino restrito, o comprimento da rede de saída e a capacitância, além da carga de saída de um pino relacionado.

Desktop View

Para representar a potência interna, é possível também criar modelos de informações comuns que podem ser usados por várias tabelas de consulta. Utilize o grupo power_lut_template em nível de biblioteca para criar esses modelos. Uma power_lut_template especifica os parâmetros da tabela e os pontos de interrupção para cada eixo. É necessário atribuir um nome a cada modelo para ser referenciado ao longo do liberty.

Desktop View

Grupo cell

As descrições de células são uma parte fundamental de uma biblioteca de tecnologia. Elas fornecem informações sobre a área, função e temporização de cada componente em uma tecnologia ASIC. O grupo cell é responsável por conter os atributos e groupos que declaram essas informações.

Desktop View

Grupo pin

Para cada pino em uma célula da biblioteca, um grupo cell deve conter auma descrição das características de consumo e atraso do pino. As características do pino são definidas em um grupo pin dentro do grupo cell. Um grupo pin geralmente contém um grupo timing e um grupo internal_power.

Desktop View

Grupo timing

O grupo timing contém informações para modelar arcos de temporização (timing arcs) e rastridentificar caminhos durante a STA. Ele define os arcos de temporização através de uma célula e as relações entre os sinais de clock e das entrada dados.

O grupo timing descreve:

  • Relações de temporização entre um pino de entrada e um pino de saída.
  • Relações de temporização entre dois pinos de saída.
  • Arcos de temporização através de um elemento não combinacional.
  • Tempos de setup e hold em entradas de flip-flop ou latch.
  • Opcionalmente, os nomes dos arcos de temporização.

O grupo timing também descreve as informações de setup e hold quando as informações de restrição se referem a um par de pinos de entrada.

Desktop View

Dentro do grupo timing, é possível identificar o nome ou os nomes de diferentes arcos de temporização. Um único arco pode ocorrer entre um pino identificado e um único pino relacionado, identificado com o atributo related_pin. Múltiplos arcos de temporização podem ocorrer de várias maneiras. A lista a seguir mostra seis possíveis configurações de múltiplos arcos de temporização. As seções descritivas explicam como configurar outras possíveis variações:

  • Entre um único pino relacionado e os múltiplos membros identificados de um bundle.
  • Entre múltiplos pinos relacionados e os múltiplos membros identificados de um bundle.
  • Entre um único pino relacionado e os múltiplos bits identificados de um barramento.
  • Entre múltiplos pinos relacionados e os múltiplos bits identificados de um barramento.
  • Entre os múltiplos bits identificados de um barramento e os múltiplos pinos de um barramento relacionado (com uma largura designada).
  • Entre o pino interno e todos os bits do grupo de barramento de ponto final.
Desktop View

Agora que já exploramos os principais elementos que compõem a estrutura de um arquivo Liberty, podemos representar sua organização de forma mais clara por meio de uma hierarquia, como mostrado na Figura 3. Essa representação visual ajuda a entender como as informações estão estruturadas dentro do arquivo .lib, facilitando a leitura e a navegação pelos diferentes blocos de dados, como células, pinos, arcos de temporização e parâmetros tecnológicos.

Desktop View Figura 5: Representação hierárquica do arquivo Liberty

Exemplo de cálculo de atraso usando Non-Linear Delay Model (NLDM)

Vamos supor que queremos calcular o atraso de propagação (tpd) de uma porta inversora (sg13g2_inv_1) em uma biblioteca caracterizada usando NLDM mostrada na Figura 5. Para isso, precisamos de dois parâmetros de entrada:

  • Transição da entrada (input net transition): 0.174 ns
  • Capacitância de carga na saída (Cload): 0.039 pF

Esses dois valores serão usados como índices para acessar uma tabela de atraso (delay table) no arquivo .lib. As tabelas geralmente são 2D, com uma dimensão para a transição de entrada e outra para a carga de saída.

Desktop View Figura 5: Exemplo cálculo de atraso usando NLDM

Localizamos os índices na tabela:

  • Input net transition = 0.174 ns → linha intermediária.
  • Cload = 0.039 fF → coluna do meio.

O valor correspondente na tabela é 0.0156287 ns, portando atraso de propagação (tpd) da porta para essa condição é 0.0156287 ns.

Quando os valores de entrada, como o input net transition e Cload, não correspondem exatamente aos pontos definidos nas tabelas do arquivo .lib, as ferramentas de EDA utilizam técnicas de interpolação. Esse processo permite estimar com certa precisão os valores intermediários de propagation delay com base nos dados tabelados mais próximos.

Design Liberty

Arquivos liberty podem ainda ser gerados para blocos ou IPs digitais ou analógicos já sintetizados com o objetivo de permitir análises mais precisas de STA em níveis superiores (top level) de projetos.
As informações relevantes do liberty dependem das restrições que precisam ser respeitadas no bloco na integração de topo (top integration), para usar o mecanismo de STA e permitir otimizações.

Desktop View

Normalmente, um IP analógico que possui restrições de temporização é caracterizado (memórias, células padrão, blocos digitais personalizados), e um arquivo .lib é gerado (com um script Perl ou por ferramenta de EDA). Se não houver restrições de temporização a serem respeitadas, as informações mínimas no arquivo .lib são a seção de pinos, sem as seções de temporização/potência.

Geralmente, um IP analógico sem restrições é entregue como LEF/Lib, e o .lib contém:

  • Pinos de saída (obrigatório, alinhado com o módulo Verilog)

  • Valores máximos de capacitância/transição/etc. (regras de design) (não obrigatório, mas ajuda na colocação/roteamento ou síntese para corrigir e/ou antecipar o valor de capacitância).

Você pode criar um .lib copiando e colando de um arquivo existente, e substituindo as seções de células/pinos, etc.

Desktop View Declarações básicas do arquivo Liberty

Referencias

https://www.ispd.cc/contests/18/lefdefref.pdf. Acessado em 24-Jul-2023

http://coriolis.lip6.fr/doc/lefdef/lefdefref/LEFSyntax.html.. Acessado em 24-Jul-2023

Esta postagem está licenciada sob CC BY 4.0 pelo autor.

Trending Tags