Как правило, для генерации случайных чисел в аппаратных средствах (для целей развлечения) вы можете сделать что-то, например, взять механизм, который несколько непредсказуем, и объединить его с механизмом, который предсказуем, но не очевиден.
Например, если у вас быстро работает счетчик, и производите выборку выходных данных всякий раз, когда пользователь нажимает кнопку (например, во время воспроизведения предыдущей последовательности), которая будет несколько случайной, поскольку она может занимать различное количество времени. Но кто-то, играющий в систему, нажимая кнопки очень быстро, может иметь тенденцию получать одни и те же несколько значений снова и снова (хотя, если часы находятся в диапазоне МГц, это может не представлять реальной проблемы).
И наоборот, вы можете использовать регистр сдвига с линейной обратной связью (Википедия), который передает комбинаторную функцию текущего состояния регистра сдвига обратно на его вход, чтобы сгенерировать последовательность, которая не является очевидной для человека, даже если ее выход для тех же входов на самом деле будет полностью предсказуемым. Само по себе это тоже не было бы хорошей идеей, так как при каждой игре играли бы одинаковые последовательности и так быстро запоминались бы повторным пользователем.
Но, если вы комбинируете два метода, таких как использование таймера для получения непредсказуемого начального значения, а затем использование регистра сдвига с линейной обратной связью, чтобы смешать его (или, возможно, позволить LFSR свободно работать против быстрых часов, и производить выборку на основе взаимодействие с пользователем) вы должны быть в состоянии получить что-то достаточно случайное для развлекательной игры.
Другой источник, который вы могли бы попробовать - это младшие биты аналого-цифрового преобразователя.
Что бы вы ни делали, вы, вероятно, захотите смоделировать это (и ваш общий дизайн системы), прежде чем строить схему. Проект достаточно сложный, поэтому стоит использовать небольшую FPGA или более крупную CPLD.
И, наконец, имейте в виду, что исторически в оригинальной игре Simon использовался ранний микропроцессор TMS1000. Обычно сложные последовательные операции могут быть реализованы более эффективно, так как конечные автоматы выбираются только для простых задач, которые должны выполняться очень быстро или являются заменой для возможной работы над такими проблемами.
Редактировать:
http://www.waitingforfriday.com/index.php/Reverse_engineering_an_MB_Electronic_Simon_game
Содержит некоторые интересные наблюдения, включая возможное изменение с TMS1000 на то, что может быть его специальной маркировкой. Более релевантный вашему вопросу, он предполагает, что оригинал генерировал свои случайные числа путем выборки счетчика свободного хода, когда пользователь нажимал кнопку ;-)