systemcを用いた チップ設計および検証事例 · 2016-07-03 ·...
TRANSCRIPT
1第第44回回SystemCSystemCフォーラムフォーラム Copyright, 2004 © Fujitsu Network Technologies Limited
SystemCを用いた
チップ設計および検証事例
由利英介富士通ネットワークテクノロジーズ(株)
2Copyright, 2004 © Fujitsu Network Technologies Limited
第1部 設計編
目的:音声認識および信号処理SWアルゴリズムをHW化結果:開発期間を1/3短縮し、期限内にHW化を達成した。・開発言語 :SystemC(100%)使用・動作合成 :SystemC Compiler™ ※1(ver2002.05-SP1)・シミュレータ :Incisive™※2 (ver5.0-s001)
※1 Synopsys社 ※2 CADENCE社 Incisive Unified SimulatorTM
第1章 SystemC導入
第2章 開発フロー
第3章 適用事例
第4章 設計編のまとめ
3Copyright, 2004 © Fujitsu Network Technologies Limited
第1章 SystemC導入
動機顧客からの要求
顧客のもつ音声認識SWを100%HW化して欲しい。
タイトなスケジュール(ボード、FW、ボード制御SW、FPGAを
動作合成ツール
Synopsys社 SystemC CompilerTMの使用方法について、
社内の信号処理アプリケーションで実験済
VHDL-SystemCの混在シミュレーション
CADENCE社 Incisive Unified Simulator™の導入
新技術への挑戦
設計手法 :短期間開発を目指してより上流へ
ビジネス面:信号処理のHW化サービス
機は熟した
4Copyright, 2004 © Fujitsu Network Technologies Limited
効果
抽象度と言語の大きなギャップにより再利用は困難
精度検討Cモデル
RTLモデル設計 検証
精度検討概念+機能モデル
動作モデル設計
検証
機能モデルを再利用しながら、動作合成ツールでRTLを生成
RTLに比べて高速なシミュレーションが可能
約1/3短縮
従来の開発フロー
(6ヶ月)
今回の開発フロー(4ヶ月)
C/C++言語 HDL
C/C++/SystemC
5Copyright, 2004 © Fujitsu Network Technologies Limited
概念モデル
期待値照合アーキテクチャ設計• 並列性の抽出• I/Fはsc_fifoチャネル
動作合成可能なモデル• クロック・リセット実装• 通信部の詳細化• メモリ・マッピング
動作/論理合成
RTL(HDL)
Incisive™• 通信プロトコルの検証
• SystemC Compiler™• FPGA CompilerII™
Net list
メモリ lib.
実機評価
機能モデル
動作モデル
構造解析• 実行順序の把握• 共有変数の明確化
期待値照合
期待値照合
SystemC/C++SystemC/C++
設計フェーズ設計フェーズ
合成フェーズ合成フェーズ
検証フェーズ検証フェーズ
顧客/自社ソース・コード
第2章 開発フロー
FPGA/ASICfitting/layout
6Copyright, 2004 © Fujitsu Network Technologies Limited
抽象度の定義
概念モデル時間の概念のないモデル。処理は逐次的に実行される。
精度検討(ビット幅の決定)を行う。
機能モデル各機能(関数)から並列性を抽出し、モジュールとして統合・分割する。
データ通信はsc_fifoを使用する。
動作モデルインタフェース部分はsc_signalであり、クロックサイクルで動作する。
2種類の記述方法
RTL記述の場合は内部もサイクル精度で記述(レジスタ、FSM)
ビヘイビア記述の場合はアルゴリズムを記述(データ処理や演算部)
#動作合成ツールの記述スタイルに合わせる。
7Copyright, 2004 © Fujitsu Network Technologies Limited
リファインメント顧客のソース・コード(顧客のソース・コード(C++C++)) 機能モデル(機能モデル(SystemCSystemC))
モジュール1 モジュール2
関数A()
関数B()
変数1
Class A
関数A(変数1)ローカル変数2
関数B(変数1)
変数1関数
概念モデル(概念モデル(CC))
プロセスA()
変数1
プロセスB()
プロセスC()
変数1
プロセスA()
変数1
モジュール1
動作モデル(動作モデル(SystemC)SystemC)
プロセスB()
プロセスC()
変数1
モジュール2
sc_fifo(T) ポート
CLK,RESET
変数2変数1は関数A、Bがアクセスする。変数2は関数Aだけがアクセスする。
変数2
変数2
関数
A objA ;
sc_signal(T)
合成可能
リファインメント
リファインメント
8Copyright, 2004 © Fujitsu Network Technologies Limited
SystemC-HDLの混在検証
SystemC:DUV
SystemC:TB
clk
SystemC:sc_top
SystemC: sc_main
SystemC:TB
clk
SystemC: sc_top
VHDL
合成後
シェルを被せる
IncisiveIncisive™™使用時使用時Reference SimulatorReference Simulator使用時使用時
1.sc_mainをはずす2.ncshellコマンドでシェルを生成3.シェルのポートの型をトップに合わせる4.top.hにシェルのヘッダをinclude
1.top(例:sc_top)階層を作成する2.クロックもtopで定義する3.sc_mainはtopをインスタンスするだけ
※ver5.1ではsc_mainをはずす必要はない。
9Copyright, 2004 © Fujitsu Network Technologies Limited
第3章 適用事例
事例1:音声認識ソフトウェアのHW化
事例2:難聴者に向けた音声強調アルゴリズムのHW化
第1章 SystemC導入の動機
第2章 開発フロー
第3章 適用事例
第4章 設計編のまとめ
10Copyright, 2004 © Fujitsu Network Technologies Limited
事例1:音声認識ソフトウェアのHW化
■■ AmiVoiceAmiVoice DSR DSR ※※のハードウェア化のハードウェア化※株式会社アドバンスト・メディア様の分散型音声認識ソフトウェア
特徴・人の音声をサーバ、クライアント双方で分割し、 認識・処理します。・クライアント側で入力した音声の特徴データを30分の1まで 圧縮し、サーバ側に送信します。・サーバ側だけで認識・処理する一般の方式に比べて、高品質な音声で、 多彩な音声認識 サービスを実現できます。
クライアント(音声入力機器)認識結果
実装されるデバイスを100%SystemCを使用しハードウェア化しました。
圧縮データ
サーバ 評価ボード
11Copyright, 2004 © Fujitsu Network Technologies Limited
事例2:難聴者に向けた音声強調アルゴリズムのHW化
出力フィルタバンク
振幅圧縮
FFT
音声
騒音 増幅率算出
音環境
解析処理
周波数解析
補聴処理
パラメータ調整
入力 出力
■■産官学連携プロジェクト産官学連携プロジェクト※※
※ 富士通ネットワークテクノロジ-ズ(株) および福岡県、九州大学にて共同開発
アルゴリズム1アルゴリズム1
アルゴリズム2アルゴリズム2
社会の高齢化によって、難聴者の数が増加し、難聴に対する補聴技術が必要になります。このプロジェクトでは音響機器等に組込む補聴専用LSIの開発を目指しています。SystemCを用いることによって、これまでにC言語ベースで研究開発されたアルゴリズムを短期間でハードウエア化することに成功しました。
SystemCでハードウェア化したものをFPGAに実装し、ボード上でアルゴリズムを切り替えて評価します。
12Copyright, 2004 © Fujitsu Network Technologies Limited
第4章 設計編のまとめ抽象度の定義とリファインメント
リファインメントを繰返すことで、比較的安全に下位モデルへブレイクダウンできる。
同じ言語で最初から最後まで
概念モデルから動作モデルまで同じ言語でシームレスに行える。
アルゴリズムを下位のモデルで再利用可能
動作合成ツールの導入
RTLよりも動作レベル記述の方がはるかに簡単→記述量が約1/10設計者談「RTLで設計していたら、スケジュールに間に合わなかっただろう」
シミュレーション速度が速い
RTLより上位レベルのデバッグで効果あり (動作モデル40s vs. RTL1h )SystemC-HDL混在シミュレータの導入
テストベンチの再利用により検証期間を約1/3短縮
動作合成後のRTLのシミュレーションは必須(動作合成の手続きミス3件発見)
13Copyright, 2004 © Fujitsu Network Technologies Limited
SystemC Compiler™について
使用した感想アルゴリズミックな処理(演算が沢山あるアプリ)の合成に向いている。
製品にも十分使える。
パケット処理など通信系のデータパスだと?
RTLで記述すべきところはRTLで記述する。(CPU-I/F、FSM、S/P etc)
改善要求(Synopsysさんへ)
極稀に合成前後で論理が一致しないことがある。
memwrapやBCViewをなくさないで!
動作合成後のRTLモデルが構造記述に近い→RTLらしく出して欲しい。
インタフェース合成(ex sc_fifoからsc_signalのハンドシェーク実装など)
SystemC Compiler™は使えるツールです。
SystemCにもっと力を入れてください!!! m(_ _)m
14Copyright, 2004 © Fujitsu Network Technologies Limited
第2部 検証編
目的:チップの信頼性向上結果:SCV※のランダマイゼーション機能を用いることで、
検証項目を10件追加し、信頼性を向上させることができた。・検証言語 :HDLとSystemCおよびSCV混在・シミュレータ :IncisiveTM(ver5.0-s007)
※SystemC Verification library (SystemC検証ライブラリ)
第1章 SCV導入
第2章 適用事例
第3章 検証編のまとめ
15Copyright, 2004 © Fujitsu Network Technologies Limited
第1章 SCV導入
動機設計チームからの要求
SystemCを使いたいが、DUV(VHDL/VerilogのRTL)は既にある。
テストベンチで使用したい。
SCVで何をやるか/何ができるか
ランダマイズ機能により様々なデータを発生→ コーナーケース検証
トランザクション・レコーディング機能によりデバッグを視覚的に容易化
Incisive Unified Simulator™の導入
SystemC+HDL +SCVの混在シミュレーションが可能
新技術への挑戦
SCV体験(当時はβ版を使用、03'12/5 SCV1.0正式リリース)
トランザクション・レベル検証
機は熟した
16Copyright, 2004 © Fujitsu Network Technologies Limited
第2章 適用事例
事例1:メディアデータ処理チップの検証
事例2:IPパケット処理チップの検証
第1章 SCV導入
第2章 適用事例
第3章 検証編のまとめ
17Copyright, 2004 © Fujitsu Network Technologies Limited
事例1メディアデータ処理チップの検証
■■ SystemCSystemC((Test bench) Test bench) ににVerilog(DUV) Verilog(DUV) をインスタンスをインスタンスSystemCトランザクタ
SystemCモジュールシグナルトランザクション TR
Shell
ShellDUV(HDL)
CLK1
テストベンチテストベンチ((SystemC)SystemC)
CPU
CPUシナリオ1.DMA 起動レジスタ設定2.終了割込み検出3.ステータスレジスタ確認4.データチェック5.Sim停止
TR TR RAM (A)
TR RAM (B)
TR RAM (C)SC Shell
CLK2
CLK1CLK1
REQ
ACK ランダム
DMA①
DMA②
18Copyright, 2004 © Fujitsu Network Technologies Limited
トランザクション・レベル検証CPUモジュール
port.write(0x1234,0xFFFF)data = port.read(0x1234)
記録したトランザクションをグラフィカルにチェック可能可視性・デバッグ性が向上
トランザクタ
トランザクション・レコーディング
信号トランザクション
DUV
19Copyright, 2004 © Fujitsu Network Technologies Limited
DMAランダム起動
【CPU】 DMA起動タスク ×8(ランダムに起動)
write()
転送元アドレス設定
write()
転送先アドレス設定
転送サイズ設定 ステータス確認
DMA起動 ステータスクリア
write() write()IRQ監視
read() write()
設定1 設定2
設定1 設定2
タスク間にも、ランダムにインターバルを設定【DUV】
DMA転送0
DMA転送1
複数のDMA転送が並列実行される
DMA転送7 設定1
20Copyright, 2004 © Fujitsu Network Technologies Limited
事例2 IPパケット処理チップの検証■■ VHDLVHDLににSystemCSystemC(フレーム発生器)(フレーム発生器) をインスタンスをインスタンス
SystemCトランザクタ
SystemCモジュールシグナルトランザクション TR
Shell
DUV+
テスト部品(VHDL)
テストベンチ(テストベンチ(VHDL)VHDL)
フレーム発生器1
フレーム・データをランダム生成
CLK2CLK1
タイプ別のフォーマットに変換信号レベル(8ビット)へ変換ランダム生成 フレーム間ギャップ エラー発生
TR1フレーム発生器2TR2
VHDL SHELL VHDL SHELL
21Copyright, 2004 © Fujitsu Network Technologies Limited
フレーム・データのランダマイズ
フレーム・タイプ4種に対する重み付け(20,20,20,40)
送信/FCS/HCSエラー確率(1/1000)
フレーム間ギャップ範囲(1~150CLK)
データヘッダ
可変長ランダムアドレスに制約あり
可変長ランダム制約なし
フレーム・タイプ4種
ランダム発生ヘッダ データ
タイプ1 タイプ2 タイプ4 タイプ3タイプ4
22Copyright, 2004 © Fujitsu Network Technologies Limited
第3章 検証編のまとめランダマイゼーション機能
HDLでは困難なテストデータを比較的簡単に作成可能
DUVの信頼性、検証に対する網羅性が向上(コーナーケース検証)
SCVトランザクション・レベル検証
データ発生部分の再利用性が向上
DUVの抽象度に対応したテストベンチを作成可能
SystemCトランザクション・レコーディング
デバッグの容易性
結果の視認性を向上
SCV、Incisive Unified Simulator™
23Copyright, 2004 © Fujitsu Network Technologies Limited
SCVおよびIncisive™について
データのランダマイズ
β版だが安定している。(現在は正式版がSCV1.0がリリースされている)
トランザクション・レコーディング
結果は見易くなるが、記述が難しい。
ドキュメント、サンプルの作成依頼済み
C++について
C++の知識が必須(クラス、継承、テンプレートなど)
コンパイル時間
SCVを使用するとg++でのコンパイル時間が長くなる。
IncisiveTMだとg++より更に2割ほど長くなる。
HDLのコンパイル並みに速くして欲しい→改善要求済み
Incisive Unified Simulator™は使えるツールです。
もっと高速に、そしてデバッグ環境をさらに改善してください!!! m(_ _)m