1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. Simulink®モデルをHDL化してみた【第2回】「2-D LookupTableをHDL化してみた」

TECHブログ

Simulink®モデルをHDL化してみた【第2回】「2-D LookupTableをHDL化してみた」

Simulink®モデルをHDL化してみた【第2回】「2-D LookupTableをHDL化してみた」

高速処理に対応するモデルをFPGAやAdaptive SoCに組込むHILSのシステムを構築する場合、プラントモデルをHDL化する必要があります。

このブログでは、Simulink®で作成したモデルをMathWorks社のHDL Coder™を使用してHDL化を行う際に、設計者の皆様が躓く箇所について2回に分けて解説します。

2回目の今回は、「2-D LookupTableをHDL化してみた」結果です。
前回の第1回「RC回路をSimulink®でモデル化してHDL化してみた」はこちらを参照ください。

なお、実行した環境は以下の通りです。

OS Microsoft Windows 10 Pro
MathWorks社製 MATLAB® バージョン 9.8 (R2020a)
Simulink® バージョン 10.1 (R2020a)
Fixed-Point Designer™ バージョン 7.0 (R2020a)
HDL Coder™ バージョン 3.16 (R2020a)
MATLAB Coder™ バージョン 5.0 (R2020a)
Xilinx社製 Vivado® Design Suite 2019.1.2(64bit)

目次

2-D LookupTable

今回HDL化するLookupTableは図1のような2-D LookupTableです。

図1

2Dは、Simulink®であらかじめ用意されている2-D LookupTableを使用したブロックです。my2DはHDL Coder™エラーに対応するために独自に作成した2-D LookupTableです。

使用したテーブルデータは図2の縦8×横16の2D MAPデータです。

図2

2-D LookupTableは実測値の結果をテーブルデータとしてもたせ、2入力の値からテーブル値を使って補間した出力結果を演算に使用する、使用頻度の高いブロックです。

2-D LookupTableをHDL Coder™でHDLへ自動コード変換する

Simulink®であらかじめ用意されている2-D LookupTableの2DをHDL化していきます。
HDL Coder™ではSimulink®のトップ階層のブロックをHDL化できないので、サブシステム org2D階層を追加しています。

HDL Coder™を起動し、
①HDL化対象のサブシステムを指定します。(今回は「org2D」と指定)(図3)
②コンフィギュレーションパラメータを設定します。第1回ブログ時の設定を参照ください。

図3

HDLワークフローアドバイザーを起動し、実行開始します。(図4)

図4

エラーになってしまう

ルールチェックでエラーになってしまいました。(図5)

図5

今回のエラーはLookupTableの入力に浮動小数点を使用していることが原因です。R2020b以降のバージョンではサポートするようになりましたが、R2020a以前のバージョンのHDL Coder™では入力に浮動小数点をサポートしていません。

調べてみると、確かに図6のようにLookupTableの入力に浮動小数点が使用されていました。

図6

このエラーには、次の対策が有効です。

ブロックを置換える

入力が浮動小数点でも対応できる、独自モデルmy2Dを作成し置換えました。(図7)

図7

独自モデル構成

独自モデルmy2Dは大きく分けて以下の二つで構成されています。(図8)
①Lookup-Table のbreakpointが自然数となるように変換する。
②breakpointが自然数のLookup-Tableから線形補間により出力値を算出する。

図8

breakpointが自然数のテーブルを浮動小数点のテーブルに換算し直し、テーブルデータの4点と入力値から線形補間により出力値を算出します。(図9)

図9

独自モデルmy2DでHDL Coder™実行

独自モデルmy2Dに置換え、再実行したところエラーは消え、下記のようなワーニングのみとなりました。原因はLookupTableの入力と出力でデータ型が同じ浮動小数点型でないためです。(図10)

図10

該当箇所を確認すると、以下のように、HDL Coder™のエラーを回避するために意図的にとった構成であり問題ありません。(図11)

図11

「警告を無視」にチェックを入れ、続行します。(図12)

図12

独自モデルmy2Dに置換えたことで、HDL化に成功!(図13)

図13

妥当性確認

今回のシミュレーション結果は表1のようになりました。

この結果から(brkp1,brkp2)=(10000,0.15)を2D-LookupTableへ入力した場合の出力結果について、妥当性を確認します。

①Simulink®ライブラリであらかじめ用意されている2-D LookupTableを使用した場合とmy2Dに置換えた場合の誤差の確認

②HDL化による誤差の確認



表1

①「Simulink®ライブラリであらかじめ用意されている2-D LookupTable」を使用した場合と独自モデルmy2Dに置換えた場合の誤差の確認
(brkp1,brkp2)=(10000,0.15)を2D-LookupTableへ入力した場合の出力値について、Simulink®ライブラリであらかじめ用意されている2-D LookupTableを使用時のSimulink®シミュレーション結果(P)と、独自モデルmy2Dを使用時のSimulink®シミュレーション結果(Q)の差の絶対値、Abs(P-Q)は0。データ型Singleでの有効桁数は7桁であり「Simulink®ライブラリであらかじめ用意されている2-D LookupTable」から独自モデルmy2Dへの置換えで問題なしと判断します。

②HDL化による誤差の確認
PとHDL化後のVivado® Design Suiteシミュレーションの結果(R)の差の絶対値、Abs(P-R)の結果は0。HDL化による誤差に問題なしと判断します。

終わりに

今回は、Simulink®モデルからHDL Coder™を使用してHDL化する際によくある躓きから、2-D LookupTableのHDL化での躓きを解説しました。

「Simulink®ライブラリに登録されている2-D LookupTable」はR2020a以前のバージョンではHDL Coder™が浮動小数点入力をサポートしていないため、浮動小数点入力にも対応した独自モデル2-D LookupTableのmy2Dを作成して置換えることでHDL化に成功しました。HDL化に際しての妥当性確認として、独自モデルのmy2Dに置換えることによる誤差、HDL化による誤差を調べ、問題ないことを確認しました。

Simulink®モデルからHDL Coder™を使用してHDL化する際の躓きやすい箇所について、前回「RC回路をSimulink®でモデル化してHDL化してみた」と、今回「2-D LookupTableをHDL化してみた」をお伝えしました。
これからも、このような等価回路からのSimuink®モデル化やモデルのHDL化に関するポイントをご紹介しますのでご期待ください。

もしお手元にあるSimulink®モデルのHDL化やモデルベースデザイン設計を委託したいというご要望がございましたら、弊社モビリティビジネス事業までお気軽にお問い合わせください。

モデルベースデザイン設計受託についてはこちら

 

最後までお付き合いいただきありがとうございました。