Coarse counter giving incorrect pulse length measurements at high frequencies
When I run your simulation, I measure the period of the clock as 2.6ns, not 2.5ns.  You need to use a smaller time precision value.  Change:
`timescale 1ns/100ps

to:
`timescale 1ns/10ps

With 100ps precision, the simulator rounds your #1.25 delay to #1.3.  Since you really have 2.6 instead of 2.5, you get a large discrepancy because the multiplier in your calculation does not match:
out &lt;= 2.5*counter;     

When I make the change, I see out_1 values of 1115, 423, 40 and 3078.