resultViewer.v 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. module resultViewer
  2. #(
  3. parameter ExpWidth = 8,
  4. parameter ManWidth = 23,
  5. parameter InWidth = 32
  6. )
  7. (
  8. input Clk_i,
  9. input [InWidth-1:0] Data_i,
  10. input DataNd_i
  11. );
  12. localparam ExpConst = (2**(ExpWidth-1))-1;
  13. function real Fp32ToRealFunc;
  14. input [InWidth-1:0] Data;
  15. reg sign;
  16. reg [ExpWidth-1:0] exp;
  17. reg [ManWidth-1:0] frac;
  18. real realFrac;
  19. real realDiv;
  20. real realExp;
  21. reg [63:0] Test64bitReg;
  22. begin
  23. sign = Data[InWidth-1];
  24. exp = Data[InWidth-2 -:ExpWidth];
  25. frac = Data[ManWidth-1:0];
  26. Test64bitReg = 2**(exp - ExpConst);
  27. realFrac = frac;
  28. realDiv = 2**ManWidth;
  29. if (exp > ExpConst)
  30. realExp = 2**(exp - ExpConst);
  31. else if (exp < ExpConst)
  32. realExp = 1.0 / (2.0**(ExpConst-exp));
  33. else
  34. realExp = 1.0;
  35. if ((exp == 0) && (frac == 0))
  36. Fp32ToRealFunc = 0;
  37. else
  38. Fp32ToRealFunc = ((-1)**sign) * (1.0 + (realFrac / realDiv)) * Test64bitReg;
  39. end
  40. endfunction
  41. real dataReal;
  42. always @ (posedge Clk_i)
  43. if (DataNd_i) begin
  44. dataReal = Fp32ToRealFunc(Data_i);
  45. // $display("%e\n", dataReal);
  46. end
  47. endmodule