一种基于SystemC的AADL软构件模型仿真测试实例生成方法

文档序号:6427687阅读:422来源:国知局
专利名称:一种基于SystemC的AADL软构件模型仿真测试实例生成方法
技术领域
本发明涉及嵌入式系统领域,具体为一种基于SystemC的AADL软构件模型仿真测试实例生成方法。
背景技术
为了采用模型驱动的软件开发方法分析任务关键嵌入式软件系统的质量属性,以提高软件系统的可靠性、缩短开发周期,美国自动机协会于2009年1月发布了航空标准AS5506-体系结构分析与设计语言AADL(Architecture Analysis and Design Language) 2. 0版本。AADL作为一种嵌入式实时系统的建模语言,它通过定义构件及构件之间的交互对系统结构进行建模,并且支持对系统非功能属性(包括时间属性、能耗、可靠性、安全性等)的描述。AADL具有语法结构简单、功能强大和可扩展的优点,其在任务关键和安全关键嵌入式领域具有广阔的应用前景。AADL设计模型是嵌入式系统开发的基础和贯穿系统开发过程的蓝图,其质量决定了嵌入式系统的质量,如何保障AADL模型的质量是目前的研究热点。形式化的模型验证技术已在AADL研究领域中展开,例如,将AADL模型转换为易于分析和评估的形式化模型, 然后开发进行分析和评估的形式化工具或利用目前成熟的形式化评估工具,对模型的行为 (即模型的行为语义分析)和性能(包括可靠性、安全性、可调度性)进行分析和评估。但是,由于形式化分析无法检测系统在具体目标环境下运行时的状态及其动态属性变化,无法确保软件的各种性能在不同层次模型设计中能够“真实”的验证和确认。所以,要在设计阶段为AADL模型提供一个仿真测试执行环境,以检验仿真模型约束是否满足需求。SystemC是一种软硬件协同仿真的系统描述语言,运用SystemC可以在不同抽象层次上实现系统的仿真和测试。de las Heras等人提出了 AADL模型到SystemC映射的语义,以支持软件和硬件联合仿真,但并没有给出SystemC测试实例生成的具体方法。

