There are several ways to do this, each with different advantages. Your goal should be to place most/all of the logic inside a single "always @ (posedge clk)" block -- this makes the design practical.
You should have at least one clk counter that will count to "some value" then reset to "other value" in most of the states of a state machine. The exact "some value" could be state-dependent. There would be a second counter for seconds that decrements. There would also be an enumerated state machine.
An example would have "idle", "countdown_no_blink", "countdown_no_blink_decrement", "countdown_blink_on_start", "countdown_blink_off", "countdown_blink_on_end", "countdown_blink_on_decrement", "cooldown_one", "cooldown_one_decrement", "cooldown_two", "cooldown_two_decrement".
This choice of states was chosen to make simulation easier. In this example, I assume "flashing" (blink) to mean display value for 250ms. off for 500ms. display value for 250ms. You did not provide info on how the input is provided -- an additional state or states might be useful there.
The names of the states could also be changed. They were chosen to be very informative so I wouldn't need to write any code.
Once finished, post the code and we can explain practical issues with each decision.