Chapter 5. Describing a FIR Filter 5.3後半~5.6 6311682 渡辺 隆弘
Use the full power of C and C++ for test benches テストベンチ設計におけるANSI Cの利点 C++とMinGW,MicrosoftMFC,ATL,SystemCを含む多くのライブラリを用いることが可能 大きく、複雑なテストベンチを作ることが出来る ※ ANSI C:ANSI(米国規格協会)によって1989年に標準化されたC言語の規格 テストベンチ:ある設計が正確・妥当であるかどうかを検証するための仮想的環境 ANSI Cを使ったテストベンチ設計において留意すること co_initialize(初期化)機能の保持 設定サブルーチン、ハードウェアプロセス、ソフトウェアプロセスの存在 ANCI Cにおける構文制限 (※impulse Cハードウェアコンパイラによって分析するべき部分の識別のため)
The producer and consumer processes 前章で扱った例(HelloFPGA)との相違点 テストデータをファイルから読込み,結果をファイルに出力する ※データ入力:coef.dat waveform.dat データ出力:results.dat 入出力を伴うファイル処理によって,予め用意された既知セット(他の出力結果)と 出力された値での比較を直接行うことが可能. ※今回の例では簡単化の為,1セットのファイルから入力値を読み込み,またフィルタリング結果 を出力ファイルに書き込む最小限のテストベンチについて扱う. (waveform_filteredと定義) (waveform_rawと定義) 図:FIR filter test bench block diagram
The producer Process 目標 FIRフィルタ係数と被フィルタリングデータを外部ファイルから読み込み, ハードウェアプロセスに入力波形として渡す. FIRフィルタリングで用いる計算式 入力データf[m],出力データg[m],フィルタ係数h[k] 入力ファイル宣言にはサンプル係数と入力波形の値を含む これは他の試験ソフトや特定の機器によって抽出されたデータでもよく, このファイル値は10進数形式で容易にフォーマットが可能 cosim_logwindow_create…ログウィンドウの生成 示された名前とローカルポイント(cosim_logwindow型)に関連付け付けされる
C言語のfopen関数を呼び,続く反復ループによってcoef.datファイルから係数値を読む これらの値はco_stream_writeを用いてフィルタの入力ストリーム(生産プロセス中では waveform_rawと定義)に書かれる cosim_logwindow_fwrite…既存ログウィンドウへの書き込み 書き込む内容はフォーマット済みのテキストメッセージであり,fprint関数で利用可能な形 式と同様 フィルタ係数はファイルから読まれ,ストリームに渡される この段階で入力ファイルは閉じられるが,ストリームは次ステップの為に開かれたままと なる 入力データが残っている限り,Producerループを繰り返し,特定フォーマットで, フィルタへ波形データをwaveform_rawデータストリーム経由で出力し続ける
The producer Process(流れ図) :フィルタ係数関連 :被フィルタリング値関連 “Producer”ログウィンドウ の生成(log) ログウィンドウにcoefValueの 内容を書き込み waveform_rawストリームに rawValueの内容を書き込み coef.datをopen 結果はcoefFile coefFileをclose (coef.dat) ログウィンドウにrawValueの 内容を書き込み waveform.rawストリームをopen waveform.datをopen 結果はinFile ログウィンドウにメッセージ 書き込み(“Finished~”) ログウィンドウにメッセージ 書き込み(“Sending~”) waveform.rawストリームをopen waveform_rawストリームを close coefValueにcoefFileの内容を読み込み ログウィンドウにメッセージ 書き込み(“Sending~”) inFileをclose (waveform.dat) waveform_rawストリームにcoefValueの内容を書き込み rawValueにinFileの 内容を読み込み
The consumer Process フィルタリング結果を受け取り,これを出力ファイルとログウィンドウに書き込む 目標 FIRフィルタからの出力であるwaveform_filteredストリーム上の フィルタリング結果を受け取り,これを出力ファイルとログウィンドウに書き込む 出力ファイル(results.dat)宣言及びcosim_logwindow_create関数の呼び出し Impulse Cの関数co_stream_openはメイン処理ループの後に呼び出す メインループではwaveform_filteredストリームから値を繰り返し読み, これをresults.dat及びログウィンドウの両方に書き込む (ログウィンドウへの書き込みは前述のcosim_logwindow_fwriteを使用) FIRフィルタリング終了時には,Consumer機能では出力ファイルを閉じること, ログウィンドウ上における最終的なカウントを書き込むことによってクリーンアップ を行う このアプリケーションの機能によってコンフィグレーション関数(config_fir)と co_initialize関数を結合させ,ソフトウェア(または、デスクトップ)シミュレーション のためのコンパイル準備済みCプログラムを生成する
The consumer Process(流れ図) の生成(log) ログウィンドウにwaveformValue の内容を書き込み result.datをopen 結果はoutFile ログウィンドウにwaveformCountを書き込み Waveform_filtered ストリームをopen waveform_filteredストリーム をclose ログウィンドウにメッセージ 書き込み(“Consumer~”) outFileをclose (result.dat) waveformValueにwaveform_ filteredの内容を読み込み outFileにwaveformValueの内容を書き込み
main関数でハードウェアの初期化(Initialize),アーキテクチャの生成を行い, co_executeによってソフトウェアのプロセス(Producer/Consumer)とハードウェア プロセス(FIR filter)が並列に処理され,シミュレーションが実行される. ※その他の関数(4章にて既出) co_stream_create(名前,データサイズ,型) 役割:ストリームの生成 co_process_create(名前, co_function 関数, 引数の数, 引数1, 引数2, ...); 役割:関数をプロセスとして生成 co_process_config(プロセス名, アトリビュート(co_loc固定), 定数("PE0"固定)); 役割:ハードウェア化したいプロセスを指定 co_architecture_create(文字列, generic, コンフィグレーション関数名, 引数); アーキテクチャを生成
5.4 DESKTOP SIMULATION デスクトップシミュレーションとは… 完成したImpulse Cアプリケーションをデバッキングする方法のことを指し ハードウェア,ソフトウェア両方の並列プロセスのオペレーティングのことを表す. デスクトップシミュレーションは標準的なC言語開発環境でコンパイルされる. デスクトップシミュレーションの利点 多くのサードパーティライブラリをC言語やC++言語に対して利用することが可能 包括的なテストフィクスチャやテストベンチを構成可能 実際のハードウェアでコンパイルする前にアプリケーションの正しい機能の検証が可能 フィクスチャ(fixtures)とは… テストコードがモデルやデータに依存する場合、テストで利用する一時的なサンプルデータ をデータテーブルに読み込むために利用するもの.
デスクトップシミュレーションの実装 アプリケーション中の様々な並列プロセス(FIRフィルタアプリケ―ションの場合では 3つ)がスレッドを使って実装される 上記の実装によってアプリケーションの並列動作をエミュレートが可能である
5.5 APPLICATION MONITORING cosim_によるアプリケーション監視機能 アプリケーションの個々に対するメカニズムで,目的に合わせて個々に計測可能 cosim_による計測機能はすべてのデスクトップコンパイラに互換性がある Impule Cのアプリケーションモニターとの通信が必要 なぜ,モニタリング機能が必要なのか? 標準的なCデバッガではアプリケーション内の処理の流れや,特定のプロセス内の 変数の値を調べるのが可能であるが、アプリケーションモニタリングでは アプリケーションソースコード内で直接デバッグ関連の道具を追加出来るという点で便利 上記から「アプリケーションやその構成アルゴリズムがどの様に最適化されているか」 について理解を深めることが出来るとも考えられる. cosim = Co_simulation(ハード/ソフト協調シミュレーション) ※本来ハードウェア,ソフトウェアの両面から行っていた動作検証を同時に行う.
Monitoring with Log Windows 1.アプリケーションの構成機能内からcosim_logwindow_init機能を呼び出す 2.動作中の機能プロセスから、cosim_logwindow型の変数を宣言する 3.cosim_logwindow_createを用いてログウィンドウの名前を定義し,Step.2で宣言 した変数にcosim_logwindow_createの返り値を割り当てる 4.cosim_logwindow_write、cosim_logwindow_fwriteを用いて,ログウィンドウに 任意の時間を書きこむ 5.デスクトップシミュレーション環境でアプリケーション(独立型のアプリケーション であるかデバッガのコントロール下にあるもの)を実行する前に, アプリケーションモニタープログラムをスタートする
5.6SUMMARY 5章の内容 次章以降の内容 一般的なFIRフィルタを定義するのにImpulse Cがどの様に活用出来るか? デスクトップシミュレーションやアプリケーションモニタリングが アプリケーションデバッグにどの様に用いられ,有効的であるか? 次章以降の内容 FIRフィルタの例やハードウェア生成ツールについて コンパイラツールの流れについて 生成されたハードウェアについて ハードウェアシミュレータを使った検証について パフォーマンス面である種の到達点になり得るアルゴリズムに着眼点をおいた FIRフィルタの異なる実装について
ご清聴ありがとうございました