一、windows下环境配置
尝试1:
visual studio 配置systemc环境:systemC学习笔记3 vs开发环境搭建 - 知乎 (zhihu.com)
(32 封私信 / 80 条消息) 流浪码农 - 知乎 (zhihu.com)
之前配置总是不通过,不知道是不是因为systemc版本的问题,2.3.3上述文章中说新版本systemc不支持很多
尝试2:
报错很多,使用systemc2.3.0(3条消息) Windows Visual Studio 2017 下搭建SystemC环境_能吃能睡不能学的博客-CSDN博客
打开时提示必须要对2.3.0版本中的文件进行更改以适应visual studio 更改后systemc2.3.0编译不通过,×
尝试3:
最终成功使用systemc:使用systemc2.3.3,使用example中的文件,at_mixed_targets,打开文件时提示升级。。以适应visual studio,按默认配置进行,按照下述过程进行配置,其中<一劳永逸>中无目标Microsoft.Cpp.Win32.user文件,按照每次重新配置的方法,经过编译,获得目标输出(3条消息) Windows Visual Studio 2017 下搭建SystemC环境_能吃能睡不能学的博客-CSDN博客
二、建立父模块与子模块框架
1、 使用simple_与tlm_initiator_socket
其中tlm_initiator_socket没有回调函数,需要显示继承tlm::tlm_bw_transport_if<>, tlm::tlm_fw_transport_if<>,显示继承后,需要定义纯虚函数
其中initiator部分:
target部分:
top绑定
其中需要注意:(1)simple_initiator/target_socket的绑定方式为init_socket(tar_socket);tlm_initiator/target_socket的绑定方式为init_socket.bind(tar_socket);当两者混合使用,与tlm_initiator/target_socket相关的均采用.bind方式;(2)绑定前后关系均为from(to)
上述是tlm_initiator/target_socket的实现,来源于《IEEE Standard for Standard SystemC® Language Reference Manual》,simple_initiator/target_socket的实现较简单,见模型建立流程部分总结笔记
各种debug
(1) 但是在实现过程中遇见,“不允许使用抽象类类型”,报错
根据(3条消息) c++ 错误提示:不能使用抽象类对象_后青春了的博客-CSDN博客
检查纯虚函数是否填写完整 ,发现原来是拼写返回值TLM_COMPLETE时的拼写错误
(2) 编译后,提示错误: LNK2019 无法解析的外部符号 "public: enum tlm::tlm_sync_enum __thiscall bmod_target1::targetNBTransport(class tlm::tlm_generic_payload &,class tlm::tlm_phase &,class sc_core::sc_time &)" (?targetNBTransport@bmod_target1@@QAE?AW4tlm_sync_enum@tlm@@AAVtlm_generic_payload@3@AAVtlm_phase@3@AAVsc_time@sc_core@@@Z),函数 "public: __thiscall bmod_target1::bmod_target1(class sc_core::sc_module_name)" (??0bmod_target1@@QAE@Vsc_module_name@sc_core@@@Z) 中引用了该符号 parent-child \parent-child\sc_main.obj 1
发现原来是simple_target_socket注册的回调函数未定义
(3)继续编译,又报错:0x7C598E66 (vcruntime140d.dll)处(位于 parent-child.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFA1F7B0 时发生访问冲突。
查找,可能是堆栈使用存在问题
(3条消息) 读取/写入位置发生访问冲突_gkzscs的博客-CSDN博客_发生访问冲突
测试是否是子模块new之后未释放
总是在sc_start 和sc_thread处报错,转到linux下eclipse试试
linux下报错 有关simple_target_socket
发现是忘记在头文件中加入:#define SC_INCLUDE_DYNAMIC_PROCESS
需要在所有.h文件中加上,并且需要在 include systemc.h头文件之前,不能在cpp文件中使用该语句
原因是在systemc库升级到2.1时,官方文件说是为了头文件引用的正确性,还是不清楚确切的原因是什么:
困扰我三天的问题,错误就出在这里,以前也遇见过,但是又忘了,所以说,总结流程步骤,核对流程步骤的重要性
有时会报一些错误,已经在.h中引用过的头文件,还需要在引用过该.h文件的.cpp中再引用一次,不知道问题是什么
debug 一下,验证成功,在windows里同样测试一下,还是不行,不知道怎么弄了,暂时放弃windows下的debug
2、使用multi_passthrough_initiator/target_socket
官方给出的例子如下:
3、使用tlm_initiator/target_socket
systemc2.3.3库中的 at_mixed_targets等例子都是采用这种方式连接父模块与子模块
三、总结
目前在网上查找实现父模块与子模块端口绑定的方式有这三种方法,经过测试实现了第一种方法,第二和第三种方法有待验证,但本身我对multi_passthrough_initiator/target_socket了解和使用不多,可以继续开发。
另外,附上过程中所见到的套接字属性
文章来源:https://www.toymoban.com/news/detail-490607.html
文章来源地址https://www.toymoban.com/news/detail-490607.html
到了这里,关于[systemc][tlm2.0]父模块与子模块的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!