CORDICは、固定小数点符号付き整数フォーマットで動作します。入力値と出力値は、q1.31またはq1.15のいずれかです(図3(a),(b))
①q1.31形式では、数字は1つの符号ビットと31個の小数ビット(バイナリーの場所) で表されます。
したがって、数値の範囲は−1(0x80000000)から1−2-31(0x7FFFFFFF)です。精度は2-31(約5×10-10)です。
②q1.15形式では、数値の範囲は1(0x8000)から1−2-15(0x7FFF)です。
この形式では、2つの入力引数を32ビットにパックでき、32ビット読み取りで2つの結果を取得できます。
ただし、精度は2-15(約3×10-5)に減ります(図3(c))
角度は、πで割ったラジアンで表されます。したがって、間隔 [-1, +1] のみが使用されます。
いくつかの関数は、スケールファクターSCALEを指定します。これにより、入力レジスタ、出力レジスタ、または内部レジスタを飽和させることなく、CORDICでサポートされる値の範囲全体をカバーするように関数入力範囲を拡張できます。
スケーリング係数が必要な場合は、事前にソフトウェアで計算し、CORDIC_CSRレジスタのSCALEフィールドにプログラムする必要があります。また、CORDIC_WDATAレジスタでスケール値をプログラミングする場合には、プログラム前に、入力引数をそれに応じてスケーリングする必要があります。
スケーリングは、CORDIC_RDATAレジスタから読み取られた結果でも元に戻す必要があります。また、スケール係数は、スケール値の切り捨てにより精度が悪化するため注意が必要です。
①サイン(図4(a))
サイン関数の主引数は、ラジアン単位の角度θです。ARG1に書き込む前に、πで除算する必要があります。2番目の引数は絶対値(モジュラス)mです。M>1の場合、ソフトウェアでスケーリングして、ARG2のq1.31範囲に適合させる必要があります。
第1の結果RES1がサインで、絶対値(モジュラス)を掛けた値です。第2の結果RES2はコサインで、これは副作用の値です。これも絶対値(モジュラス)を掛けた値です。
②自然対数関数(図4(b))
主引数は、関数変換したい値xです。xは0.107〜+9.35の範囲のみサポートされ、2-n<1-2-nのように、因子2-nでスケーリングする必要があります。スケール値x・2-nはARG1に書き込み、演算項目n=1はSCALEパラメーターに書き込む必要があります。ARG2は使用されません。主結果であるRES1は、自然対数です。最終結果を得るためには、RES1に2(n+1)を掛ける必要があります。RES2は使用されません。
演算は、引数を入力することで始まります。DMAを使用しない場合は、CORDIC_WDATAレジスタに引数を書き込むと演算が始まります。一度CORDICに引数を入力し演算を始めれば、演算終了のフラグをポーリングする必要はありません。
RDATAレジスタの読み取り要求については、単純にバス(AHB)を介して開始します。RDATAレジスタの読み取りアクセスは、演算が終了し、RDATAレジスタが読み取り可能になるまで待機状態になります。RDATAレジスタが読み取り可能になると、その値は自動的にCPUに読み取られ、HREADYをアサートし、トランザクションを完了します。その間、CPUはフリーズします。このアクセスは、読み出しのオーバーヘッドがないため、「ゼロオーバーヘッドモード」と呼ばれます(図5)
Copyright © ITmedia, Inc. All Rights Reserved.