硬件事务级仿真方法、引擎及系统的制作方法

文档序号:6423398阅读:139来源:国知局
专利名称:硬件事务级仿真方法、引擎及系统的制作方法
技术领域
本发明涉及硬件仿真技术,尤其涉及一种硬件事务级仿真方法、引擎及系统。
背景技术
随着集成电路制造技术的发展,超大规模集成电路(VLSI, Very LargeScaleIntegrated Circuits)已经进入了片上系统(SoC, System-on-Chip)时代。对于复杂的片上系统而言,系统验证占整个设计时间的60% _70%,其中涉及到软件与硬件的协同工作等等。传统的系统验证在寄存器传输级(RTL, Register Transfer Level)进行,RTL提供更精确接近实现的同时,也加长了验证时间以及此时发现问题再修改带来的成本增加,所以非常有必要地在尽可能早地进行有效的系统验证。事务级建模方法(TLM, Transaction Level Modeling)是为了解决以下问题而发展起来的,这些问题包括提供软件开发的早期平台;系统架构探索与验证;系统级模型在模块级验证中的应用。它用于建模可执行的平台,通常只描述硬件。所谓事务,一方面指把低层次的信息传输组合成的较高级别的传输,比如把读写一大块数据作为一个事务,它包含总线上的若干次突发传输,每个突发传输又会包含地址连续的多个数据传输;另一方面指不牵涉具体的信号,而是把传输中涉及到的信息分类作为整体表示。事务级建模方法把模块的功能和模块间的通讯分开建模,模块间通讯用事务来表示,接口用不含管脚细节的定时功能(TF, Timed Function)方式来表示,功能也用TF方式来表示,是否周期精确根据需要而定。通过提高抽象级别,把分散在各模块中的通讯协议处理功能集成在专门的通讯模块中完成,极大地加快了系统仿真的速度。系统级建模是大规模集成电路设计的一个重要阶段,它实现了设计从文本规范向功能实现的过渡,传统方法中一直使用硬件描述语言(HDL)来完成系统级建模,其弊端在于建模的效率低不适应如今片上系统(SoC, System-on-Chip)设计的要求。SystemC作为一种系统描述语言应运而生,它支持从系统级到门级的描述,解决了传统片上系统设计方法中不同级别使用不同描述语言带来的过渡问题,而其事务级(TL, Transaction-Level)建模仿真方法可以在早期有效地进行系统验证,同时速度较RTL级仿真更快。同时SystemC作为一种基于C++语言的新型硬件设计语言较已有的硬件描述语言(HDL)在系统级建模、软硬件协调设计方面更具优势,因此也更适用于SoC的设计建模。SystemC TLM2.0是目前最为典型的事务级建模的一种实现,为用户提供了一整套建模的接口,并提供了支撑模型运行的SystemC仿真环境。但该仿真环境为一个单进程的仿真环境,仅能运行于一个物理节点上,对于大规模系统的仿真,仿真速度受到限制。此外,TLM 2. O提供的仿真接口虽然功能全面,但是过于复杂,不利于学习和使用。在实际的应用环境中,仅部分核心接口被经常使用。申请号为200610020701. 7中国专利申请提供了一种高速事务级软硬件协同仿真方法,其基本思想是通过提高软件仿真方的建模层次和减少软硬件双方之间的同步信息量来提高协同仿真的速度。通过在硬件仿真增加各种标准的和综合的事务处理器模块来加速各种标准接口的测试。但是同样也是一种单进程的仿真方法,也未能提供更为简洁的用户访问接口。

