A coworker of mine was doing something similar to this and used $realtobits and $bitstoreal to get around the limitation on passing real numbers through the module interface.
$realtobits - Passes bit patterns across module ports; converts from a real number to the 64-bit representation (vector) of that real number.
$bitstoreal - The reverse of $realtobits; converts from the bit pattern to a real number.
Some examples of their use:
module driver (net_r);
wire [64:1] net_r = $realtobits(r);
module receiver (net_r);
wire [64:1] net_r;
initial assign r =$bitstoreal(net_r);
Hope this helps.