一般に、ハードウェアで「ランダムな」数値を生成するために(アミューズメントグレードの目的で)、ある程度予測できないメカニズムを採用し、それを予測可能なメカニズムと組み合わせることができますが、明白ではありません。
たとえば、カウンターをすばやく実行していて、ユーザーがボタンを押すたびに(前のシーケンスを再生しているときなど)出力をサンプリングすると、時間がランダムになるため多少ランダムになります。しかし、ボタンをすばやく押してシステムをゲームする人は、同じ数個の値を何度も何度も取得する傾向があります(ただし、クロックがMHz範囲にある場合は、現実的な問題ではない可能性があります)。
逆に、現在の状態のシフトレジスタの入力にフィードバックレジスタをフィードバックする線形フィードバックシフトレジスタ(Wikipedia)を使用して、同じ入力の出力であっても、人間にはすぐには分からないシーケンスを生成できます。実際には完全に予測可能です。単独で使用すると、ゲームのすべてのプレイで同じシーケンスが提供され、リピートユーザーがすぐに覚えられるため、これも良い考えではありません。
ただし、タイマーを使用して予測できない開始値を取得し、線形フィードバックシフトレジスタを使用してそれを混合するなどの2つの方法を組み合わせる場合(または、高速クロックに対してLFSRを自由に実行させ、それに基づいてサンプリングする場合)ユーザーインタラクション)あなたはアミューズメントゲームのために十分ランダムな何かを得ることができるはずです。
もう1つのソースとして考えられるのは、A / Dコンバーターの下位ビットです。
何をするにせよ、回路を構築する前に、それを(そしてシステム全体の設計も)シミュレートしたいと思うでしょう。プロジェクトは非常に複雑なので、小さなFPGAまたは大きなCPLDを使用する価値があります。
そして最後に、歴史的に、オリジナルのSimonゲームは明らかに初期のマイクロプロセッサであるTMS1000を使用していたことを覚えておいてください。一般的に、複雑な順次処理はそのようにしてより効率的に実装できます。状態マシンは、単純な問題、非常に高速に実行する必要がある問題、またはそのような問題に対する最終的な作業の代わりを学習する問題に対してのみ選択されます。
編集:
http://www.waitingforfriday.com/index.php/Reverse_engineering_an_MB_Electronic_Simon_game
TMS1000からカスタムラベルバージョンのTMS1000への最終的な変更を含む、いくつかの興味深い観察が含まれています。よりあなたの質問に関連して、それはユーザーがボタンを押したときにフリーランニングカウンターをサンプリングすることによってオリジナルがその乱数を生成したことを示唆しています;-)