发明内容
本发明提供了一种硬件事务级仿真方法、引擎及系统,以提高硬件仿真速度。为达到上述目的,本发明提供了一种硬件事务级仿真方法,包括加载目标系统模型,根据所述目标系统模型创建至少一个仿真线程;依次执行所述仿真线程,将执行仿真线程产生的仿真事件中加入事件队列,所述仿真事件记录待触发的仿真线程的线程号; 调取所述事件队列中的仿真事件,调度并执行调取的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程,将执行仿真线程产生的仿真事件加入所述事件队列。可选地,在执行仿真线程过程中还记录仿真时间,所述仿真事件中还记录时间戳,所述事件队列包括零延迟事件队列和时序事件队列,所述将产生的仿真事件加入事件队列包括若所述仿真事件中的时间戳等于当前的仿真时间,则将该仿真事件加入所述零延迟事件队列;若所述仿真事件的时间戳大于当前的仿真时间,则将该仿真事件加入所述时序事件队列,所述的时序事件队列中的仿真事件按时间戳由先至后排序。可选地,所述调取事件队列中的仿真事件包括若所述零延迟事件队列不为空,则取出所述零延迟事件队列队首的仿真事件;若所述零延迟事件队列为空,则取出所述时序事件队列队首的仿真事件,推进取出的仿真事件的仿真时间至取出的仿真事件的时间戳。可选地,所述目标系统模型遵循建模和运行时互操作接口,所述建模和运行时互操作接口支持多个用于建模的基类定义和多个用于运行时互操作的接口。可选地,所述建模和运行时互操作接口支持的基类定义包括模块类,用于定义所述目标系统模型中的模块;端口类,用于定义所述目标系统模型中各模块的绑定关系和模块之间的事务级数据传输;事件类,用于在所述目标系统模型中生成仿真事件。可选地,所述建模和运行时互操作接口支持的运行时的互操作接口包括模块构造函数接口,用于定义所述目标系统模型中的模块的构造函数,对各模块进行初始化。可选地,所述建模和运行时互操作接口支持的运行时的互操作接口定义还包括仿真线程注册接口,用于在所述构造函数中进行仿真线程的注册。可选地,所述建模和运行时互操作接口支持的运行时的互操作接口还包括事件等待接口,用于将当前的仿真线程挂起,以等待预设的仿真事件触发该仿真线程。可选地,所述建模和运行时互操作接口支持的运行时的互操作接口定义还包括事务级数据传输接口,用于实现所述目标系统模型中的模块之间的事务级数据传输。可选地,所述建模和运行时互操作接口支持的运行时的互操作接口还包括仿真结束接口,用于定义仿真结束的时间。为解决上述问题,本发明还提供了一种硬件事务级仿真引擎,包括仿真线程生成单元、核心调度单元和事件队列,其中,所述仿真线程生成单元用于加载目标系统模型,根据所述目标系统模型创建至少一个仿真线程;所述核心调度单元用于依次执行所述仿真线程,将执行仿真线程产生的仿真事件加入事件队列,所述仿真事件记录待触发的仿真线程的线程号;还用于调取所述事件队列中的仿真事件,调度并执行调取的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程,将执行仿真线程产生的仿真事件加入所述事件队列。可选地,所述仿真事件还记录时间戳,所述事件队列包括零延迟事件队列和时序事件队列,所述硬件事务级仿真引擎还包括仿真时间管理单元,用于记录所述核心调度单元在执行仿真线程过程中的仿真时间,若所述仿真事件中的时间戳等于当前的仿真时间,则将该仿真事件加入所述零延迟事件队列;若所述仿真事件的时间戳大于当前的仿真时间,则将该仿真事件加入所述时序事件队列,所述时序事件队列中的仿真事件按时间戳由先至后排序。
可选地,所述核心调度单元包括线程调度器和事件调度器,所述事件调度器检查所述零延迟事件队列,若不为空,则取出所述零延迟事件队列队首的仿真事件,并触发所述线程调度器调度并执行取出的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程;若所述零延迟事件队列为空,所述事件调度器取出所述时序事件队列队首的仿真事件,并触发所述仿真时间管理单元将取出的仿真事件的仿真时间推进至取出的仿真事件的时间戳,以及触发所述线程调度器调度并执行取出的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程。可选地,所述硬件事务级仿真引擎还包括建模和运行时互操作接口,所述目标系统模型由所述建模和运行时互操作接口读入和加载,所述建模和运行时互操作接口支持多个用于建模的基类定义和多个用于运行时互操作的接口,所述目标系统模型遵循建模和运行时互操作接口。所述建模和运行时互操作接口支持的基类定义包括模块类,用于定义所述目标系统模型中的模块;端口类,用于定义所述目标系统模型中各模块的绑定关系和模块之间的事务级数据传输;事件类,用于在所述目标系统模型中生成仿真事件。可选地,所述建模和运行时互操作接口支持的运行时的互操作接口包括模块构造函数接口,用于定义所述目标系统模型中的模块的构造函数,对各模块进行初始化。可选地,所述建模和运行时互操作接口支持的运行时的互操作接口还包括仿真线程注册接口,用于在所述构造函数中进行仿真线程的注册。可选地,所述建模和运行时互操作接口支持的运行时的互操作接口还包括事件等待接口,用于将当前的仿真线程挂起,以等待预设的仿真事件触发该仿真线程。可选地,所述建模和运行时互操作接口支持的运行时的互操作接口还包括事务级数据传输接口,用于实现所述目标系统模型中的模块之间的事务级数据传输。可选地,所述建模和运行时互操作接口支持的运行时的互操作接口还包括仿真结束接口,用于定义仿真结束的时间。为解决上述问题,本发明还提供了一种硬件事务级仿真系统,包括进程创建单元,用于创建多个仿真进程;加载单元,用于在所述进程创建单元创建仿真进程中,在每一仿真进程中内嵌一硬件事务级仿真引擎,所述硬件事务级仿真引擎为上述的硬件事务级仿真引擎。与现有技术相比,本发明具有以下优点本发明实施例的硬件事务级仿真方法和引擎根据目标系统模型创建多个仿真线程进行协同仿真,在仿真过程中通过产生的仿 真事件,触发所述仿真事件中记录的线程号指向的仿真线程,有利于改善仿真速度。本发明实施例的硬件事务级仿真方法、弓I擎和系统支持精简的建模和运行时互操作接口,在保证基本功能的完备性的同时又非常精简,被仿真的目标系统模型遵循上述接口,使本发明的硬件事务级仿真引擎的实现更为轻量级,能适合作为独立的库,既支持构建单进程的仿真环境,也能很好地支持嵌入到大规模计算机系统的仿真进程中,构建大规模并行仿真环境,并且便于用户的使用。本发明实施例的硬件事务级仿真系统首先创建多个仿真进程,在每个仿真进程中嵌入一硬件事务级仿真引擎,每个仿真进程中由所述硬件事务级仿真引擎创建多个仿真线程并进行调度管理,由于各个仿真线程较仿真进程具有更细的粒度,因而能够支持细粒度的建模和仿真,而且各个仿真进程和仿真线程之间的并行执行也有利于改善仿真速度。


