Answers:
通常,为了在硬件中生成“随机的”数字(用于娱乐级目的),您可以执行一些操作,例如采用某种无法预测的机制,然后将其与可预测但不明显的机制相结合。
例如,如果您有一个快速运行的计数器,并且每当用户按下某个按钮时(例如,在播放上一个序列时)对输出进行采样,这会有些随机,因为它们可能花费不同的时间。但是有人通过快速按下按钮来对系统进行游戏可能会一遍又一遍地获得相同的几个值(尽管如果时钟在MHz范围内,这可能不是现实的问题)。
相反,您可以使用线性反馈移位寄存器(Wikipedia),该函数将当前状态的组合函数反馈到移位寄存器的输入中,以生成即使对于相同输入的输出,对于人类也不是显而易见的序列实际上完全可以预测。单独使用,这也不是一个好主意,因为它将在游戏的每次玩法中给出相同的顺序,并很快被重复用户记住。
但是,如果您将两种方法结合使用,例如使用计时器获取无法预测的起始值,然后使用线性反馈移位寄存器对其进行混合(或者也许让LFSR在快速时钟下自由运行,然后根据用户交互),您应该能够获得足够的随机性来进行娱乐游戏。
您可以尝试的另一个来源是模数转换器的低阶位。
无论做什么,在构建电路之前,您可能都希望对其进行仿真(以及整个系统设计)。该项目非常复杂,以至于使用小型FPGA或大型CPLD可能是值得的。
最后要记住,从历史上看,最初的西蒙游戏显然使用了早期的微处理器TMS1000。通常,可以通过仅针对简单问题,必须运行得非常快或正在学习替代此类问题的最终方法的问题选择状态机,从而以这种方式更有效地实施复杂的顺序操作。
编辑:
http://www.waitingforfriday.com/index.php/Reverse_engineering_an_MB_Electronic_Simon_game
包含一些有趣的发现,包括最终从TMS1000更改为可能是其自定义标签的版本。与您的问题更相关,它建议当用户按下按钮时,原件通过对自由运行计数器进行采样来生成其随机数;-)