Using min is definitely not correct. That would ensure that you either got a pause of 1 tick or 0 ticks. This may get you better granularity, depending on the system. pause_sbt("e1000_delay", x * SBT_1US, x < 1000 ? 100 * SBT_1US : SBT_1MS, 0);