发明内容
要解决的技术问题本发明主要解决如何生成基于SystemC的AADL软构件及软构件之间通讯的仿真实例,包括AADL系统构件、进程构件、线程构件、子程序构件、数据构件的仿真实例,以及系统、进程、线程之间通讯机制的仿真实例。为此,本发明提出了一种基于SystemC的AADL软构件模型仿真测试实例生成方法。技术方案每个AADL模型的构成都是一个构件树,树根表示系统构件,由上而下依次有子系统构件、进程构件、线程构件作为树的中间层,子程序构件或数据构件作为树的叶子节点。 由于各软构件都可以包含数据访问、端口,以及构件间通讯的连接,所以,本发明的技术方案首先给出了将数据构件、端口和连接转换为SystemC仿真测试实例的转换技术;然后,依据构件的包含关系,从构件树的底层(子程序)到树的中间层(线程、进程)逐步骤给出了将各构件转换为SystemC仿真测试实例的转换技术;最后给出了子系统和系统构件的转换技术。本发明的技术方案为所述一种基于SystemC的AADL软构件模型仿真测试实例生成方法,其特征在于 包括以下步骤步骤1 将AADL模型的数据构件转换为SystemC格式的仿真测试实例,转换规则为如果数据构件的类型是SystemC支持的基本数据类型,则将数据构件转换为SystemC中的基本数据类型,否则转换为用户自定义的数据类型;步骤2 将AADL模型的构件端口和连接转换为SystemC格式的仿真测试实例,其中构件端口和连接包括数据端口和连接、事件端口和连接和事件数据端口和连接,各转换规则为转换数据端口和连接将AADL模型的in、out、inout类型的数据端口分别转换为SystemC格式下基本端口类型sc_in<T>、sc_out<T>、sc_inout<T>的端口变量,其中T 是端口传输数据的数据类型;将系统、子系统或进程中的子模块端口直接关联到其所属父 /子模块的端口进行通讯,将系统、子系统或进程中的模块端口绑定到信号scjignal而与其他同级模块的端口相连进行通讯;将线程的数据端口连接转换为信号scjignal类型变量;转换事件端口和连接将AADL模型的事件端口转换为SystemC中的先进先出队列通道sc_fif0<T>类型的变量;事件端口连接的转换方法为将参与事件端口连接的两个构件转换后分别绑定到事件端口对应的通道变量,并调用通道的readO和writeO方法向通道读或写事件;转换事件数据端口和连接将事件数据端口转换为SystemC中的自定义端口 sc_ port<InterfaceType>类型的变量,InterfaceType是端口所要连接通道的接口类型;事件数据端口连接的转换方法为将参与事件数据端口连接的两个构件转换后,分别将两个转换后构件的事件数据端口变量与一个sc_fifo<T>通道类型的变量绑定并调用通道的 readO和writeO方法向通道读或写事件数据;步骤3:将AADL模型的子程序构件转换为SystemC格式的C++函数,若子程序带有参数,则其中in类型的参数作为函数的参数采用值传递方式传递到参数内部使用,out或 inout类型参数作为函数的参数采用引用传递方式传递到参数内部使用;将AADL模型的子程序行为附件转换为函数体,函数体通过switch-case语句实现,switch语句测试子程序行为附件的状态,case语句测试子程序行为附件状态转换的条件,在case语句内实现状态转换后的计算过程;步骤4 将AADL模型的线程构件转换为SystemC中的SC_THREAD (threadName),其中threadName是以线程名命名的C++函数,该函数实现以下部分仿真线程初始化用wait (Init_execution_time,SC_MS)来模拟线程初始化时消耗的时间,Init_eXecution_time是定义的一个int型的变量,其值为线程的属性 Initialize_Execution_Time中规定的初始化执行时间最大与最小值之间的一个随机值;仿真子程序调用若线程中调用的子程序,则直接调用子程序经过步骤3转换后得到的SystemC格式的C++函数;仿真线程行为附件将线程行为附件转换为函数体,函数体通过switch-case语句实现,switch语句测试线程行为附件的状态,case语句测试线程行为附件状态转换的条件,在case语句内实现状态转换后的计算过程;仿真线程端口与其他构件端口间的通讯采用步骤2中的转换方法将线程端口及线程端口与其他构件端口间的连接进行转换;比较线程的执行时间与线程周期,若线程的执行时间没有到周期值,则线程消耗一定的时间直到该周期结束;采用wait (final_execution_time, SC_MS)实现仿真AADL线程的终止消耗时间, final_execution_time 是 int 型变量,其值为 AADL 模型 Finalize_Execution_Time 属性中规定的终止执行时间最大与最小值之间的一个随机值;步骤5 将AADL模型的进程转换为SystemC中包含一个模块SC_M0DULE(进程名)的文件<P_进程名.h> ;将AADL模型的进程实现转换为SystemC中定义的文件 < 进程名·cpp> ;文件<P_进程名.h>实现以下部分采用步骤2中的转换方法将进程端口及进程端口与其他构件端口间的连接进行转换,实现进程端口及进程端口与其他构件端口间的通讯仿真;声明线程转换的函数,声明线程调用的子程序转换的函数;在模块构造函数函数SC_CT0R(P_进程名)中,注册进程包含的线程,并声明各线程的敏感事件;文件 < 进程名.cpp>中包含步骤4线程函数threadName的函数实现,以及步骤3 中子程序的函数实现;步骤6 将AADL模型的系统构件转换为SystemC中包含一个模块SC_M0DULE (S_系统名)的文件 < 系统名.h>,文件 < 系统名.h>实现以下部分采用步骤2中的转换方法将系统端口进行转换,实现系统端口的仿真;声明系统子构件的转换函数;在SC_M0DULE(S_系统名)模块构造函数SC_CT0R(系统名)中,按照步骤2,实现系统端口与其他构件端口连接的仿真。有益效果通过本发明,用户可以实现基于SystemC AADL软构件的仿真,包括软构件之间交互、执行时间和以及线程调度的仿真等。用户也可以将本发明与基于SystemC的AADL执行平台构件仿真相结合,对软硬件进行协同仿真,根据仿真结果迭代构造和精化设计模型, 以尽早发现设计模型中存在的问题,保障设计模型的质量。通过模型设计、模型仿真反复迭代,最终可以为安全关键实时嵌入式系统创建不同抽象层次的可信模型,以保证系统整体的高可靠、高安全等目标,为未来超高可靠嵌入式系统的最终研制提供坚实的基础,并迈出关键步骤。本发明可运用于高可靠、高安全领域,例如,航空领域、航天领域、交通运输领域、 核电领域等。


