スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

アルゴリズム(C/C++)からのSystemCへの書き換え手順

こんな投稿がありました。
Refactoring Hardware Algorithms to Functional Timed SystemC Models

C/C++で書かれたアルゴリズムをSystemCモデルにするための手順が書かれています。
1.Code Breakup
- Initialization
- Input Triggering
- Algorithm
- Output
2.Convert to SystemC Model
3.Peripheral Interface
4.Call backs & Triggers
5.Time/Delay Plug-in
6.Interrupt Plug-in
7.Configuration Parameters
8.Logging and Tracing

1.Code Breakup


一番ベースになる部分です。
ブロック(IP)設計する際のスタイルガイドにも推奨されていると思いますが、
処理通信を分離することが重要になります。
また、関数のClass化を重要なポイントです。

2.Convert to SystemC Model


続いてSystemCへの変換です。
上記の記事を見れば分かるのですが、容易にSystemCに変換できます。

3.Peripheral Interface


clockやreset、割り込みなどの元々のアルゴリズムにはない信号を追加します。
Virtual Platformを考えるとTLM2.0のInitiatorやTarget Socketを実装します。
また、そのブロックに対しての動作パラメータ(レジスタ)も実装。

4.Call backs & Triggers


ここまでで、Interfaceと処理は個別に実装できました。
なので、次はそれらをつなぎます。
記事には詳細が書いているのですが、要はあるレジスタのフィールドに"1"がWriteされたら動作する。みたいな事を書くということです。
"1"Writeされたら動作する。→"1"Writeされたら処理関数を呼ぶということです。

5.Time/Delay Plug-in


ここまで作成したモデルは、clockイベントで動くものであれば、1サイクルベースで。
レジスタなりのトリガで動いているものであればUntimedで動作しています。
なので、処理にかかる時間(Delay)などを付加します。
TLM2.0であれば、例にはない記述方法ですね。

6.Interrupt Plug-in


割り込みの実装の一例です。

7.Configuration Parameters


クラスのコンストラクタに対しての指定。

8.Logging and Tracing


RTLデバッグと違い、時間的な波形では見えません。(大げさに言ってます)
それぐらいのつもりで、何かしらの仕組みを作っておく必要があります。
SystemC 2011では sc_reportに追加された「sc_verbosity」でより、
情報収集のレベル定義をして、効率的にデバッグ出来るのではと思ってます。


記事でもある程度詳しく書かれていますが、もう少し踏み込んだ部分を
話す機会があったらお話したいなと思っています。
なんと言っても書いてみる(体験してみる)のが一番です。
さぁ~ SystemCの世界へようこそ!
関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。