スポンサーサイト

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

TLM2.0 DMI(Direct Memory Interface)を書いてみた。

きっかけはこちらの Cadence社のblogです。
SystemC TLM-2.0 Virtual Platform Direct Memory Interface (DMI) Performance Impact

結果がこのようになっており、DMIを使うとかなり高速化が見込めるとのこと。


では、実際に TLM2.0において、DMIをどのように記述するのか。
簡単には、target側で DMIがサポートしているかを通知し、
initiator側がDMI(ポインタ情報)を取得して通信します。

書いてみて思ったのですが、initiator側からは必ず1回は
b_transportなりの通信をしなければいけないので、もっと別手段で
やるようなことを考えたほうが良かったんじゃないか?って思いました。
一部抜粋ですが記述例です。

Initiator側から通信し、DMI可否を取得


116|        initiator_socket->b_transport(*trans, delay);
117|        wait(delay);
118|        if(trans->is_response_error()) {
119|            SC_REPORT_ERROR("WRITE:", trans->get_response_string().c_str());
120|        }
121|        // DMI Check
122|        if(trans->is_dmi_allowed()){
123|            m_dmi_allowed = initiator_socket->get_direct_mem_ptr(*trans, m_dmi);
124|        }

target側のDMI実装(get_direct_mem_ptr)


116|inline bool lt_target::get_direct_mem_ptr(tlm::tlm_generic_payload& trans, tlm::tlm_dmi& dmi){
117|
118|  if (mem_size < trans.get_address()) {
119|      dmi.allow_none();
120|      dmi.set_start_address((sc_dt::uint64)0x0);
121|      dmi.set_end_address((sc_dt::uint64) (mem_size - 4));
122|      return false;
123|  }
124|  else {
125|      dmi.allow_read_write();
126|      dmi.set_start_address((sc_dt::uint64)0x0);
127|      dmi.set_end_address((sc_dt::uint64) (mem_size - 4));
128|      dmi.set_dmi_ptr((unsigned char*)(&mem[0]));
129|      dmi.set_read_latency(rd_latency);
130|      dmi.set_write_latency(wr_latency);
131|      return true;
132|  }
133|  return false;
134|}

試しに、DMI有り無しのシミュレーション速度を測ってみましたが、
少しの時間しか流れないシミュレーションは特に差分が見えなかったです。
- DMIなし
real 0m0.782s
user 0m0.012s
sys 0m0.024s

- DMIあり
real 0m0.778s
user 0m0.004s
sys 0m0.024s
今回のソースはこちらのGitHubのほうに置いてあります。
GitHub:systemc/tutor_test/008_tlm2_dmi
関連記事

コメントの投稿

非公開コメント

プロフィール

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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。