SystemC传输级别建模从tlm_generic_payload中提取两个整数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SystemC传输级别建模从tlm_generic_payload中提取两个整数相关的知识,希望对你有一定的参考价值。

我正在使用SystemC TLM库。我想将一个带有两个整数的有效负载发送到一个模块,该模块将对这两个整数执行操作。我的问题是如何设置和解码有效载荷。

Doulos提供了有关https://www.doulos.com/knowhow/systemc/tlm2/tutorial__1/设置和解码的文档

建立

tlm::tlm_command cmd = static_cast(rand() % 2);
if (cmd == tlm::TLM_WRITE_COMMAND) data = 0xFF000000 | i;

trans->set_command( cmd );
trans->set_address( i );
trans->set_data_ptr( reinterpret_cast<unsigned char*>(&data) );
trans->set_data_length( 4 );
trans->set_streaming_width( 4 );
trans->set_byte_enable_ptr( 0 );
trans->set_dmi_allowed( false );
trans->set_response_status( tlm::TLM_INCOMPLETE_RESPONSE );

socket->b_transport( *trans, delay );

解码

virtual void b_transport( tlm::tlm_generic_payload& trans, sc_time& delay )

  tlm::tlm_command cmd = trans.get_command();
  sc_dt::uint64    adr = trans.get_address() / 4;
  unsigned char*   ptr = trans.get_data_ptr();
  unsigned int     len = trans.get_data_length();
  unsigned char*   byt = trans.get_byte_enable_ptr();
  unsigned int     wid = trans.get_streaming_width();

所以在我看来你会发送一个指向内存位置的指针,其中有两个整数写入。

| ---------------------------------- int1 -------------- ----------- | ------------------------------------ int2- -----------------------

| ptr + 0x0 | ptr + 0x(wid)| ptr + 0x(2 * wid)| ptr + 0x(3 * wid)| PTR + 0X(4 * WID)| + PTR 0X(5 * WID)| + PTR 0X(6 * WID)| + PTR 0X

----------|

(7 * WID)|

我对本文档的解释是否正确?

你怎么能得到前4个内存位置[3:0]并将它们组合成一个int32,怎么能得到第二个4 [7:4]并将它们变成第二个整数?

以上是关于SystemC传输级别建模从tlm_generic_payload中提取两个整数的主要内容,如果未能解决你的问题,请参考以下文章

systemC的同步时序建模

systemC三态建模

systemC的组合逻辑建模

SystemC事务级建模03之DMI

从验证的角度,systemverilog和systemc谁更合适

jchdl进展 - 20180918