OpenCores
URL https://opencores.org/ocsvn/wf3d/wf3d/trunk

Subversion Repositories wf3d

[/] [wf3d/] [trunk/] [rtl/] [core/] [fm_3d_f22_to_i.v] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 specular
//=======================================================================
2
// Project Monophony
3
//   Wire-Frame 3D Graphics Accelerator IP Core
4
//
5
// File:
6
//   floating point to integer conversion
7
//
8
// Abstract:
9
//   IP Core top module
10
//
11
// Author:
12 9 specular
//   Kenji Ishimaru (info.info.wf3d@gmail.com)
13 2 specular
//
14
//======================================================================
15
//
16
// Copyright (c) 2015, Kenji Ishimaru
17
// All rights reserved.
18
//
19
// Redistribution and use in source and binary forms, with or without
20
// modification, are permitted provided that the following conditions are met:
21
//
22
//  -Redistributions of source code must retain the above copyright notice,
23
//   this list of conditions and the following disclaimer.
24
//  -Redistributions in binary form must reproduce the above copyright notice,
25
//   this list of conditions and the following disclaimer in the documentation
26
//   and/or other materials provided with the distribution.
27
//
28
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
29
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
30
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
32
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
33
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
34
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
35
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
36
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
37
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
38
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
//
40
// Revision History
41
 
42
module fm_3d_f22_to_i (
43
  i_a,
44
  o_b
45
);
46
 
47
///////////////////////////////////////////
48
//  port definition
49
///////////////////////////////////////////
50
  input  [21:0] i_a;          // input s1, e5, f1.15
51
  output [15:0] o_b;          // 2's complement value
52
///////////////////////////////////////////
53
//  wire definition
54
///////////////////////////////////////////
55
  // intermidiate wire
56
  wire [4:0]  w_exp;
57
  wire [15:0] w_fraction;
58
  wire        w_s;
59
  wire [15:0] w_ui;
60
  wire [15:0] w_ui_2c;
61
///////////////////////////////////////////
62
//  assign statement
63
///////////////////////////////////////////
64
  assign w_s = i_a[21];
65
  assign w_exp  = i_a[20:16];
66
  assign w_fraction = i_a[15:0];
67
 
68
  assign w_ui = f_ftoi(w_exp, w_fraction);
69
  assign w_ui_2c = ~w_ui + 1'b1;
70
  assign o_b = (w_s) ?  w_ui_2c : w_ui;
71
///////////////////////////////////////////
72
//  function statement
73
///////////////////////////////////////////
74
    function [15:0] f_ftoi;
75
        input [4:0]  exp;
76
        input [15:0] frac;
77
        reg   [5:0]  ee;
78
        begin
79
            ee = exp - 4'd15;  // remove bias
80
            if (ee[5]) begin
81
                f_ftoi = 16'h0;
82
            end else begin
83
                case (ee[4:0])
84
                    5'd0:  f_ftoi = {15'b0,frac[15]};    // bias 0
85
                    5'd1:  f_ftoi = {14'b0,frac[15:14]};
86
                    5'd2:  f_ftoi = {13'b0,frac[15:13]};
87
                    5'd3:  f_ftoi = {12'b0,frac[15:12]};
88
                    5'd4:  f_ftoi = {11'b0,frac[15:11]};
89
                    5'd5:  f_ftoi = {10'b0,frac[15:10]};
90
                    5'd6:  f_ftoi = {9'b0,frac[15:9]};
91
                    5'd7:  f_ftoi = {8'b0,frac[15:8]};
92
                    5'd8:  f_ftoi = {7'b0,frac[15:7]};
93
                    5'd9:  f_ftoi = {6'b0,frac[15:6]};
94
                    5'd10: f_ftoi = {5'b0,frac[15:5]};
95
                    5'd11: f_ftoi = {4'b0,frac[15:4]};
96
                    5'd12: f_ftoi = {3'b0,frac[15:3]};
97
                    5'd13: f_ftoi = {2'b0,frac[15:2]};
98
                    5'd14: f_ftoi = {1'b0,frac[15:1]};
99
                    5'd15: f_ftoi = frac[15:0];
100
                    default: f_ftoi = 16'h0;
101
                endcase
102
            end
103
        end
104
    endfunction
105
 
106
endmodule
107
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.