Pseudozufallsimpulsgenerator der alten Schule (Bitte um Unterstützung beim Hardwaredesign)

Ich möchte einen pseudozufälligen Impulsgenerator der alten Schule entwerfen, um verschiedene Arten von Ereignissen auszulösen (bitte nur Hardwarevorschläge - keine programmierbaren ICs). Die Ereignisse, die ich kontrollieren möchte, müssen im Allgemeinen in den folgenden Häufigkeitskategorien stattfinden: mehrmals pro Minute, einige Male pro Minute, einmal pro Minute, einmal alle paar Minuten, ein- oder zweimal pro Stunde. Innerhalb jeder Häufigkeitskategorie sollte das Ereignis "zufällig" auftreten, was bedeutet, dass das Wiederauftreten des Ereignisses nicht genau vorhersehbar sein sollte. Um Ihnen ein Gefühl dafür zu geben, warum ich das bauen möchte: Stellen Sie sich ein Videospiel vor, das verschiedene Szenenelemente hat, von denen einige sehr häufig vorkommen, einige ziemlich häufig und andere selten ... Sie haben die Idee, ich Hoffnung.

Der Grund, warum ich eine reine Hardwarelösung möchte, ist, dass ich absichtlich versuche, etwas über diskrete Logik zu lernen - Dinge wie Schieberegister, Multiplexer, Boolesche Logik usw. Effizienz, Geschwindigkeit, Größe und Kosten sind nicht meine Hauptanliegen. Hoffentlich gibt es da draußen ein paar Vintage-Elektronik-Fanatiker, die mir bei meiner Suche nach Wissen helfen! Danke :-) PS: Ein gezeichneter Schaltplan wäre sehr dankbar, da ich lerne und wahrscheinlich nicht in der Lage sein werde, vage Vorschläge zu verstehen oder zu erstellen.

Willkommen bei EE.SE. Indem Sie MPUs nicht zum Programmieren verwenden, benötigen Sie viele Stufen, um den ursprünglichen Datenstrom zu randomisieren.
kannst du nicht google bilder durchsuchen?
Dieser nerdist.com/wall-of-lava-lamps-protect-internet-traffic ist der ultimative analoge Zufallszahlengenerator
Viele Stufen sind in Ordnung. Ja, ich kann Google-Bilder durchsuchen. Danke für den Lavalampen-Vorschlag!
Schieberegister und Multiplexer gelten im Allgemeinen als digitale Geräte, nicht als analoge (obwohl es auch ein Gerät gibt, das als analoger Multiplexer bezeichnet wird). Boolesche Logik ist die Mathematik hinter der digitalen Logik. Wenn Sie Ihr Design aus einzelnen Gattern und Flip-Flops erstellen möchten, nennen wir das ein Design aus "diskreten Logikgeräten", nicht aus "analoger Berechnung".
Das Lavalampengerät soll eine wirklich zufällige Ausgabe erzeugen, nicht pseudozufällig. Und so gut wie jedes Gerät, das Sie mit tatsächlichen analogen Geräten herstellen, ist wahrscheinlich dasselbe --- eher zufällig als pseudozufällig.
Danke für die Begriffsklärung - das hilft bei meiner Suche, da ich oft nicht weiß, was die richtige Terminologie ist. Ja, eine diskrete Logik ist das, was ich suche (im Gegensatz zu einer Wand aus Lavalampen, wenn auch sehr cool).
Möchten Sie pseudozufällig, da Sie dieselbe Sequenz wiederholen können, wenn Sie mit denselben Eingabebedingungen beginnen, oder wäre auch nicht wiederholbar akzeptabel?
Nicht wiederholbar wird bevorzugt. Es ist wichtig, dass ich allgemeine Kategorien der Ereignishäufigkeit habe, aber die Zufälligkeit innerhalb dieser Kategorien ist ideal, auch wenn dies einen gelegentlichen Ausreißer bedeutet.
Ich sehe dein Dilemma. Je mehr zufällige Stufen Sie hinzufügen, desto größer ist die Wahrscheinlichkeit von „Harmonischen“, bei denen sich Untermuster zu wiederholen beginnen. Sie emulieren die Verschlüsselung bis zu einem gewissen Grad
Wenn Sie nie möchten, dass sich das Muster wiederholt, muss es immer die Rückkopplung oder das zufällige Rauschen bei jeder vollständigen Schleife ändern. Wenn es 1.000 Iterationen vor einer teilweisen Wiederholung dauert, dann haben Sie es geschafft.
Sie können ein LFSR aus Schieberegistern und XOR-Gattern machen. Dann können Sie n verschiedene Bits UND miteinander verknüpfen, um eine Ausgabe zu erzeugen, die 1/2^n der Zeit wahr ist.
Pseudozufällig sieht aus wie zufällig, ist aber nicht wirklich zufällig. Was verlangen Sie also: zufällig oder pseudozufällig?
Ein Vorschlag ist, einen langen Sequenzgenerator mit beispielsweise 24 Bit zu verwenden, den Sie jedes Mal takten, wenn Sie eine zufällige Verzögerung von 8 oder 16 Bit benötigen, und entsprechend skalieren, aber ihn mit zufälligen Zählungen zu Beginn des Spiels bei 15 MHz für die Dauer vorab laden des On-Press- Plus etwas mehr je nach Lichtstärke oder Versorgungsspannungsfehler.

