En general, para generar números "aleatorios" en hardware (para fines de diversión), puede hacer algo como tomar un mecanismo que es algo impredecible y combinarlo con un mecanismo que sea predecible, pero no obvio.
Por ejemplo, si tiene un contador ejecutándose rápidamente, y muestrea la salida cada vez que el usuario presiona un botón (como al reproducir la secuencia anterior) que será algo aleatorio, ya que pueden tomar cantidades variables de tiempo. Pero alguien que juegue el sistema presionando los botones muy rápido podría tender a obtener los mismos pocos valores una y otra vez (aunque si el reloj está en el rango de MHz eso puede no ser una preocupación realista).
Por el contrario, puede usar un Registro de desplazamiento de retroalimentación lineal (Wikipedia) que alimenta una función combinatoria del estado actual de un registro de desplazamiento de nuevo en su entrada, para generar una secuencia que no es fácilmente obvia para los humanos, a pesar de que su salida para las mismas entradas En realidad será completamente predecible. Utilizado por sí mismo, tampoco sería una buena idea, ya que daría las mismas secuencias en cada partida del juego y sería rápidamente memorizado por un usuario repetido.
Pero, si combina dos métodos, como usar el temporizador para obtener un valor inicial impredecible, y luego usar el registro de desplazamiento de retroalimentación lineal para mezclarlo (o tal vez dejar que el LFSR funcione libremente contra un reloj rápido y muestrearlo según interacción del usuario) debería poder obtener algo lo suficientemente aleatorio para un juego de diversión.
Otra fuente que podría probar serían los bits de bajo orden de un convertidor analógico a digital.
Hagas lo que hagas, probablemente quieras simularlo (y también el diseño general de tu sistema) antes de construir el circuito. El proyecto es lo suficientemente complejo como para que valga la pena usar un FPGA pequeño o un CPLD más grande.
Y, por último, tenga en cuenta que, históricamente, el juego original de Simon aparentemente utilizaba un microprocesador inicial, el TMS1000. En general, las operaciones secuenciales complejas se pueden implementar de manera más eficiente de esa manera, con máquinas de estado elegidas solo para problemas que son simples, deben ejecutarse extremadamente rápido o son sustitutos de aprendizaje para el trabajo eventual en tales problemas.
Editar:
http://www.waitingforfriday.com/index.php/Reverse_engineering_an_MB_Electronic_Simon_game
Contiene algunas observaciones interesantes, incluido un cambio eventual del TMS1000 a lo que puede ser una versión etiquetada personalizada del mismo. Más relevante para su pregunta, sugiere que el original generó sus números aleatorios al muestrear un contador de ejecución libre cuando el usuario presionó un botón ;-)