HDL Coder : Coprocessing – blocking モードでの遅延に関して
조회 수: 1 (최근 30일)
이전 댓글 표시
HDL Coder を使用して Simulink から IP コアを生成。
プロセッサと FPGA の同期には Coprocessing - blocking モードを指定。
テスト用に用意した Simulink Block は 2 Input, 1 Output, ADD, GAIN, ABS ブロックで構成。
Out1 = abs(2 * (In1 + In2)), In1 = In2, 各サイクル 1 インクリメント
同期は IP コアに自動で実装された Storbe, Ready レジスタを使用・
入力から出力までを固定小数点 INT32 で構成した場合。
Cycle In1 In2 Out1
0 0 0 0
1 1 1 4
2 2 2 8
...
のように各サイクルごとに入出力は遅延なく出力される。
ところが入力から出力までを浮動小数点 Single で構成した場合。
(浮動小数点は HDL-Coder の設定で Native Floating Point を指定。)
0 0 0 0
1 1 1 0
2 2 2 0
...
14 14 14 4
15 15 15 8
...
のように入力に対して Strobe, Ready のサイクルを 14 回繰り返したところから 1 サイクル目の結果が出力されます。
これは何かの設定によって固定小数点のときと同じように出来るのでしょうか。
またこの遅延のサイクル数は IP コア生成時に出力されるレポートの何処に記載されているのでしょうか。
댓글 수: 0
채택된 답변
Shoumei
2018년 11월 14일
Native Floating Pointは演算器の内部にパイプラインが挿入されます。浮動小数点で複雑な演算をするため、パイプライン処理が必要になるためです。FPGAの設計ではこのようなパイプライン≒レイテンシの設計が必要になります。
パイプラインの段数はコンフィギュレーションパラメータの画面でZero/Min/Maxで3段階で設定できたと思います。
各演算器で何段のパイプラインが挿入されるかもドキュメントに記載があります。
コード生成レポートの最適化レポートに何段パイプラインが入ったかは記載があったと思います。
댓글 수: 3
Shoumei
2018년 11월 14일
そうですね。レポートのLatencyはHDL Coderが追加挿入した分のレイテンシだったと思います。
各演算子の後に、予め追加される遅延相当のDelayブロックをモデル上で入れておけば、レイテンシが追加されることなくコード生成されます。つまり、Delayブロックの遅延が各演算器のレイテンシとして吸収されてコード生成が行われます。
シミュレーションとコード生成結果の等価性が保たれるので、個人的にはこちらのモデリング方法がお勧めです。
確かマスワークスさんからもらったHDL Modeling Guidelineにもそのような推奨がされていたと思います。
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!