首页> 中国专利> 一种可重用的参考模型结构及其建模方法与函数库

一种可重用的参考模型结构及其建模方法与函数库

摘要

本发明提出了一种可重用的参考模型结构及其建模方法与函数库。该参考模型结构中,包含一种特殊的状态机核,可以从被验证设计的不同功能角度描述其内部状态,具有容错性和容非完整性,由抽象事件驱动,可以重用早期检验设计功能理解正确性时的分析数据。将参考模型分为不同且固定的耗时过程和非耗时过程,形式了统一的架构,提前将内部的协调工作写成函数库,使用时只需要通过用户自定义部分具体设计特有的属性,完成替换、回调、配置工作,就可以产生对应功能的参考模型,并且重用早期对状态和场景的分析。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-12-22

    授权

    授权

  • 2014-01-15

    实质审查的生效 IPC(主分类):G06F17/50 申请日:20130617

    实质审查的生效

  • 2013-12-18

    公开

    公开

说明书

技术领域

本发明涉及集成电路设计和验证领域,尤其是在数字集成电路验证的参考 模型设计流程中的可重用性方面。

背景技术

集成电路的设计规模和功能复杂度与快速上市时间要求严重不匹配的瓶颈 是功能验证环节。越早的发现设计中存在的问题,就会越大程度的减少研发成 本,并获得更大的利润率。所以电子系统级设计、性能评估、事务级建模与仿 真逐渐受到重视。项目早期事务级建模的粗粒度性可以从更宏观更抽象的角度 描述设计的功能属性,从一定程度上评定架构的性能,实现功能理解正确性的 检验,然而粗粒度性也同时使得早期的模型和寄存器传输级的设计实现存在不 同程度的偏差。如何重用早期建模时的分析数据,纠正与最终实现结构上的偏 差,以快速构建可以准确定位故障的参考模型,缩短验证时间,提高验证效率, 是产业界非常急迫的需求。

发明内容

本发明要解决的主要技术问题是,提供一种可重用的参考模型结构及其建 模方法与函数库,可以重用性能评估和检验功能理解正确性时构建的事务级分 析数据来构建参考模型,并修复和填充早期事务级分析模型中缺损的部分信息, 以实现参考模型与寄存器传输级设计实现功能的一致性。

为解决上述技术问题,本发明提供一种可重用的参考模型结构。该结构包 括:

1.时钟虚接口,复位虚接口。

2.输入输出时,用于连接事务级数据包通道(或者验证环境中其他验证组 件中的其他具有相同事务级数据包类型的端口)的事务级数据包端口。端口属 性分为阻塞和非阻塞,相同属性才可以连接。以及与端口匹配的缓冲区。从端 口到缓冲区的写入函数和从缓冲区到端口的读出函数。

3.参考模型引擎。主要包括功能核和状态机核两部分,以及进出两个核的 调度任务。

4.预判模块:根据各端口发来的事务级数据包信息,对现场工作场景进行 分析,得到综合的输入事务信息标签,将该标签和各事务级数据包打包成综合 的输入参考模型引擎的数据包,类型为input_transaction_enum,调用参考模 型引擎的input_transaction_op()任务将该数据包输入参考模型引擎。

5.直接时钟控制模块,即在参考模型中不放入事务级数据包进行统一处理, 而直接由输入时钟信号或参考模型内部条件控制的参考模型内部逻辑行为构成 的模块。

6.分配模块:将参考模型引擎产生的类型为output_transaction_enum的 综合的输出事务级数据包中的各事务级数据包,按照各输出端口的类型需要, 分别分发给各端口的缓冲区。

其中参考模型引擎中包含:

1.

state_enum类型的cur_state变量,表示参考模型引擎所处当前状态。

delay_mode_e类型的delay_mode变量,表示参考模型引擎选择的延时单 位。包括PREC I SE,CYCLE。PRECISE表示设定的延时单位为仿真的时间单位,CYCLE 表示设定的延时单位为周期数。

clk接口,当选择CYCLE类型的延时时,所需要参考的时钟。

input_event_enum类型的input_events[]数组,表示参考模型引擎中待 处理的事件队列。

