I want to design a divider using cordic function, for high number / low number (30/2) can anyone help me.?

1 回表示 (過去 30 日間)
I have already design the divider using cordic, but this is working only for when numerator is low and denomerator is high.
for example : x/y , 6/20 = 0.3. but when i give 20/6 it shows output is 1.
x = 6;
y = 20;
z = 0;
format long
k = zeros(20,3);
for i = 1:20
if x > 0
x = x - y*2^(-i);
z = z + 2^(-i);
else
x = x + y*2^(-i);
z = z - 2^(-i);
end
k(i,:) = [i 6/20 z];
end
Can anyone help ,how to design the divider using the cordic for higher number / Lower number (eg : 30/2).

採用された回答

Walter Roberson
Walter Roberson 2022 年 5 月 18 日
Do not start with i=1. Start with i being the negative of the number of bits before the decimal place.
I believe that your else is incorrect. I believe you should be working with 2^(-(i-1)) so that you "undo" the previous step
  2 件のコメント
Walter Roberson
Walter Roberson 2022 年 5 月 19 日
In the case where your numerator and denominator are both non-negative or both negative, then you expect a non-negative output; take the absolute values of numerator and denominator, set a flag indicating that you are expecting non-negative, and proceed.
In the case where either numerator or denominator are negative, but not both, then you expect a negative output; take the absolute values of numerator and demoninator, set a flag indicating that you are expecting negative, and proceed.
You are now certain to not be working with negative.
At each step, calculate
x_new = x - y*2^(-i);
If x_new is positive, then
x = x_new;
z = z + 2^(-i);
and otherwise do not change x or z; either way, continue the loop. Stop when x is 0.
Walter Roberson
Walter Roberson 2022 年 5 月 19 日
oh, and at the end if the negative flag is set then take negative of the answer.

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by