atan2関数に設定したTrigonometric FunctionブロックからHDLコードを生成することはできますか?
4 views (last 30 days)
Show older comments
MathWorks Support Team
on 9 Apr 2018
Edited: MathWorks Support Team
on 18 Jan 2024
SimulinkモデルでTrigonometric Functionブロックにatan2関数を設定して使用しています。このブロックからHDLコードを生成したところ、エラーが出ました。atan2関数からHDLコードを生成することはできますか?
Accepted Answer
MathWorks Support Team
on 18 Jan 2024
Edited: MathWorks Support Team
on 18 Jan 2024
atan2関数を設定したTrigonometric Functionブロックは、通常の固定小数点演算でのHDLコード生成には対応しておりませんが、以下の2通りの方法でatan2関数のHDLコード生成が可能です。1. ネイティブ浮動小数点(single型)設定を使用するネイティブ浮動小数点実装の仕組みを使用することで、Trigonometric Functionブロックに指定されたatan2関数をHDLコード生成可能です。モデルに対するhdlsetupを終えたあと、コンフィギュレーションパラメータの「HDLコード生成」>「グローバル設定」>「浮動小数点のターゲット」を開き、浮動小数点IPライブラリに"native floating point"を指定します。
このように設定したあと、data type conversionブロックを使用してsingle型データにキャストした信号をTrigonometric Functionブロックに入力します。この構成により単精度浮動小数点によるHDLコード生成が可能となります。
HDLにおける浮動小数点演算は、通常の固定小数点演算よりも実装面積は大きくなりがちですが、atan2関数を固定小数点演算で表現するときわめて広いダイナミックレンジが必要となり、一般に固定小数点での高品質な実装は困難です。浮動小数点演算を採用することで、固定小数点演算では実現困難な広いダイナミックレンジのatan2関数を実装可能となります。ネイティブ浮動小数点の仕組みHDL Coderのネイティブ浮動小数点の機能は、特定のベンダーの浮動小数点演算ユニットに依存しない浮動小数点演算の仕組みをHDLコードで構築します。すなわち、浮動小数点演算ユニットが用意されていないターゲットデバイスにおいても、IEEE 754に準拠した単精度浮動小数点を実現する浮動小数点演算ユニットをロジックゲートを組み合わせることで作り出し、浮動小数点演算を要求するような広いダイナミックレンジの計算を可能とします。ネイティブ浮動小数点により生成された浮動小数点ユニットは、さらにリソース共有の機能を使用することで、複数個所での計算に再利用することも可能です。詳細は以下リンクを参照してください。
web(fullfile(docroot, 'hdlcoder/native-floating-point.html'))
2. DSP System ToolboxのComplex to Magnitude-Angle HDL Optimizedブロックを使用する
atan2関数の計算は、複素数信号に対する偏角計算に相当します。Complex to Magnitude-Angle HDL optimisedブロックにはCORDIC近似によるアルゴリズムが実装されており、atan2関数相当の処理がHDLコード生成されます。以上の2つの手法それぞれに相当するサンプルモデルが、回答欄上部からダウンロード可能です。サンプルモデルはR2018a以降のバージョンで実行可能です。
現在のリリースに関する必要な情報は以下のリンクから検索してください:
0 Comments
More Answers (1)
Atsushi Matsumoto
on 18 Oct 2019
R2019aからTriginometric Functionブロックのatan2の固定小数点実装に対応しました。
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!