Com base na minha pergunta anterior do mesmo tipo, Construa uma máquina de adicionar usando portas lógicas NAND , desta vez você está sendo solicitado a multiplicar em vez de adicionar.
Construir um diagrama de portas (de dois fios) lógicas NAND que vai levar os cabos de entrada A1
, A2
, A4
, B1
, B2
, B4
, representando dois números binários A
para B
0-7, e valores de retorno sobre os fios de saída C1
, C2
, C4
, C8
, C16
, e C32
, representando C
, qual é o produto de A
e B
.
Sua pontuação é determinada pelo número de portões NAND que você usa (1 ponto por portão). Para simplificar, você pode usar as portas AND, OR, NOT e XOR no seu diagrama, com as seguintes pontuações correspondentes:
NOT: 1
AND: 2
OR: 3
XOR: 4
Cada uma dessas pontuações corresponde ao número de portas NAND necessárias para construir o portão correspondente.
Menor pontuação ganha.
fonte
Respostas:
60 55 5048 portõesO original (60 portas) era a abordagem sistemática - multiplique cada dígito por cada um e depois some-os. Ou seja, veja árvores Wallace e árvores Dadda
A metade superior é a rede de multiplicação - multiplique cada dígito por cada e agrupe os dígitos de saída com o mesmo peso. Alguns bits foram deixados invertidos para salvar os portões.
A segunda metade é a rede de somadores. Cada caixa representa um somador único - um meio adicionador (5 portas - 1x XOR e um inversor) ou um adicionador completo (9 portas - 2x XOR e NAND os bits de transporte invertidos). A parte superior são entradas, a saída inferior é a soma, a saída esquerda é a execução. veja o desafio anterior
O multiplicador 2x2 foi então otimizado manualmente para uma rede de 13 portas customizada, que é o tamanho ideal conforme encontrado por @boothby . Obrigado!
Colá-lo no canto mais baixo e otimizar a árvore do somador salva cinco portas (consulte a revisão nº 2). Colá-lo no canto mais alto também produz sobreposição. Um pouco de matemática nos diz, no entanto, que largar o baixo do multiplicador alto resolve a sobreposição e o que resta fazer é adicionar os dois bits restantes e resumir as coisas.
Infelizmente, isso por si só não fornece nenhuma economia, mas abre duas otimizações. Primeiro, os dois multiplicadores têm dois portões em comum e podem ser fundidos. Neste ponto, estamos de volta aos 55 anos. Segundo, na rede de adição, não precisamos de um meio adicionador, porque sabemos que sua carga será zero. Podemos substituí-lo por um OR. Um OR é um NAND com suas entradas invertidas. Isso nos produz duas cadeias de NOTs em cada filial, que podem ser removidas para uma economia total de cinco portões. Infelizmente, o semi-somador em C16 ainda carrega, então não podemos fazer o mesmo lá. Terceiro, um somador completo possui uma propriedade útil: se você inverter suas entradas e saídas, ele ainda se comportará da mesma maneira. Como todas as suas entradas já estão invertidas, também podemos mover os inversores para trás. Duas vezes. Poderíamos ter feito o mesmo no original, mas ... Ah bem. Ainda temos um meio adicionador com duas entradas invertidas. Quero otimizar mais esta parte, mas duvido que possa.
Como estamos retirando um NOT de dentro de um componente, temos que significar isso de alguma forma. Obtivemos um semi-somador com transporte invertido (AKA aproveitado XOR) a um custo de quatro portas.
Enquanto isso, também redesenhamos o diagrama significativamente.
fonte
39 portões
Tenho certeza de que não há projetos mais simples do que o meu aqui. Foi muito difícil de fazer. Também faço outros circuitos mínimos.
O atraso da transmissão é indicado pela posição descendente de cada porta NAND na folha.
Código Verilog e testes:
Kim Øyhus
fonte