Systemc传输级建模从TLM_Generic_Payload提取两个整数
SystemC Transfer Level Modeling Extract Two Integers from tlm_generic_payload
我正在使用Systemc TLM库。我想将带有两个整数的有效载荷发送到一个模块,该模块将对这两个整数执行操作。我的问题只是如何设置和解码有效载荷。
doulos提供了有关在此处设置和解码的文档
设置
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();
所以在我看来,您会将指针发送到编写两个整数的内存位置。
| ------------------------------------------------------------------------------------------------------------------------------------ | -----------------------------------------------------------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]并将它们变成第二个整数?
所以在我看来,您会将指针发送到内存位置 有两个整数写的地方。 我对本文档的解释是否正确?
是
要使它们恢复原状,您只需要复制它们:
int32_t val0, val1;
memcpy(&val0, ptr, sizeof(int32_t));
memcpy(&val1, ptr + sizeof(int32_t), sizeof(int32_t));
或类似
的东西int32_t val[2];
memcpy(val, ptr, sizeof val);
,但请确保引发器在指针下保持内存有效期足够长,例如最好避免在堆栈上使用数据。并且不要忘记检查有效载荷数据长度属性是否具有有效值 - 您想尽快检测这些问题。
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 为什么将两个浮点数相加会得到一个整数C++?
- 从两个 4x64 位整数数组中获取取模
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 比较两个整数在C++中与未知 int 类型的相等性
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 如何组合两个整数向量
- 在两个整数之间交换最右边的N位
- 打印出两个整数之间的偶数
- 为什么将两个总和为 32k >整数相加时得到负数?
- C++ 两个线程,共享几个整数变量
- Python 等效代码,可像C++一样直接附加两个整数
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 移位运算符如何在查找两个整数中的不同位数?
- 如何安全地比较两个无符号整数计数器?
- 添加两个二进制数(整数数组)
- 运算符"|"如何计算两个整数?
- 如何找出在两个整数的乘积中设置了多少位(等于 1)