Como NÃO usar loops while () no verilog (para síntese)?

Eu adquiri o hábito de desenvolver muitos bancos de teste e usar loops for () e while () para fins de teste. Isso é bom. O problema é que adotei esse hábito de codificar circuitos que deveriam ser sintetizáveis. O XST e outros se recusam a sintetizar código (sem modificação adicional nos parâmetros de síntese), como:

while (num < test_number) 
     begin 
     . 
     . 
     . 
     num = num+1; 
     end

Esse é um estilo de codificação ruim, porque para o sintetizador test_num é um int com valor 2 ^ 32! ou vê-o como parâmetro ilimitado. De qualquer maneira, é um mau hábito de codificação. Mas estou tão acostumado a fazer isso em C e testbenches. Qual seria o equivalente sintetizável do código do segmento de código acima?

Obrigado!