input_event_enum类型的cur_event变量,表示参考模型引擎中当前要处 理的事件。

statemachine_core_enum类型的state_machine变量,表示参考模型引擎 中的状态机核。

function_core类型的function_core_instance变量,表示参考模型引擎 中的功能核。

internal_variables类型的internal_variable变量,表示参考模型引擎 中的所有内部变量。

input_transaction_enum类型的input_transactions[]数组,表示参考 模型引擎中待处理的事务级数据包队列。

input_transaction_enum类型的cur_transaction变量,表示参考模型引 擎中当前要处理的事务级数据包。

transition_enum类型的cur_transition变量,表示当前事件引发的状态 间转移。

2.input_transaction_op()任务,以预测模块打包的综合事务级数据包为 输入,以内部变量类internal_variables的实例internal_variable为输出。 任务内部对输入的数据包进行检查,检查是否参考模型引擎中已经注册的合法 输入事务级数据包类型。如果不存在,报告输入事务包类型不存在的信息;如 果存在,将事务级数据包放入待处理队列input_transactions。启动事务包处 理进程launch_transaction_process()。

3.set_delay_mode()任务,以延时枚举类delay_mode_e的实例mode为 输入参数,设置参考模型引擎中的延时枚举类delay_mode_e的实例delay_mode, 表示引擎中延时特性的单位。延时枚举类delay_mode_e的成员包括 PRECISE,CYCLE。PRECISE表示设定的延时单位为仿真的时间单位,CYCLE表示设 定的延时单位为周期数。

4.launch_transaction_process()进程,从事务级数据包待处理队列中取 出待处理的事务级数据包,检查该数据包是否合法。如果不合法,报告输入事 务包不合法的信息;如果合法,将参考模型引擎中的内部变量类 internal_variables的实例internal_variable中的state_enum类型的 internal_state变量赋值为参考模型引擎中的state_enum类型的cur_state变 量。通过function_core类型的function_core_instance实例的 setinputtransaction()任务设定input_transaction_enum类型的 input_transaction变量为cur_transaction。然后启动新进程,调用 function_core_instance的inT2inE()任务,根据该事务级数据包判断输入事 件input_event的枚举类型值。然后启动input_event_op()任务。

5.input_event_op()任务,输入input_event_e类型的input_event变 量,输出state_enum类型的state变量,输出transition_enum类型的 transition变量。检查输入的input_event变量的值是否状态机类 statemachine_core_enum的实例state_machine中已经注册的合法输入事件类 型。如果不存在,报告输入事件类型不存在的信息;如果存在,将输入事件放 入待处理队列input_events。启动输入事件处理进程launch_event_process()。

6.launch_event_process()进程。从待处理输入事件队列input_events 中取出待处理的输入事件,作为当前要处理的事件cur_event。根据当前状态 cur_state,当前事件cur_event,在state_machine中的状态间转移列表 transition[]中查找下一状态的标签,输出函数标签,输出事件标签。根据配 置的延时模式选择延时单位,完成确定状态转移过程消耗的延时。启动两个新 的进程,包括:1.根据输出函数标签和输出事件标签调用output_function_cb ()和output_event_cb()回调函进行对应的处理,完成即时处理。下一状态 的标签赋值给当前状态cur_state,并将当前状态记录到内部变量类 internal_variables的实例internal_variable中。2.调用功能内核 function_core_instance的outE2outT()任务,完成延时处理。一般是产生 输入的事务级数据包的过程。

7.initial_sm()任务。调用initial_sm_cb()回调函数。完成状态机的 初始化。

8.set_state_machine()任务。加载状态机核,将状态机的初始状态设 定为当前状态cur_state。完成对早期事务级状态机核的重用。

参考模型引擎的启动模式:

1.循环扫描式的启动。参考模型引擎在有综合的输入事务级数据包或输入 事件进入之前启动,启动后进行循环扫描,扫描到有输入事件或综合的输入事 务级数据包,就进行相应的处理。处理完后继续进行循环扫描。

2.调用式的启动。每次当有一个综合的输入事务级数据包或输入事件进入, 依次调用参考模型引擎中处理该输入事件或综合的输入事务级数据包的函数或 进程。

