Skip to content

Commit 2b29b27

Browse files
committed
INITIAL COMMIT.
1 parent fb21203 commit 2b29b27

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1341
-0
lines changed

Matlab/cordicdivide.m

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
function result = cordicdivide(y, x)
2+
% Calculation Cordic Division (y/x) Using Fixed-Point Simulation
3+
%
4+
% param y: inputted number
5+
% type y: (floating / fixed) point
6+
% param x: inputted number
7+
% type x: (floating / fixed) point
8+
% return result: fixed point cordic tanh of x
9+
IS_SIGNED = 1;
10+
WORD_L = 32;
11+
FLOAT_L = 24;
12+
MAX_ITER = FLOAT_L + 1;
13+
I = 0:MAX_ITER;
14+
pow2_LOOKUP = fi(2.^(-I), IS_SIGNED, WORD_L, FLOAT_L);
15+
x = fi(x, IS_SIGNED, WORD_L, FLOAT_L);
16+
y = fi(y, IS_SIGNED, WORD_L, FLOAT_L);
17+
18+
% Calculating z = y/x
19+
z = fi(0, IS_SIGNED, WORD_L, FLOAT_L);
20+
21+
for i = 1:MAX_ITER
22+
% disp(['X:', hex(x), ' Y:', hex(y), ' Z:', hex(z), ' i=', int2str(i)]);
23+
d_i = -sign(y);
24+
y = fi(y + d_i * bitshift(x, -(i-1)), IS_SIGNED, WORD_L, FLOAT_L);
25+
z = fi(z - d_i * pow2_LOOKUP(i), IS_SIGNED, WORD_L, FLOAT_L);
26+
% disp(bin(pow2_LOOKUP(i)));
27+
end
28+
29+
result = z;
30+
end

Matlab/cordictanh.m

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
function result = cordictanh(z)
2+
% Calculation Cordic Tanh Using Fixed-Point Simulation
3+
%
4+
% param z: inputted number
5+
% type z: (floating / fixed) point
6+
% return result: fixed point cordic tanh of z
7+
IS_SIGNED = 1;
8+
WORD_L = 32;
9+
FLOAT_L = 24;
10+
11+
12+
% Calculating sinh and cosh
13+
% x_n = A_n(x_0 * cosh(z_0) + y_0 * sinh(z_0))
14+
% y_n = A_n(y_0 * cosh(z_0) + x_0 * sinh(z_0))
15+
y = fi(0, IS_SIGNED, WORD_L, FLOAT_L);
16+
x = fi(1, IS_SIGNED, WORD_L, FLOAT_L);
17+
z = fi(z, IS_SIGNED, WORD_L, FLOAT_L);
18+
% x_n = A_n(x_0 * cosh(z_0))
19+
% y_n = A_n(x_0 * sinh(z_0))
20+
% [tanh = y_n / x_n]
21+
22+
% for i <= 0:
23+
M = 3;
24+
I = -M:0;
25+
atanh_LOOKUP = fi(atanh(1 - 2.^(I-2)), IS_SIGNED, WORD_L, FLOAT_L);
26+
hex(atanh_LOOKUP)
27+
for i = I
28+
% disp(['X:', hex(x), ' Y:', hex(y), ' Z:', hex(z), ' i=', int2str(i)]);
29+
if abs(z) == fi(0, 1, WORD_L, FLOAT_L)
30+
break
31+
end
32+
33+
d_i = fi(sign(z), IS_SIGNED, WORD_L, FLOAT_L);
34+
x_old = x;
35+
y_old = y;
36+
x = fi(x_old + d_i * y_old - d_i * bitshift(y_old, i - 2), ...
37+
IS_SIGNED, WORD_L, FLOAT_L);
38+
y = fi(y_old + d_i * x_old - d_i * bitshift(x_old, i - 2), ...
39+
IS_SIGNED, WORD_L, FLOAT_L);
40+
z = fi(z - d_i * atanh_LOOKUP(M + i + 1), ...
41+
IS_SIGNED, WORD_L, FLOAT_L);
42+
end
43+
44+
45+
% for i > 0:
46+
N = 13;
47+
I = 1:N;
48+
atanh_LOOKUP = fi(atanh(2.^(-I)), IS_SIGNED, WORD_L, FLOAT_L);
49+
hex(atanh_LOOKUP)
50+
for i = I
51+
if abs(z) == fi(0, 1, WORD_L, FLOAT_L)
52+
53+
break
54+
end
55+
% disp(['X:', hex(x), ' Y:', hex(y), ' Z:', hex(z), ' i=', int2str(i)]);
56+
57+
d_i = fi(sign(z), IS_SIGNED, WORD_L, FLOAT_L);
58+
x_old = fi(x, IS_SIGNED, WORD_L, FLOAT_L);
59+
y_old = fi(y, IS_SIGNED, WORD_L, FLOAT_L);
60+
x = fi(x_old + d_i * bitshift(y_old, -i), IS_SIGNED, WORD_L, FLOAT_L);
61+
y = fi(y_old + d_i * bitshift(x_old, -i), IS_SIGNED, WORD_L, FLOAT_L);
62+
z = fi(z - d_i * atanh_LOOKUP(i), IS_SIGNED, WORD_L, FLOAT_L);
63+
if i == 13 || i == 4 % Repeat Condition (3k + 1)
64+
% disp(['X:', hex(x), ' Y:', hex(y), ' Z:', hex(z), ' i=', int2str(i)]);
65+
x_old = fi(x, IS_SIGNED, WORD_L, FLOAT_L);
66+
y_old = fi(y, IS_SIGNED, WORD_L, FLOAT_L);
67+
d_i = fi(sign(z), IS_SIGNED, WORD_L, FLOAT_L);
68+
x = fi(x_old + d_i * bitshift(y_old, -i), IS_SIGNED, WORD_L, FLOAT_L);
69+
y = fi(y_old + d_i * bitshift(x_old, -i), IS_SIGNED, WORD_L, FLOAT_L);
70+
z = fi(z - d_i * atanh_LOOKUP(i), IS_SIGNED, WORD_L, FLOAT_L);
71+
end
72+
end
73+
% disp(['X:', hex(x), ' Y:', hex(y), ' Z:', hex(z), ' i=', int2str(i)]);
74+
% display('CORDID_DIV:');
75+
result = cordicdivide(y, x);
76+
end

