基于SystemC和C++的多线程数据传输系统技术方案

技术编号:35231923 阅读:17 留言:0更新日期:2022-10-15 10:53
本发明专利技术涉及一种基于SystemC和C++的多线程数据传输系统,包括一个SystemC线程、N个C++线程和M个线程安全容器,C++线程为生产线程,C++线程进入唤醒状态,用于生成数据,并存储至线程安全容器中,当线程安全容器的数据量符合预设数据量需求时,C++线程进入阻塞状态;SystemC线程为消费线程,周期性获取线程安全容器中的数据量,当符合预设数据量需求时,从线程安全容器中读取数据进行处理,当读取完毕时,SystemC线程向C++线程发送唤醒指令,C++线程继续生成数据并存储至线程安全容器中。本发明专利技术能够基于多个线程实现数据并发传输,提高了虚拟平台与硬件联合仿真的传输速率。虚拟平台与硬件联合仿真的传输速率。虚拟平台与硬件联合仿真的传输速率。

【技术实现步骤摘要】
基于SystemC和C++的多线程数据传输系统


[0001]本专利技术涉及芯片
,尤其涉及一种基于SystemC和C++的多线程数据传输系统。

技术介绍

[0002]现有技术中,针对芯片电路系统的主流建模方法是基于SystemC标准进行模型开发的。但是,由于SystemC kernel(SystemC引擎)是单线程,因此,在基于虚拟平台和硬件加速器或FPGA的联合仿真中无法实现数据并发传输,从而极大地降低了数据传输速率。此外,由于SystemCkernel单线程无法实现数据并发传输,也会导致部分数据处理无法实现,例如,在虚拟平台和硬件加速器或FPGA的联合仿真中,为了提高仿真速度通常会将读写请求混合起来生成一个混合数据包,而单线程仿真无法实现读写混合数据包的操作,则可能造成仿真过程无法正常进行。

技术实现思路