图I是本发明实施例的硬件事务级仿真方法的流程示意图;图2是本发明实施例的硬件事物级仿真方法的详细流程图;图3是本发明实施例的硬件事务级仿真系统的结构示意图;图4是本发明实施例的硬件事务级仿真引擎的总体结构示意图;图5是本发明实施例的硬件事务级仿真引擎的部分详细结构示意图;图6是本发明实施例的硬件事务级仿真引擎中的核心调度单元的工作流程示意图;图7是本发明实施例的硬件事务级仿真引擎中的事件格式。
具体实施例方式集成电路的设计规模随着半导体工艺的不断进步而变得越来越大,由于设计规模的增加,传统的使用硬件描述语言(HDL, Hardware DescriptionLanguage)建模的方法突显出其效率低、调试和仿真时间长等缺点,如何有效进行系统建模和验证开始成为广大设计人员注重的焦点。一般的系统设计中,常采用C/C++等高级编程语言来建立系统模型,但是,由于这些高级语言本身不与硬件描述语言(HDL)兼容,同时无法有效表述一些硬件系统特有的数据类型和时序信息,因此这种设计方法也不适于完成硬件系统的建模需求。SystemC是一种新型系统建模语言,其产生目的是为系统级设计提供一种单一的语言,提供一个公共平台来更好的进行软硬件协同设计和验证。但是SystemC为了兼容软硬件协同方,提供了庞大使用类库和接口,用户在实际仿真和建模时仅仅部分接口和类库被经常使用,同时它只能用于构建其单进程的仿真环境,对于大规模计算机系统的协同仿真其速度受限。针对上述问题,发明人提供了一种轻量级的硬件事务级仿真方法,引擎及系统,根据目标系统模型创建多个仿真线程进行协同仿真,有利于改善仿真速度。而且本实施例中硬件事务级仿真引擎和所支持的目标系统模型遵循一精简的建模和运行时互操作接口,保证基本功能的完备性的同时又非常精简,使得本发明的硬件事务级仿真引擎的实现更为轻量级,能适合作为独立的库,既支持构建单进程的仿真环境,也能很好地支持嵌入到大规模并行仿真系统的每个仿真进程中,构建大规模并行的硬件事务级仿真环境,并且便于用户的使用。此外,本发明实施例的硬件事务级仿真系统能够创建多个仿真进程,在每个仿真进程中嵌入一硬件事务级仿真引擎,每个仿真进程中由所述硬件事务级仿真引擎创建多个仿真线程并进行调度管理,由于各个仿真线程较仿真进程具有更细的粒度,因而能够支持细粒度的建模和仿真,而且各个仿真进程和仿真线程之间的并行执行也有利于改善仿真速
度。 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式
做详细的说明。图I示出了本发明实施例的硬件事务级仿真方法的流程示意图,包括步骤S11,加载目标系统模型,根据所述目标系统模型创建至少一个仿真线程;步骤S12,依次执行所述仿真线程,将执行仿真线程产生的仿真事件加入事件队列,所述仿真事件记录待触发的仿真线程的线程号;步骤S13,调取所述事件队列中的仿真事件,调度并执行调取的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程,将执行仿真线程产生的仿真事件加入所述事件队列。为了更好的理解本发明的硬件事物级仿真方法的具体工作流程,请参看图2本发明实施例的硬件事物级仿真方法的详细流程图,进行详细描述。包括以下的执行步骤S201 :加载目标系统模型;S202 :根据所述的目标系统模型创建至少一个仿真线程并进行初始执行;所谓初始执行,就是在完成仿真线程的创建后,对所产生的仿真线程依次调度执行一次;硬件事物级仿真引擎之所以要执行初始执行,是因为在初始状态下,事件队列必然为空,硬件事物级仿真引擎无法通过事件来调度仿真线程执行,所以需要这样的一个初始执行的过程,让每个仿真线程都执行一遍直至产生仿真事件。S203 :对执行的仿真线程进行判断,判断其是否产生仿真事件,若产生仿真事件继续执行步骤S204,若不产生仿真事件则执行步骤S205 ;S204 :将产生的仿真事件加入事件队列中,执行下一步S205 ;S205 :若初始执行仿真线程不产生仿真事件继续进行初始执行操作,直到完成所有的初始执行操作,完成初始执行后执行步骤S206,若没有完成初始执行跳转至步骤S202 ;S206 :当初始执行完成后,开始检查事件队列,继续步骤S207 ;S207 :对事件队列是否为空进行判断;若事件队列为空则跳转至S212仿真过程结束,若事件队列不为空继续执行S208 ;S208 :取出事件队列中的仿真事件,调度并执行所述仿真事件中记录的待触发的仿真线程的线程号所指向的仿真线程,执行完后继续步骤S209 ;
S209:再次对调度执行的仿真线程是否产生仿真事件进行判断,如没有产生仿真事件跳转至步骤S206,如产生仿真事件则继续执行S210 ;S210 :将产生的仿真事件加入到事件队列中,继续步骤S211 ;S211 :对仿真结束时间进行判断,若到达仿真结束时间跳转至步骤S212,如没有到达仿真结束事件则跳转至步骤S206 ;S212 :仿真过程结束。为了简洁,本实施例的硬件事务级仿真方法的详细内容请参见下文对硬件事务级仿真方法、引擎及系统的相关描述。 图3是本发明实施例的硬件事务级仿真系统的结构示意图,包括进程创建单元(图中未示出),用于创建多个仿真进程101 ;每个仿真进程101中加载一硬件事务级仿真引擎101a,硬件事务级仿真引擎IOla创建至少一个仿真线程101b,并用于对创建的仿真线程IOlb进行管理和调度执行,以实现对加载在其中的目标系统模型的仿真。多个仿真进程101可以分布在不同的宿主机节点上并发运行,通过宿主机网络100进行数据通信。通过多仿真线程以及多仿真进程的方式,能够有效的提高仿真速度。图4示出了本实施例的硬件事务级仿真引擎的总体结构示意图,包括仿真时间管理单元11、核心调度单元12、仿真线程生成单元13、线程队列14、事件队列15以及建模和运行时互操作接口 21。图5示出了本实施例的硬件事务级仿真引擎的部分详细结构示意图,下面结合图4和图5进行详细说明。建模和运行时互操作接口 21用于读入和加载目标系统模型,所述建模和运行时互操作接口 21支持多个用于建模的基类定义和多个用于运行时互操作的接口,所述目标系统模型遵循建模和运行时互操作接口,也就是说,所述目标系统模型的建立过程符合上述建模基类定义和运行时互操作的接口。具体的,所述建模和运行时互操作接口 21支持的基类定义包括模块类module,用于定义所述目标系统模型中的模块;端口类port,用于定义所述目标系统模型中各模块的绑定关系和模块之间的事务级数据传输;事件类event,用于在所述目标系统模型中生成仿真事件。所述建模和运行时互操作接口 21支持的运行时的互操作接口包括模块构造函数接口 M_C0NSTRUCT0R,用于定义所述目标系统模型中的模块的构造函数,对各模块进行初始化;仿真线程注册接口 REGISTER_SM_THREAD,用于在所述构造函数中进行仿真线程的注册;事件等待接口 wait,用于将当前的仿真线程挂起,以等待预设的仿真事件触发该仿真线程;事务级数据传输接口 transport,用于实现所述目标系统模型中的模块之间的事务级数据传输;仿真结束接口 end_time,用于定义仿真结束的时间。此外,所述建模和运行时互操作接口 21支持的运行时的互操作接口还包括强制仿真结束接口 stop,用于强行终止仿真过程;端口绑定接口 bind,用于各个模块之间的端口绑定;事件通知接口 notify,用于在仿真事件产生后的预设事件发出通知,触发该仿真事件相关的仿真线程;时间获取接口 time_stamp,用于获取当前的仿真时间。所述仿真线程生成单元13用于根据加载的目标系统模型创建至少一个仿真线程,创建生成的仿真线程加入线程队列14中。所述核心调度单元12用于对所述线程队列14中的仿真线程依次进行调度并执行,将调度执行过程中产生的仿真事件加入事件队列15,所述仿真事件记录待触发的仿真线程的线程号,所述核心调度单元12还调取事件队列15中的仿真事件,调度并执行调取的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程,将执行仿真线程产生的仿真事件加入所述事件队列。作为一个可选的实施例,所述仿真事件中还包括时间戳,所述事件队列15包括零延迟事件队列151和时序事件队列152,本实施例的硬件事务级仿真引擎中还包括仿真时间管理单元11,用于记录所述核心调度单元12在调度执行过程中的仿真时间,若所述仿真事件中的时间戳等于当前的仿真时间,则所述事件队列15将该仿真事件加入所述零延迟事件队列151 ;若所述仿真事件的时间戳大于当前的仿真时间,则所述事件队列15将该仿真事件加入所述时序事件队列152,所述时序事件队列152中的仿真事件按时间戳由先至后排序。在本实施例中,每个仿真进程中仅有一个仿真时间,由仿真时间管理单元11进行记录和推进,对仿真时间的操作通过仿真时间管理单元11来完成,即由事件调度器122根 据当前处理的时序事件的时间戳向仿真时间管理单元11提交时间推进请求,由仿真时间管理单元11完成时间推进。所述核心调度单元12包括线程调度器121和事件调度器122,所述事件调度器122检查所述零延迟事件队列151,若不为空,则从所述零延迟事件队列151的队首取出一仿真事件,并触发所述线程调度器121调度执行取出的仿真事件中的线程号指向的仿真线程;若所述零延迟事件队列151为空,所述事件调度器122则从所述时序事件队列152的队首取出一仿真事件,并触发所述仿真时间管理单元11将所述仿真事件的仿真时间推进至取出的仿真事件中的时间戳,以及触发所述线程调度器121调度执行取出的仿真事件中的线程号指向的仿真线程。本实施例的硬件事务级仿真引擎中定义的仿真事件的格式如图7所示,包括时间戳和线程号,此外还包括事件类型。其中事件类型指的即是零延迟仿真事件类型和时序事件类型。所述的时间戳主要用来标记该事件在未来哪个时间被调度处理。时序事件队列152中的时序事件按照时间戳的先后序列排列,时序事件队列152队首的事件为时间戳最小的事件。所述仿真事件格式中的线程号是该仿真事件当前或未来要触发的仿真线程的线程号,可以是生成该仿真事件的仿真线程的线程号,也可以是其它仿真线程的线程号。即任何一个仿真线程都可以生成带时间戳的事件,用来在未来某一时刻触发自身或其它仿真线程的运行。结合图3至图6详细说明本发明的硬件事务级仿真引擎的工作流程。如图3所示,本实施例的硬件事务级仿真引擎IOla负责对仿真进程101内的各仿真线程IOlb进行管理和调度执行。当整个分布式仿真进程启动运行时,硬件事务级仿真引擎IOla根据事件驱动的执行机制,调度各个仿真线程IOlb运行。大量仿真进程101可以分布在宿主机的各个节点上并发运行,通过宿主机网络100进行数据通信。下面对硬件事务级仿真引擎IOla启动运行执行的步骤进行详细介绍。没有流程图。首先执行步骤SOOl :宿主机网络上的各个并行的仿真进程101分别加载硬件事务级仿真引擎IOla后,该硬件事务级仿真系统开始启动运行,通过配置文件和环境变量载入初始配置信息,先对宿主机网络上的各个节点进行初始配置,通过初始配置信息,确定仿真进程101的数量,宿主机的节点数,仿真结束的时间以及硬件事务级仿真引擎IOla所需要的其他用户配置信息。所述的宿主机节点运行所述仿真进程101并加载硬件事务级仿真引擎101a,可以是常规的基于Linux操作系统的计算机。其次执行步骤S002 :硬件事务级仿真引擎IOla根据所述初始配置信息进行初始化,其初始化过程包括核心调度单元12、线程队列14、事件队列15的初始化,以及设置仿真结束时间,所述初始化过程首先是完成对核心调度器单元12、线程队列14以及事件队列15的创建工作,此时的线程队列14以及事件队列15均为空,此外,通过读取配置文件中指定的仿真结束时间duration,执行目标系统模型中的仿真结束接口 end_time (duration),为事务级硬件仿真引擎IOla设置仿真结束时间。接下来执行步骤S003 :硬件事务级仿真引擎IOla开始加载目标系统模型,根据目标系统模型中的各个模块的定义,生成仿真线程,目标系统模型中的每一个模块基类 module的声明可以创建一个或多个仿真线程101b,在仿真线程创建完成后硬件事物级仿真引擎需要对各仿真线程进行初始执行;举例来说,如下列伪代码中定义了目标系统模型包括Stage类,该目标系统模型中的stage类中定义一仿真线程为Stage_thread,定义一事件为stage_trigger。
class stage: public moduleIl 构建一个模块为 stage类{
public:
port ng2st_p;//端口 定义
port st2d_p;//端口定义
virtual void transport(void *data)//事务级数据传输接口函数定义
{
wait(l); m—data = *((int*)data);
stagetrigger .notify(ZEROTIME);//触发一个零延迟事件
}
void stage_thread()//仿真线程函数
{
while(l)
{
wait( stage—trigger);
int data = m—data;
st2 d_p->transport(&data);
}
}
M CONSTRUCTOR(stage)//stage类的构造函数
{
m—data = -1;
REGISTER—STM—THREAD (stage—thread); //注册仿真线程ng2st_p.bind_self(this);//端口 初始化
st2d_p.bind_self(this);//端口 初始化
}目标系统模型初始化时,执行目标系统模型的构造函数M_C0NSTRUCT0R,在构造函数中执行仿真线程注册函数REGISTER_SIM_THREAD(stage_thread),由仿真线程注册函数REGISTER_SIM_THREAD将用户定义的stage_thread注册为一个仿真线程101b,加入到线程队列14中。当完成初始化后,所有仿真线程IOlb创建完毕并已经都加入到线程队列14中。在本实施例的硬件事务级仿真系统中,仿真进程101是由硬件事务级仿真系统根据环境变量创建,仿真线程IOlb是在初始化目标系统模型时由硬件事务级仿真引擎IOla创建,在执行到该目标系统模型的模块构造函数中的仿真线程注册接口函数时,生成仿真线程101b。硬件事务级仿真系统运行时,会启动多个仿真进程101,每个仿真进程101中运行一个硬件事务级仿真引擎101a,每个硬件事务级引擎IOla可以管理并调度多个仿真线程IOlb运行。之后执行步骤S004 :硬件事务级仿真引擎IOla在完成一系列的初始化后,核心调度单元12开始工作,先对从仿真线程I至仿真线程n开始进行初始调度执行,在初始调度执行过程中产生仿真事件,将所述产生的仿真事件加入事件队列,所述核心调度单元12调
度并执行仿真事件中的线程号对应的仿真线程。线程调度器121等待并接受来自事件调度器122的触发请求,根据所述触发请求中的线程号,触发指定的仿真线程运行。事件调度器122循环检查事件队列15中的零延迟事件队列151和时序事件队列152,从事件队列15中取出待处理的仿真事件,并根据仿真事件中的时间戳向仿真时间管理单元11提交时间推进请求,同时,根据仿真事件对应的线程号,提交线程调度器121,触发该线程号指向的仿真线程运行。参考图6,所述硬件事务级仿真引擎IOla中的核心调度单元12循环执行以下步骤步骤SI :检查零延迟事件队列,检查其是否为空,如果不为空,跳转至步骤S2,如果为空,跳转至步骤S3;步骤S2 :从零延迟事件队列的队首取出一仿真事件,将该仿真事件提交至事件调度器122处理后跳转至步骤S5 ;步骤S3 :从时序事件队列的队首取出一仿真事件,将该仿真事件提交至事件调度器122处理后跳转至步骤S4 ;步骤S4 :根据取出的仿真事件的时间戳,向仿真时间管理单元11提交时间推进请求,由仿真时间管理单元11将仿真事件推进到该仿真事件的时间戳,完毕后跳转至步骤S5 ;步骤S5 :调度执行取出的仿真事件中的线程号指向的仿真线程,直至该仿真线程运行至下一次挂起后,跳转至步骤SI。在整个硬件事务级仿真引擎的工作过程中,核心调度单元不断重复执行上述步骤SI到步骤S5,直至事件队列为空或当前仿真时间大于或等于仿真结束时间时,仿真过程结束。本发明虽然以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以做出可能的变动和修改,因此本发明的保护范围应当以本发明权利要求所界定的范围为准。
权利要求
1.一种硬件事务级仿真方法,其特征在于,包括 加载目标系统模型,根据所述目标系统模型创建至少一个仿真线程; 依次执行所述仿真线程,将执行仿真线程产生的仿真事件加入事件队列,所述仿真事件记录待触发的仿真线程的线程号; 调取所述事件队列中的仿真事件,调度并执行调取的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程,将执行仿真线程产生的仿真事件加入所述事件队列。
2.根据权利要求I所述的硬件事务级仿真方法,其特征在于,在执行仿真线程过程中还记录仿真时间,所述仿真事件还记录时间戳,所述事件队列包括零延迟事件队列和时序事件队列,所述将产生的仿真事件加入事件队列包括若所述仿真事件的时间戳等于当前的仿真时间,则将该仿真事件加入所述零延迟事件队列;若所述仿真事件的时间戳大于当前的仿真时间,则将该仿真事件加入所述时序事件队列,所述时序事件队列中的仿真事件按时间戳由先至后排序。
3.根据权利要求2所述的硬件事务级仿真方法,其特征在于,所述调取所述事件队列中的仿真事件包括 若所述零延迟事件队列不为空,则取出所述零延迟事件队列队首的仿真事件; 若所述零延迟事件队列为空,则取出所述时序事件队列队首的仿真事件,推进取出的仿真事件的仿真时间至取出的仿真事件的时间戳。
4.根据权利要求I至3任一项所述的硬件事务级仿真方法,其特征在于,所述目标系统模型遵循建模和运行时互操作接口,所述建模和运行时互操作接口支持多个用于建模的基类定义和多个用于运行时互操作的接口。
5.根据权利要求4所述的硬件事务级仿真方法,其特征在于,所述建模和运行时互操作接口支持的基类定义包括 模块类,用于定义所述目标系统模型中的模块; 端口类,用于定义所述目标系统模型中各模块的绑定关系和模块之间的事务级数据传输; 事件类,用于在所述目标系统模型中生成仿真事件。
6.根据权利要求5所述的硬件事务级仿真方法,其特征在于,所述建模和运行时互操作接口支持的运行时的互操作接口包括模块构造函数接口,用于定义所述目标系统模型中的模块的构造函数,对各模块进行初始化。
7.根据权利要求6所述的硬件事务级仿真方法,其特征在于,所述建模和运行时互操作接口支持的运行时的互操作接口还包括仿真线程注册接口,用于在所述构造函数中进行仿真线程的注册。
8.根据权利要求5所述的硬件事务级仿真方法,其特征在于,所述建模和运行时互操作接口支持的运行时的互操作接口包括事件等待接口,用于将当前的仿真线程挂起,以等待预设的仿真事件触发该仿真线程。
9.根据权利要求5所述的硬件事务级仿真方法,其特征在于,所述建模和运行时互操作接口支持的运行时的互操作接口包括事务级数据传输接口,用于实现所述目标系统模型中的模块间的事务级数据传输。
10.根据权利要求5所述的硬件事务级仿真方法,其特征在于,所述建模和运行时互操作接口支持的运行时的互操作接口包括仿真结束接口,用于定义仿真结束的时间。
11.一种硬件事务级仿真引擎,其特征在于,包括仿真线程生成单元、核心调度单元和事件队列,其中, 所述仿真线程生成单元用于根据加载的目标系统模型创建至少一个仿真线程; 所述核心调度单元用于依次执行所述仿真线程,将执行仿真线程产生的仿真事件加入事件队列,所述仿真事件记录待触发的仿真线程的线程号;还用于调取所述事件队列中的仿真事件,调度并执行调取的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程,将执行仿真线程产生的仿真事件加入所述事件队列。
12.根据权利要求11所述的硬件事务级仿真引擎,其特征在于,所述仿真事件还记录时间戳,所述事件队列包括零延迟事件队列和时序事件队列,所述硬件事务级仿真引擎还包括仿真时间管理单元,用于记录所述核心调度单元在执行仿真线程过程中的仿真时间,若所述仿真事件的时间戳等于当前的仿真时间,则将该仿真事件加入所述零延迟事件队列;若所述仿真事件的时间戳大于当前的仿真时间,则将该仿真事件加入所述时序事件队列,所述时序事件队列中的仿真事件按时间戳由先至后排序。
13.根据权利要求12所述的硬件事务级仿真引擎,其特征在于,所述核心调度单元包括线程调度器和事件调度器,所述事件调度器检查所述零延迟事件队列,若不为空,则取出所述零延迟事件队列队首的仿真事件,并触发所述线程调度器调度并执行取出的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程;若所述零延迟事件队列为空,所述事件调度器取出所述时序事件队列队首的仿真事件,并触发所述仿真时间管理单元将取出的仿真事件的仿真时间推进至取出的仿真事件的时间戳,以及触发所述线程调度器调度并执行取出的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程。
14.根据权利要求11至13任一项所述的硬件事务级仿真引擎,其特征在于,还包括建模和运行时互操作接口,所述目标系统模型由所述建模和运行时互操作接口读入和加载,所述建模和运行时互操作接口支持多个用于建模的基类定义和多个用于运行时互操作的接口,所述目标系统模型遵循建模和运行时互操作接口。
15.根据权利要求14所述的硬件事务级仿真引擎,其特征在于,所述建模和运行时互操作接口支持的基类定义包括 模块类,用于定义所述目标系统模型中的模块; 端口类,用于定义所述目标系统模型中各模块的绑定关系和模块之间的事务级数据传输; 事件类,用于在所述目标系统模型中生成仿真事件。
16.根据权利要求15所述的硬件事务级仿真引擎,其特征在于,所述建模和运行时互操作接口支持的运行时的互操作接口包括模块构造函数接口,用于定义所述目标系统模型中的模块的构造函数,对各模块进行初始化。
17.根据权利要求16所述的硬件事务级仿真引擎,其特征在于,所述建模和运行时互操作接口支持的运行时的互操作接口还包括仿真线程注册接口,用于在所述构造函数中进行仿真线程的注册。
18.根据权利要求15所述的硬件事务级仿真引擎,其特征在于,所述建模和运行时互操作接口支持的运行时的互操作接口包括事件等待接口,用于将当前的仿真线程挂起,以等待预设的仿真事件触发该仿真线程。
19.根据权利要求15所述的硬件事务级仿真引擎,其特征在于,所述建模和运行时互操作接口支持的运行时的互操作接口包括事务级数据传输接口,用于实现所述目标系统模型中的模块之间的事务级数据传输。
20.根据权利要求15所述的硬件事务级仿真引擎,其特征在于,所述建模和运行时互操作接口支持的运行时的互操作接口包括仿真结束接口,用于定义仿真结束的时间。
21.一种硬件事务级仿真系统,其特征在于,包括 进程创建单元,用于创建多个仿真进程; 加载单元,用于在所述进程创建单元创建仿真进程中,在每一仿真进程中内嵌一硬件事务级仿真引擎,所述硬件事务级仿真引擎为权利要求11至20任一项所述的硬件事务级仿真引擎。
全文摘要
本发明提供了一种硬件事务级仿真方法、引擎及系统,所述方法包括加载目标系统模型,根据所述目标系统模型创建至少一个仿真线程;依次执行所述仿真线程,将执行仿真线程产生的仿真事件加入事件队列,所述仿真事件记录待触发的仿真线程的线程号;调取所述事件队列中的仿真事件,调度并执行调取的仿真事件记录的待触发的仿真线程的线程号指向的仿真线程,将执行仿真线程产生的仿真事件加入所述事件队列。本发明基于事件驱动的仿真机制,加快了仿真速度,同时提供了精简的仿真建模接口能更方便地描述具有普遍并发性的硬件系统。
文档编号G06F17/50GK102760176SQ20111011083
公开日2012年10月31日 申请日期2011年4月29日 优先权日2011年4月29日
发明者吴东, 张昆, 李宏亮, 谢向辉, 郝子宇, 钱磊 申请人:无锡江南计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1