Otimização lógica - Logic optimization

A otimização lógica é um processo de encontrar uma representação equivalente do circuito lógico especificado sob uma ou mais restrições especificadas. Este processo faz parte de uma síntese lógica aplicada à eletrônica digital e ao projeto de circuitos integrados .

Geralmente, o circuito é restrito a uma área mínima do chip atendendo a um atraso de resposta predefinido. O objetivo da otimização lógica de um determinado circuito é obter o menor circuito lógico que avalie os mesmos valores do original. O circuito menor com a mesma função é mais barato, ocupa menos espaço, consome menos energia , tem latência mais curta e minimiza os riscos de cross-talk inesperado , risco de processamento de sinal atrasado e outros problemas presentes no nível de nanoescala de estruturas metálicas em um circuito integrado .

Em termos de álgebra booleana , a otimização de uma expressão booleana complexa é o processo de encontrar uma expressão mais simples, que, ao ser avaliada, acabaria por produzir os mesmos resultados que a original.

Motivação

O problema de ter um circuito complicado (ou seja, um com muitos elementos, como portas lógicas ) é que cada elemento ocupa espaço físico em sua implementação e custa tempo e dinheiro para ser produzido por si mesmo. A minimização de circuitos pode ser uma forma de otimização lógica usada para reduzir a área de lógica complexa em circuitos integrados .

Com o advento da síntese lógica , um dos maiores desafios enfrentados pela indústria de automação de projeto eletrônico (EDA) foi encontrar a representação de circuito mais simples da descrição de projeto dada. Embora a otimização lógica de dois níveis já existisse há muito tempo na forma do algoritmo Quine-McCluskey , mais tarde seguida pelo minimizador lógico heurístico Espresso , as densidades de chip em rápida melhoria e a ampla adoção de linguagens de descrição de hardware para descrição de circuitos formalizaram a otimização lógica domínio como existe hoje.

Métodos

Os métodos de simplificação de circuitos lógicos são igualmente aplicáveis ​​à minimização de expressões booleanas .

Classificação

Hoje, a otimização lógica é dividida em várias categorias:

Com base na representação do circuito
Otimização de lógica de dois níveis
Otimização lógica multinível
Com base nas características do circuito
Otimização de lógica sequencial
Otimização de lógica combinatória
Com base no tipo de execução
Métodos de otimização gráfica
Métodos de otimização tabular
Métodos de otimização algébrica

Métodos gráficos