替换模块:将参考模型引擎中定义的统一的数据结构进行注册,在实际具 体实例的应用中替换成具体实例特有的数据结构类型。其中被替换的内容包括 input_transaction_enum,internal_variables,output_transaction_enum。 使用自定义的my_input_transaction_enum,my_internal_variables, my_output_transaction_enum替换上述三个类型。my_input_transaction_enum 中包含了所有各输入端口输入的事务级数据包的成员和综合的输入事务信息标 签,my_output_transaction_enum中包含了对所有各输出端口输出的事务级数 据包的成员,my_internal_variables中包含了具体实例中状态机中应有的所有 内部变量。

功能核包含:

1.input_transaction_enum类型的input_transaction变量,用于存储待 处理的综合输入事务级数据包。

2.setinputtransaction()任务,输入待处理的事务级数据包。

3.inT2inE()任务,调用inT2inE_cb()回调任务后执行inT2outT() 任务。功能为:根据待处理的综合的事务级数据包和引擎内部的变量,按照配 置各种从输入综合事务级数据包的确定到产生确定的输入事件之间的延时信息 进行延时,并计算得到当前事务级数据包所引发的输入事件。

4.outE2outT()任务,调用outE2outT_cb()回调任务。功能为:根据 输出事件标签,按照配置的各种从输出事件确定到产生确定的综合的输出事务 级数据包之间的延时信息进行延时,并计算综合的输出事务级数据包。该数据包 为综合的输出事务级数据包,包括给各输出端口缓冲区发送的输出事务级数据 包。

5.inT2outT()任务,调用inT2outT_cb()回调任务。功能为:对输入的 事务级数据包不能引起状态核中状态之间跳转时需要的输入事件时做出的处 理,按照配置的各种从输入事务级数据包不经过状态核而直接到产生确定的输 出事务级数据包之间的延时信息进行延时,并直接计算综合的输出事务级数据 包。

6.inE2inE()任务,调用inE2inE_cb()回调任务。功能为:检查当前输 入的综合的事务级数据包是否是引发层次化状态机中不同层次间状态间跳转所 需的输入事件。在inT2inE()任务调用inT2inE_cb()回调任务后执行。

7.outE2outE()任务,调用outE2outE_cb()回调任务。功能为:检查根 据当前输入事件和状态机核的当前状态查找到的输出事件标签是否是层次化状 态机中不同层次间状态间跳转所产生的输出事件。在outE2outT任务调用 outE2outT_cb()回调任务前执行。

回调模块:将参考模型引擎中需要插入具体实例特有功能的位置,即统一 架构以外的位置设置站位函数、任务或进程。

1.引擎回调类engine_cb,包含三个回调虚任务:initial_sm_cb()初始 化状态机内部的变量,包括状态的初始值;output_function_cb()状态转移 确定后根据输出函数标签执行即时输出函数;output_event_cb()状态转移确 定后根据输出事件标签执行即时输出事件。

2.功能核回调类function_core_cb,包含五个回调虚任务:inT2inE_cb() 根据待处理的综合的事务级数据包和引擎内部的变量,按照配置各种从输入综 合事务级数据包的确定到产生确定的输入事件之间的延时信息进行延时,并计 算得到当前事务级数据包所引发的输入事件。outE2outT_cb()根据输出事件 标签,按照配置的各种从输出事件确定到产生确定的综合的输出事务级数据包 之间的延时信息进行延时,并计算综合的输出事务级数据包。该数据包为综合的 输出事务级数据包,包括给各输出端口缓冲区发送的输出事务级数据包。 inT2outT_cb()对输入的事务级数据包不能引起状态核中状态之间跳转时需要 的输入事件时做出的处理,按照配置的各种从输入事务级数据包不经过状态核 而直接到产生确定的输出事务级数据包之间的延时信息进行延时,并直接计算 综合的输出事务级数据包,且该虚任务为inT2inE_cb()在回调后的默认执行 任务。inE2inE_cb()检查当前输入的综合的事务级数据包是否是引发层次化 状态机中不同层次间状态间跳转所需的输入事件。在inT2inE()任务调用 inT2inE_cb()回调任务后执行。outE2outE_cb()检查根据当前输入事件和 状态机核的当前状态查找到的输出事件标签是否是层次化状态机中不同层次间 状态间跳转所产生的输出事件。在outE2outT任务调用outE2outT_cb()回调 任务前执行。

