Ajuste del ciclo de trabajo de onda cuadrada basado en FPGA
Después de leer tu código, creo que hay varios problemas además del diseño.
1. Verilog no es un lenguaje C. Al implementar la multiplicación y la división, se pueden sintetizar operadores de escritura directa, pero la lógica es más profunda y el tiempo será deficiente. Por ejemplo: if (CNT
2. El primer bloque siempre es muy irregular y no es un circuito sincrónico. Un mejor método de implementación es:
Siempre@(Bosage·BCLK)
Inicio
if(~INICIO)
Inicio
Inicio<=1;
Fin
Fin
3. El sistema no tiene señal de reinicio. Todos los sistemas digitales deben tener un reinicio del sistema. El bloque siempre debe usar una plantilla como esta:
Always@(posedge). mlk o posedge mrst)
Iniciar
IF (mrst)
Iniciar
reg 1 <= 0;
Fin
Otro
Inicio
Si (...)
Inicio
reg 1 <=Ingresar 1;
Fin
Otro
Inicio
reg 1 <=Ingresar 2;
Fin
Fin
Fin
4. Los nombres de señales o registros no distinguen entre mayúsculas y minúsculas. Aunque Verilog distingue entre mayúsculas y minúsculas, ninguna empresa lo permitirá. Generalmente se requieren mayúsculas o minúsculas, sin mencionar el mismo nombre, que solo distingue entre mayúsculas y minúsculas. Por ejemplo, START se puede cambiar a start_in.