Synchronous logic will be better. I won't give you codes, but hints.
1st do you know how to write code for a simple synchronous up or down counter?
If no, then 1st learn how a simple synchronous counter can be coded with Verilog (Google search will give you 100's of results).
If yes, then you can modify that slightly to allow loading of values from an external port. Keep a single bit input port named such as counter_load_i. Depending on the counter start value to be loaded (for your case it is 5), keep provision for another multi-bit input port through which you can load this value.
Now on the rising edge of your clock, check if your counter_load_i is HIGH (this signal should be high only when you want to load the particular start value, else low). So if it is high, load the value (5) from the external multi-bit input port to an internal register, on the clock rising edge. Next increment/decrement that internal register on the clk rising edge. There...your system is done!