UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

このページをブックマークに追加

AR# 32021

LogiCORE CORDIC v3.0 - 変換関数の出力が間違っているように見える

説明

キーワード : correct, result, 1.0, 1.1, 2.0, 3.0, Arctan, 正しい, 結果

変換関数の出力が間違っているように見えます。

ソリューション

データ フォーマットに関する例および情報が、CORDIC v4.0 以降のバージョンのデータシートに記載されています。

これは通常、出力フォーマットを誤って解釈していることが原因です。

次に、変換関数の計算例を示します。これらの例は、20 ビット入力および出力の CORDIC コンフィギュレーションに基づいています。

例 1 :

次は、CORDIC のデータシートの 9 ~ 10 ページにあるデザイン例を修正したものです。

B = 0.707+0.25j;
mag = abs(B) % Magnitude
0.7498993265765745
theta = angle(B) % Phase Angle
0.3398843741305139

CORDIC シミュレーション

x_in <= "00101101001111111000" = 00.101101001111111000 = 0.707 (Q1.N
Format)
y_in <= "00010000000000000000" = 00.010000000000000000 = 0.25 (Q1.N
Format)

x_out <= "00101101010000000000" = 00.101101010000000000 =
0.7499275207519531 (Q1.N Format)
P_out <= "00001010111000000100" = 000.01010111000000100 =
0.3398742675781250 (Q2.N Format)


例 2 :

次は、整数の入力値を使用した例です。

C = 10+5j
mag = abs(C) % Magnitude
11.18033988749895
theta = angle(C) % Phase Angle
0.4636476090008061

ここで注意が必要です。フォーマットと範囲によっては、データをコアに入力する前にスケーリングする必要があります。

入力がすべて整数ビットであるとすると、20 ビット入力は次のようになります。

Decimal 10 = 00000000000000001010
Decimal 5 = 00000000000000000101

これを N-2 でスケーリングします。この場合は 20-2 = 18 です。これは、数値を再解釈し、CORDIC から算出された出力が正しいことを示すためだけのものです。

10 / 2^18 = 0.000038146972656250
5 / 2^18 = 0.000019073486328125

スケーリングした計算値

D = 0.000038146972656250+0.000019073486328125j
mag = abs(D) % Magnitude
0.00004264961199760036
theta = angle(D) % Phase Angle
0.4636476090008061

これらの値がそのままコアに入力され、データが再解釈されると、次のようになります。

CORDIC シミュレーション

x_in <= "00000000000000001010" = 00.000000000000001010 =
0.00003814697265625000 (Q1.N Format)
y_in <= "00000000000000000101" = 00.000000000000000101 =
0.00001907348632812500 (Q1.N Format)

x_out <= "00000000000000001100" = 00.000000000000001100 =
0.0000457763671875 (Q1.N Format)
P_out <= "00001110101100110010" = 000.01110101100110010 =
0.4593658447265625 (Q2.N Format)

この後、元のフォーマットで出力を解釈し直す場合は、Magnitude 出力を計算する必要があります。出力値を 2^18 でスケーリングすると (この例の場合は入力)、出力が予測値と同じになります。

0.0000457763671875 * 2^18 = 12

例 3 :

次に、先ほどのれいより大きい整数値を使用した例を示します。

E = 1024+512j
mag = abs(E) % Magnitude
1144.866804479892
theta = angle(E) % Phase Angle
0.4636476090008061

Decimal 1024 = 00000000010000000000
Decimal 512 = 00000000001000000000

これを N-2 でスケーリングします。この場合は 20-2 = 18 です。これは、数値を再解釈し、CORDIC から算出された出力が正しいことを示すためだけのものです。

1024 / 2^18 = 0.003906250
512 / 2^18 = 0.001953125

スケーリングした計算値

F = 0.003906250+0.001953125j
mag = abs(F) % Magnitude
0.004367320268554277
theta = angle(F) % Phase Angle
0.4636476090008061

これらの値がそのままコアに入力され、データが再解釈されると、次のようになります。

CORDIC シミュレーション

x_in <= "00000000010000000000" = 00.000000010000000000 =
0.003906250000000000 (Q1.N Format)
y_in <= "00000000001000000000" = 00.000000001000000000 =
0.001953125000000000 (Q1.N Format)

x_out <= "00000000010001111001" = 00.000000010001111001 =
0.004367828369140625 (Q1.N Format)
P_out <= "00001110110101011010" = 000.01110110101011010 =
0.4635772705078125 (Q2.N Format)

この後、元のフォーマットで出力を解釈し直す場合は、Magnitude 出力を計算する必要があります。出力値を 2^18 でスケーリングすると (この例の場合は入力)、出力が予測値と同じになります。

0.004367828369140625 * 2^18 = 1145

LogiCORE CORDIC リリース ノートと既知の問題は、(Xilinx Answer 29570) を参照してください。


AR# 32021
日付 12/15/2012
ステータス アクティブ
タイプ 一般