A exibição numérica de 7 segmentos onipresente pode exibir inequivocamente todos os 16 dígitos hexadecimais, como mostra esta wikipedia .gif
As entradas para este desafio criarão um diagrama de circuitos usando portas lógicas NAND que transformam os quatro bits de um dígito hexadecimal nas entradas dos sete segmentos. As entradas para a exibição de 7 segmentos são tipicamente rotuladas da seguinte forma: (DP (ponto decimal) é ignorado para este desafio)
Assim, seu circuito precisará estar em conformidade com a seguinte tabela de verdade:
Hex | Hex Input Bit | Output to Segment line:
digit | 3 2 1 0 | A B C D E F G
------+---------------+-----------------------
0 | 0 0 0 0 | 1 1 1 1 1 1 0
1 | 0 0 0 1 | 0 1 1 0 0 0 0
2 | 0 0 1 0 | 1 1 0 1 1 0 1
3 | 0 0 1 1 | 1 1 1 1 0 0 1
4 | 0 1 0 0 | 0 1 1 0 0 1 1
5 | 0 1 0 1 | 1 0 1 1 0 1 1
6 | 0 1 1 0 | 1 0 1 1 1 1 1
7 | 0 1 1 1 | 1 1 1 0 0 0 0
8 | 1 0 0 0 | 1 1 1 1 1 1 1
9 | 1 0 0 1 | 1 1 1 1 0 1 1
A | 1 0 1 0 | 1 1 1 0 1 1 1
b | 1 0 1 1 | 0 0 1 1 1 1 1
C | 1 1 0 0 | 1 0 0 1 1 1 0
d | 1 1 0 1 | 0 1 1 1 1 0 1
E | 1 1 1 0 | 1 0 0 1 1 1 1
F | 1 1 1 1 | 1 0 0 0 1 1 1
Penso que esta tabela é precisa, mas informe-me se detectar algum erro.
Sua pontuação é determinada pelo número de portas NAND de 2 entradas que você usa (1 ponto por porta). Para simplificar, você pode usar as portas AND, OR, NOT e XOR em seu diagrama, com as seguintes pontuações correspondentes:
NOT: 1
AND: 2
OR: 3
XOR: 4
fonte
Respostas:
Dominó - Pontuação total: 243 NANDs
RUPs utilizadas: 61 (3 NANDs cada -> 183 NANDs)
NOTs usados: 60 (1 NANDs cada -> 60 NANDs)
Essa solução está no dominó e exigiu uma coleção de peças de software que escrevi ao responder às duas perguntas relacionadas ao Domino de Martin Büttner para produzir ( Golfe no Domino Day e Domino Circuits ).
Ao modificar meu solucionador de circuitos do Domino , consegui produzir um circuito de dominó (esse arquivo também contém a saída e o esqueleto do circuito) consistindo em ORs e IFNOTs em que a primeira entrada é sempre VERDADEIRA (portanto, é essencialmente um NÃO). Porque não há muito que se encaixam nesta resposta, eu apresento as OR e NOT soluções para a tabela verdade:
Observe que as únicas operações binárias usadas são OR e IFNOT, onde conto cada IFNOT como NÃO para fins de pontuação
Eu adicionei um display de 7 segmentos ao final do circuito e o alimentei em um simulador de dominó / gerador de gif. O gif resultante (que mostra 'A' sendo exibido) levou cerca de 2 horas para ser gerado. Como o circuito final tem 1141 * 517 de tamanho, cada "célula" é representada por um único pixel. Uma célula preta está vazia, uma célula cinza tem um dominó permanente e uma célula branca tem um dominó caído. Isso significa que você não pode realmente dizer o que está acontecendo, e não ajudará se estiver sendo esmagado. Sparr gentilmente forneceu uma versão muito menor do meu gif original (650kB), então aqui está!
Abaixo está o último quadro da animação para a entrada 1010 ('A') como acima. Você pode ver as entradas na extrema esquerda, a linha de força na parte superior, o quadro de distribuição ocupando a maior parte do espaço, as 7 peças individuais de lógica (estas são representações de dominó das funções acima) à esquerda do quadro de distribuição e para a extrema direita é a própria tela de 7 segmentos. Quando isso é executado, os segmentos individuais acendem aproximadamente ao mesmo tempo, portanto, você não pode ficar olhando por muito tempo com alguns segmentos acesos esperando que outros acendam.
Veja a animação em toda a sua glória aqui (36MB) ou aqui (650kB, cortesia de Sparr) (a cópia menor é muito menor, mas meu navegador parecia gostar de pular quadros que estragam a beleza, então deixei o original assim)
Os detalhes da tela de 7 segmentos podem ser vistos aqui ('1' é mostrado)
fonte
30 NANDs
Tenho certeza de que não há soluções mais simples para esse problema, exceto talvez alterando os símbolos na tela, mas esse seria outro problema diferente.
Como isso é realmente algo útil, por exemplo, ao programar um FPGA para mostrar a saída, forneço código Verilog.
Quanto ao minimalismo: é claro que era difícil de fazer. Não é compreensível, uma vez que uma tela de 7 segmentos é apenas uma maneira bastante aleatória em que os humanos mostram números, resultando em um circuito também bastante aleatório. E como é típico para esses circuitos mínimos, sua profundidade lógica é um pouco maior do que para soluções próximas. Eu acho que isso ocorre porque serial é mais simples que paralelo.
O atraso da transmissão é indicado pela posição descendente de cada porta NAND na folha.
Código Verilog:
Kim Øyhus
fonte
Usando ~ para NOT e N para NAND, uma pesquisa por computador (sem compartilhar termos entre saídas) encontra uma solução com 82 NANDs sem compartilhar. A procura manual de termos de compartilhamento reduz para 54 NANDs e uma pesquisa no computador que inclui compartilhamento reduz ainda mais para 37 NANDs. O mínimo pode ser ainda mais baixo, pois o método certamente não é exaustivo.
Aqui está o programa que recria a tabela acima. Cada linha é rotulada com o NANDS para essa saída.
E aqui está a saída:
E aqui estão as equações equivalentes, compartilhando termos que o reduzem a 54 NANDs:
E aqui está a solução 37 NAND:
fonte
197 NANDs
Uma vez que este é o meu primeiro desafio de portas lógicas. não é muito jogado e pode não ser a menor solução. Eu não estou usando circuito dividido aqui.
Se eu estiver certo, minha pontuação é 197 .
Durante esse desafio, criei um código JavaScript simples para testar meu portão.
Copie e modifique o gate e cole-o no console do seu navegador ou no Node.js. REPL.
fonte