图1 实施例中的软构件结构图;图2 仿真驱动程序;
图3 基于SystemC仿真内核的调度仿真。
具体实施例方式下面结合具体实施例描述本发明本实施例中釆用的AADL模型为AADL中数据构件
data Personnel一record features
update一address: subprogram update—address; end Personnel—record;
data implementation Personnel—record, others subcomponents Name : data basic::string; . Home_address : data sei: :aadl: .'relief::Address; end Personnel—record.others; subprogram update_address features
person: in out parameter Personnel一record; street :in parameter basic::string; city: in parameter basic::string; end update一address;AADL中的子程序、线程、进程和系统以及各个构件的端口及端口连接模型为
thread Button一Panel features Activate: out event port; Cancel: out event port;Onnotoff: out data port Bool一Type; Incspeed: out data port Bool一Type; Decspd: out data port Bool Type; end Button一Panel;*
thread implementation Button—Panel.Gui
calls { subpl一 1: subprogram subpl_l.impl; };
properties
AADL_Properties: :Dispatch_Protocol => Periodic; AADL—Properties “Period => 20 Ms;
AADL_Properties::Compute_Entrypoint -> "Button-PaneLfunc"; AADL—Properties::Source—Text => "./fButton—Panel.cpp"; UC::POSIX_Scheduling_Policy SCHED_RR; UC::Priority => 20; ·
AADL_Properties::Compute_Execution_Time => 1 Ms .. 10 Ms; AADL—Properties::Initialize_Entrypoint => "Initialize Button Panel"; AADL—Properties::Initialize_Execution Time => 6 Ms ·■ 9 Ms; AADL—Properties::Finalize—Entrypoint => "Finalize Button—Panel"; AADL—Properties::Finalize_Execution_Time => 6 Ms 9 Ms; end Button—Panel-Gui; subprogram subpl—1 features
debug: in parameter Behavior::boolean; end start—read;
subprogram implementation subpl l.impl
calls.
{
subpl一2: subprogram subpl—2.impl; };
annex behavior—specification {** states
sO : initial state; si : return state; transitions
sO -[ on debug ]-> si { std:: subpl—2!; }; sO -[ on not debug ]-> si;
end subpl_l.impl;.
8subprogram subpl_2 end subpl—2;
subprogram implementation subpl一2.impl properties
AADL_Properties::Source_Text => M./subpl_2.cpp"; end subpl_2.impl; thread Drivermodelogic features
Breakpedalpressed: requires data access Bool_Type; Clutchpedalpressed: in data port Bool—Type; Activate: In event port; Cancel: in event port; Onnotoff: in data port Bool—Type; Cruiseactive: out data port Bool Type; end Drivermodelogic ;
thread implementation Drivermodelogic.Simulink
calls {
llamado: subprogram subp2_l.impl; };
connections
in_valor: parameter Onnotoff -> llamado.in_parameter; referencia: data access Breakpedalpressed -> llamado.pl; out—valor: parameter llamado.out_parameter -> Cruiseactive; properties
AADL_Properties::Dispatch_Protocol 二> Periodic; AADL_Properties::Period 二> 20 Ms;
AADL_Properties::Compute_Entrypoint => "Drivermodelogic_func"; AADL_Properties::Source_Text => "./fDrivermodelogic.cpp"; UC::POSIX_Scheduling_Policy => SCHED_RR; UC::Priority => 20;
AADL一Properties::Compute一Execution—Time => 2 Ms .. 10 Ms; AADL_Properties::Initialize_Entrypoint => "Initialize_Drivermodelogicn; AADL一Properties::Initialize一Execution—Time -> 5 Ms .. δ Ms; AADL_Properties::Finalize_Entrypoint => "Finalize—Drivermodelogic"; AADL—Properties::Finalize—Execution一Time => 5 Ms .. 8 Ms; end Drivermodelogic.Simulink; subprogram subp2 一 1 features
in_parameter: in parameter Bool Type;pi: requires data access Bool一Type; out_parameter: out parameter Bool Type; end subp2—1;
subprogram implementation subp2一l.impl properties
AADL_Properties::Source_Texl :> |'./subp2」.cpp"; end subp2_l .impl;*
process Hci Process features
Breakpedalpressed: requires data access Bool Type; Clutchpedalpressed: in data port Bool Type; Autospd一Mph: in data port F]oat_Type; Engspd—Rpm: in data port Float—Type; Cmiseactive: out data port Bool_Type; Refspd_Mph: out event data port Float Type; end Hci Process;
process implementation Hci一Process.Model subcomponents Button一Panel: thread Button_Panel.Gui; Drivermodelogic: thread Drivermodelogic.Simuiink; Refspd: thread Refspd.Simulink; Instrumentpanei: thread Instrumentpanel.Gui; connections
CBreakpedalpressed: data access Breakpedalpressed -> Drivermodelogic.Breakpedalpressed; CClutchpedalpressed: data port Clutchpedalpressed -> Drivermodelogic.Clutchpedalpressed; CAutospd_Mph: data port Autospd一Mph -> Instrumentpanel.Autospd_Mph; CEngspd_Rpm: data port Engspd—Rpm -> Instrumentpanel.Engspd Rpm; CCruiseactivel: data port Drivermodelogic.Cruiseactive -> Cruiseactive; Refspd 1: event data port Refspd.Refspd Mph -> Refspd_Mph; CCruiseactive2: data port Drivermodelogic.Cruiseactive -> Refspd.Cruiseactive; event port Button_Panel.Ac'tivate -> Drivermodelogic.Activate; event port Button一Panel.Cancel -> Drivermodelogic.Cancel; COnnotoff: data port Button_Panel.Onnotoff -> Drivermodelogic.Onnotoff; event port Button—Panel.Activate -> Refspd.Activate; CIncspeed: data port Button Panel.Incspeed -> Refspd.Tncspeed; CDecspd: data port Button_Panel.Decspd -> Refspd.Decspd; Refspd2: event data port Refspd.Refspd__Mph -> Instrumentpanel.Refspd_Mph; end Hci一Process.Model; system Hci featuresBreakpedalpressed: requires data access Bool一Type; Clutchpedalpressed: in data port Bool Type; Autospd Mph: in data port Float_Type; Engspd Rpm: in data port Float—Type; Cruiseactive: out data port Bool一Type; RefspdJViph: out event data port Float_Type; end Hci;
system impJementation Hci .Model subcomponents P Hci Process: process Hci Process.Model; server_process: process server_process.impl; connections Bus
data access Breakpedalpressed -> P_Hci_Process.Breakpedalpressed; data port Clutchpedalpressed -> P Hci—Process.Clutchpedalpressed; data port Autospd—Mph -> P_Hci_Process.Autospd_Mph; CEngspd一Rpm: data port Engspd_Rpm -> P一Hci一Process.Engspd—Rpm; data port P_Hci_Process.Cruiseactive -> Cruiseactive; Refspdl: event data port P—Hci—Process.Refspd—Mph -> Refspd_Mph; properties.
AADL—Properties: :Actual_Subprogram_Call=>reference server_process.server_thread.service applies to P_Hci_Process.Instrumentpanel.call_server; end Hci.Model; 上述AADL模型是一个航行控制系统(Cruisecontrol),它包含两个子系统S— Hci和S—Cruisecontrollaws,图1是其软构件结构图。子系统S—Hci中有两个进程,一个进程P—Hci—Process有4个线程,另一个进程sever—process包含1个线程;子系统S— Cruisecontrollaws有一个进程P—Cruisecontrol—Process,该进程包含2个线程。本实施例中将子系统S—Hci进行了转换,在子系统S—Hci中具体又给出了进程Hci—Process的转换过程,进程Hci—Process中具体给出了 Button—Pmel线程以及subpl—1子程序的转换过首先将AADL模型的数据构件转换为SystemC格式的仿真测试实例。在上述AADL 模型中数据构件Personnel—record包括了两个子构件name禾口 home—address以及一个子程序构件update—address,所以在数据构件Personnel—record转换得到的C++语言描述的Personnel—record类中包括了 name禾口 home_address两个属性以及一个公幵的update_ address 函数。进一步将AADL模型的进程Hci—Process转换为SystemC中包含一个模块SC— MODULE (Hci—Process)的文件〈P—Hci—Process. h>,将进程 Hci—Process 的实现转换为 SystemC 中定义的文件〈Hci—Process. cpp>。其中文件〈P—Hci—Process. h>包括以下内容
1、将进程端口及进程端口与其他构件端口间的连接进行转换。在AADL模型中进禾呈端□包括 Breakpedalpressed、Clutchpedalpressed> Autospd_Mph> Cruiseactive 禾口 Refspd_Mph,这些端口类型包括数据端口、事件数据端口。数据端口及数据端口连接的转换方法为将AADL模型的in、out、inout类型的数据端口分别转换为SystemC格式下基本端口类型SC_in<T>、sc_out<T>, sc_inout<T>的端口变量,其中T是端口传输数据的数据类型;将系统、子系统或进程中的子模块端口直接关联到其所属父/子模块的端口进行通讯, 将系统、子系统或进程中的模块端口绑定到信号scjignal而与其他同级模块的端口相连进行通讯;将线程的数据端口连接转换为信号scjignal类型变量。事件数据端口的转换方法为将事件数据端口转换为SystemC中的自定义端口 stportanterfaceType〉类型的变量,InterfaceType是端口所要连接通道的接口类型;事件数据端口连接的转换方法为 将参与事件数据端口连接的两个构件转换后,分别将两个转换后构件的事件数据端口变量与一个SC_fifo<T>通道类型的变量绑定并调用通道的read ()和writeO方法向通道读或写事件数据。2、将进程内的线程端口及线程端口与其他构件端口间的连接进行转换。在AADL IlMΦ^fMiM 01 Onnotoff>Incspeed>Decspd>Cruiseactive>Refspd_Mph>Activatel> Activate2、Cancel,这些端口类型包括数据端口、事件端口。数据端口及数据端口连接的转换方法上面已经给出,事件端口的转换方法为将AADL模型的事件端口转换为SystemC中的先进先出队列通道sc_fif0<T>类型的变量;事件端口连接的转换方法为将参与事件端口连接的两个构件转换后分别绑定到事件端口对应的通道变量,并调用通道的readO和 write ()方法向通道读或写事件。3、将进程内各子构件间的通信连接进行转换。转换方法根据各子构件的通信端口,选择采用上述数据端口、事件数据端口和事件端口的连接的转换方法。上述1、2、3点内容实现了进程端口及进程端口与其他构件端口间的通讯仿真。文件<P_Hci_Process. h>中还包括了声明线程转换的函数Button_Panel ()、 Drivermodelogic ()、void Refspd ()、void Instrumentpanel ()禾口声明线禾呈调用的子禾呈序转换的函数 subpl_l ()、subpl_2()、llamado (short in_parameter, short pi)禾口 call_ server ();在模块构造函数SC_CT0R(P_Hci_Process)中,注册进程Hci_Process包含的线程 Button_Panel、Drivermodelogic、Refspd 禾口 Instrumentpanel,并声明相应的敏感事件 elk、Breakpedalpressed 及 Clutchpedalpressed 禾口 Autospd—Mph。文件<Hci_Process. cpp>包括线程函数threadName的函数实现以及子程序的函数实现,这里以线程Button_Panel和子程序subpl_l为例。线程Button_Pane 1的转换方法为将AADL模型的线程Button_Pane 1转换为 SystemC 中的 SC_THREAD (Button_Panel),其中 Button_Panel ()为线程的 C++ 仿真函数,该仿真函数包括1、仿真线程初始化用wait(Init_execution_time,SC_MS)来模拟线程初始化时消耗的时间,Init_eXecution_time是定义的一个int型的变量,其值为线程的属性 Initialize_Execution_Time中规定的初始化执行时间最大与最小值之间的一个随机值;2、仿真子程序调用若线程中调用的子程序,则直接调用子程序经过步骤3转换后得到的SystemC格式的C++函数;本线程中没有子程序调用;
3、仿真线程行为附件将线程行为附件转换为函数体,函数体通过switch-case 语句实现,switch语句测试线程行为附件的状态,case语句测试线程行为附件状态转换的条件,在case语句内实现状态转换后的计算过程;本线程中没有线程行为附件;4、仿真线程端口与其他构件端口间的通讯采用前述的转换方法将线程端口及线程端口与其他构件端口间的连接进行转换;5、比较线程的执行时间与线程周期,若线程的执行时间没有到周期值,则线程消耗一定的时间直到该周期结束,采用的方法为通过在线程执行开始和结束分别加一个时间戳,由sc_time_stamp()获取当前仿真时间,分别存入时间变量start_time和final_ time中,两时间差与周期period比较,若小于周期,则执行语句wait (f inal_time-start_ time);6、采用 wait(final_execution_time,SC_MS)实现仿真 AADL 线程的终止消耗时间,final_execution_time 是 int 型变量,其值为 AADL 模型 Finalize_Execution_Time 属性中规定的终止执行时间最大与最小值之间的一个随机值;子程序subp 1_1的转换方法为将将AADL模型的子程序subpl_l转换为SystemC 格式的C++函数subpl_l (bool debug),若子程序带有参数,则其中in类型的参数作为函数的参数采用值传递方式传递到参数内部使用,out或inout类型参数作为函数的参数采用引用传递方式传递到参数内部使用;将AADL模型的子程序行为附件转换为函数体,函数体通过switch-case语句实现,switch语句测试子程序行为附件的状态,case语句测试子程序行为附件状态转换的条件,在case语句内实现状态转换后的计算过程。最后将AADL模型中子系统S_Hci转换为SystemC中包含一个模块SC_M0DULE (S_ Hci)的文件<S_Hci.h>,其中文件<S_Hci.h>包含按照前述方法将子系统端口转换,实现子系统端口的仿真;声明子系统中子构件Hci_Process、server_process的转换函数;在 SC_M0DULE (S_Hci)模块构造函数SC_CT0R(S_Hci),按照前述方法将子系统端口与其他构件端口连接进行转换,实现系统端口与其他构件端口连接的仿真。上述即生成了基于SystemC的AADL软构件模型仿真测试实例,通过撰写仿真启动和激励产生文件Curisejiiain. cpp,如图2所示,SystemC仿真内核支持仿真进程的调度执行,直接控制并发进程的调度策略,图3是基于SystemC仿真内核对AADL线程调度仿真结果的部分截图,显示了线程ButtoruPanel调度执行的起始时间、终止时间以及线程与其它线程的数据和事件的通讯过程。
权利要求
1. 一种基于SystemC的AADL软构件模型仿真测试实例生成方法,其特征在于包括以下步骤步骤1 将AADL模型的数据构件转换为SystemC格式的仿真测试实例,转换规则为如果数据构件的类型是SystemC支持的基本数据类型,则将数据构件转换为SystemC中的基本数据类型,否则转换为用户自定义的数据类型;步骤2:将AADL模型的构件端口和连接转换为SystemC格式的仿真测试实例,其中构件端口和连接包括数据端口和连接、事件端口和连接和事件数据端口和连接,各转换规则为转换数据端口和连接将AADL模型的in、out、inout类型的数据端口分别转换为 SystemC格式下基本端口类型sc_in<T>、sc_out<T>、sc_inout<T>的端口变量,其中T是端口传输数据的数据类型;将系统、子系统或进程中的子模块端口直接关联到其所属父/ 子模块的端口进行通讯,将系统、子系统或进程中的模块端口绑定到信号scjignal而与其他同级模块的端口相连进行通讯;将线程的数据端口连接转换为信号scjignal类型变量;转换事件端口和连接将AADL模型的事件端口转换为SystemC中的先进先出队列通道 sc_fifo<T>类型的变量;事件端口连接的转换方法为将参与事件端口连接的两个构件转换后分别绑定到事件端口对应的通道变量,并调用通道的readO和writeO方法向通道读或写事件;转换事件数据端口和连接将事件数据端口转换为SystemC中的自定义端口 sc_ port<InterfaceType>类型的变量,InterfaceType是端口所要连接通道的接口类型;事件数据端口连接的转换方法为将参与事件数据端口连接的两个构件转换后,分别将两个转换后构件的事件数据端口变量与一个sc_fifo<T>通道类型的变量绑定并调用通道的 readO和writeO方法向通道读或写事件数据;步骤3 将AADL模型的子程序构件转换为SystemC格式的C++函数,若子程序带有参数,则其中in类型的参数作为函数的参数采用值传递方式传递到参数内部使用,out或 inout类型参数作为函数的参数采用引用传递方式传递到参数内部使用;将AADL模型的子程序行为附件转换为函数体,函数体通过switch-case语句实现,switch语句测试子程序行为附件的状态,case语句测试子程序行为附件状态转换的条件,在case语句内实现状态转换后的计算过程;步骤4 将AADL模型的线程构件转换为SystemC中的SC_THREAD (threadName),其中 threadName是以线程名命名的C++函数,该函数实现以下部分仿真线程初始化用Wait(Init_exeCuti0n_time,SC_MS)来模拟线程初始化时消耗的时间,Init_execution_time是定义的一个int型的变量,其值为线程的属性Initialize_ Execution_Time中规定的初始化执行时间最大与最小值之间的一个随机值;仿真子程序调用若线程中调用的子程序,则直接调用子程序经过步骤3转换后得到的SystemC格式的C++函数;仿真线程行为附件将线程行为附件转换为函数体,函数体通过switch-case语句实现,switch语句测试线程行为附件的状态,case语句测试线程行为附件状态转换的条件, 在case语句内实现状态转换后的计算过程;仿真线程端口与其他构件端口间的通讯采用步骤2中的转换方法将线程端口及线程端口与其他构件端口间的连接进行转换;比较线程的执行时间与线程周期,若线程的执行时间没有到周期值,则线程消耗一定的时间直到该周期结束;采用wait (final_execution_time, SC_MS)实现仿真AADL线程的终止消耗时间, final_execution_time 是 int 型变量,其值为 AADL模型 Finalize_Execution_Time 属性中规定的终止执行时间最大与最小值之间的一个随机值;步骤5 将AADL模型的进程转换为SystemC中包含一个模块SC_M0DULE (进程名)的文件<P_进程名.h> ;将AADL模型的进程实现转换为SystemC中定义的文件 < 进程名.cpp> ; 文件<P_进程名.h>实现以下部分采用步骤2中的转换方法将进程端口及进程端口与其他构件端口间的连接进行转换, 实现进程端口及进程端口与其他构件端口间的通讯仿真;声明线程转换的函数,声明线程调用的子程序转换的函数;在模块构造函数函数SC_CT0R(P_进程名)中,注册进程包含的线程,并声明各线程的敏感事件;文件 < 进程名.cpp>中包含步骤4线程函数threadName的函数实现,以及步骤3中子程序的函数实现;步骤6 将AADL模型的系统构件转换为SystemC中包含一个模块SC_M0DULE (S_系统名)的文件 < 系统名.h>,文件 < 系统名.h>实现以下部分采用步骤2中的转换方法将系统端口进行转换,实现系统端口的仿真;声明系统子构件的转换函数;在SC_M0DULE(S_系统名)模块构造函数SC_CT0R(系统名)中,按照步骤2, 实现系统端口与其他构件端口连接的仿真。全文摘要
本发明提出了一种基于SystemC的AADL软构件模型仿真测试实例生成方法,首先给出了将数据构件、端口和连接转换为SystemC仿真测试实例的转换技术;然后,依据构件的包含关系,从构件树的底层(子程序)到树的中间层(线程、进程)逐步骤给出了将各构件转换为SystemC仿真测试实例的转换技术;最后给出了子系统和系统构件的转换技术。通过本发明,用户可以实现基于SystemC AADL软构件的仿真,包括软构件之间交互、执行时间和以及线程调度的仿真等。用户也可以将本发明与基于SystemC的AADL执行平台构件仿真相结合,对软硬件进行协同仿真,根据仿真结果迭代构造和精化设计模型,以尽早发现设计模型中存在的问题,保障设计模型的质量。
文档编号G06F11/36GK102231132SQ20111018287
公开日2011年11月2日 申请日期2011年6月30日 优先权日2011年6月30日
发明者朱宇峰, 朱晓燕, 董云卫, 马春燕 申请人:西北工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1