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

Subversion Repositories trigonometric_functions_in_double_fpu

[/] [trigonometric_functions_in_double_fpu/] [trunk/] [verilog/] [cotangent.v] - Blame information for rev 17

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 17 draunzer
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////                                                          ////
4
////  Trigonometric functions using double precision Floating Point Unit        ////
5
////                                                             ////
6
////  Author: Muni Aditya                                        ////
7
////          muni_aditya@yahoo.com                                ////
8
////                                                             ////
9
/////////////////////////////////////////////////////////////////////
10
////                                                             ////
11
//// Copyright (C) 2013 Muni Aditya                           ////
12
////                  muni_aditya@yahoo.com                        ////
13
////                                                             ////
14
//// This source file may be used and distributed without        ////
15
//// restriction provided that this copyright statement is not   ////
16
//// removed from the file and that any derivative work contains ////
17
//// the original copyright notice and the associated disclaimer.////
18
////                                                             ////
19
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
20
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
21
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
22
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
23
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
24
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
25
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
26
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
27
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
28
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
29
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
30
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
31
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
32
////                                                             ////
33
/////////////////////////////////////////////////////////////////////
34
 
35
`timescale 1ns / 100ps
36
 
37
`define INPUT_WIDTH 32
38
 
39
module cotangent_lut (quad, enable, degrees, data, rst, clk);
40
 
41
input [1:0] quad;
42
input enable;
43
input rst;
44
input [`INPUT_WIDTH-1:0] degrees ;
45
input clk;
46
 
47
//////////////inputs/////////////////
48
 
49
output reg [63:0] data;
50
 
51
//////////////output/////////////////
52
 
53
always@(posedge clk )
54
 
55
// needs to be positive in first and third quadrants
56
 
57
 begin
58
        if (quad == 2'b01 || quad == 2'b11)
59
        begin
60
        data[63] <= 1'b1;
61
        end
62
 
63
        else
64
        begin
65
        data[63] <= 1'b0;
66
        end
67
 
68
 
69
 
70
        if(enable)
71
        case (degrees)
72
 
73
//look up table
74
 
75
`INPUT_WIDTH'd0  : data[62:0] <= 64'h7ff0000000000000;
76
`INPUT_WIDTH'd1  : data[62:0] <= 64'h404ca51d76749a71;
77
`INPUT_WIDTH'd2  : data[62:0] <= 64'h403ca2e17ec2185c;
78
`INPUT_WIDTH'd3  : data[62:0] <= 64'h403314c55fbc4c67;
79
`INPUT_WIDTH'd4  : data[62:0] <= 64'h402c99f0ed772d4c;
80
`INPUT_WIDTH'd5  : data[62:0] <= 64'h4026dc2fd0bfdbe2;
81
`INPUT_WIDTH'd6  : data[62:0] <= 64'h4023075ac71a38c7;
82
`INPUT_WIDTH'd7  : data[62:0] <= 64'h402049e7c666e3fe;
83
`INPUT_WIDTH'd8  : data[62:0] <= 64'h401c76237b025ae8;
84
`INPUT_WIDTH'd9  : data[62:0] <= 64'h4019414813ba662c;
85
`INPUT_WIDTH'd10 : data[62:0] <= 64'h4016af648056a136;
86
`INPUT_WIDTH'd11 : data[62:0] <= 64'h40149405f7cc644c;
87
`INPUT_WIDTH'd12 : data[62:0] <= 64'h4012d18a8e2ff28c;
88
`INPUT_WIDTH'd13 : data[62:0] <= 64'h4011536e695dda95;
89
`INPUT_WIDTH'd14 : data[62:0] <= 64'h40100b0a2833d3c4;
90
`INPUT_WIDTH'd15 : data[62:0] <= 64'h400ddb3d742c2656;
91
`INPUT_WIDTH'd16 : data[62:0] <= 64'h400be6398b3f2869;
92
`INPUT_WIDTH'd17 : data[62:0] <= 64'h400a2ab4c713671e;
93
`INPUT_WIDTH'd18 : data[62:0] <= 64'h40089f188bdcd7b0;
94
`INPUT_WIDTH'd19 : data[62:0] <= 64'h40073bd2e9a270e0;
95
`INPUT_WIDTH'd20 : data[62:0] <= 64'h4005fad570f872d9;
96
`INPUT_WIDTH'd21 : data[62:0] <= 64'h4004d738ef803784;
97
`INPUT_WIDTH'd22 : data[62:0] <= 64'h4003ccfa561175d6;
98
`INPUT_WIDTH'd23 : data[62:0] <= 64'h4002d8c9200b5686;
99
`INPUT_WIDTH'd24 : data[62:0] <= 64'h4001f7e220cc4172;
100
`INPUT_WIDTH'd25 : data[62:0] <= 64'h400127f33e8d12e5;
101
`INPUT_WIDTH'd26 : data[62:0] <= 64'h40006705b35391e8;
102
`INPUT_WIDTH'd27 : data[62:0] <= 64'h3fff66da45fee3f1;
103
`INPUT_WIDTH'd28 : data[62:0] <= 64'h3ffe1774a2562593;
104
`INPUT_WIDTH'd29 : data[62:0] <= 64'h3ffcdd612dd501f4;
105
`INPUT_WIDTH'd30 : data[62:0] <= 64'h3ffbb67ae8584cab;
106
`INPUT_WIDTH'd31 : data[62:0] <= 64'h3ffaa0e385c196ab;
107
`INPUT_WIDTH'd32 : data[62:0] <= 64'h3ff99af8610e4105;
108
`INPUT_WIDTH'd33 : data[62:0] <= 64'h3ff8a34971bd7010;
109
`INPUT_WIDTH'd34 : data[62:0] <= 64'h3ff7b891d9a169b4;
110
`INPUT_WIDTH'd35 : data[62:0] <= 64'h3ff6d9b1b96ce128;
111
`INPUT_WIDTH'd36 : data[62:0] <= 64'h3ff605a90c73ab79;
112
`INPUT_WIDTH'd37 : data[62:0] <= 64'h3ff53b9359d2f919;
113
`INPUT_WIDTH'd38 : data[62:0] <= 64'h3ff47aa413b0ee1e;
114
`INPUT_WIDTH'd39 : data[62:0] <= 64'h3ff3c2238553dcee;
115
`INPUT_WIDTH'd40 : data[62:0] <= 64'h3ff3116c3711527e;
116
`INPUT_WIDTH'd41 : data[62:0] <= 64'h3ff267e8b3f5da82;
117
`INPUT_WIDTH'd42 : data[62:0] <= 64'h3ff1c511a0db83e3;
118
`INPUT_WIDTH'd43 : data[62:0] <= 64'h3ff1286c17acf49b;
119
`INPUT_WIDTH'd44 : data[62:0] <= 64'h3ff091883bfbf42e;
120
`INPUT_WIDTH'd45 : data[62:0] <= 64'h3ff0000000000001;
121
`INPUT_WIDTH'd46 : data[62:0] <= 64'h3feee6ec253d2464;
122
`INPUT_WIDTH'd47 : data[62:0] <= 64'h3fedd729e0bf9cb6;
123
`INPUT_WIDTH'd48 : data[62:0] <= 64'h3fecd01c246e4060;
124
`INPUT_WIDTH'd49 : data[62:0] <= 64'h3febd1326bb88d13;
125
`INPUT_WIDTH'd50 : data[62:0] <= 64'h3fead9e7783fbf1e;
126
`INPUT_WIDTH'd51 : data[62:0] <= 64'h3fe9e9c0346ca839;
127
`INPUT_WIDTH'd52 : data[62:0] <= 64'h3fe9004ab6d5cc93;
128
`INPUT_WIDTH'd53 : data[62:0] <= 64'h3fe81d1d621eb711;
129
`INPUT_WIDTH'd54 : data[62:0] <= 64'h3fe73fd61d9df544;
130
`INPUT_WIDTH'd55 : data[62:0] <= 64'h3fe66819a3a0bf7b;
131
`INPUT_WIDTH'd56 : data[62:0] <= 64'h3fe59592e296c625;
132
`INPUT_WIDTH'd57 : data[62:0] <= 64'h3fe4c7f26ed1d60f;
133
`INPUT_WIDTH'd58 : data[62:0] <= 64'h3fe3feee02d72514;
134
`INPUT_WIDTH'd59 : data[62:0] <= 64'h3fe33a400c85af9f;
135
`INPUT_WIDTH'd60 : data[62:0] <= 64'h3fe279a74590331e;
136
`INPUT_WIDTH'd61 : data[62:0] <= 64'h3fe1bce655fbb9bf;
137
`INPUT_WIDTH'd62 : data[62:0] <= 64'h3fe103c37f7ebedc;
138
`INPUT_WIDTH'd63 : data[62:0] <= 64'h3fe04e0850c1dd5d;
139
`INPUT_WIDTH'd64 : data[62:0] <= 64'h3fdf3702bf455cf5;
140
`INPUT_WIDTH'd65 : data[62:0] <= 64'h3fddd7fc13699ab1;
141
`INPUT_WIDTH'd66 : data[62:0] <= 64'h3fdc7ea074a90a11;
142
`INPUT_WIDTH'd67 : data[62:0] <= 64'h3fdb2a986b66229e;
143
`INPUT_WIDTH'd68 : data[62:0] <= 64'h3fd9db90d0ac0d44;
144
`INPUT_WIDTH'd69 : data[62:0] <= 64'h3fd8913a75259d04;
145
`INPUT_WIDTH'd70 : data[62:0] <= 64'h3fd74b49cf3902d6;
146
`INPUT_WIDTH'd71 : data[62:0] <= 64'h3fd60976af8c1614;
147
`INPUT_WIDTH'd72 : data[62:0] <= 64'h3fd4cb7bfb4961b0;
148
`INPUT_WIDTH'd73 : data[62:0] <= 64'h3fd391176b8feb5b;
149
`INPUT_WIDTH'd74 : data[62:0] <= 64'h3fd25a0951873b22;
150
`INPUT_WIDTH'd75 : data[62:0] <= 64'h3fd126145e9ecd56;
151
`INPUT_WIDTH'd76 : data[62:0] <= 64'h3fcfe9fae1181f52;
152
`INPUT_WIDTH'd77 : data[62:0] <= 64'h3fcd8d16c1491599;
153
`INPUT_WIDTH'd78 : data[62:0] <= 64'h3fcb350dac762348;
154
`INPUT_WIDTH'd79 : data[62:0] <= 64'h3fc8e174375dceba;
155
`INPUT_WIDTH'd80 : data[62:0] <= 64'h3fc691e1ebc5cbbf;
156
`INPUT_WIDTH'd81 : data[62:0] <= 64'h3fc445f0fbb1cf93;
157
`INPUT_WIDTH'd82 : data[62:0] <= 64'h3fc1fd3df8664fe6;
158
`INPUT_WIDTH'd83 : data[62:0] <= 64'h3fbf6ecf19881d32;
159
`INPUT_WIDTH'd84 : data[62:0] <= 64'h3fbae81c75231d96;
160
`INPUT_WIDTH'd85 : data[62:0] <= 64'h3fb665a8349d55ee;
161
`INPUT_WIDTH'd86 : data[62:0] <= 64'h3fb1e6b93a6931ff;
162
`INPUT_WIDTH'd87 : data[62:0] <= 64'h3faad53144273e86;
163
`INPUT_WIDTH'd88 : data[62:0] <= 64'h3fa1e12295d61fd2;
164
`INPUT_WIDTH'd89 : data[62:0] <= 64'h3f91dfbd9410a43b;
165
`INPUT_WIDTH'd90 : data[62:0] <= 64'h0000000000000000;
166
 
167
 
168
default:data <= 64'h0;
169
 
170
endcase
171
 
172
else
173
  data <= 64'hxxxxxxxxxxxxxxx;
174
 
175
 
176
 
177
end
178
 
179
 
180
endmodule

powered by: WebSVN 2.1.0

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