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.