[systemc][tlm2.0]父模块与子模块的实现

这篇具有很好参考价值的文章主要介绍了[systemc][tlm2.0]父模块与子模块的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、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部分:

[systemc][tlm2.0]父模块与子模块的实现

target部分:

[systemc][tlm2.0]父模块与子模块的实现

[systemc][tlm2.0]父模块与子模块的实现

top绑定

[systemc][tlm2.0]父模块与子模块的实现

其中需要注意:(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时,官方文件说是为了头文件引用的正确性,还是不清楚确切的原因是什么:

[systemc][tlm2.0]父模块与子模块的实现

困扰我三天的问题,错误就出在这里,以前也遇见过,但是又忘了,所以说,总结流程步骤,核对流程步骤的重要性

有时会报一些错误,已经在.h中引用过的头文件,还需要在引用过该.h文件的.cpp中再引用一次,不知道问题是什么

debug 一下,验证成功,在windows里同样测试一下,还是不行,不知道怎么弄了,暂时放弃windows下的debug

2、使用multi_passthrough_initiator/target_socket

官方给出的例子如下:

[systemc][tlm2.0]父模块与子模块的实现

 [systemc][tlm2.0]父模块与子模块的实现

 [systemc][tlm2.0]父模块与子模块的实现

 [systemc][tlm2.0]父模块与子模块的实现

3、使用tlm_initiator/target_socket

systemc2.3.3库中的 at_mixed_targets等例子都是采用这种方式连接父模块与子模块

三、总结

目前在网上查找实现父模块与子模块端口绑定的方式有这三种方法,经过测试实现了第一种方法,第二和第三种方法有待验证,但本身我对multi_passthrough_initiator/target_socket了解和使用不多,可以继续开发。

另外,附上过程中所见到的套接字属性

[systemc][tlm2.0]父模块与子模块的实现

[systemc][tlm2.0]父模块与子模块的实现文章来源地址https://www.toymoban.com/news/detail-490607.html

到了这里,关于[systemc][tlm2.0]父模块与子模块的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows系统配置maven环境

    我们为什么要配置maven呢? Maven是统一集中管理好所有的依赖包,不需要程序员再去寻找。Maven项目会有一个 pom.xml文件, 在这个文件里面,只要你添加相应配置,他就会自动帮你下载相应jar包,不用你铺天盖地的到处搜索你需要的jar包了。 注意 :maven的安装需要依赖jdk的安装

    2024年02月01日
    浏览(33)
  • Windows10+OpenCL环境配置

    一.查看自己电脑的显卡配置支不支持OpenCL 方法1:我的电脑用的是intel的显卡,具体查看方式:桌面右键 → 英特尔显卡设置 → 选项与支持打开英特尔® 显卡控制中心。如果找不到,尝试方法2 方法 2:Windows 开始菜单 在 Windows 开始菜单中 键入 英特尔显卡。找到 英特尔® 显卡

    2024年02月13日
    浏览(34)
  • JAVA环境变量配置(windows)

    windows配置环境变量(大小写不区分): 新建JAVA_HOME:jdk的根目录 D:Javajdk1.8.0_71 Path(必须)%JAVA_HOME%bin 新建(类路径)CLASSPATH: .;D:Javajdk1.8.0_71lib(或者.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;) 验证: cmd(win+r) 如果出现java -version 则说明配置成功 java语言是区分大小写的

    2024年02月14日
    浏览(37)
  • windows配置anaconda环境变量

    windows 配置 anaconda 环境变量,可以做到 cmd 中调用 conda 命令,不必每次都去找 Anaconda Prompt 默认安装通常是在 C:Users[你的用户] 目录下(安装时选择的是普通用户,也就是一路默认,选择了 just me ) 或者 C:ProgramData 目录下(安装时选择的是管理员,也就是选择了 all users )

    2024年02月10日
    浏览(44)
  • Windows安装系统+配置开发环境

    本篇适用于:笔记本电脑,组装台式机安装WIN10(WIN11)系统,并配置java、python、web开发环境 准备一个至少有5G空间的空白U盘(注意资料提前备份,写入系统后U盘会被清空) 去微软官网,下载WIN10的写入工具,下载完的文件叫Media Creation Tool+版本号.exe 微软官方网站 运行WIN

    2024年01月23日
    浏览(54)
  • 【VSCode】Windows环境下,VSCode 搭建 cmake 编译环境(通过配置文件配置)

    除了之前的使用 VSCode 插件来编译工程外,我们也可以使用配置文件来编译cmake工程,主要依赖 launch.json 和 tasks.json 文件。 目录 一、下载编译器 1、下载 Windows GCC 2、选择编译器路径 二、配置 debug 环境 1、配置 lauch.json 文件 2、配置 tasks.json 文件 三、编译工程 1、测试工程结

    2024年02月03日
    浏览(47)
  • jdk22+maven环境配置教程+idea的maven环境配置(Windows系统)

    jdk是Java开发必要的编程环境,idea是常用的Java开发工具,这里着重解释一下maven。 maven就是我们经常看见的pom.xml文件,maven有以下三点功能: 1.项目构建(可以帮助我们更快速的打包、构建项目) 2.依赖管理,例如我们连接数据库需要的jar包驱动、处理excel表格的驱动等,还有

    2024年04月13日
    浏览(51)
  • 环境配置——Windows平台配置VScode运行环境为远程服务器或虚拟机

    1. 远程机需要先安装SSH服务,命令如下 2. 安装好后需要开启SSH服务: 3. 查看SSH服务是否有被开启: 4. 本地Windows需要生成密钥将公钥放到远程机中 4. 1 Windows生成密钥: 进入 C:Users用户名.ssh(如没有该目录则需要手动创建)  4.2 在远程机上 ~/.ssh 目录下创建 authorized_keys 文

    2024年04月27日
    浏览(59)
  • Windows11配置VUE开发环境

    下载地址:https://nodejs.org/en/download 使用下面的终端工具打开安装: npm cache clean --force 是一个 npm 命令,用于清除 npm 的缓存。下面是关于该命令的完整介绍和用法: 说明: npm cache clean 是用来清除 npm 缓存的命令。 –force 参数是可选的,用于强制清除缓存,即使 npm 报告没有

    2024年04月15日
    浏览(40)
  • Windows上配置Python环境变量

    👨‍🎓 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入! 🐋 希望大家多多支持,我们一起进步!😄 🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包