Matlab/input_b.txt

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
11110110000000000000000000000000
2+
11110110000110011001100110011010
3+
11110110001100110011001100110011
4+
11110110010011001100110011001101
5+
11110110011001100110011001100110
6+
11110110100000000000000000000000
7+
11110110100110011001100110011010
8+
11110110101100110011001100110011
9+
11110110110011001100110011001101
10+
11110110111001100110011001100110
11+
11110111000000000000000000000000
12+
11110111000110011001100110011010
13+
11110111001100110011001100110011
14+
11110111010011001100110011001101
15+
11110111011001100110011001100110
16+
11110111100000000000000000000000
17+
11110111100110011001100110011010
18+
11110111101100110011001100110011
19+
11110111110011001100110011001101
20+
11110111111001100110011001100110
21+
11111000000000000000000000000000
22+
11111000000110011001100110011010
23+
11111000001100110011001100110011
24+
11111000010011001100110011001101
25+
11111000011001100110011001100110
26+
11111000100000000000000000000000
27+
11111000100110011001100110011010
28+
11111000101100110011001100110011
29+
11111000110011001100110011001101
30+
11111000111001100110011001100110
31+
11111001000000000000000000000000
32+
11111001000110011001100110011010
33+
11111001001100110011001100110011
34+
11111001010011001100110011001101
35+
11111001011001100110011001100110
36+
11111001100000000000000000000000
37+
11111001100110011001100110011010
38+
11111001101100110011001100110011
39+
11111001110011001100110011001101
40+
11111001111001100110011001100110
41+
11111010000000000000000000000000
42+
11111010000110011001100110011010
43+
11111010001100110011001100110011
44+
11111010010011001100110011001101
45+
11111010011001100110011001100110
46+
11111010100000000000000000000000
47+
11111010100110011001100110011010
48+
11111010101100110011001100110011
49+
11111010110011001100110011001101
50+
11111010111001100110011001100110
51+
11111011000000000000000000000000
52+
11111011000110011001100110011010
53+
11111011001100110011001100110011
54+
11111011010011001100110011001101
55+
11111011011001100110011001100110
56+
11111011100000000000000000000000
57+
11111011100110011001100110011010
58+
11111011101100110011001100110011
59+
11111011110011001100110011001101
60+
11111011111001100110011001100110
61+
11111100000000000000000000000000
62+
11111100000110011001100110011010
63+
11111100001100110011001100110011
64+
11111100010011001100110011001101
65+
11111100011001100110011001100110
66+
11111100100000000000000000000000
67+
11111100100110011001100110011010
68+
11111100101100110011001100110011
69+
11111100110011001100110011001101
70+
11111100111001100110011001100110
71+
11111101000000000000000000000000
72+
11111101000110011001100110011010
73+
11111101001100110011001100110011
74+
11111101010011001100110011001101
75+
11111101011001100110011001100110
76+
11111101100000000000000000000000
77+
11111101100110011001100110011010
78+
11111101101100110011001100110011
79+
11111101110011001100110011001101
80+
11111101111001100110011001100110
81+
11111110000000000000000000000000
82+
11111110000110011001100110011010
83+
11111110001100110011001100110011
84+
11111110010011001100110011001101
85+
11111110011001100110011001100110
86+
11111110100000000000000000000000
87+
11111110100110011001100110011010
88+
11111110101100110011001100110011
89+
11111110110011001100110011001101
90+
11111110111001100110011001100110
91+
11111111000000000000000000000000
92+
11111111000110011001100110011010
93+
11111111001100110011001100110011
94+
11111111010011001100110011001101
95+
11111111011001100110011001100110
96+
11111111100000000000000000000000
97+
11111111100110011001100110011010
98+
11111111101100110011001100110011
99+
11111111110011001100110011001101
100+
11111111111001100110011001100110
101+
00000000000000000000000000000000
102+
00000000000110011001100110011010
103+
00000000001100110011001100110011
104+
00000000010011001100110011001101
105+
00000000011001100110011001100110
106+
00000000100000000000000000000000
107+
00000000100110011001100110011010
108+
00000000101100110011001100110011
109+
00000000110011001100110011001101
110+
00000000111001100110011001100110
111+
00000001000000000000000000000000
112+
00000001000110011001100110011010
113+
00000001001100110011001100110011
114+
00000001010011001100110011001101
115+
00000001011001100110011001100110
116+
00000001100000000000000000000000
117+
00000001100110011001100110011010
118+
00000001101100110011001100110011
119+
00000001110011001100110011001101
120+
00000001111001100110011001100110
121+
00000010000000000000000000000000
122+
00000010000110011001100110011010
123+
00000010001100110011001100110011
124+
00000010010011001100110011001101
125+
00000010011001100110011001100110
126+
00000010100000000000000000000000
127+
00000010100110011001100110011010
128+
00000010101100110011001100110011
129+
00000010110011001100110011001101
130+
00000010111001100110011001100110
131+
00000011000000000000000000000000
132+
00000011000110011001100110011010
133+
00000011001100110011001100110011
134+
00000011010011001100110011001101
135+
00000011011001100110011001100110
136+
00000011100000000000000000000000
137+
00000011100110011001100110011010
138+
00000011101100110011001100110011
139+
00000011110011001100110011001101
140+
00000011111001100110011001100110
141+
00000100000000000000000000000000
142+
00000100000110011001100110011010
143+
00000100001100110011001100110011
144+
00000100010011001100110011001101
145+
00000100011001100110011001100110
146+
00000100100000000000000000000000
147+
00000100100110011001100110011010
148+
00000100101100110011001100110011
149+
00000100110011001100110011001101
150+
00000100111001100110011001100110
151+
00000101000000000000000000000000
152+
00000101000110011001100110011010
153+
00000101001100110011001100110011
154+
00000101010011001100110011001101
155+
00000101011001100110011001100110
156+
00000101100000000000000000000000
157+
00000101100110011001100110011010
158+
00000101101100110011001100110011
159+
00000101110011001100110011001101
160+
00000101111001100110011001100110
161+
00000110000000000000000000000000
162+
00000110000110011001100110011010
163+
00000110001100110011001100110011
164+
00000110010011001100110011001101
165+
00000110011001100110011001100110
166+
00000110100000000000000000000000
167+
00000110100110011001100110011010
168+
00000110101100110011001100110011
169+
00000110110011001100110011001101
170+
00000110111001100110011001100110
171+
00000111000000000000000000000000
172+
00000111000110011001100110011010
173+
00000111001100110011001100110011
174+
00000111010011001100110011001101
175+
00000111011001100110011001100110
176+
00000111100000000000000000000000
177+
00000111100110011001100110011010
178+
00000111101100110011001100110011
179+
00000111110011001100110011001101
180+
00000111111001100110011001100110
181+
00001000000000000000000000000000
182+
00001000000110011001100110011010
183+
00001000001100110011001100110011
184+
00001000010011001100110011001101
185+
00001000011001100110011001100110
186+
00001000100000000000000000000000
187+
00001000100110011001100110011010
188+
00001000101100110011001100110011
189+
00001000110011001100110011001101
190+
00001000111001100110011001100110
191+
00001001000000000000000000000000
192+
00001001000110011001100110011010
193+
00001001001100110011001100110011
194+
00001001010011001100110011001101
195+
00001001011001100110011001100110
196+
00001001100000000000000000000000
197+
00001001100110011001100110011010
198+
00001001101100110011001100110011
199+
00001001110011001100110011001101
200+
00001001111001100110011001100110
201+
00001010000000000000000000000000

0 commit comments

Comments
 (0)