Thực hiện phân chia phần mềm trong DSP

K

kirgizz

Guest
Chào,

ai đó có thể đưa cho tôi một mẹo hay một cặp xấp xỉ công thức cho việc thực hiện phân chia trong phần mềm?(-> Sử dụng lắp ráp)

Giới thiệu về ứng dụng:
Tôi cần phải có được tần số của một TTL input-tín hiệu.Tôi sử dụng một bộ đếm thời gian và thời gian đo lường của tín hiệu đầu vào.Sau đó, giá trị đo được chia theo giá trị tham khảo (DSP đồng hồ).Thiết kế của tôi là sử dụng 32 bit dữ liệu điểm cố định.Đo giá trị và chia là số nguyên unsigned.
Tôi nghĩ rằng, DSP của tôi có một ROM dựa trên bảng giá trị đối ứng, nhưng nó không đủ chính xác.Tôi cho rằng, nó có thể được thực hiện bởi việc chuyển đổi, bổ sung và nhân giống.
Does it???

Cảm ơn bạn trước

 
Chào!

Có rất nhiều các thuật toán phân chia phần mềm qua internet.
Ví dụ, hãy thử tham khảo sau đây:
http://www.bearcave.com/software/divide.htm
http://www.sccs.swarthmore.edu/users/03/jcorder/CS23/lab3/extensions.html

Những ví dụ là trong C, nhưng họ sẽ cho bạn hiểu làm thế nào để thực hiện nó trong lắp ráp, bởi vì các thuật toán khá dễ dàng.

Lời chúc mừng tốt đẹp nhất!

 
Cảm ơn bạn Akorostel,

nó đã có ích.Tôi biết đúng hướng ngay bây giờ.

 
Xem mã này c.

Word32 L_div_s (Word32 var1, Word32 var2)
(
Word32 var_out = 0;
Word32 iteration;
Word32 L_num;
Word32 L_denom;

if ((var1> var2) | | (var1 <0) | | (var2 <0))
(
printf ( "Division Lỗi var1 =% d var2 =% d \ n", var1, var2);
exit (0);
)

nếu (var2 == 0)
(
printf ( "Division by 0, Fatal error \ n");
exit (0);
)

if (var1 == 0)
(
var_out = 0;
)
khác
(
if (var1 == var2)
(
var_out = MAX_32;
)
khác
(
L_num = var1;
L_denom = var2;

cho (iteration = 0; lặp <31; lặp )
(
var_out <<= 1;
L_num <<= 1;

nếu (L_num> = L_denom)
(
L_num = L_sub (L_num, L_denom);
var_out = L_add (var_out, 1);
)
)
)
)

trở lại (var_out);
)

Word32 L_sub (Word32 L_var1, Word32 L_var2)
(
Word32 L_var_out;

L_var_out = L_var1 - L_var2;

nếu (((L_var1 ^ L_var2) & MIN_32) = 0!)
(
if ((L_var_out ^ L_var1) & MIN_32)
(
L_var_out = (L_var1 <0L)?MIN_32: MAX_32;
Overflow = 1;
)
)
trở lại (L_var_out);
)

Word32 L_add (Word32 L_var1, Word32 L_var2)
(
Word32 L_var_out;

L_var_out = L_var1 L_var2;

nếu (((L_var1 ^ L_var2) & MIN_32) == 0)
(
if ((L_var_out ^ L_var1) & MIN_32)
(
L_var_out = (L_var1 <0)?MIN_32: MAX_32;
Overflow = 1;
)
)
trở lại (L_var_out);
)

 

Welcome to EDABoard.com

Sponsor

Back
Top