使用时拓展上述回调类为my_engine_cbs,my_function_core_cb,然后重 写三个虚函数的实质内容。状态机核为早期事务级建模的重用信息,细节信息 已经存在所以不用回调。

状态机核:

1.该核是以抽象事件驱动的事务级状态机模型,即所描述的状态不是寄存 器传输级中基于周期判断的状态,而是抽象层次更高的行为级(或者功能级) 基于事件判断的状态。该状态机模型具有容错性,可以是功能不完整的状态机, 不影响状态机的运行。

2.该核类型定义为statemachine_core_enum。其中包括:状态机中所有状 态的集合,所有状态间有向连接弧以及通过该弧的权重的集合,所有状态间转 移的集合。每一个状态间转移包括:当前状态,输入事件,下一状态,输出函 数,输出事件。输出函数主要代表对状态机内部变量的运算过程。输出事件主 要代表对状态机对外输出变量的运算过程。且上述状态、弧、输入事件、输出 事件、输出函数都有枚举类型的标签信息实现。

3.该核在使用前需要配置内部状态、弧、弧权重、输入事件、输出事件、 输出函数,且该核可以作为早期粗粒度建模过程中的可重用模型信息。

4.该核本身只有功能信息,即默认情况下状态机跳转过程和事件的输入输 出以及输出函数的运行所需要的时间为零。当需要时间标注时,通过配置完成 这些过程实际的时间参数,就可以使该核具有时间信息。便于框架性能的评估。

参考模型中使用到的类型的说明:

internal_variables类表示了状态机中涉及的所有内部变量,其中 state_enum类型的成员变量internal_state为固有成员,用来表示状态的枚 举类型值。

input_event_enum类表示了状态机所能处理的输入事件,其中 input_event_e类型的成员变量input_event_name为固有成员,用来表示输入 事件的枚举类型值。

input_transaction_enum类表示了状态机所能处理的综合的输入事务级数 据包,其中input_transaction_e类型的成员变量input_transaction_name为 固有成员,用来表示综合各端口事务信息后的输入事务标签。

output_transaction_enum类表示了状态机输出的综合的事务级数据包,其 中state_enum类型的成员变量cur_state为固有成员,用来通知外界状态机 核所处的状态。

output_event_enum类表示了状态机的输出事件,其中output_event_e类 型的成员变量output_event_name为固有成员,用来表示输出事件的枚举类型 值。

output_function_enum类表示了状态机的输出函数,其中 output_function_e类型的output_function_name为固有成员,用来表示输出 函数的枚举类型值。

状态机中枚举类型的定义:

delay_mode_e类型定义延时单位,两个值PRECISE和CYCLE,PRECISE表示 设定的延时单位为仿真的时间单位,CYCLE表示设定的延时单位为周期数。

fsmstate_e类型定义状态机核的状态标签。

input_event_e类型定义状态机核的输入事件标签。

input_transaction_e类型定义状态机引擎的综合输入事务级数据包的标 签。

output_event_e类型定义状态机核的输出事件标签。

output_function_e类型定义状态机核的输出函数标签。

fsmarc_e类型定义状态机核中状态之间连接弧的标签。

配置模块:

1.配置时钟虚接口、复位虚接口。用实际的实例化接口替换虚拟接口。

2.配置事务级数据包端口取得对应类型数据包的时间。用于模拟端口接收 数据包过程的耗时。

3.配置事务级数据包端口发送对应类型数据包的时间。用于模拟端口发送 数据包过程的耗时。在参考模型之间进行连接时,发送耗时和其相连的接收该 数据包的参考模型中的接收端口上接收的耗时合并为一。即当不同的参考模型 进行事务级端口连接时,模拟取得数据包的时间要和发送该数据包的时间进行 合并处理。

