用于仿真片上仿真系统中的重置信号的方法和设备的制作方法

文档序号:6350124阅读:213来源:国知局
专利名称:用于仿真片上仿真系统中的重置信号的方法和设备的制作方法
技术领域
本发明涉及包括在网络中互连的至少一个处理器和一个或者多个外围单元的系统(诸如片上系统S0C)的仿真。
背景技术
片上系统SOC越来越倾向于向同一集成电路中收集硬件部件(比如异构处理器核芯、专用电路和存储器)以及在这些部件之间链接部件的复杂通信架构(称为“片上网络”N0C)。片上网络通常包括若干点到点数据链路,这些数据链路链接片上系统的硬件部件。由于片上系统的复杂性越来越高,所以希望实施允许在不同设计步骤测试系统的设计、建模和仿真工具以便能够在这些步骤中的每个步骤验证系统。一般而言,开发复杂系统(比如片上系统)从定义以非正式语言编写的规范这样的步骤开始。然后有定义或者选择算法从而使得有可能与规范匹配的步骤。可以使用高级语言(比如Matlab或者C++)来定义算法。定义算法使得有可能转向定义第一抽象级的模型(称为“事务级模型”TLM)的步骤,这些模型描述架构并且因此指定在硬件与软件之间的分布(定义硬件部件和由硬件部件执行的软件)。事务级模型可以收集功能模型PV(程序员视图)和定时模型PVT (程序员视图+定时)。功能模型使得例如有可能对在系统的硬件部件中嵌入的软件仿真。在功能模型中,在硬件部件之间的数据传送可以由理想的唯一通信信道(即具有无限制速率)仿真。定时模型使得有可能过早评估对架构的选择和线程在硬件与软件之间的分布。系统的硬件部件将考虑的时间约束取决于对输送的字大小和通信信道速率的选择。可以使用硬件系统建模语言(比如SystemC)来定义事务级模型,从而使得有可能通过如下模块代表硬件部件,这些模块在模块之间由连接到通信信道的端口链接。硬件和软件部件的行为由如下软件模块描述,这些软件模块用编程语言(比如C++)来编写并且可由仿真器执行。SystemC是Open SystemC Initiative(OSCI)开发的标准IEEE 1666-2005的硬件和软件描述语言主题。因此,系统的所有硬件和软件部件无论其性质和抽象级如何都可以使用SystemC来建模。后继开发步骤包括添加时钟概念以创建准确度为BCA(总线周期精确)周期的模型,该模型指定系统在对系统计时的时钟的每个周期内的行为。然后有用于定义寄存器传送级RTL的步骤,该RTL然后允许迅速和高效合成集成电路。RTL级使用语言(比如VHDL 或者Verilog)来定义每个比特在每个时钟脉冲的值。RTL级然后使得有可能定义如下逻辑门网络,这些逻辑门网络可以由布局和路由工具处理以获得如下二维结构,该二维结构作为用于为集成电路的制造制作掩模的基础。抽象级TLM、BCA和RTL允许在实施系统并且将它嵌入于集成电路中之前透彻研究系统架构的性能。然而,现有仿真工具不允许重置信号的传播在仅在抽象级RTL仿真的片上系统中被仿真。然而希望能够分析重置信号在来自抽象级TLM的仿真系统的全部或者部分中的传播和处理。更具体而言,系统在抽象级TLM由叠构(imbricate)部件或者模块和/或线程建模。模块之间通过可以由信道互连的端口通信。模块可以包括一个或者多个构成该模块的输入和/或输出点的端口。端口与一个或者多个包括如下函数声明(或者在C++术语中为方法)的接口相关联,该声明(或者方法)可以由端口或者通过信道链接到端口的其它模块所属的模块调用。信道是在模块之间的通信手段。它们可以对简单信号以及更复杂的通信手段建模,并且因此包括其它信道或者甚至模块。信道包括端口接口函数的C++代码。模块可以包括方法、线程和其它模块。方法包括在初始化系统时或者在事件例如在模块端口之一上出现时执行的函数。线程描述系统的功能或者行为并且仅在特定事件出现时由仿真器专门激活。线程例如在初始化系统时被起动一次并且包括如下无限循环,该循环具有用于等待事件的一个或者多个指令。如果线程结束,则它不再执行。仿真器包括具体执行通知事件并且激活方法和线程的核芯。对重置信号仿真意味着能够停止线程并且重置方法和线程。仿真器(比如 SystemC)现在仅允许重置整个系统,即重新起动整个情形。因此不可能对系统的部分重置仿真。不可能在重置期间测试在更具体抽象级的系统部分或者嵌入于系统的部件中的软件,这是由于重置要求完全停止仿真。

