Calculating RPM from Angular Changes
First, it's not good practice to generate a clock with logic in an FPGA. Instead of generating a 4 Hz clock, generate a 4 Hz strobe, and use it to enable logic that's clocked by the 1000 Hz clock:

reg [7:0] ctr_4Hz;
reg strobe_4Hz;
always @(posedge clk_i) begin
    if(ctr_4Hz == 250) begin
        ctr_4Hz &lt;= 0;
        strobe_4Hz &lt;= 1;
    end
    else begin
        ctr_4Hz &lt;= ctr_4Hz + 1;
        strobe_4Hz &lt;= 0;
    end
end 

always@(posedge clk_i) begin
    if(strobe_4Hz) begin
        position_reg &lt;= position_i;
        prev_position_reg &lt;= position_reg; 
    end
end

// etc


To solve your actual problem, the easiest way is to assume there can't be more than 180 degrees of travel in 250 ms. If you can make this assumption (because of the mechanics of the system, for example), then just keep track of whether the msb of your position register changes. If the old msb was high and the new msb is low, add 360 degrees (or 0x10000 binary angle units) to the new position before calculating deltaP. 

If you need to deal with motion in both directions, then you'll need to keep track of which quadrant the old and new positions are in (this depends only on the 2 msb's of the binary angle) and only use special treatment for transitions from IV to I quadrant or I to IV quadrant (add 0x10000 to whichever position was in the I quadrant).