4.配置与事务级数据包端口匹配的缓冲区大小。用于模拟FIFO功能或在上 一个数据包还未处理完前不使下一个进入的数据包丢失。

5.配置的延时模式选择延时单位。用于说明延时数值对应的时间单位。

6.配置确定状态转移过程需要的时间。用于模拟在接到输入事件后到确定 状态如何转移过程的耗时。

7.配置由输入的综合事务级数据包,当不经过状态核的处理,直接产生输 出的综合事务级数据包的过程需要的时间。

8.配置从得到输入综合事务级数据包到引起状态机核内部状态跳转需要的 输入事件所需的时间。用于模拟在得到输入综合事务级数据包后,再根据包中 的标签计算产生输入事件的耗时。

9.配置从得到输出函数和输出事件到产生输出事务级数据包需要的时间。 用于模拟在得到输出函数标签和输出事件标签后,再根据标签计算各端口对应 的事务级数据包过程的耗时。

10.配置参考模型引擎的启动模式。

11.配置各耗时过程的属性为阻塞或非阻塞。

本发明的有益效果是:上述状态机核的特殊结构使得该状态机打破了传统 意义上状态机完整性的要求。在工程师早期对设计的功能进行梳理的时候,对 复杂状态不能一次性或短时间内设计出最终版本时,使用本专利提出的状态机 核的特殊结构可以既不影响当前的使用过程也便于日后的重用。该状态机核不 以寄存器传输级要求的每周期进行判断,站在更抽象的层次进行建模,更减少 了仿真时间。该状态机核对于内部状态的设定不唯一,可以根据参考模型对应 的具体实例内部情况,站在不同的角度对状态进行描述,更能体现参考模型建 立过程中,对设计功能可能出现的各种工作场景周全的考虑。

功能核、替换模块、回调模块、直接时钟控制模块等内容的加入,可以纠 正参考模型与最终实现结构上的偏差,并且可以提高该参考模型结构的重用性。 配置参考模型引擎的启动模式,可以实现对事务包处理顺序性和并行性的控制。 对输入参考模型的数据包经过接收数据包、解读综合的输入事务级数据包提取 输入事件、确定状态的准确跳转、根据输出标签计算综合的输出事务级数据包、 根据综合的输入事务级事务包计算综合的输出事务级数据包、输出数据包的传 出等阶段的划分和分开设定处理所需的运行时间,可以达到统一的架构性。

附图说明

图1为本发明所述参考模型结构的示意图;

图2为本发明运用在芯片外设接口设计上的一个实施例;

具体实施方式

下面通过具体实施方式结合附图对本发明作进一步详细说明。

实施例1:

如图2所示,为利用本专利提出的参考模型结构、建模方法以及函数库建 立的APB总线到串口外设转换接口的参考模型,及其在验证环境中的使用。参 考模型包括:APB驱动事务端口、串口驱动事务端口、被APB读走的数据包端口、 被串口读走的数据包端口、预判模块、参考模型引擎(包括功能核和状态机核)、 直接时钟控制模块、时钟接口、复位接口、分配模块、替换模块、回调模块、 配置模块等。其中状态机核的建立站在被验证设计的发送FIFO是否空满的角度 来描述状态机,所以包括:IDLE,EMPTY,FULL等状态。延时模式delay_mode_e 选择CYCLE。综合输入事务级数据包的标签类型input_transaction_e包括 VIP_ONLY、APB_ONLY、APB_VIP。输入事件的标签类型input_event_e包括 SEQ_INIT_E,SEQ_FIFO_FULL_E,SEQ_FIFO_EMPTY_E,APB_READ_E, APB_WRITE_E,VIP_READ_E,VIP_WRITE_E。状态核输出事件的标签类型 output_event_e包括IDLE_E,EMPTY_E,FULL_E。状态核输出函数的标签类型 output_function_e包括IDLE_F,EMPTY_F,FULL_F。监视器将写事务传入驱动 端口,读出的数据包放入判决器。参考模型输出被APB和串口读走的数据包给 判决器。判决器对比期盼值和实际值产生判决结果

以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认 定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术 人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换, 都应当视为属于本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号