Antworten (2)

Eine gute Möglichkeit, Zufälligkeit unter Verwendung diskreter Logik zu erzeugen, besteht darin, die Metastabilitätseigenschaften eines Flip-Flops auszunutzen.

Ein D-Flip-Flop ist eine Art Flip-Flop, das eine Uhr (Eingang mit dreieckigem Aussehen) und einen Dateneingang (D-Eingang) hat, wie unten gezeigt. Normalerweise wird der Zustand des D-Eingangs eine Laufzeitverzögerung nach einer steigenden Taktflanke an den Q/!Q-Ausgang übertragen.

D-Flip-Flop

(von http://www.learningaboutelectronics.com/images/D-flip-flop.png )

Die Daten müssen vor der Taktflanke eine bestimmte Zeit "aufstellen" und nach der Taktflanke eine bestimmte Zeit "halten", um sicherzustellen, dass die Eingabe korrekt an die Ausgabe übertragen wird. Wenn die Setup- und Hold-Zeiten nicht eingehalten werden, dann wird der Zustand des Ausgangs bei der normalen Ausbreitungsverzögerungszeit für das Flip-Flop zufällig. Die Zufälligkeit kann eingestellt werden, indem Sie die Frequenz und Phase des Takts und der Daten sowie die Zeitdauer variieren, die Sie warten, um den Status des Ausgangs zu überprüfen.

Die folgende Grafik stammt aus einem TI-Papier , in dem die Metastabilitätseigenschaften verschiedener 5-V-Logikfamilien erörtert werden. Allgemein gilt: Je langsamer die Logik, desto schlechter die Metastabilität und desto häufiger treten zufällige Fehler auf. Dies bedeutet, dass ältere Logikfamilien nützlicher zum Generieren zufälliger Fehler sind. Die Grafik zeigt, dass die Fehlerrate bei Verwendung der Logik im 74HC-Stil von Tausenden von Malen pro Sekunde auf einmal pro Tag eingestellt werden kann, indem die Wartezeit nach einer Uhr variiert wird, auf die Sie den Ausgang des Flip-Flops (tx) betrachten. Dieses spezielle Diagramm gilt für einen 1-MHz-Takt und einen 500-kHz-Dateneingang.

Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass Metastabilität verzögerungs-, temperatur- und spannungsempfindlich ist, sodass die Abstimmung auf eine bestimmte Ereignisrate eine Herausforderung sein könnte. Aber es könnte möglich sein, etwas zu bauen, das gut genug für Ihre Bedürfnisse ist.

Die Testschaltung aus dem TI-Papier ist unten dargestellt. Es kann ein Ausgangspunkt für eine Zufallsereigniserzeugungsschaltung sein.

Testschaltung für Metastabilität

@KellyHeaton Wenn Sie der Meinung sind, dass die Antwort hilfreich ist, stimmen Sie sie bitte positiv ab. Wählen Sie nach einer Weile die beste Antwort und akzeptieren Sie die Antwort.
@Hazem Ich würde gerne positiv abstimmen, sehe aber keine Option in meiner Benutzeroberfläche (ich denke, weil ich ein neuer Benutzer bin, habe ich dieses Privileg noch nicht). Außerdem denke ich immer noch über die verschiedenen Antworten nach - es gibt nicht nur eine.

Die Antwort auf diese Frage ist, dass es viele Antworten gibt, aber der gebräuchlichste Ansatz ist die Verwendung eines Schieberegisters mit linearer Rückkopplung. Ich begann mit dieser Idee und steckte zwei 8-Bit-Schieberegister (TI-Teil CD54/74AC164E), die von einem 555-Timer im astabilen Modus getaktet wurden. Ich habe die seriellen Dateneingänge der Schieberegister schwebend gelassen. Vor dem Hinzufügen von XOR-Gattern (dem linearen Rückkopplungsteil) habe ich diese Schaltung mit LEDs getestet, um zu visualisieren, was passiert. Wie sich herausstellt, beginnen die beiden Schieberegister in unterschiedlichen Zuständen (vermutlich, weil ihre Dateneingänge schwebend sind). Ihre Zustände bleiben unsynchronisiert, während sie sich weiter verschieben, was Sie in diesem Video sehen können:

https://www.kellyheatonstudio.com/blog/2018/9/6/shift-registers

Die beiden 8-Bit-Schieberegister befinden sich im mittleren Bereich meines Steckbretts. Rechts befindet sich ein 555-Timer im astabilen Modus, der einen Takt von etwa 1x pro Sekunde liefert. Links ist ein 5-Volt-Regler - dieser Teil ist irrelevant, wenn Sie die richtige DC-Versorgungsspannung haben, aber meine ist 12 VDC.

Vielleicht ist dieser gehackte Ansatz all die scheinbare Zufälligkeit, die ich brauche (ich bin Künstler, kein Kryptograph). Wenn nicht, werde ich lineares Feedback hinzufügen und / oder den Ratschlägen von @ crj11 unten bezüglich der Ausnutzung der metastabilen Eigenschaften von Flip-Flops (die sich in den Schieberegistern befinden) folgen. Wie auch immer, ich denke, durch die Verwendung mehrerer Schieberegister und mehrerer 555-Timer brauche ich nicht viel Feedback und sicherlich nichts Besonderes, um das System zufällig erscheinen zu lassen - auch wenn es technisch gesehen nicht der Fall ist.

Was die Häufigkeit meiner Ereignisse betrifft (oft, manchmal, selten ...), plane ich, verschiedene Schieberegister mit unterschiedlichen Geschwindigkeiten zu takten. Das Anwenden von Logikgattern auf die Ausgänge dieser verschiedenen Register (mit unterschiedlichen Taktraten) sollte mir die allgemeinen Kategorien der Ereignisfrequenz geben, die ich suche, da schnellere Taktraten zu logischeren "Positiven" führen (oder was auch immer die richtige Terminologie ist). . Ich hoffe das macht Sinn.

Nachfolgend finden Sie einige Ressourcen für Personen, die wie ich die korrekte Terminologie nicht kennen oder nicht verstehen, wie Schieberegister für die Generierung von Pseudozufallszahlen verwendet werden.

Gute allgemeine Übersicht zur Beantwortung der Frage „Was ist ein linear rückgekoppeltes Schieberegister“ (LFSR): https://zipcpu.com/dsp/2017/11/11/lfsr-example.html

Zur Auswahl von Abgriffen für ein Schieberegister mit linearer Rückkopplung: https://cs.stackexchange.com/questions/1121/choosing-taps-for-linear-feedback-shift-register

Miniprojekt zur Implementierung eines LFSR:  https://www.slideshare.net/KishoreChandrahasVanam/lfsr

Ein weiteres hilfreiches Dokument zur Verwendung eines 8-Bit-LFSR (dh Texas Instruments Chip CD54/74AC164): https://pdfs.semanticscholar.org/320a/8b2e781ac6165b400eca96047489685fd1f7.pdf