[0003]本专利技术目的在于,提供一种基于SystemC和C++的多线程数据传输系统,能够基于多个线程实现数据并发传输,提高了虚拟平台与硬件(例如FPGA、emulator等)联合仿真的传输带宽,进而提高了虚拟平台与硬件联合仿真的数据传输速率。
[0004]本专利技术提供了一种基于SystemC和C++的多线程数据传输系统,包括:一个SystemC线程、N个C++线程和M个线程安全容器,0<M≤N,所述SystemC线程与每一线程安全容器连接,每一线程安全容器与至少一个对应的C++线程连接。
[0005]所述C++线程为生产线程,在仿真阶段,所述C++线程进入唤醒状态,用于生成数据,并将生成的数据存储至对应的线程安全容器中,当所述线程安全容器的数据量符合SystemC线程对应的预设数据量需求时,对应的C++线程进入阻塞状态。
[0006]所述SystemC线程为消费线程,在仿真阶段,所述SystemC线程周期性获取对应的线程安全容器中的数据量,当对应的线程安全容器中的数据量符合SystemC线程对应的预设数据量需求时,所述SystemC线程从所述线程安全容器中读取数据进行处理,当读取完毕时,所述SystemC线程向对应的C++线程发送唤醒指令,对应的C++线程继续生成数据并存储至对应的线程安全容器中。
[0007]本专利技术与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本专利技术提供的一种基于SystemC和C++的多线程数据传输系统可达到相当的技术进步性及实用性,并具有产业上的广泛利用价值,其至少具有下列优点:本专利技术能够基于多个线程实现数据并发传输,提高了虚拟平台与硬件联合仿真的传输带宽,进而提高了虚拟平台与硬件联合仿真的数据传输速率。
[0008]上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
[0009]图1为本专利技术实施例一提供的基于SystemC和C++的多线程数据传输系统示意图;图2为本专利技术实施例SystemC线程通知C++线程阶段信息的示意图;图3为本专利技术实施例二提供的基于SystemC和C++的多线程数据传输系统示意图。
具体实施方式
[0010]为更进一步阐述本专利技术为达成预定专利技术目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本专利技术提出的一种基于SystemC和C++的多线程数据传输系统的具体实施方式及其功效,详细说明如后。
[0011]实施例一、实施例一提供了一种基于SystemC和C++的多线程数据传输系统,包括:一个SystemC线程、N个C++线程和M个线程安全容器,0<M≤N,所述SystemC线程与每一线程安全容器连接,每一线程安全容器与至少一个对应的C++线程连接。本领域技术人员可以理解的是,本专利技术实施例所述的连接,并非一定是通过电缆之类的物理介质连接,也可以表示一种抽象的对应关系,也可以是两者之间通过无线通信等方式进行通信等等。
[0012]需要说明的是,每一C++线程对应一个C++线程函数,SystemC线程具体可以为sc_thread、sc_method、sc_cthread。SystemC线程和C++线程函数协调配合,虚拟平台通过C++线程函数调用硬件加速器或者FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)中的API(Application Programming Interface,应用程序编程接口)函数从而配合硬件实现真正的多通道通信。需要说明的是,在仿真过程中,所述SystemC线程始终处于唤醒状态,C++线程在仿真(simulation)阶段,根据具体需求处于阻塞状态或唤醒状态。
[0013]所述SystemC线程为生产线程,在仿真阶段,用于生成数据,并将生成的数据存储至对应的线程安全容器中,在所述SystemC线程向对应的线程安全容器中存储数据的过程中,对应的C++线程处于阻塞状态,当对应的线程安全容器的数据量符合对应的C++线程的预设数据量需求时,所述SystemC线程唤醒对应的C++线程。需要说明的是,仿真前准备阶段(elaboration)和仿真阶段是现有的SystemC kernel执行程序的两个必经的阶段,且先执行仿真前准备阶段,仿真前准备阶段执行结束后,执行仿真阶段,仿真阶段执行完毕后,结束程序执行,具体细节在此不再赘述,仿真前准备阶段指的是仿真阶段开始前的准备阶段,主要实现系统中仿真模型的构造和互连。
[0014]所述C++线程为消费线程,在仿真阶段,用于在对应的线程安全容器的数据量符合C++线程的预设数据量需求时,被SystemC线程唤醒,从所述对应的线程安全容器中读取数据进行处理。
[0015]当所有SystemC线程结束后SystemC仿真停止,通知所有C++线程结束进程。
[0016]图1示出了一个SystemC线程和一个C++线程实现实施例一的组成的系统结构,可以理解的是,根据C++线程、线程安全容器数量和连接关系的不同,可以基于图1做出适应性调整,不再一一列出。
[0017]需要说明的是,现有的SystemC kernel原来只有SystemC的单线程,只能模拟硬件的并发状态,而不能实现软件的并发,数据的产生在CPU上是有执行顺序的,软件上仍然是单线程。如果虚拟平台需要向硬件发送请求,为了提高数据传输速率,需要把多个request
拼成一个数据包,多个request可能包括读请求,也包括写请求,全部发给FPGA,如果是SystemC单线程,需要采用SystemC单线程去调FPGA,此时必须把所有的包都处理完,一次回复回来。但是,由于数据包中既包括读请求又包括写请求,会造成SystemC单线程处于阻塞状态。本专利技术所述系统中除了SystemC线程,至少还包括一个C++线程,基于多个线程实现数据并发传输,提高了虚拟平台与硬件联合仿真的传输带宽,进而提高了传输速率。
[本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于SystemC和C++的多线程数据传输系统,其特征在于,包括:一个SystemC线程、N个C++线程和M个线程安全容器,0<M≤N,所述SystemC线程与每一线程安全容器连接,每一线程安全容器与至少一个对应的C++线程连接;所述C++线程为生产线程,在仿真阶段,所述C++线程进入唤醒状态,用于生成数据,并将生成的数据存储至对应的线程安全容器中,当所述线程安全容器的数据量符合SystemC线程对应的预设数据量需求时,对应的C++线程进入阻塞状态;所述SystemC线程为消费线程,在仿真阶段,所述SystemC线程周期性获取对应的线程安全容器中的数据量,当对应的线程安全容器中的数据量符合SystemC线程对应的预设数据量需求时,所述SystemC线程从所述线程安全容器中读取数据进行处理,当读取完毕时,所述SystemC线程向对应的C++线程发送唤醒指令,对应的C++线程继续生成数据并存储至对应的线程安全容器中。2.根据权利要求1所述的系统,其特征在于,所述SystemC线程基于预设硬件周期,周期性地获取对应的线程安全容器中的数据量。3.根据权利要求2所述的系统,其特征在于,所述预设硬件周期为硬件时间周期...

【专利技术属性】
技术研发人员:郭晨光罗文涛
申请(专利权)人:上海合见工业软件集团有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1