Tengo una placa sin entrada de reinicio para mi diseño. Pero necesito reiniciar al inicio de la fpga. ¿Existe una solución verilog para generar este pulso?
Tengo una placa sin entrada de reinicio para mi diseño. Pero necesito reiniciar al inicio de la fpga. ¿Existe una solución verilog para generar este pulso?
Finalmente encontré la solución gracias a lvd y tom-carpenter . Muchos FPGA pueden inicializar allí los registros a 0 y nada más. Es el caso de machxo3.
Entonces hacer eso me funciona:
reg [3:0] rst_cnt = 0;
wire rst_n = rst_cnt[3];
always @(posedge clk)
if( !rst_n )
rst_cnt <= rst_cnt + 1;
La cadena de herramientas de síntesis de celosía (incluso con synplify) ignora la declaración inicial si no es una "fuerza" o una inicialización de memoria.
La hoja de datos en MachXO dice que
Los registros MachXO en PFU y sysI / O se pueden configurar para que sean SET o REINICIAR. Después de encender y configurar el dispositivo, el dispositivo entra en modo de usuario con estos registros SET / RESET de acuerdo con el configuración, permitiendo que el dispositivo ingrese a un estado conocido para función del sistema predecible.
Por lo tanto, lo más simple que puede hacer es configurar todos los regs
que deben inicializarse con la construcción initial
verilog o el equivalente comprendido por las herramientas.
Si aún necesita un pulso de restablecimiento 'tradicional', puede hacerlo de la siguiente manera:
reg [3:0] rst_cnt;
wire rst_n = rst_cnt[3];
initial rst_cnt=4'd0;
always @(posedge clk)
if( !rst_n )
rst_cnt <= rst_cnt + 4'd1;
Este código se basa nuevamente en la capacidad de establecer valores iniciales (encendido) para los flipflops de MachXO.