Probablemente quieras algo como el circuito que muestra clabacchio.
Esto se procesa fácilmente en Verilog como
reg [4:0] d;
always @(posedge clk) begin
d <= { d[3:0], d[4] ^ d[3] };
end
Esto es, como han mencionado otros, un registro de desplazamiento de retroalimentación lineal , o LFSR, y genera la longitud máxima secuencia de bits pseudoaleatoria que se puede producir con una Máquina de estado de 5 bits. La máquina de estado atraviesa 31 estados (\ $ 2 ^ n-1 \ $, donde n es el número de registros) antes de repetirse.
De todos los estados que pueden estar codificados por 5 registros, solo uno no se usa, que es el estado de todo-0. El estado del todo-0 es un estado de bloqueo --- si la máquina de estado entra en ese estado por un error, se quedará atascado permanentemente en el estado del todo-0, como puede ver porque 0 ^ 0 = 0. significa que tiene que estar seguro (utilizando una directiva de síntesis en el archivo Verilog o de restricciones) de que los registros no se inicializan al estado de todo-0.
Si necesita que el estado del todo-0 no se bloquee, puede utilizar un XNOR en lugar de la puerta XOR, y obtener una secuencia que incluya el estado del todo-0 y se bloquee en el estado del todo-1.
También tenga en cuenta que la serie más larga de 1 producida por esta máquina de estado es 5 en una fila, y la serie más larga de 0 es 4 en una fila. Esto puede ser importante si está utilizando la PRBS para probar un sistema con acoplamiento de CA ... las ejecuciones más largas harán que el sistema haga más hincapié.
En las pruebas de comunicaciones, las secuencias más largas son más comunes, principalmente para ejercitar más el comportamiento de baja frecuencia del sistema:
PRBS7
reg [6:0] d;
always @(posedge clk) begin
d <= { d[5:0], d[6] ^ d[5] };
end
PRBS23
reg [22:0] d;
always @(posedge clk) begin
d <= { d[22:0], d[22] ^ d[17] };
end
PRBS31
reg [30:0] d;
always @(posedge clk) begin
d <= { d[30:0], d[30] ^ d[27] };
end
Observe que no siempre son los "últimos" registros los que se "giran" para generar el bit entrante del registro de desplazamiento.
nota de la aplicación Xilinx XAPP052 ofrece una tabla práctica de conexiones para usar para generar cualquier tamaño PRBS de 3 a 168 registros.
Nota de la aplicación XAPP211 muestra cómo implementarlas de manera eficiente en los dispositivos Xilinx. Esencialmente, se puede usar una sola tabla de consulta en un solo bloque lógico para implementar hasta 32 registros de registros de desplazamiento (según la arquitectura).
Los LFSR también se pueden usar para implementar un contador de manera eficiente si no le importan los estados intermedios, cuánto tiempo lleva la cuenta regresiva hasta un valor terminal.