| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- module resultViewer
- #(
- parameter ExpWidth = 8,
- parameter ManWidth = 23,
- parameter InWidth = 32
- )
- (
- input Clk_i,
- input [InWidth-1:0] Data_i,
- input DataNd_i
- );
-
- localparam ExpConst = (2**(ExpWidth-1))-1;
-
- function real Fp32ToRealFunc;
- input [InWidth-1:0] Data;
- reg sign;
- reg [ExpWidth-1:0] exp;
- reg [ManWidth-1:0] frac;
- real realFrac;
- real realDiv;
- real realExp;
- reg [63:0] Test64bitReg;
- begin
- sign = Data[InWidth-1];
- exp = Data[InWidth-2 -:ExpWidth];
- frac = Data[ManWidth-1:0];
- Test64bitReg = 2**(exp - ExpConst);
- realFrac = frac;
- realDiv = 2**ManWidth;
-
- if (exp > ExpConst)
- realExp = 2**(exp - ExpConst);
- else if (exp < ExpConst)
- realExp = 1.0 / (2.0**(ExpConst-exp));
- else
- realExp = 1.0;
- if ((exp == 0) && (frac == 0))
- Fp32ToRealFunc = 0;
- else
- Fp32ToRealFunc = ((-1)**sign) * (1.0 + (realFrac / realDiv)) * Test64bitReg;
- end
- endfunction
- real dataReal;
- always @ (posedge Clk_i)
- if (DataNd_i) begin
- dataReal = Fp32ToRealFunc(Data_i);
- // $display("%e\n", dataReal);
- end
- endmodule
|