Die allgegenwärtige numerische 7-Segment-Anzeige kann alle 16 hexadezimalen Ziffern eindeutig anzeigen, wie in dieser Wikipedia .gif gezeigt
Einträge für diese Herausforderung erstellen ein Schaltbild unter Verwendung von NAND-Logikgattern, das die vier Bits einer hexadezimalen Ziffer in die Eingänge für die sieben Segmente transformiert. Die Eingaben für die 7-Segment-Anzeige sind normalerweise wie folgt gekennzeichnet: (DP (Dezimalpunkt) wird bei dieser Herausforderung ignoriert)
Daher muss Ihre Schaltung der folgenden Wahrheitstabelle entsprechen:
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
Ich denke, diese Tabelle ist korrekt, aber bitte lassen Sie mich wissen, wenn Sie Fehler entdecken.
Ihre Punktzahl wird durch die Anzahl der von Ihnen verwendeten NAND-Gatter mit 2 Eingängen bestimmt (1 Punkt pro Gatter). Zur Vereinfachung können Sie in Ihrem Diagramm UND-, ODER-, NICHT- und XOR-Gatter mit den folgenden entsprechenden Bewertungen verwenden:
NOT: 1
AND: 2
OR: 3
XOR: 4
quelle
Antworten:
Domino - Gesamtpunktzahl: 243 NANDs
Verwendete ORs: 61 (jeweils 3 NANDs -> 183 NANDs)
Verwendete NOTs: 60 (je 1 NANDs -> 60 NANDs)
Diese Lösung besteht aus Dominosteinen und erfordert eine Sammlung von Software, die ich im Zuge der Beantwortung der beiden Domino-bezogenen Fragen von Martin Büttner ( Golfing for Domino Day und Domino Circuits ) geschrieben habe.
Durch Ändern meines Domino Circuit- Solvers konnte ich eine Domino-Schaltung (diese Datei enthält auch den Solver-Ausgang und das Schaltungsskelett) erstellen, die aus ORs und IFNOTs besteht, wobei der erste Eingang immer TRUE ist (es handelt sich also im Wesentlichen um ein NOT). Da gibt es nicht viel , das wird in dieser Antwort passen, präsentiere ich die OR und NOT - Lösungen für die Wahrheitstabelle:
Beachten Sie, dass die einzigen verwendeten binären Operationen OR und IFNOT sind, wobei ich jedes IFNOT für Bewertungszwecke als NICHT zähle
Ich habe am Ende der Schaltung eine 7-Segment-Anzeige hinzugefügt und sie einem Domino-Simulator / GIF-Generator zugeführt. Die Erstellung des resultierenden Gifs (das zeigt, dass 'A' angezeigt wird) dauerte ungefähr 2 Stunden. Da die endgültige Schaltung 1141 * 517 groß ist, wird jede "Zelle" durch ein einzelnes Pixel dargestellt. Eine schwarze Zelle ist leer, eine graue Zelle hat einen stehenden Domino und eine weiße Zelle hat einen gefallenen Domino. Dies bedeutet, dass Sie nicht wirklich sagen können, was los ist, und es hilft nicht, wenn es überhaupt gequetscht wird. Sparr hat freundlicherweise eine viel kleinere Version meines Original-Gifs (650kB) zur Verfügung gestellt, also hier ist es!
Unten ist das letzte Bild der Animation für Eingabe 1010 ('A') wie oben. Sie sehen die Eingänge ganz links, die Stromleitung oben, die Schalttafel, die den größten Teil des Platzes einnimmt, die 7 einzelnen Logikelemente (dies sind Domino-Darstellungen der obigen Funktionen) links von der Schalttafel und bis Ganz rechts befindet sich die 7-Segment-Anzeige. Wenn dies ausgeführt wird, leuchten die einzelnen Segmente ungefähr gleichzeitig auf, sodass Sie es nicht zu lange betrachten können, da einige Segmente leuchten und darauf warten, dass andere aufleuchten.
Sehen Sie die Animation in voller Pracht hier (36 MB) oder hier (650 KB, mit freundlicher Genehmigung von Sparr) (die kleinere Kopie ist viel kleiner, aber mein Browser schien es zu mögen, Frames zu überspringen, die die Schönheit beeinträchtigen, also habe ich das Original so belassen)
Die Details der 7-Segment - Anzeige zu erkennen sind hier ( ‚1‘ ist gezeigt)
quelle
30 NANDs
Ich bin mir ziemlich sicher, dass es keine einfacheren Lösungen für dieses Problem gibt, außer vielleicht durch Ändern der Symbole auf dem Display, aber das wäre ein anderes und anderes Problem.
Da dies tatsächlich nützlich ist, beispielsweise beim Programmieren eines FPGA zur Anzeige der Ausgabe, stelle ich Verilog-Code bereit.
Was den Minimalismus betrifft: Natürlich war es schwierig zu machen. Es ist nicht nachvollziehbar, da eine 7-Segment-Anzeige nur eine ziemlich zufällige Art ist, wie Menschen Zahlen anzeigen, was zu einer Schaltung führt, die ebenfalls ziemlich zufällig ist. Und wie es für diese minimalen Schaltungen typisch ist, ist ihre logische Tiefe etwas höher als für enge Lösungen. Ich denke, das liegt daran, dass seriell einfacher als parallel ist.
Die Übertragungsverzögerung wird durch die Abwärtsposition jedes NAND-Gatters auf dem Blatt angezeigt.
Verilog-Code:
Kim Øyhus
quelle
Mit ~ für NOT und N für NAND findet eine Computersuche (ohne Begriffe zwischen Ausgängen zu teilen) eine Lösung mit 82 NANDs ohne Teilen. Das manuelle Suchen nach Freigabebegriffen reduziert diese auf 54 NANDs, und eine Computersuche, die das Freigeben umfasst, reduziert sie weiter auf 37 NANDs. Das Minimum könnte sogar noch niedriger sein, da die Methode sicherlich nicht erschöpfend ist.
Hier ist das Programm, das die obige Tabelle neu erstellt. Jede Zeile ist mit den NANDS für diese Ausgabe gekennzeichnet.
Und hier ist die Ausgabe:
Und hier sind die äquivalenten Gleichungen, die Begriffe teilen, die es auf 54 NANDs bringen:
Und hier ist die 37 NAND-Lösung:
quelle
197 NANDs
Da dies meine erste Herausforderung für Logikgatter ist. Es wird nicht viel Golf gespielt und ist möglicherweise nicht die kleinste Lösung. Ich verwende hier keinen Circuit Split.
Wenn ich recht habe, ist meine Punktzahl 197 .
Während dieser Herausforderung habe ich einen einfachen JavaScript-Code erstellt, um mein Gate zu testen.
Kopieren und ändern Sie das Gate und fügen Sie es in die Konsole Ihres Browsers oder in Node.js REPL ein.
quelle