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

Subversion Repositories ft816float

[/] [ft816float/] [trunk/] [rtl/] [verilog2/] [fp.sv] - Blame information for rev 48

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 robfinch
// ============================================================================
2
//        __
3
//   \\__/ o\    (C) 2020  Robert Finch, Waterloo
4
//    \  __ /    All rights reserved.
5
//     \/_//     robfinch@finitron.ca
6
//       ||
7
//
8
//      fp.sv
9
//
10
// This source file is free software: you can redistribute it and/or modify
11
// it under the terms of the GNU Lesser General Public License as published
12
// by the Free Software Foundation, either version 3 of the License, or
13
// (at your option) any later version.
14
//
15
// This source file is distributed in the hope that it will be useful,
16
// but WITHOUT ANY WARRANTY; without even the implied warranty of
17
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
// GNU General Public License for more details.
19
//
20
// You should have received a copy of the GNU General Public License
21
// along with this program.  If not, see .
22
//
23
// ============================================================================
24
//
25
package fp;
26
 
27
`define QINFOS          23'h7FC000              // info
28
`define QSUBINF         4'd1
29
`define QINFDIV         4'd2
30
`define QZEROZERO       4'd3
31
`define QINFZERO        4'd4
32
`define QSQRTINF        4'd5
33
`define QSQRTNEG        4'd6
34
 
35
`define QSUBINFS        31'h7FC00001    // - infinity - infinity
36
`define QINFDIVS        31'h7FC00002    // - infinity / infinity
37
`define QZEROZEROS      31'h7FC00003    // - zero / zero
38
`define QINFZEROS       31'h7FC00004    // - infinity X zero
39
`define QSQRTINFS       31'h7FC00005    // - square root of infinity
40
`define QSQRTNEGS       31'h7FC00006    // - square root of negaitve number
41
 
42
`define QINFOD          52'hFF80000000000               // info
43
`define QSUBINFD        63'h7FF0000000000001    // - infinity - infinity
44
`define QINFDIVD        63'h7FF0000000000002    // - infinity / infinity
45
`define QZEROZEROD  63'h7FF0000000000003        // - zero / zero
46
`define QINFZEROD       63'h7FF0000000000004    // - infinity X zero
47
`define QSQRTINFD       63'h7FF0000000000005    // - square root of infinity
48
`define QSQRTNEGD       63'h7FF0000000000006    // - square root of negaitve number
49
 
50
`define QINFODX         64'hFF800000_00000000           // info
51
`define QSUBINFDX       79'h7FFF000000_0000000001       // - infinity - infinity
52
`define QINFDIVDX       79'h7FFF000000_0000000002       // - infinity / infinity
53
`define QZEROZERODX 79'h7FFF000000_0000000003   // - zero / zero
54
`define QINFZERODX      79'h7FFF000000_0000000004       // - infinity X zero
55
`define QSQRTINFDX      79'h7FFF000000_0000000005       // - square root of infinity
56
`define QSQRTNEGDX      79'h7FFF000000_0000000006       // - square root of negaitve number
57
 
58
`define QINFOQ          112'hFF800000_0000000000_0000000000             // info
59
`define QSUBINFQ        127'h7F_FF00000000_0000000000_0000000001        // - infinity - infinity
60
`define QINFDIVQ        127'h7F_FF00000000_0000000000_0000000002        // - infinity / infinity
61
`define QZEROZEROQ  127'h7F_FF00000000_0000000000_0000000003    // - zero / zero
62
`define QINFZEROQ       127'h7F_FF00000000_0000000000_0000000004        // - infinity X zero
63
`define QSQRTINFQ       127'h7F_FF00000000_0000000000_0000000005        // - square root of infinity
64
`define QSQRTNEGQ       127'h7F_FF00000000_0000000000_0000000006        // - square root of negaitve number
65
 
66
`define POINT5S         32'h3F000000
67
`define POINT5SX        40'h3F80000000
68
`define POINT5D         64'h3FE0000000000000
69
`define POINT5DX        80'h3FFE0000000000000000
70
`define ZEROS                   32'h00000000
71
`define ZEROSX          40'h0000000000
72
`define ZEROD                   64'h0000000000000000
73
`define ZERODX          80'h00000000000000000000
74
 
75
`define AIN                     3'd0
76
`define BIN                     3'd1
77
`define CIN                     3'd2
78
`define RES                     3'd3
79
`define POINT5  3'd4
80
`define ZERO            3'd5
81
 
82
`define MIN_LATENCY             1'b1
83
parameter FPWID = 64;
84
// This file contains defintions for fields to ease dealing with different fp
85
// widths. Some of the code still needs to be modified to support widths
86
// other than standard 32,64 or 80 bit.
87
localparam MSB = FPWID-1;
88
localparam EMSB = FPWID==128 ? 14 :
89
          FPWID==96 ? 14 :
90
          FPWID==80 ? 14 :
91
          FPWID==64 ? 10 :
92
                                  FPWID==52 ? 10 :
93
                                  FPWID==48 ? 10 :
94
                                  FPWID==44 ? 10 :
95
                                  FPWID==42 ? 10 :
96
                                  FPWID==40 ?  9 :
97
                                  FPWID==32 ?  7 :
98
                                  FPWID==24 ?  6 : 4;
99
localparam FMSB = FPWID==128 ? (111) :
100
          FPWID==96 ? (79) :
101
          FPWID==80 ? (63) :
102
          FPWID==64 ? (51) :
103
                                  FPWID==52 ? (39) :
104
                                  FPWID==48 ? (35) :
105
                                  FPWID==44 ? (31) :
106
                                  FPWID==42 ? (29) :
107
                                  FPWID==40 ? (28) :
108
                                  FPWID==32 ? (22) :
109
                                  FPWID==24 ? (15) : (9);
110
localparam FX = (FMSB+2)*2;     // the MSB of the expanded fraction
111
localparam EX = FX + 1 + EMSB + 1 + 1 - 1;
112
endpackage

powered by: WebSVN 2.1.0

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