发明内容
因此希望能够至少部分在抽象级TLM对仿真系统中的部分重置信号及其线程进行仿真而不修改仿真器核芯。也希望能够重置模块内部的一些线程。也希望能够对作用于系统不同部分的若干重置信号进行仿真。一个实施例涉及一种用于对建模系统中的重置信号进行仿真的方法,该系统包括重置控制模块和待重置模块,该方法包括由控制模块的控制线程发出重置信号并且由待重置模块接收重置信号。根据一个实施例,该方法包括唤醒待重置模块的线程,该线程等待重置信号,如果待重置模块的线程由重置信号唤醒,则待重置模块的线程引发重置异常,并且如果引发重置异常,则使待重置模块的线程等待重引导信号,控制线程发出向控制模块发送的重引导信号,并且在待重置模块接收重引导信号之后激活待重置模块的线程,该线程执行并且等待重置信号。根据一个实施例,该方法包括声明待重置模块的方法对重置信号敏感,在模块接收重置信号之后声明待重置方法对重引导信号敏感,并且在模块接收重引导信号之后执行方法并且声明它对重置信号敏感。根据一个实施例,该方法包括在模块接收重置信号之后执行用于初始化模块的函数。根据一个实施例,系统的每个线程插入到无限循环中,无限循环包括用于等待重置信号的指令、继而为用于引发重置异常的指令、用于进入异常处理过程的指令,用于进入异常处理过程的指令包括用于等待重引导信号的指令。根据一个实施例,该方法包括将线程中的等待指令替换为等待指令、继而为用于引发如果重置信号已经由线程所属的模块接收则执行的重置异常的指令。根据一个实施例,该方法包括在事件列表中添加用于定义激活执行方法的事件列表的指令,该事件为方法所属的模块接收重置信号。根据一个实施例,该方法包括在系统中发出用于重置系统模块的部分的第一重置信号并且在系统中发出用于重置系统模块的另一部分的第二重置信号。根据一个实施例,该方法包括在控制模块中定义重置信号发出端口、定义待重置模块的重置信号接收端口并且将重置信号发出端口连接到重置信号接收端口。一个实施例也涉及一种仿真系统,该系统包括重置控制模块和待重置模块,控制模块包括配置成发出重置信号的线程,待重置模块包括将在模块接收重置信号之后重置的线程。根据一个实施例,该系统被配置成实施先前定义的方法。根据一个实施例,待重置模块包括声明为对重置信号敏感、在接收重置信号之后声明为对重引导信号敏感并且在接收重引导信号之后执行而且声明为对重置信号敏感的待重置方法。根据一个实施例,模块包括在模块接收重置信号之后执行的初始化函数。根据一个实施例,控制模块包括重置信号发出端口,并且待重置模块包括与控制模块的发出端口连接的重置信号接收端口。本发明也涉及一种保存于支持体上的计算机可读和可执行的程序,该程序被配置成在程序由计算机执行时实施先前定义的方法。


下文将关于但不限于以下附图描述本发明的实施例,其中-图1示意地示出了系统的例子,-图2示意地示出了系统模块的例子,-图3是示出了在发出重置信号之后在系统中触发的操作的时间图,-图4示意地示出了可以部分重置的系统的另一例子。
具体实施例方式图1示出了在抽象级TLM(抽象级模型)仿真的系统,其包括若干模块TMR、MEM、 CP1、CP2,这些模块在它们之间由总线ADB链接。模块TMR和MEM例如对计数器和存储器进行仿真。模块CPl和CP2例如对处理器和发生器进行仿真。模块TMR由中断链路链接到模块 CP1。根据一个实施例,该系统包括用于控制重置信号RCTL从而对重置信号管理电路进行仿真的模块。模块RCTL包括重置信号发出端口 RST,其连接到用于初始化待重置模块 TMR、MEM、CP1、CP2 的端口。图2示出了包括若干输入和/或输出端口以及线程PRC的模块CP的例子。线程 PRC包括若干操作(其中具有初始化操作hit和在操作hit之后执行的操作01-04、W)。 操作01-04、W在它们之间形成如下无限循环,该循环包括用于由仿真器触发的等待指令W。 指令W可以指定一个或者多个必须重新激活线程的事件。图3示出了在包括两个模块CP和RCTL(其中具有重置信号控制模块RCTL)的系统中传播和处理重置信号的步骤。模块RCTL包括在起动系统仿真时激活的线程IPR。模块 CP包括配置成在初始化模块CP时起动的方法MTH和线程。模块RCTL包括重置信号发出端口 P1,而模块CP包括用于接收重置信号的端口 P2。在模块RCTL接收重置命令时,线程II3R执行步骤Si、S2。在步骤Si,线程IPR向模块CP的重置端口发送重置信号RST。在步骤S2,线程ira等待如下时段,该时段足以允许由系统的待重置模块执行初始化进程。模块CP接收信号RST触发在系统初始化时执行的模块CP的线程和方法中的进程。在模块CP接收信号RST时,仿真器核芯执行模块的对该事件敏感的方法、唤醒等待该事件的线程并且执行模块的重置函数。方法MTH执行步骤S2和S3。在步骤S2,如果将在初始化模块CP时激活方法MTH, 则方法MTH声明本身仅可由模块CP的重引导事件STT激活(步骤S4)。此外,线程PRC在模块CP接收信号RST时被唤醒并且执行步骤S5至S8。在步骤S5和S6,如果接收的事件为重置事件RST,则线程PRC引发链接到事件RST的异常。如果引发异常,则执行步骤S7和 S8。在步骤S7,线程PRC测试该异常的性质。在步骤S8,如果引发的异常链接到事件RST, 则线程PRC等待重引导事件STT。在重置进程结束时触发的步骤S9,模块CP执行初始化模块的局部变量的函数。在步骤S10,模块RCTL的初始化线程II3R停止等待并且执行步骤SlO和S11。在步骤S10,线程ira发送系统的重引导事件STT。向模块CP的重置端口发送该事件。接收该事件激活在步骤S12执行的方法MTH。在步骤S13,方法MTH声明本身对重置事件RST敏感。接收事件STT也唤醒线程PRC,该线程在步骤S14执行直至达到用于在步骤S15等待新事件RST的指令。引发异常使得有可能在模型中的相继函数调用的堆栈中自动上升,这允许重置线程。在一个实施例中,可以用SystemC仿真器如下地实施先前描述的步骤Sl至S15。常规上如在附录1中详述的那样定义系统的模块CP。附录1描述一种对用 SystemC仿真的模块CP进行编码的方式。将模块CP定义为如下结构块,在该结构块内具体的实例化线程和方法。模块CP可以包括用于与外界、线程、方法、变量和构造函数 (constructor)通信的输入和/或输出端口。模块构造函数允许模块所需要执行的所有初始化。模块CP也包括模块元素并且具体为方法和线程的部分实例化。因此,在附录1的例子中,模块CP包括方法MTH和线程PRC。通过方法或者线程的声明和记录来执行该方法或者线程的实例化。激活方法或者线程由SystemC核芯的调度器执行。向每个方法和线程分配如下默认灵敏性列表,该列表定义激活该方法或者线程的事件。在附录1的例子中,方法 MTH的灵敏性列表包括事件evl。方法或者线程的实例化也包括由形式为指令序列的方法 "void CP::MTH()”和线程“void CP: PRCO ”执行的进程。线程一般包括如下无限循环, 该循环包括用于等待事件的一个或者多个指令(等待指令),从而一旦线程由核芯起动,它就仅停止于这些等待指令。方法在属于该方法的灵敏性列表的事件到达时由核芯起动。函数nextjriggerO使得有可能在新事件列表已经在函数的参数中传递时修改方法的灵敏性列表或者在不使用参数调用函数时让事件列表被声明。为了能够处理重置命令,如在附录2中详述的那样修改模块CP。在附录2中, 修改模块CP的代码以包括重置信号RST的具体管理库。模块CP 也包括关于重置信号 "public dvk_tlm_reset: :tlm_reset”的管理的类的继承指令。模块CP的代码也包括添加对信号RST和STT的接收的端口 “reset”的声明,并且在模块的方法和线程的声明中声明将在显露(apparition)用于模块的每个线程PRC的信号RST TLM_RESET_SC_THREAD_ IMPLEMENT (PRC)期间起动的线程。模块CP也包括将在信号RST的进程结束时调用的、用于重置模块变量的函数resetjnitializeO。模块CP在它的构造函数部分中包括用于利用参数中的“reset”端口来构造重置信号的管理类的指令“dvk_tlm_reSet tlm_ reset (reset) ”、用于构造“reset”端口的指令“reset ( “reset”)”和用于连接端口 “reset,, 的指令“reset (*this) ”。方法和线程的实例化部分也包括向事件RST以及线程PRC的修改型声明宏指令“TLM_RESET_SC_THREAD (PRC),,添加方法的灵敏性,其中以线程名称为参数。在线程PRC的进程中,指令wait ()替换为指令tlm_Wait()。也通过如下方式来修改方法MTH的进程添加对函数tlm_reset_sc_method_start (bool)的调用,其中以布尔真或者假作为关于是否必需在每次接收信号RST时初始化方法的参数。对方法MTH的函数next_ trigger ()的可能调用替换为对函数tlm_next_trigger ()的调用。
线程TLM_RESET_SC_THREAD_IMPLEMENT (PRC)向无限循环中插入线程PRC的进程、 继而为对函数TLM_wait (RST)的调用。函数TLM_wait (RST)调用函数wait (RST)以等待事件RST、然后如果已经激活重置过程(指令抛出(throw))则引发重置异常。在线程TLM_ RESET_SC_THREAD_IMPLEMENT (PRC)中调用函数TLM_wait (RST)之后为用于处理重置异常的指令(指令抓取(catch)),一旦已经引发异常就执行该指令并且如果引发的异常链接到重置事件RST则该指令触发执行重置进程序列。重置进程序列对重置线程数目计数,并且如果已经重置模块的所有线程,则模块的重置进程视为实现。重置进程序列以调用函数 wait (STT)等待引导事件STT而告终。提供线程TLM_RESET_SC_THREAD_IMPLEMENT (包括模块的每个线程)使得有可能避免线程(该线程已经通过跳出它的内部无限循环来实现它的进程)在模块CP接收重置信号时再次被激活。提供在检测到显露信号RST之后引发的异常允许无论用于等待信号RST的指令在线程进程中的位置如何都以线程的重置进程为中心。方法MTH调用的函数tlm_reset_sc_method_start (bool)测试是否在处理事件 RST并且是否必须初始化该方法。如果是这种情况,则通过对函数nextjriggerO的调用将事件STT置于方法的灵敏性列表中。结果是在模块CP接收事件STT时线程PRC在它的引导点被重新激活,并且如果方法MTH必须起动仿真则执行方法MTH。在模块RCTL发出事件RST之后在必须重置的所有模块、线程和方法中进行附录2 中表明的对模块的修改。因此有可能对重置信号在事务级TLM建模的系统中的传播和处理进行仿真而无需修改仿真器核芯。也可以通过定义由一个或者多个重置控制模块发出的若干重置信号并且通过将重置信号发出端口连接到在待重置的模块上提供的用于接收这样的信号的端口来在系统中定义若干重置信号路径。因此,图4示出了与图2中所示系统不同的系统,该系统与图2 中所示系统的不同之处在于它包括两个重置控制模块RCTLl和RCTL2(每个模块RCTLl和 RCTL2都包括重置信号发出端口)。模块RCTLl的重置信号发出端口连接到模块TMR和MEM 并且发出重置信号RS1。模块RCTL2的重置信号发出端口连接到模块CPl和CP2并且发出重置信号RS2。附录3示出了由宏指令TLM_RESET_SC_THREAD_IMPLEMENT修改的线程的一个实施例。宏指令TLM_RESET_SC_THREAD_IMPLEMENT接收模块线程的名称作为参数(在图3中的
8例子为PRC)。宏指令创建如下新函数,该函数的名称是以“tlm_reSet_”为前缀的、在宏指令的参数中传递的线程的名称(在图3的例子中为tlm_reSet_PRC)。宏指令_RESET_SC_THREAD_IMPLEMENT创建的线程从无限循环的指令“ do,,开始,该指令与定义无限循环结束的、在线程结束时的指令“while(l)” 一起工作。线程然后包括指令“try”,该指令定义对引发异常敏感的指令序列。这一指令序列包括用于调用 "name () ”线程(名称“name”在线程TLM_RESET_SC_THREAD_IMPLEMENT的参数中传递)的指令、用于等待事件RST的指令“wait(RST) ”和用于测试存在进行中的重置进程的指令。在图 3的例子中,“name”为PRC。如果重置进程在进行中,则执行用于引发异常的指令“throw” 以引发重置异常“reset_exc印tion”。线程TLM_RESET_SC_THREAD_IMPLEMENT然后包括指令“catch”,该指令引入如果引发异常则执行的指令序列。这一指令序列包括用于等待重引导信号STT的指令。根据异常的已知操作原理,一旦引发异常并且无论用于引发异常的指令“throw”在线程TLM_RESET_SC_THREAD_IMPLEMENT的代码中的位置如何都执行指令 “catch”。换而言之,线程“name”因此置于无限循环中,在该无线循环中线程“name”被调用并且等待重置信号RST。在等待时段结束时,如果初始化信号已经出现,则引发重置异常。 在用于处理重置异常的序列中,线程等待重引导信号STT。然后执行无限循环的新迭代。本领域技术人员将清楚本发明易有各种实施例。因此本发明并不限于使用 SystemC0事实上,本发明可以与其它仿真器一起实施以及实施于在另一抽象级建模的系统中。附录 权利要求
1.一种用于对建模系统中的重置信号进行仿真的方法,所述建模系统包括重置控制模块(RCTL)和待重置模块(CP),所述方法包括由所述控制模块的控制线程(IPR)发出重置信号(RST)并且由所述待重置模块接收所述重置信号,其特征在于所述方法包括唤醒所述待重置模块(CP)的线程(PRC),所述线程(PRC)等待重置信号,如果所述待重置模块的所述线程由所述重置信号(RST)唤醒,则所述待重置模块的所述线程引发重置异常,并且如果引发重置异常,则使所述待重置模块的所述线程等待重引导信号(STT),由所述控制线程(IPR)发出向所述控制模块(RCTL)发送的所述重引导信号,并且在所述待重置模块接收所述重引导信号之后激活所述待重置模块的所述线程,所述线程执行并且等待所述重置信号。
2.根据权利要求1所述的方法,包括声明所述待重置模块(CP)的方法(MTH)对所述重置信号(RST)敏感,在所述模块(CP)接收所述重置信号(RST)之后,声明所述待重置方法对所述重引导信号(STT)敏感,并且在所述模块(CP)接收所述重引导信号之后,执行所述方法并且声明它对重置信号敏感。
3.根据权利要求1或者2所述的方法,包括在所述模块接收所述重置信号(RST)之后, 执行用于初始化所述模块(CP)的函数。
4.根据权利要求1至3之一所述的方法,其中所述系统的每个线程被插入到无限循环中,所述无限循环包括用于等待所述重置信号(RST)的指令、继而为用于引发重置异常的指令、用于进入异常处理过程的指令,所述用于进入异常处理过程的指令包括用于等待所述重引导信号(STT)的指令。
5.根据权利要求1至4之一所述的方法,包括将线程中的等待指令替换为等待指令、 继而为用于引发如果所述重置信号已经由所述线程所属的所述模块接收则执行的所述重置异常的指令。
6.根据权利要求1至5之一所述的方法,包括在事件列表中添加用于定义激活执行所述方法的事件列表的指令,事件为所述方法所属的所述模块接收所述重置信号。
7.根据权利要求1至6之一所述的方法,包括在所述系统中发出用于重置所述系统模块的部分(TMR,MEM)的第一重置信号(RSl)以及在所述系统中发出用于重置所述系统模块的另一部分(CP1,CP》的第二重置信号(RS2)。
8.根据权利要求1至7之一所述的方法,包括在所述控制模块(RCTL)中定义重置信号发出端口(Pl)、定义所述待重置模块(CP)的重置信号接收端口(P》并且将所述重置信号发出端口连接到所述重置信号接收端口。
9.一种仿真系统,包括重置控制模块(RCTL)和待重置模块(CP),所述控制模块包括配置成发出重置信号(RST,STT)的线程(IPR),所述待重置模块包括将在所述模块接收重置信号之后重置的线程(PRC),其特征在于所述系统被配置成实施根据权利要求1至8之一所述的方法。
10.根据权利要求9所述的仿真系统,其中所述待重置模块(CP)包括声明为对所述重置信号(RST)敏感、在接收所述重置信号之后声明为对所述重引导信号(STT)敏感并且在接收所述重引导信号之后执行而且声明为对所述重置信号敏感的待重置方法(MTH)。
11.根据权利要求9或者10所述的仿真系统,其中所述模块包括在所述模块接收所述重置信号(RST)之后执行的初始化函数。
12.根据权利要求9至11之一所述的仿真系统,其中所述控制模块(RCTL)包括重置信号发出端口(Pl),并且所述待重置模块(CP)包括与所述控制模块的所述发出端口连接的重置信号接收端口(P2)。
13.一种保存于支持体上的计算机可读和可执行的程序,其特征在于所述程序被配置成在所述程序由计算机执行时实施根据权利要求1至8之一所述的方法。
全文摘要
本发明涉及一种用于对建模系统中的重置信号进行仿真的方法,该建模系统包括重置控制模块(RCTL)和待重置模块(CP),该方法包括控制模块的控制线程(IPR)发出重置信号(RST)并且待重置模块接收重置信号;唤醒待重置模块(CP)的线程(PRC),等待重置信号,如果线程(PRC)由重置信号唤醒,则由线程(PRC)激活重置异常,并且如果引发重置异常,则使线程(PRC)等待重引导信号(STT),控制线程向待重置模块发送重引导信号,并且在接收重引导信号之后激活线程(PRC),线程(PRC)执行并且等待重置信号。
文档编号G06T17/05GK102483861SQ201080035485
公开日2012年5月30日 申请日期2010年6月4日 优先权日2009年6月30日
发明者M·菲安迪诺 申请人:意法半导体(格勒诺布尔2)公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1