VHDL/Verilog によるコードベースから Simulink によるモデルベースへ MathWorks Japan アプリケーションエンジニアリング部シニアアプリケーションエンジニア松本充史 2012 The MathWorks, Inc. 1
出展 : 日本経済新聞 2012/7/3 記事 2
アジェンダ HDL プロダクツ概要と採用実績 HDL 生成と検証のための基本機能 より高度な使い方設定による回路パフォーマンスの違い HDL と FPGA のテスト検証 3
MathWorks が提供する HDL 関連製品 HDL Coder MATLAB, Simulink, Stateflow から HDL 生成 Filter Design HDL Coder フィルタの HDL 生成 アルゴリズム開発 生成 Processor システム設計 実装 検証 VHDL, C, C++ SystemC Verilog FPGA ASIC Virtual Platform HDL Verifier HDL と FPGA の検証 SystemC 生成 4
日本国内 HDL Coder 新規ライセンス導入数推移産業別とアプリケーション別 2012 年は 10/17 までのデータ 5
アジェンダ HDL プロダクツ概要と採用実績 HDL 生成と検証のための基本機能 より高度な使い方設定による回路パフォーマンスの違い HDL と FPGA のテスト検証 6
一般的な RTL 設計 : 同期回路設計とは 一般的に FPGA/ASIC 設計には同期回路設計が用いられる フリップフロップ (FF) の間に挟んだ論理回路で構成 論理回路の転送時間がCLK 周期を超えないよう設計 FF 間の転送時間だけ考えれば良いので設計が容易 FF FF FF FF clk 7
同期回路設計を考慮した Simulink モデル FF に相当する Delay ブロックと処理ブロックで構成 動作合成ではない Delay ブロックのパラメータによる自動挿入機能 Distributed Pipelining 元モデルはデバイス依存しない ( 再利用性高い ) 設計資産 低 ~ 高抽象度まで用意されたブロック 低抽象度 :+,, AND など HDL 記述同等 高抽象度 :Sin/Cos, フィルタ, 誤り訂正 (RS) FFT ベクタ信号等 オレンジ色は FF に相当する Delay ブロック 8
HDL Coder を使った ASIC/FPGA 実装フロー MATLAB/Simulink Fixed-Point Toolbox Simulink Fixed Point HDL Coder Simulinkリファレンスモデル設計実装用モデル作成固定小数点化 HDLプロパティ設定 HDL 生成チェッカー HDL 生成 HDL Verifier (ModelSim, Incisive) 論理合成ツール (Design Compiler, RTL Compiler SynplifyPro, QuartusⅡ, ISE など ) HDL シミュレーション 検証 論理合成 配置配線 ASIC FPGA 9
HDL Coder モデルの作成対応するエントリ Simulink データパス系システム全体 ブロック生成 Stateflow ステートマシンコントロールロジック MATLAB データパスコントロールロジック MATLAB HDL 生成 HDL 生成 10
固定小数点データ型設定設定内容は生成 HDL に反映 Product( 乗算 ) ブロックの設定画面 丸め設定オーバーフロー処理 Inherit( 継承 ) double, single, int8, 16, 32 fixdt( 任意ビット幅 ) 11
HDL ブロックプロパティ / コードプロパティ モデルから多様な HDL 生成するためのパラメータ Area/Speed に影響 多入力時の構造 入出力パイプラインレベル BlackBox 化 パイプライン挿入 階層フラット化 リソースシェア フィルタの回路アークテクチャ (Distributed Arithmetic, Parallel, Serial) 12
コード生成レポートで得られる情報 リソース数 ( 乗算 加算 レジスタ RAM など ) HDL プロパティによる最適化結果 モデル HDL 双方向対応表 VHDL/Verilog (HTML 形式で表示 ) モデル上の名前を継承 ( ポート 信号線 process) 双方向リンク対応箇所をハイライト表示 VHDL/Verilog (HTML 形式で表示 ) モデルの表示 13
MATLAB コードから HDL 生成 アルゴリズムとテストベンチを作成 GUI 起動 自動固定小数点化 ( テストベンチ基準 ) 最適化機能 RAM Mapping Distributed Pipelining Resource Sharing Loop Unrolling HDL プロパティ設定 ( 最適化 スタイル ) HDL/MATLAB Function ブロック生成 HDL シミュレーション 検証 14
HDL 協調シミュレーションと FPGA-in-the-Loop HDL Verifier 提供機能 MATLAB と Simulink を HDL や FPGA のテスト環境として利用 生成 / 手書き HDL の検証 豊富な信号生成 可視化解析機能を利用 データ通信 TCP/IP, Shared Mem 信号パターン制御入力期待値可視化 解析プラントモデルアナログ回路 Simulink TCP/IP HDL Simulator MATLAB FPGA Board 15
HDL ワークフローアドバイザ 提供するワークフロー FPGA-in-the-Loop Turnkey Generic FPGA 包含する機能 FPGA プロジェクト生成 HDL チェック 生成 検証 論理合成 配置配線 (FPGA ベンダツール連携 ) バックアノテーション 16
アジェンダ HDL プロダクツ概要と採用実績 HDL 生成と検証のための基本機能 より高度な使い方設定による回路パフォーマンスの違い HDL と FPGA のテスト検証 17
よくある質問 HDL Coderで生成した回路のパフォーマンスは? (Area/Speed) 使用するブロック モデルの書き方 / 設定に 依存します 18
同じ処理でも表現の抽象度を選択可能例 :FIR/IIR フィルタの実装に使用できるブロック Simulink 基本ブロックを使用 FDATool, FilterBuilder からモデル生成可能 Delay(FF) Gain( 乗算 ) Add( 加算 ) 要素ブロックで構成 既存の構造にない柔軟なカスタマイズが可能 修正が面倒 ( 個別のブロックを修正 ) だがライブラリ化 ( マスクブロック化 ) することも可能 19
同じ処理でも表現の抽象度を選択可能例 :FIR/IIR フィルタの実装に使用できるブロック Tapped Delay とベクタ演算で Gain/Product を使用 シフトレジスタ ( ベクタ出力 ) 乗算 ( ベクタ同士の要素ごとの演算 ) 修正が比較的容易 可読性高い 構造変更出来ない ベクタデータの総和 20
同じ処理でも表現の抽象度を選択可能例 :FIR/IIR フィルタの実装に使用できるブロック DSP System Toolbox の Digital/FIR/Biquad Filter を使用 FDATool, FilterBuilder からモデル生成可能 抽象度が高く パラメータ 構造の修正容易 Distributed Arithmetic やシリアル化など豊富な実現構造を選択可 21
回路面積 : 固定小数点設定による影響 使用ブロック :Discrete FIR Filter 入力ビット幅 :[8, 12, 16, 18, 22, 26] に変更 Logic Element DSP Fmax 自動生成 ~MATLAB でグラフ化 入出力ビット幅の増加に伴い LE 数増加 Fmax 低下 FIR symmetric 24 tap Device: Cyclone IV EP4CE115F29C7 22
設定の最適化を行う固定小数点ツール GUI Simulink Fixed Point 提供機能 一時的にデータ型変更 ( 浮動小数点 ) に設定理想状態を確認 一覧を表示 : ブロック 固定小数点設定 シミュレーション Min/Max オーバーフロー警告 オーバーフロー警告 最適化の方法 安全マージン 23
固定小数点ツール実行前後の回路面積比較 ツール実行の効果オーバーフローの解消と冗長ビットが削減されることで回路面積 (LE 数 ) が 5987 5612 に縮小 (6.3% 削減 ) 左 : 実行前 右 : 実行後 24
ブロックによる生成コードの違い : Sin/Cos Simulink/ Math Operations/ Trigonometric Function CORDIC アルゴリズム使用ビット幅だけでなく 繰り返し回数 設定で精度が変化 Simulink/ Lookup Tables/ 1-D Lookup Table 1 周期分フルに LUT を使用入力 出力の Table を自分で定義 Simulink/ Lookup Tables/ Sine DSP System Toolbox/ Signal Operations/ NCO(Numeric Controlled Oscillator) 1/4 波長の Table データの符号と向きを切り替えて使用 マスクサブシステム内の設定を変更して使用する必要あるので注意 本来は信号生成用に使用する 設定により SIN/COS 計算が可能 1/4 波長 LUT を使用現在さらにパフォーマンス UP に向けて 開発継続中 25
各 Sin 計算ブロックの回路パフォーマンス 8bit 入出力 12bit 入出力 Logic Element DSP Fmax 左から Trigonometric, 1-D LUT, Sine, NCO CORDIC(Trigonometric) は速度 面積共にバランス良 1-D Lookup Table はビット幅によって大きく異なる Device: Cyclone IV EP4CE115F29C7 26
回路面積 ( 演算器の使用個数 ) の低減 HDL ブロックプロパティ :Sharing 複数の乗算器やサブシステムの処理を 時分割で共有して計算 回路面積の低減 3 1 6 7 2 8 4 5 9 9 4 5 7 4 8 2 パラレル化 6 1 3 6 8 24 35 36 4 シリアル化 27
パイプライン自動挿入によるクロック速度の向上 HDL ブロックプロパティ :Distributed Pipelining 設定画面 Pipeline が自動挿入 複数パス間のタイミング調整用レジスタ Pipeline レジスタ 28
リソースシェアリング ( 左 ) とパイプライン挿入 ( 右 ) の結果 Logic Element DSP Fmax 左から SharingFactor = [0, 3, 6, 12] 左から OutputPipeline = [0, 4, 8, 12, 16] Sharing:DSP 使用個数を低減 OutputPipeline の効果はあるレベルで飽和 29
HDL 生成 + 論理合成 + パフォーマンス評価の自動化 プログラミングで自動化とカスタマイズを行い 様々なパターンでコード生成を行った For ループ for ループによるパラメータ変更 論理合成スクリプトの設定 ( デバイス ) HDL 生成 >>makehdl システムコマンドによる合成ツール実行 合成レポートファイルからデータ収集 30
HDL 生成 + 論理合成 + パフォーマンス評価の自動化 プログラミングで自動化とカスタマイズを行い 様々なパターンでコード生成を行った For ループ for ループによるパラメータ変更 論理合成スクリプトの設定 ( デバイス ) HDL 生成 >>makehdl システムコマンドによる合成ツール実行 合成レポートファイルからデータ収集 31
HDL 生成 + 論理合成 + パフォーマンス評価の自動化 プログラミングで自動化とカスタマイズを行い 様々なパターンでコード生成を行った For ループ for ループによるパラメータ変更 論理合成スクリプトの設定 ( デバイス ) HDL 生成 >>makehdl システムコマンドによる合成ツールの実行 合成レポートファイルからデータ収集 32
HDL 生成 + 論理合成 + パフォーマンス評価の自動化 プログラミングで自動化とカスタマイズを行い 様々なパターンでコード生成を行った For ループ for ループによるパラメータ変更 論理合成スクリプトの設定 ( デバイス ) HDL 生成 >>makehdl システムコマンドによる合成ツール実行 合成レポートファイルからデータ収集 33
HDL 生成 + 論理合成自動化に役立つコマンド コマンド説明例 makehdl get_param set_param hdlget_param hdlset_param fixdt regexp HDL 生成 Simulink ブロックプロパティの取得 Simulink ブロックプロパティの設定 HDL ブロックプロパティの取得 HDL ブロックプロパティの設定 固定小数点データ型設定 正規表現文字列の検索 makehdl(modelname, 'TargetDirectory', dir, 'EDAScriptGeneration','on', 'HDLSynthTool','Quartus', 'HDLSynthInit',SynthScript) get_param(gcb, Gain') set_param(gcb, Gain, 15 ) hdlget_param(gcb, SharingFactor ) hdlget_param(gcb, all ) % 全て取得 hdlset_param(gcb, SharingFactor,4) dtinput = fixdt(1, 16, 14); % 符号付き 16bit 小数部 14bit regexp(textdata,';+ s+[ d, d]+ s', 'match','warnings') % s スペース, d 数値の文字列検索 dos/system システムコマンド実行 dos( quartus_sh t tclfilename ) 34
アジェンダ HDL プロダクツ概要と採用実績 HDL 生成と検証のための基本機能 より高度な使い方設定による回路パフォーマンスの違い HDL と FPGA のテスト検証 35
可視化 解析環境としての MATLAB を利用したデバッグ 数値演算 解析 可視化のプログラミング関数を豊富に提供 ユーザがプログラミングする手間と時間を削減 制御系の各種応答 周波数スペクトル 画像 3D 表示 フィルタ設計 解析 36
デザインのテストベンチとしての Simulink Simulink 基本機能 連続 離散のソルバ ( アナログ デジタル ) 各ドメインを数式化してモデリング ( アナログ デジタル回路 メカ 油圧など ) 時間軸シミュレーション オプション製品 信号処理 通信 画像処理 制御などアプリケーションに特化したブロック 物理モデリングに対応したブロック : 電気回路 RF 特性 (S-Parameter) モーター バッテリー メカ 油圧など 37
HDL シミュレータとの連携テスト HDL Verifier 機能 手書き HDL の場合 HDL シミュレータとのインターフェースを生成 Simulink ブロックまたは MATLAB コード >> cosimwizard HDL Coder で自動生成 協調シミュレーションモデルを自動生成 GUI またはコマンド >> makehdltb(gcb) 38
FPGA ボードとの連携テスト (HDL Verifier 機能 ) FPGA-in-the-Loop Simulation(FIL) 手書き HDL の場合 FPGA ボードとのインターフェースブロックを生成 Simulink ブロックまたは MATLAB コード >> filwizard HDL Coder で自動生成 HDL ワークフローアドバイザで FPGA-in-the-Loop を選択 FIL モデルが自動生成 汎用開発ボードとカスタムボードに対応 Xilinx:ML401/2/3, ML505/6/7, ML605, SP601/5, XUP Atlys Spartan-6, XUPV5-LX110T Altera:ArriaII GX, Cyclone III, IV GX, DE2-115, NIOS II EEK カスタムボード登録ウィザード >>fpgaboardmanager 39
ユーザ導入効果とシミュレーション高速化 FPGA-in-the-Loop Simulation(FIL) ユーザ効果 Simulink 従来検証方法 ( 論理合成後ゲートレベル ) FIL 時間 60 分 200 時間以上 4 分 30 秒 13 倍 2000 倍 テストボード :ML605 適用回路 : 無線デジタル信号処理回路論理規模 :FF:25,000, LUT:20,000, 36KBRAM:150, DSP48E1:130 FIL 高速化のポイント 期待値との照合は To File ブロックを使用 (Simulink モデルと照合しない ) フレームベース信号の利用 (DSP System Toolbox 機能 ) アクセラレータの使用 40
まとめ HDL 生成によりデザインの設計期間が短縮 使用ブロックや HDL プロパティ設定により様々なパターンで HDL 生成可能 HDL Coder の回路パフォーマンスはモデル次第 MATLAB プログラムにより HDL 生成や論理合成の作業を自動化 HDL や FPGA の検証環境として MATLAB/Simulink の可視化 解析機能を利用 41
お問合せ先 お問い合わせ先 email : service@mathworks.co.jp TEL : 03-6367-6700 この資料に関する技術的なご質問 デモプログラムのお問い合わせ先 MathWorks アプリケーションエンジニアリング部松本充史 email : atsushi.matsumoto@mathworks.co.jp 42