El reloj no parece funcionar

0

He estado trabajando en un programa para la clase que actúa como un cronómetro, pero he tenido problemas donde no funciona. (Solo se utiliza un dígito, el primero que se mostrará en la pantalla de cuatro dígitos, y siempre está en 0). Después de pasar todo el programa a través de una simulación y ver cómo funciona correctamente allí, solo puedo llegar a la conclusión de que el reloj nunca cambia.

Como lo veo, estas son las partes relevantes de mi código, pero no dude en pedir más.

Desde el módulo superior:

module stopwatch(
    [...]
    input clk,
    [...]
    );

Desde el archivo de restricción de usuario:

 ## Clock signal
 NET "clk"   LOC = "E3" | IOSTANDARD = "LVCMOS33";                  #Bank = 35, Pin name = IO_L12P_T1_MRCC_35,                  Sch name = CLK100MHZ
 #NET "clk" TNM_NET = sys_clk_pin;
 #TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 100 MHz HIGH 50%; 

Tengo cuatro advertencias de síntesis.

 WARNING:HDLCompiler:413 - "C:\<REDACTED>\counter2bit.v" Line 31: Result of 3-bit expression is truncated to fit in 2-bit target.
 WARNING:HDLCompiler:462 - "C:\<REDACTED>\clock_divider_true.v" Line 42: if-condition does not match any sensitivity list edge
 WARNING:HDLCompiler:413 - "C:\<REDACTED>\count_10.v" Line 37: Result of 5-bit expression is truncated to fit in 4-bit target.
 WARNING:Xst:2677 - Node <decimal_counter/count3/En_next> of sequential type is unconnected in block <stopwatch>.

En counter2bit.v, el truncamiento es intencional, siempre y cuando se elimine de la MSB; No quiero el tercer bit de todos modos. La condición if no coincide con ningún borde de lista de sensibilidad por diseño; No quiero que se actualice cuando esa variable lo hace. La expresión truncada de 5 bits nunca debería ocurrir porque se restablece cuando se actualiza y el valor es 4'd9. count3 es el último bloque en el contador, y no estoy planeando usar el En_next para habilitar otro contador.

    
pregunta Smurfton

1 respuesta

2

Lo que debes hacer es hacer un poco de código de prueba realmente simple para hacer parpadear un LED a aproximadamente 1 Hz. Si eso funciona, entonces el reloj está funcionando. Este código puede ser increíblemente simple:

module test(input wire clk, output led)

reg [31:0] cnt = 50000000;
reg led = 0;

always @(posedge clk) begin
    if (cnt > 0) begin
        cnt <= cnt - 1;
    end else begin
        cnt <= 50000000;
        led <= ~led;
    end
end

endmodule

Si puede hacer que parpadee y se encienda el LED, debe haber algún otro problema con su código.

Además, debe asegurarse de especificar la frecuencia de reloj en el archivo UCF para asegurarse de que las herramientas optimizarán su diseño correctamente para la frecuencia de reloj requerida.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas