-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLogTableFxdP.bsv
More file actions
73 lines (52 loc) · 1.65 KB
/
LogTableFxdP.bsv
File metadata and controls
73 lines (52 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Copyright (c) 2013 Bluespec, Inc. All rights reserved.
// $Revision: 32843 $
// $Date: 2013-12-16 16:25:57 +0000 (Mon, 16 Dec 2013) $
package LogTableFxdP;
import ClientServer ::*;
import FIFO ::*;
import FIFO ::*;
import FIFOF ::*;
import FixedPoint ::*;
import GetPut ::*;
import Real ::*;
import StmtFSM ::*;
import Vector ::*;
import InterfaceLogTableFxdP::*;
typedef FixedPoint#(32,32) SqrtTFx;
typedef Bit#(32) Int32WORD;
typedef FixedPoint#(33,32) SqrtTFx33;
(* synthesize *)
module mkLogTableFxdP (InterfaceLogTableFxdP#(SqrtTFx33,SqrtTFx33));
Reg#(int) cycle <- mkReg(0);
Reg#(Bool) flag <- mkReg(True);
Reg#(SqrtTFx33) x <- mkReg(0);
Reg#(SqrtTFx33) result <- mkReg(0);
function SqrtTFx33 mlog2 (SqrtTFx33 val);
Int32WORD bitVal = val.f;
//bitVal = reverseBits(bitVal);
let zeros = countZerosMSB(bitVal);
//SqrtTFx33 output_val = 0.69314718*(val*0.000000011920928955078125 - 126.94269504);
SqrtTFx33 output_val = fromUInt(zeros);
Int32WORD fval = bitVal << (zeros + 1);
output_val.f = -fval -1 ;
//output_val.f = truncate(pack(bitVal));
return output_val;
endfunction:mlog2
method Action run(SqrtTFx33 input_val );
if(flag)
action
result <= mlog2(input_val);
cycle <= cycle + 1;
flag <= False;
endaction
else
action
flag <= True;
endaction
endmethod:run
method ActionValue#(SqrtTFx33) get ( );
let resp = result;
return resp;
endmethod:get
endmodule
endpackage