部署名
第一要素技術事業部 ロジックIP開発部
ルネサス
システムデザイン株式会社
氏名
神谷
衛
2013/10/29
画像処理回路の
ASIC実装へ向けた、
HDL Coder適用事例
~手書き
HDLコード vs コード生成ツール~
Agenda
会社紹介
画像コア開発の課題
過去の試行状況
HDL Coderの試行
HDL Coderの適用
会社紹介
商号
: ルネサス システムデザイン株式会社
(2013年10月ルネサス マイクロシステムとルネサス デザインが事業統合)
設立
: 1980年5月
1980年 日本電気アイシーマイコンシステム
設立
2001年 NECマイクロシステム
社名変更
2010年 ルネサス マイクロシステム
社名変更
2013年 ルネサス システムデザイン
社名変更
従業員数
: 1300名 [ 2013年10月1日現在 ]
事業内容
:
マイコン開発・設計
システム
LSI開発・設計
IP/アナログ/メモリ コア開発・設計
ASIC開発・設計
基盤技術開発・設計
マイコン
/システムLSI用 環境開発・設計 など
拠点
本社
: 神奈川県横浜市神奈川区
北伊丹事業所
: 兵庫県伊丹市
玉川事業所
: 神奈川県川崎市中原区
武蔵事業所
: 東京都小平市
高崎事業所
: 群馬県高崎市
最終的な絵は誰もわからない。
顧客の画像コアとの組み合わせるとどうなるのか
?
画像コア単独で主観評価できない。
顧客画像コアのアルゴリズムは教えて頂けない。
顧客の最終画像評価をアルゴリズムへフィードバックできない。
アルゴリズムから動画評価までの開発期間が非常に長い。
(数ヶ月)
チューニング
or 特定条件へのパッチ当て による改善が精一杯。
画像コア開発の課題
?
従来
技術
顧客
画像処理
(前処理)
新
アイデア
顧客
画像処理
(後処理)
仕様
C
(ビット精度)C
HDL
生成
動画
評価
数ヶ月
顧客主観評価を
即座にフィードバックできる環境構築
が必要
HDL Coderの試行
出会い
Simulink HDL Coder 無料セミナ受講
: 2011年9月
Simulink HDL Coder 無料ワークショップ受講 : 2012年2月
試行
2012年5月から評価ライセンスで試行開始
画像処理コアを対象
– 手書きCモデルと検証済みHDLが既に存在。
– 作業担当者は、SimulinkもVerilogもVHDLも知らない。
– 仕様書のみ参照。
手順
1. システム仕様書をベースに Simulink に手変換
2. Simulink化はあくまでアルゴリズム開発の手順に沿うように記述
3. 整数化・固定小数点化を実施
4. 手書きHDLとのSIM比較を Co-Sim で比較
5. HDLコーダからの出力結果との Co-Sim で比較
6. FPGA環境で実動作で比較 (弊社自作ボード)
従来設計手法との比較
現状 : 動画確認でNGは致命的
今後 : アルゴリズムを動画で即確認可能
アイデア MATLAB M言語 確認 完全一致 ボードHDL
静止画
リアルタイム
顧客再生機器
顧客表示機器
顧客
判断
容易に 戻れない NG アイデア ブラッシュアップ C C : ビット精度無
手作業 ハードル高い 確認 不一致 C C : ビット精度有
手作業 ハードル高いHDL
HDL SIM 手作業 ハードル高い 確認 完全一致ROM
チューニング アイデア MATLAB M言語 ボードHDL
顧客再生機器
顧客表示機器
顧客
判断
NG アイデア ブラッシュアップHDL
HDL自動生成
ROM
M言語 ビット精度有
自動生成制約条件
C組み込みソフト
手作業 ハードル高い C組み込みソフト
ビット精度
ブラッシュアップ
壁
アイデアまで簡単に戻れる ビット精度無
MATLAB/Simulink HDL Coderによる開発フロー
理想的な開発フロー
現実的な開発フロー
アルゴリズム開発に使用したモデルからそのまま
HDL生成
SimulinkモデルとHDL Coderで生成されたHDLは等価
自由に設計したモデルから生成したHDLは回路規模(大)・動作周波数(低)
論理合成向けの
HDLを生成するためにはモデルの最適化が必須
モデルと
HDLの等価性は保証されていない
HDLシミュレーションによる検証が必要
仕様作成
(Simulinkモデル)
固定小数点化
(ビット精度有り)
(HDL Coder)
HDL自動生成
論理
合成
プロト
タイプ
Simulink
モデル最適化
HDL
SIM
仕様作成
(Simulinkモデル)
固定小数点化
(ビット精度有り)
(HDL Coder)
HDL自動生成
論理
合成
プロト
タイプ
期待
実際
仕様作成
(Simulinkモデル)(1)
紙仕様書からSimulinkモデルを作成
実行可能な仕様書
仕様の定義漏れの洗い出しが可能
手戻り防止
紙仕様書
Simulinkモデル
仕様作成
(Simulinkモデル)(2)
MATLAB Functionブロックを用いてM言語による記述が可能
高抽象度でモデルを作成
シミュレーション&HDL生成可能(記述の仕方によっては制限有り)
固定小数点化
(ビット精度有り)(1)
固定小数点アドバイザー機能
浮動小数点モデルを固定小数点化する準備を対話形式で可能
固定小数点ツール機能
シミュレーション結果からのオートスケーリングが可能
オーバーフロー、アンダーフロー、桁落ちを検出可能
ビット精度はテストベクタ
(入力)に依存
既存ブロックとの接続で事前にビット精度制約は手入力で設定も可能
範囲指定の派生によるスケーリングが可能
固定小数点化
(ビット精度有り)(2)
抽象度の高い浮動小数点モデルと、固定小数点モデルを比較しながら
ビット精度を詰めることができる
画像への影響を即座に判断できるため、作業効率が高い
浮動小数点モデル
固定小数点モデル
HDL自動生成(HDL Coder)(1)
HDLコードの生成には3種類の手段がある。
1.
MATLABコマンド
予め設定したパラメータの組み合わせでコード生成するスクリプト用
2.
GUIによる設定と生成の実行
コンフィギュレーションパラメータを
Cut&Try
HDL自動生成(HDL Coder)(2)
3.
HDLワークフローアドバイザーの使用
Simulinkモデルの設定確認
HDLコード生成
ISE(Xilinx社) と Quartus II(Altera社)プロジェクト生成
論理合成、クリティカルパスのバックアノテーション
といった一連の作業をガイドフローに従い作業。
HDL自動生成(HDL Coder)(3)
パイプラインステージやリソース共有オプションを指定することで、共通のモ
デルから異なるHDLを生成できる
最初はパイプラインを意識せずに設計し、後からパイプラインを挿入す
るといった手法が可能。
OutputPipelineを指示したブロック
自動的にパイプラインが挿入される
HDLブロックプロパティ
HDL自動生成(HDL Coder)(4)
コード生成レポートが自動生成される
自動生成された
HDLコードとSimulinkモデルがリンクしており、コードと
Simulinkブロックの対応が一目瞭然
コード生成
結果サマリ
Simulink
モデル
HDL
コード
モデルエクスプローラ
HDL
一覧
Web表示レポート
人が理解できる
HDL協調シミュレーション
MATLABが生成するテストベンチ上でHDL協調シミュレーション可能
Incisive(Cadence社)、ModelSim(Mentor社)へ対応
テストベンチはSimulinkモデルから自動生成
ユーザーはSimulink用のテストベクタをそのまま実行できる
Incisive
テストベンチ
論理合成
FPGA向けの合成スクリプトはツールが自動生成
ISE(Xilinx社)とQuartus II(Altera社)に対応。
自動生成された
HDLに手を加えることなく合成完了。
ASIC向け合成もエラーなく完了
HDLチェック(SpyGlass)ではエラーを検出
ビット幅が明確に指示されていない箇所があった。
(R2012a)
今後も随時
STARCルールへ準拠とのこと。
--- Results Summary: --- Command-line read : 0 error, 0 warning, 0 information messageDesign Read : 0 error, 60 warnings, 2 information messages Found 1 top module:
AAA_hdl (file: ../HDL/AAA_hdl.v)
Blackbox Resolution: 0 error, 0 warning, 0 information message SGDC Checks : 0 error, 0 warning, 0 information message Policy starc2002 : 0 error, 896 warnings, 0 information message ** Policy lint : 2 errors, 0 warning, 0 information message Policy clock-reset : 0 error, 0 warning, 1 information message --- Total : 2 errors, 956 warnings, 3 information messages Total Number of Generated Messages : 961 (2 errors, 956 warnings, 3 Infos) Number of Reported Messages : 961 (2 errors, 956 warnings, 3 Infos) ---
Simulinkモデル最適化
MATLAB Functionブロックを利用すれば高い抽象度でモデルを記述する
ことが可能だが、論理合成向けのHDL生成には不向きな場合が多い。
パイプライン挿入のコントロールに制約がある
生成された
HDLコードが複雑で可読性が低い
Simulink標準ブロックで記述すれば、手書きHDLに近くなる。
ただし、抽象度が下がるため記述の手間はかかる
MATLAB Functionブロック
を用いて記述したモデル
Simulinkの標準ブロックを
用いて記述したモデル
動作周波数が低い
回路規模増大
MATLAB/Simulink HDL Coder 生成の経緯
仕様作成
(Simulinkモデル) Simulink モデル最適化 固定小数点化 (ビット精度有り) HDL自動生成 (HDL Coder) HDL SIM 論理合成 (FPGA向け) プロトタイプ FPGA評価ボード 紙仕様書 Simulink モデル作成 HDL生成対応 ブロックに置換 回路規模縮小 最適化 bit幅詰め (手設定) 動作周波数 75MHz目標 最適化 パイプライン 挿入 127.49MHz 175KGate 1920x1080 @30Hz 686KGate 2.81MHz 未対応ブロック 判明 固定小数点化 (自動) リソース共有 オプション 1MGate 2.49MHz 278KGate 16.59MHz リソース共有 無効 222KGate 76.29MHz リソース共有 すると間欠動 作になること が判明 800x600 @75Hz リソース共有 一部無効& パイプライン 挿入 80KGate 52.96MHz リソース共有 オプション& パイプライン 挿入 bit幅詰め (手設定)