Os métodos de minimização gráfica para lógica de dois níveis incluem:

  • Diagrama de Euler (também conhecido como círculo Euleriano ) (1768) por Leonhard P. Euler (1707-1783)
  • Diagrama de Venn (1880) por John Venn (1834–1923)
  • Diagrama de Marquand (1881) por Allan Marquand (1853–1924)
  • Harvard minimizing chart (aka Harvard chart ) (1951) por Howard H. Aiken (1900–1973) e Martha L. Whitehouse
  • Gráfico de decomposição (1952) de Robert L. Ashenhurst (1929–2009) e Theodore Singer (1916–1991)
  • Veitch chart (1952) por Edward W. Veitch (1924–2013)
  • Mapa de Karnaugh (1953) por Maurice Karnaugh (1924–)
  • Ossos de contato , grades de contato (1955) e o mapa triádico de Antonín Svoboda (1907–1980)
  • Método gráfico (1957) por Vadim Nikolaevich Roginskij [ Вадим Николаевич Рогинский ] (1913-1983)
  • Diagrama de Händler (também conhecido como gráfico de círculo de Händler , Händler'scher Kreisgraph , Kreisgraph nach Händler , Händler-Kreisgraph , Händler-Diagramm , Minimisierungsgraph , gráfico M n ) (1958) por Wolfgang Händler (1920–1998)
  • Mapa Mahoney, também conhecido como M-map ou números de designação (1963) de Matthew V. Mahoney
  • Método de gráfico (1965) por Herbert F. Kortum  [ de ] (1907-1979)
  • Mapa reduzido de Karnaugh (RKM)
  • Método Hypercube (1982) por Stamatios V. Kartalopoulos
  • Mapa do anel Minterm (MRM) ou algoritmo do anel Minterm (1990) por Thomas R. McCalla
  • Diagrama V (2001) por Jonathan Westphal (1951–)
  • Paraboomig (2003) de Shrish Verma e Kiran D. Permar
  • Gráfico do inversor de maioria (MIG) (2014) de Luca Amarú, Pierre-Emmanuel Gaillardon e Giovanni De Micheli
  • Enredo de Pandit (2017) por Vedhas Pandit e Björn W. Schuller (1975–)
  • Gráfico da verdade (2020) por Eisa Alharbi

Minimização de expressão booleana

Os mesmos métodos de minimização (simplificação) de expressão booleana listados abaixo podem ser aplicados à otimização do circuito.

Para o caso em que a função booleana é especificada por um circuito (ou seja, queremos encontrar um circuito equivalente de tamanho mínimo possível), o problema de minimização de circuito ilimitado foi há muito conjecturado como completo , um resultado finalmente comprovado em 2008, mas existem heurísticas eficazes, como mapas de Karnaugh e o algoritmo Quine-McCluskey, que facilitam o processo.

Os métodos de minimização de função booleana incluem:

  • Método de Blake - Poretsky
  • Método Nelson
  • Algoritmo Quine-McCluskey
  • Método de transformações algébricas
  • Método de Petrick
  • Método Roth
  • Método Kudielka
  • Método Wells
  • Método binário de Scheinman
  • um método de minimizar funções em bases SIM-NÃO e OU NÃO (base Schaeffer e Pierce)
  • método de coeficientes indeterminados
  • método hipercubo
  • método de decomposição funcional

Minimizador lógico heurístico Espresso

Uma abordagem diferente para este problema é seguida no algoritmo ESPRESSO, desenvolvido por Brayton et al. na Universidade da Califórnia, Berkeley . É um algoritmo eficiente em termos de recursos e desempenho que visa resolver o problema de minimização de lógica de dois níveis sem risco heurístico .

Em vez de expandir uma função lógica em mintermos, o programa manipula "cubos", representando os termos do produto nas coberturas ON-, DC- e OFF- iterativamente. Embora o resultado da minimização não seja garantido como o mínimo global , na prática isso é muito próximo, enquanto a solução está sempre livre de redundância . Comparado com os outros métodos, este é essencialmente mais eficiente, reduzindo o uso de memória e o tempo de computação em várias ordens de magnitude. Seu nome reflete a maneira de fazer instantaneamente uma xícara de café fresco. Quase não há restrição ao número de variáveis, funções de saída e termos de produto de um bloco de função combinacional. Em geral, por exemplo, dezenas de variáveis ​​com dezenas de funções de saída são prontamente tratadas.

A entrada para ESPRESSO é uma tabela de funções da funcionalidade desejada; o resultado é uma tabela minimizada, descrevendo a capa ON ou a capa OFF da função, dependendo das opções selecionadas. Por padrão, os termos do produto serão compartilhados tanto quanto possível pelas várias funções de saída, mas o programa pode ser instruído a lidar com cada uma das funções de saída separadamente. Isso permite uma implementação eficiente em matrizes lógicas de dois níveis, como PLA (Matriz Lógica Programável) ou PAL (Lógica de Matriz Programável).

O algoritmo ESPRESSO provou ser tão bem-sucedido que foi incorporado como uma etapa de minimização de função lógica padrão em virtualmente qualquer ferramenta de síntese lógica contemporânea . Para implementar uma função em lógica multinível, o resultado da minimização é otimizado por fatoração e mapeado nas células lógicas básicas disponíveis na tecnologia alvo, quer se trate de uma matriz de portas programáveis ​​em campo (FPGA) ou de um circuito integrado específico de aplicação ( ASIC).

Representações de dois níveis versus representações de vários níveis

Enquanto uma representação de circuito de dois níveis de circuitos refere-se estritamente à visão achatada do circuito em termos de SOPs ( soma de produtos ) - que é mais aplicável a uma implementação de PLA do projeto - uma representação de vários níveis é mais visão genérica do circuito em termos de SOPs conectados arbitrariamente, POSs ( produto das somas ), forma fatorada etc. Os algoritmos de otimização lógica geralmente funcionam na representação estrutural (SOPs, forma fatorada) ou funcional ( diagramas de decisão binários , ADDs ) do circuito.

Se tivermos duas funções F 1 e F 2 :

A representação de 2 níveis acima leva seis termos de produto e 24 transistores em CMOS Rep.

Uma representação funcionalmente equivalente em vários níveis pode ser:

P = B + C .
F 1 = AP + AD .
F 2 = A'P + A'E .

Embora o número de níveis aqui seja 3, o número total de termos e literais do produto reduz devido ao compartilhamento do termo B + C.

Da mesma forma, distinguimos entre circuitos sequenciais e combinacionais , cujo comportamento pode ser descrito em termos de tabelas / diagramas de estado de máquina de estado finito ou por funções e relações booleanas, respectivamente.

Exemplo

Circuito de exemplo original e simplificado

Embora existam muitas maneiras de minimizar um circuito, este é um exemplo que minimiza (ou simplifica) uma função booleana. A função booleana realizada pelo circuito está diretamente relacionada à expressão algébrica a partir da qual a função é implementada. Considere o circuito usado para representar . É evidente que duas negações, duas conjunções e uma disjunção são usadas nesta declaração. Isso significa que, para construir o circuito, seriam necessários dois inversores , duas portas AND e uma porta OR .

O circuito pode ser simplificado (minimizado) aplicando-se as leis da álgebra booleana ou usando a intuição. Uma vez que o exemplo afirma que é verdadeiro quando é falso e vice-versa, pode-se concluir que isso significa simplesmente . Em termos de portas lógicas, a desigualdade significa simplesmente uma porta XOR (exclusiva ou). Portanto ,. Então, os dois circuitos mostrados abaixo são equivalentes:


A exatidão do resultado pode ser verificada usando uma tabela verdade .

Veja também

Referências

Leitura adicional