Generador de pulsos pseudoaleatorios de la vieja escuela (solicitando asistencia con el diseño de hardware)

2

Me gustaría diseñar un generador de pulso pseudoaleatorio de la vieja escuela para desencadenar varios tipos de eventos (solo sugerencias de hardware, por favor, sin circuitos integrados programables). Los eventos que quiero controlar deben suceder, generalmente hablando, en las siguientes categorías de frecuencia: muchas veces por minuto, varias veces por minuto, una vez por minuto, una vez cada pocos minutos, una o dos veces por hora. Dentro de cada categoría de frecuencia, el evento debe ocurrir "al azar", es decir, la recurrencia del evento no debe ser exactamente predecible. Para darte una idea de por qué quiero construir esto: imagina un videojuego que tiene varios elementos de escena, algunos de los cuales ocurren con mucha frecuencia, algunos que ocurren con bastante frecuencia y otros que son poco frecuentes ... entiendes la idea, yo esperanza.

La razón por la que me gustaría una solución solo de hardware es que estoy intentando a propósito aprender sobre lógica discreta; cosas como registros de desplazamiento, multiplexores, lógica booleana, etc. La eficiencia, la velocidad, el tamaño y el costo no son mi principal preocupaciones ¡Espero que haya algunos fanáticos de la electrónica vintage que me ayuden en mi búsqueda de conocimiento! Gracias :-) PD: un esquema dibujado sería tremendamente apreciado ya que estoy aprendiendo y probablemente no podré entender o crear sugerencias vagas.

    
pregunta Kelly Heaton

2 respuestas

4

Una buena manera de generar aleatoriedad utilizando lógica discreta es explotar las características de metastabilidad de un flip-flop.

Un D flip-flop es un tipo de flip-flop que tiene un reloj (entrada de aspecto triangular) y una entrada de datos (entrada D) como se muestra a continuación. Normalmente, el estado de la entrada D se transfiere a la salida Q /! Q un retraso de propagación después de un flanco ascendente en el reloj.

(de enlace )

Los datos deben "configurar" una cantidad de tiempo específica antes del borde del reloj y "mantener" una cantidad de tiempo específica después del borde del reloj para garantizar que la entrada se transfiera correctamente a la salida. Si los tiempos de configuración y retención no se cumplen, entonces el estado de la salida en el tiempo de retardo de propagación normal para el flip flop se vuelve aleatorio. La aleatoriedad se puede ajustar variando la frecuencia y la fase del reloj y los datos y la cantidad de tiempo que espera para verificar el estado de la salida.

El siguiente gráfico es de un documento de TI que analiza las características de metastabilidad de varias lógicas de 5 V las familias En general, cuanto más lenta sea la lógica, peor será la metastabilidad y más a menudo se producirán errores aleatorios. Esto significa que las familias lógicas más antiguas son más útiles para generar errores aleatorios. El gráfico muestra que al usar la lógica del estilo 74HC, la tasa de error se puede ajustar de miles de veces por segundo a una vez por día, variando el tiempo de espera después de un reloj en el que se ve la salida del flip-flop (tx). Este gráfico específico es para un reloj de 1 MHz y una entrada de datos de 500 KHz.

Tengaencuentaquelametastabilidadessensiblealademora,latemperaturayelvoltaje,porloquelasintonizacióndeunatasadeeventosespecíficapuedeserundesafío.Peropodríaserposibleconstruiralgosuficientementebuenoparasusnecesidades.

Elcircuitodepruebadel papel de TI se muestra a continuación. Puede ser un punto de partida para un circuito de generación de eventos aleatorios.

    
respondido por el crj11
1

La respuesta a esta pregunta es que hay muchas respuestas, pero el enfoque más común es utilizar un registro de desplazamiento de retroalimentación lineal. Comencé con esta idea y formé dos registros de desplazamiento de 8 bits (parte CD54 / 74AC164E de TI) sincronizados con un temporizador 555 en modo astable. Dejé flotando las entradas seriales de datos de los registros de desplazamiento. Antes de agregar puertas XOR (la parte de realimentación lineal), probé este circuito con LED para visualizar lo que está sucediendo. Como resultado, los dos registros de desplazamiento comienzan en diferentes estados (probablemente porque sus entradas de datos están flotando). Sus estados permanecen sin sincronizar a medida que continúan cambiando, como se puede ver en este video:

enlace

Los dos registros de desplazamiento de 8 bits están en la región central de mi tablero. A la derecha hay un temporizador 555 en modo astable que proporciona un impulso de reloj de aproximadamente 1 vez por segundo. A la izquierda hay un regulador de 5 voltios, esta parte es irrelevante si tiene la tensión de alimentación de CC correcta, pero la mía es de 12 VCC.

Quizás este enfoque pirateado es toda la aparente aleatoriedad que necesito (soy un artista, no un criptógrafo). Si no, agregaré retroalimentación lineal y / o seguiré los consejos de @ crj11 a continuación con respecto a la explotación de las características metaestables de los flip flops (que están dentro de los registros de turnos). De cualquier manera, creo que al usar múltiples registros de turnos y múltiples temporizadores 555 no necesitaré mucha retroalimentación y, ciertamente, nada de lujo para hacer que el sistema aparezca al azar, aunque no lo sea, técnicamente .

En cuanto a la frecuencia de mis eventos (a menudo, a veces, raramente ...), planeo registrar diferentes registros de desplazamiento a diferentes velocidades. La aplicación de puertas lógicas a las salidas de estos diferentes registros (a diferentes velocidades de reloj) debería proporcionarme las categorías generales de frecuencia de eventos que estoy buscando, ya que las velocidades de reloj más rápidas darán como resultado "positivos" más lógicos (o cualquiera que sea la terminología correcta) . Espero que esto tenga sentido.

A continuación hay algunos recursos para personas que, como yo, no conocen la terminología correcta o no entienden cómo se utilizan los registros de desplazamiento para la generación de números pseudoaleatorios.

Buena descripción general para responder a la pregunta "¿Qué es un registro de desplazamiento de retroalimentación lineal" (LFSR): enlace

Al elegir las pulsaciones para un registro de desplazamiento de realimentación lineal: enlace

Mini proyecto sobre cómo implementar un LFSR: enlace

Otro documento útil sobre el uso de un LFSR de 8 bits (es decir, el chip CD54 / 74AC164 de Texas Instruments): enlace

    
respondido por el Kelly Heaton

Lea otras preguntas en las etiquetas