`define MIN 1
`define MAX 255

module DIV_N (clkDiv, divider, inClk, min, max);
   output     clkDiv;
   input[7:0] divider;
   input      inClk;
   input[7:0] min;
   input[7:0] max;

   reg        clkDiv;
   integer    localMin;
   integer    localMax;
   integer    localDivider;

   always @({min,max})
     begin
       localMin = min;
       localMax = max;

       if (localMin < 1)
         localMin = 1;

       if (localMax < localMin)
         begin
           localMax = 1;
           localMin = 1;
         end
     end

   always @({divider,localMin,localMax})
     begin
       localDivider = divider;
       if (divider < localMin)
         localDivider = localMin;
       if (divider > localMax)
         localDivider = localMax;
     end

   always @(inClk) begin
      if (inClk === 1'bx )  clkDiv = 1'bx;
      if (clkDiv === 1'bx) @(posedge inClk) clkDiv = inClk;
      if (localDivider > 1)
        begin
        clkDiv = repeat (localDivider-1) @inClk ~clkDiv;
        end
      else
        clkDiv = inClk;
   end

endmodule

