时序匹配方法及相关装置与流程

文档序号:29493768发布日期:2022-04-06 14:18阅读:252来源:国知局
1.本技术实施例涉及计算机
技术领域
:,尤其涉及一种时序匹配方法及相关装置。
背景技术
::2.在计算机运行过程中,需要在系统总线和储存器之间进行数据传输,为了方便存储器(比如:ddr,即双倍速率同步动态随机存储器)和系统总线之间数据的传输,在存储器和系统总线之间设置内存控制器(即ddr控制器),负责解析存储器发出的指令、存储器和系统总线之间的数据传输、指令执行时的时序匹配等。3.当计算机系统访问存储器时,系统总线向ddr控制器提出请求,ddr控制器将请求转换成存储器指令,指令经由phy传输到存储器,然后存储器解析指令并完成响应。为了提高系统灵活性,可以在ddr控制器内部建立一个可编程指令队列,通过软件接口把需要运行的指令序列写入到指令阵列中,然后控制器逐条载入并执行指令阵列中的指令。4.现有技术中,需要用户预先确定好指令序列,同时为每条指令都计算出延时时序;接着,通过系统接口,顺序写入可编程指令队列中。当某条指令被取出执行时,延时逻辑会延迟该指令配置的时序,然后开始下一条指令的读取、执行、延时等操作。5.但是,上述技术中,在读取指令时,并不知道下一条指令的类型,因此,用户必须预先知道前后指令,计算好前后指令间的时序,然后把当前指令到下一条指令之间的延时时序,配置给当前指令,造成了指令队列灵活性差,人工计算量大,出错率高,增大了调试的难度,影响效率。6.因此,如何灵活匹配指令执行延时,提高时序匹配的执行效率,就成为亟需解决的技术问题。技术实现要素:7.本技术实施例解决的技术问题是如何灵活匹配指令执行延时,提高时序匹配的执行效率。8.为解决上述问题,本技术实施例提供一种时序匹配方法及相关装置,包括:9.第一方面,本技术实施例提供一种时序匹配方法,适用于可编程指令队列,包括:10.获取当前待执行指令和下一待执行指令;11.将所述当前待执行指令和所述下一待执行指令进行拼接,得到索引指令组合;12.根据所述索引指令组合在预先获取的时序表中查询,获取所述索引指令组合的执行延时,其中,所述时序表包括各个可执行指令组合对应的执行延时;13.根据所述执行延时将所述下一待执行指令调整为新的当前待执行指令。14.第二方面,本技术实施例提供一种时序匹配装置,适用于可编程指令队列,所述装置包括:15.获取模块,适于获取当前待执行指令和下一待执行指令;16.组合模块,适于将所述当前待执行指令和所述下一待执行指令进行拼接,得到索引指令组合;17.执行延时查询模块,适于根据所述索引指令组合在预先获取的时序表中查询,获取所述索引指令组合的执行延时,其中,所述时序表包括各个可执行指令组合对应的执行延时;18.指令调整模块,适于根据所述执行延时将所述下一待执行指令调整为新的当前待执行指令。19.第三方面,本技术实施例还提供一种存储介质,所述存储介质存储有时序匹配的程序,以实现如第一方面任一项所述的时序匹配方法。20.第四方面,本技术实施例还提供一种电子设备,包括至少一个存储器和至少一个处理器;所述存储器存储有时序匹配程序,所述处理器调用所述程序,以执行如第一方面任一项所述的时序匹配方法。21.与现有技术相比,本技术实施例的技术方案具有以下优点:22.在本技术实施例所提供的时序匹配方法,预先存储包括提前计算好的各个指令组合之间的执行延时的时序表,当进行指令执行时,首先获取两个指令即当前待执行指令和下一待执行指令,然后将获取到的两个指令进行拼接得到索引指令组合,根据所述索引指令组合在预先获取的时序表中查询对应的执行延时,最后根据查询到的执行延时将下一待执行指令调整为新的当前待执行指令。23.这样,在执行可编程指令队列中的各个指令时,首先,可以根据获取到的当前待执行指令和下一待执行指令组成的索引指令组合直接从时序表中进行查询,不需要每次进行可编程指令队列的编写时,都根据可编程指令队列的顺序,计算各个当前待执行指令与该指令相邻的下一待执行指令之间的执行延时,并提前配置给各个当前待执行指令,降低了计算复杂度,减少了计算的工作量,简化了可编程队列的编写流程;其次,不需要为了减少各个指令组合之间的执行延时的计算量而预先对可编程指令队列中的每一个指令都赋予一个足够大的执行延时以保证各个指令之间能够正常执行,避免了因分配过多过大的执行延时而造成的指令执行时间过长,从而增大了指令执行功耗的问题;最后,时序表中存储的各个指令组合的执行延时可以为实现不同功能的任意指令组合提供对应的执行延时,不需要因为要实现不同的功能而使得可编程指令队列中的指令组合发生变化时需要重新提前配置所有指令的执行延时,仅需要在指令执行过程中,确定执行延时即可。24.可见,本技术实施例所提供的时序匹配方法,可以根据在预先建立好的存储有各个可执行指令组合的时序表中查询到不同指令组合的执行延时,可以对实现不同功能的指令组合实现灵活匹配各个不同指令组合对应的指令执行延时,提高时序匹配的执行效率。附图说明25.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。26.图1是可编程指令队列中的部分指令执行延时约束表;27.图2是图1所示的执行延时约束表中部分执行延时示意图;28.图3是本技术实施例所提供的指令执行的一架构系统图;29.图4是本技术实施例提供的数据处理方法的一流程示意图;30.图5是本技术实施例所提供的时序匹配装置的可选结构框图。具体实施方式31.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。32.可编程指令队列中包含有能够执行不同系统功能的指令组合,每一个指令组合包含的指令对应有一个基本操作。可编程指令队列中的各个指令组合可以通过软件经系统接口编程写入,然后由指令读取逻辑读取指令后,交由指令执行逻辑执行。33.因此,可编程指令队列在对于需要执行多个不同指令组合以实现不同的系统功能的设备中是非常实用的。34.例如,ddr控制器的使用,ddr控制器存在于双倍数据速率同步动态随机访问存储器dram和计算机系统总线之间。当计算机系统访问dram时,系统总线向ddr控制器提出请求,ddr控制器将请求转换成dram指令,dram指令经由物理层传输到dram,然后dram解析指令并完成响应。35.dram本身需要不断地进行刷新(refresh)去保留数据,刷新的方式主要有自动刷新(autorefresh)和自刷新(selfrefresh)两种,前者需要外部系统时钟,后者完全根据内部计数器来实现自刷新操作。此外,dram还需要执行其他任务,比如上述计算机系统对dram的访问,dram需要有相应的响应完成计算机系统的访问。对于dram需要执行的本身需要执行的任务以及计算机系统发出的任务均由ddr控制器进行管理,ddr控制器向dram发出一系列不同指令组合,来完成对dram的控制和配置,比如以下不同功能实现的指令组合:36.(1)控制dram进入和退出自刷新状态的指令组合为:37.des(空操作指令,表示没有该时钟周期没有实际操作)-》sre(dram执行自刷新)-》延迟tcslcycles(协议规定时间,即sre指令后,cs_n必须持续保持为低的时间)-》srxsequence(退出自刷新)-》延迟txscycles(等待txs个周期。txs是协议规定时间,即从推出自刷新状态到一下一个不需要dll锁存的有效指令之间的时间)-》mrws(模式寄存器写入)-》mpcszqcal(通过mpc指令发出zqcalibratoin操作)-》s0(正常工作状态);38.(2)控制dram切换频率的指令组合为:39.mrws(模式寄存器写入)-》vrefca(vrefca指令)-》des(空操作指令,表示没有该时钟周期没有实际操作)-》sref(进入自刷新的指令,且伴随频率改变)-》延迟tcslcycles(sref指令后,cs_n必须持续保持为低的时间)-》srxsequence(退出自刷新)-》延迟txscycles(协议规定时间,即从推出自刷新状态到一下一个不需要dll锁存的有效指令之间的时间)-》mrws(模式寄存器写入)-》mpcszqcal(通过mpc指令发出zqcalibratoin操作)-》s0(正常工作状态);40.(3)在控制dram切换1n和2n模式时的指令序列为:41.des(空操作指令,表示没有该时钟周期没有实际操作)-》sre(进入自刷新指令)-》延迟tcslcycles(协议规定时间,即sre指令后,cs_n必须持续保持为低的时间)-》srxsequence(退出自刷新)-》延迟txscycles(协议规定时间,即从推出自刷新状态到一下一个不需要dll锁存的有效指令之间的时间)-》mrws(模式寄存器写入)-》mpcszqcal(通过mpc指令发出zqcalibratoin操作)-》mpcsset1n/2n(通过mpc指令发出设置1n模式或者2n模式)-》s0(正常工作状态)。42.可以看到,上述每个用于控制dram自刷新状态和其他执行任务模式的指令组合中的各个指令包含有一些通用的、模式化的指令,如des指令、mpcszqcal指令、mrws指令、srxsequence指令等,当然上述仅为说明所展示的部分例子,实际应用中,包含有很多其他通用的、模式化的指令。43.而在配置dram参数时,根据具体的应用场景,所需指令以及指令的执行顺序,需要灵活的调整。为了提高系统灵活性,就可以在ddr控制器内部建立一个可编程指令阵列,通过软件接口把需要运行的指令序列写入到指令阵列中,然后ddr控制器逐条载入并执行可编程指令队列中的指令。同时,ddr控制器执行可编程指令队列中的各个指令时,前后两条指令之间的时间间隔必须符合ddr协议的严格规定,以确保相邻指令都得以正确执行。可编程指令队列中的指令不会再由ddr控制器重新仲裁,而是由ddr控制器的指令执行逻辑直接执行。因此,可编程指令队列在执行时必须控制各个相邻指令之间的执行延时,完成时序匹配才能够确保指令可以正常执行。44.为方便理解,请参考图1和图2,图1是可编程指令队列中的部分指令执行延时约束表,图2是图1所示的执行延时约束表中部分执行延时示意图。45.如图1所示,图1中从左向右第一列表示的是可编程指令队列中当前待执行指令的指令名称,从左向右第二列表示与当前待执行指令相邻的下一待执行指令的指令名称,为了能够控制dram执行不同的任务,需要不同的指令组合实现ddr控制器控制dram。因此,一个当前待执行指令可以匹配有多个不同的下一待执行指令。46.如图1所示,当前待执行指令为mrr指令时,与其相邻的下一待执行指令可以为:mrr,mrw,mpc,vrefca等多个不同指令,这样就会有不同的指令组合,实现不同的功能执行,相应的也会有与各个不同指令组合相对应的各个执行延时。47.继续参考图1,当前待执行指令mrr和下一待执行指令mrr之间的执行延时表示为tmrr,对应到图2中可以看到执行延时tmrr对应的执行延时的时序值为max{14ns,16nck},其表示当前待执行指令mrr到下一待执行指令mrr之间的执行延时必须大于或等于14ns和16nck之间的最大值。48.对于使用可编程指令实现指令间按照执行延时顺序执行的设计,在现有技术中,用户预先定义好指令序列,同时为每条指令都计算出执行延时;然后,通过系统接口,顺序地写入可编程指令队列中。当某条指令被取出执行时,延时逻辑会延迟该指令配置的执行延时,接着开始下一条指令的读取、执行、延时等操作。49.但是,现有技术在读取指令时,并不知道下一条指令的类型,因此,用户必须预先计算前后指令间的执行延时,然后把当前指令到下一条指令之间的执行延时,配置给当前指令。50.然而,通过人工计算执行延时,难以全面精确考虑各种变量,出错几率较大。而且指令队列中由于被预先写入大量的指令,用户必须为每条指令计算执行延时,增大了工作量;为了满足各种系统功能的实现,用户经常需要自定义指令队列,而一旦指令队列变化,用户就必须重新计算并配置所有执行延时,灵活性差;并且soc和post-silicon级别的测试非常耗时,如果人工计算指令队列执行延时有误,则需要反复调试,影响效率。51.因此,为了解决上述问题,本技术实施例提出了一种时序匹配方法及相关装置,可以实现灵活匹配指令执行延时,提高时序匹配的执行效率。52.图3是本技术实施例所提供的指令执行的一架构系统图。53.如图中所示,该架构系统包括:可编程指令队列和时序匹配器10、系统指令产生逻辑20、指令选择与执行逻辑30、指令执行接口40、指令目标50。54.可编程指令队列和时序匹配器10可以用于实现本技术实施例所提供的时序匹配方法。55.系统指令产生逻辑(systemcommandgeneratelogic)20根据系统访问需要,产生实际的指令。通常这部分是系统实时工作的重要组成部分。56.指令选择与执行逻辑(commandmux&executelogic)30用于选择并执行接收到的指令,既包括来自可编程队列和时序匹配器(programmblecommandqueuetimingadaptor)10的指令,也包括系统指令产生逻辑(systemcommandgeneratelogic)20的指令。57.基本上,可编程队列和时序匹配器10与系统指令产生逻辑20需要互斥地控制指令选择与执行逻辑30。为了提高系统设计冗余度,可以预留部分系统指令,使得在可编程队列和时序匹配器10控制指令选择与执行逻辑30时,系统指令产生逻辑20仍然可以发出预留部分系统指令;同时,可编程队列和时序匹配器10要及时有效地让出指令选择与执行逻辑30的控制权,直到系统指令产生逻辑20发出的预留指令完成了响应。58.指令执行接口(interface)40是位于指令选择与执行逻辑30和指令目标50之间的接口,实现两者间的协议通讯。对于ddr来说,这是dfi接口。59.指令目标(commandtarget)50是指令操作的目标,通过指令执行接口40(interface),实现和指令选择与执行逻辑30的协议通讯。60.以上是图3所示的5个组成逻辑之间的联系,下面介绍本技术实施例所提供的时序匹配方法的逻辑关系,即图3中可编程队列和时序匹配器10内部的逻辑关系。61.如图3所示,可编程队列和时序匹配器10包括有:62.apb(advancedperipheralbus)/ahb(advancedhigh-performancebus)接口101,系统通过该接口可以完成对时序表(timingtable)102的配置;63.时序表(timingtable)102用来存储不同指令之间的执行延时;当然,对时序表(timingtable)102的配置可以是在可编程指令编写之前完成的,也可以基于可编程指令中的新增指令,对时序表(timingtable)102进行的更新。64.在逻辑电路设计时,综合考虑实际需求、硅后面积、功耗、设计风险等各方面因素,合理制定时序表102的容量空间。同时,挑选一批经常性指令,指定先后指令之间的延时,然后配置到时序表102中,作为基本的默认配置。一般情况下,用户可以灵活调用时序表(timingtable)102中定义的指令,生成满足需要的指令组合序列,然后通过apb/ahb接口配置到可编程指令队列(commandqueue)104中。当用户自定义可编程指令队列(commandqueue)104时,要确保指令组合序列的执行延时对应的时序值在时序表(timingtable)102中有定义,如图3中指令组合序列:索引={指令k,指令n}对应于时序表102中的指令索引:{指令k,指令n},从而找到对应的执行延时的时序值:时序_kn。65.当用户所需指令没有在时序表(timingtable)102的默认时序中声明时,需要新增指令,并重新配置时序表(timingtable)102。用户确定新增指令,然后确定其他可能会先后发生的指令,编码出先后发生的指令间索引(如图3所示的时序表中的各个指令索引以及与其对应的时序值),配置先后发生的指令间的执行延时,再通过apb/ahb接口101更新时序表(timingtable)102。当用户更新时序表(timingtable)102时,不能超出时序表102能够存储的容量空间。66.时序表(timingtable)102使用前后两条指令的识别信息组合作为索引。指令识别信息包括但不限于指令名称,指令id,指令序号,指令编码等可用于识别指令的信息。通过时序表(timingtable)102内的指令索引(commandindex)来获取相应存储的时序数值(timing),将索引到的时序数值赋值为执行延时(即图3所示执行延时=时序_kn),并将该执行延时的时序值发送给执行延时延迟器(delaytime)108,由其完成相应的延时。时序表(timingtable)102通过编码,存储的时序数值(timing)可以支持时钟cycle数、绝对时间如纳秒ns等多种单位,以及不同的计量精度。67.当系统上电(powerup)时,时序表102(timingtable)都会恢复成基本的默认配置。为了提高效率,当系统重置(reset)时,时序表102(timingtable)保持当前配置。系统可以在初始化(initialization)时通过apb/ahb101接口来更新时序表102(timingtable)。68.apb(advancedperipheralbus)/ahb(advancedhigh-performancebus)接口103,系统通过该接口可以完成对可编程指令队列104(commandqueue)的配置。69.可编程指令队列104(commandqueue)是用于存储用户自定义的指令序列(如图3中队列[0]、队列[1]…),每一个队列包含有用户存储的指令,队列后面的序号表示存储的指令的长度,一般不超过可编程指令队列允许的深度即可,根据可编程指令队列的深度,用户存储的指令可以存满也可以根据自己的需要使用一部分深度进行指令的存储。[0070]用户编制需要通过指令阵列来执行的指令序列,并通过apb/ahb103接口写入到可编程指令队列104。用户要确保指令序列中前后两条指令的执行延时,均已经在时序表(timingtable)102中定义,这样,在执行用户自己编写的指令序列时,才能够根据执行延时正常执行。[0071]可编程指令队列104的读取指针(pointer)代表了当前正在读取的指令位置(如图3中可编程指令队列中的队列[当前指针]和与队列[当前指针]相邻的队列[下一指针],当然,队列[下一指针]的判断时根据队列[当前指针]的位置确定的)。[0072]读取指针(pointer)的值也会输出给指针累加器(addpointer)109(即指令调整模块的一具体实施例),以便在可编程指令队列104中的当前指令(队列[当前指针])根据时序表102中的执行延时通过执行时序延迟器108完成延时后,由指针累加器109(addpointer)把可编程指令队列104的读取指针(pointer)增加1,使其指向下一条指令(队列[下一指针])。读取指针(pointer)指向的单元(队列[下一指针])所存储的指令,会输出到获取模块105,由其生成指令的识别信息,比如图3中所使用的识别信息为指令名称,用于生成时序表102(timingtable)中的指令索引中的当前指令(currentcommand)部分(即图3中组合模块106中的索引={当前指令,下一指令}的前部分),需要说明的是,图3中执行延时查询模块107仅为查询时序表102时的过程的展示作为辅助理解,实际使用中直接由执行延时查询模块107直接将查询到的执行延迟输出到执行时序延迟器108。[0073]获取模块105从可编程指令队列104中获取到当前指令的同时,也会输出到指令选择与执行逻辑30,并立即执行。[0074]并且,如图3中所示读取指针(pointer)指向的下一个单元(队列[下一指针])所存储的指令,也会输出到获取模块105(fetchcommand),由其生成该指令的识别信息:下一指令,下一指令可以用于生成时序表102(timingtable)的指令索引的下一指令(nextcommand)部分,即图3中组合模块106中的索引={当前指令,下一指令}的后部分。指令队列根据读取指针(pointer)来读取前后两条指令(队列[当前指针]和队列[下一指针])。一旦读取指针(pointer)变化,其指向的队列、以及下一队列里面的指令,都会被立即读取并输出到获取模块105(fetchcommand)。[0075]可编程指令队列104按照用户存储的各个指令的存储顺序,从队列的第一个指令开始读取指令,直到读取到最后一个。当读取指针(pointer)指向最后一个单元(队列[max-1])时,可编程指令队列和时序匹配器10会默认为之额外匹配一个des(deselect)作为其下一条指令(nextcommand),并完成相应的索引、以及执行延时查询。[0076]当然,在另一些实施方式中,当前指令确定为最后一条指令时,获取模块105可以停止读取指令的行为,并根据系统自己定义的能够满足指令正常执行的执行延时等待执行当前待执行指令即最后一条指令,当满足自动设置的执行延时时,完成对最后一条指令的执行。[0077]当系统上电(powerup)时,可编程指令队列104(commandqueue)中的指令会被清空,读取指针(pointer)重置到起始位置0。为了提高效率,当系统重置(reset)时,可编程指令队列104(commandqueue)中的指令会被保存,但读取指针(pointer)重置到起始位置0。同时,为了提高系统处理更复杂场景的能力,系统可以在重置(reset)后,重新配置可编程指令队列104中的各个指令。在初始化(initialization)时,系统通过apb/ahb101接口来更新可编程指令队列104中的指令。[0078]获取模块(fetchcommand)105从可编程指令队列104中获取指令信息(如图3中当前指令和下一指令),并把当前指令输出到指令选择与执行逻辑30,执行当前指令。[0079]获取模块105(fetchcommand)获得可编程指令队列104(commandqueue)中由读取指针(pointer)指定的指令队列[当前指针],作为当前指令(currentcommand);该指令会输出给指令选择与执行逻辑30执行。同时,获取模块105(fetchcommand)也会获得可编程指令队列104(commandqueue)中由读取指针(pointer)指定的指令队列[当前指针]的下一条指令队列[下一指针],作为下一条指令(nextcommand)。[0080]当前指令(currentcommand)和下一条指令(nextcommand)都有唯一的用于识别的信息(指令名称,指令id,指令序号等)。获取模块105(fetchcommand)选择一种类型的信息,把这两条指令的识别信息输出给组合模块106(composeindex)。[0081]组合模块106(composeindex)根据输入的两条指令的识别信息,组合出索引(index),然后输出给执行延时查询模块107(searchindex)。[0082]简单的组合方式可以是索引={当前指令,下一指令}。也可以根据输入的识别信息,采用其他的组合方式。组合出的索引格式信息,要与时序表102(timingtable)中的指令索引(commandindex)一致。[0083]执行延时查询模块107(searchindex)根据输入的索引(index)信息,搜索时序表102(timingtable),找到索引对应的时序表102中的执行延时,即时序数值(timing),然后输出给执行时序延迟器108(delaytiming)。[0084]执行时序延迟器108(delaytiming)根据输入的执行延时(timing),精确延迟指定时间后,输出使能信号给指令调整模块【图中具体为:指针累加器109(addpointer)】,使之把可编程指令队列104(commandqueue)的读取指针(pointer)递增加1,指向可编程指令队列(commandqueue)中的下一个队列,将所述下一待执行指令调整为新的当前待执行指令。[0085]执行时序延迟器108(delaytiming)会根据时序表102(timingtable)中对执行延时(timing)的编码,对接收的执行延时(timing)进行相应的译码,解析出执行延时(timing)对应的实际时间。执行时序延迟器108(delaytiming)可以实现多种时间单位和计量粒度的计时功能,支持时钟cycle数、多种时间单位、多种计量粒度。[0086]执行时序延迟器108(delaytiming)的有效输出持续时间,应该仅仅1个时钟、或者刚好超过1个时钟的最短单位时间,以便减小对可编程指令队列104(commandqueue)的读取指针(pointer)跳动时机的影响。[0087]指令调整模块【指针累加器109(addpointer)】在根据执行时序延迟器108(delaytiming)输出的使能信号为真时,对当前读取指针(pointer)递增加1,使之指向可编程指令队列104(commandqueue)的下一个队列。[0088]当然,执行时序延迟器108还可以放置于指令调整模块【指针累加器109】的后面,只要能够保证当前指令和下一指令的执行能够根据执行延时正常执行即可。[0089]为了进一步说明本技术实施例的实施方式,图4示出了本技术实施例提供的时序匹配方法的一流程示意图。在一些实施例中,该流程可以在图3所示的架构系统中执行。[0090]如图中所示,本技术实施例提供的时序匹配方法可以包括以下步骤:[0091]步骤s10,获取当前待执行指令和下一待执行指令。[0092]如前所述,本技术实施例所提供的时序匹配方法,在指令执行的过程中实现,为了实现不同的系统功能,提供了可编程指令,因此在进行指令执行时,需要根据指令的编写顺序,获取当前待执行指令,并根据当前待执行指令依次执行全部存储的指令,为了能够获取各个指令之间的执行延时保证指令能够正常执行,因此需要获取下一待执行指令,当然,下一待执行指令的确定是根据当前待执行指令的变化而变化的。[0093]容易理解的是,所述当前待执行指令为所述可编程指令队列中当前要执行的指令,所述下一待执行指令为所述可编程指令队列中与所述当前待执行指令相邻的下一个需要执行的指令。[0094]为了方便指令的确认和获取以及指令序列的灵活执行,在一种具体实施方式中,可以通过指针的方式实现各个指令的顺序之执行。[0095]使用指针可以使得程序执行更加灵活,提高程序运行的效率。[0096]容易理解的是,所述获取当前待执行指令的步骤之后还包括:执行所述当前待执行指令。[0097]这样,可以直接执行当前待执行指令的同时,进行时序匹配,不影响当前待执行指令的正常执行。[0098]步骤s11,将所述当前待执行指令和所述下一待执行指令进行拼接,得到索引指令组合。[0099]根据前述内容可知,可编程指令队列中的各个指令的执行时要按照指令的顺序来依次执行的,且各个指令之间执行时还需要考虑指令之间的执行延时,因此,当获取到当前待执行指令和下一待执行指令时,需要将当前待执行指令和与当前待执行指令相邻的下一个指令即下一待执行指令进行拼接,以方便获取到正确的执行延时,完成指令的正常执行。[0100]具体地,可以拼接为索引指令组合={当前指令,下一指令}。[0101]步骤s12,根据所述索引指令组合在预先获取的时序表中查询,获取所述索引指令组合的执行延时,其中,所述时序表包括各个可执行指令组合对应的执行延时。[0102]如前所述,时序表是指令执行前,预先设置好的,并配置有各个不同指令组合对应的执行延时,当可编程指令队列执行内部存储的各个指令时,就可以根据索引指令组合直接在时序表中进行查询得到索引指令组合对应的两个指令之间的执行延时,不需要再在设计时,计算指令与下一指令之间的执行延时,也不需要在设计时,因为不知道下一条指令是什么而预先预留有足够大的执行延时,从而导致指令执行缓慢,执行功耗过高的问题。[0103]在一种具体实施方式中,时序表可以通过以下步骤建立:[0104]获取各个可编程指令;[0105]对各个所述可编程指令中的任意两个进行排列组合,得到各个指令组合;[0106]筛选各个所述指令组合中的可执行组合,得到各个所述可执行指令组合;[0107]根据所述可执行指令组合的所述当前待执行指令和所述下一待执行指令确定对应的执行延时;[0108]存储各个所述可执行指令组合和对应的所述执行延时,得到所述时序表。[0109]即为了建立时序表,首先获取常用的、需要用到的或者可能用到的各种不同的可编程指令,然后按照排列组合的方式,对获取到的可编程指令中的任意两个进行组合,得到指令组合,需要说明的是,任意两个指令中,两个指令的顺序调换也形成不同的指令组合,由于指令组合中仅是随意组合排列形成,因此,其中可能存在不符合执行逻辑的组合,因此,筛选各个所述指令组合中的可执行组合,获取指令组合中的可执行指令组合,然后根据各个可执行指令组合的当前待执行指令和下一待执行指令,确定执行延时,并进行存储,就可以得到时序表。[0110]这样,事先将需要用到的或者可能用到的各种不同的指令组合存储到时序表中,并计算出相应的时序值,当执行可编程指令队列中的指令时,可以快速从时序表中查询到需要的时序值,减少了时序值的计算量,且可以满足可编程队列中的不同的指令组合方式,实现对不同指令组合的时序匹配,有效提高了指令执行的效率。[0111]当然,当有新的可编程指令出现时,可以在执行指令之前,进一步补充新的可编程指令与其他指令的组合,以及执行延时,以满足需要。[0112]为方便理解时序表,可以参考图3所示的时序表102中的内容。[0113]如图中所示,指令索引下的各个指令即为上述可编程指令,将各个指令中的任意两个指令进行排列组合,得到各个指令组合,然后筛选出各个指令组合中能够执行的组合,将可执行组合作为可执行指令组合即图3中时序表里面的指令索引,每一个可执行指令组合都对应有执行延时(即图3中根据索引确定的时序值),例如:{指令a,指令a}对应的时序为时序_aa,即为指令a和指令a之间的执行延时。[0114]根据所述可执行指令组合的所述当前待执行指令和所述下一待执行指令确定对应的执行延时;具体的,如图3中:[0115]可执行指令组合中的当前待执行指令为指令k,下一待执行指令为指令n:{指令k,指令n},其对应的执行延时为时序值一列中的时序_kn。[0116]存储各个所述可执行指令组合和对应的时序值,得到所述时序表。因此,时序表里面可以存储大量的可执行指令组合以及对应的执行延时,也就可以实现不同指令的随机组合,从而实现不同的系统功能。[0117]这样,当可编程指令队列中包含的指令发生改变时,由于时序表中存储有大量的指令组合,因此可以根据索引指令组合里面包含的当前待执行指令和下一待执行指令找到对应的执行延时,实现了执行延时的灵活匹配,不需要在进行可编程指令的编写时,再重新配置所有指令的执行延时,从而可以满足不同系统功能的快速实现。[0118]在指令执行过程中,获取到当前待执行指令和下一待执行指令形成的索引指令组合时,就可以从时序表中查找到对应的执行延时。[0119]步骤s13,判断是否到达所述执行延时,若是,则执行步骤s15,若否,则执行步骤s14。[0120]各个指令的执行是需要按照对应的执行延时来确保指令正常执行的,因此,根据索引指令组合获取到的对应于当前待执行指令和下一待执行指令之间的执行延时,来完成索引指令组合中的下一待执行指令的获取和执行,就需要判断执行当前待执行指令后的等待时间是否达到的执行延时,当达到的时候,就可以执行步骤s15,即将下一待执行指令调整为新的当前待执行指令,若不是,则需要继续等待,直到达到执行延时的等待时间再执行下一待执行指令,即步骤s14。[0121]步骤s14,继续等待。[0122]步骤s15,将所述下一待执行指令调整为新的当前待执行指令。[0123]容易理解的是,将下一待执行指令调整为新的当前待执行指令,那么新的当前待执行指令的下一待执行指令即为新的下一待执行指令,获取新的下一待执行指令,即执行步骤s10。[0124]当然,如前所述,在一种具体实施方式中,还可以利用指针的移动来确定当前待执行指令和下一待执行指令,在此情况下,所述根据所述执行延时将所述下一待执行指令调整为新的当前待执行指令的步骤可以包括:[0125]根据所述执行延时,调整所述当前指针指向所述下一待执行指令,得到新的当前待执行指令,并调整所述下一指针指向所述下一待执行指令的下一个需要执行的指令,得到新的下一待执行指令,其中,所述当前指针用于确定所述当前待执行指令,所述下一指针用于确定所述下一待执行指令。[0126]这样,利用指针来实现指令的获取,可以使得程序执行更加灵活,降低直接调整指令的复杂度。[0127]为了方便实现指令的调整,在另一些具体实施方式中,所述根据所述执行延时将所述下一待执行指令调整为新的当前待执行指令的步骤包括:[0128]根据所述执行延时,产生将所述下一待执行指令调整为新的当前待执行指令的调整信号;[0129]根据所述调整信号调整所述下一待执行指令为新的当前待执行指令。[0130]所述调整信号可以是触发延时器的高电平信号也可以是低电平信号,满足达到执行延时的时间时触发延迟器实现指令的调整即可。[0131]这样,通过信号调指令更新的方式,可以更方便的控制当前待执行指令和下一待执行指令严格按照执行延时进行执行,确保每一条指令都可以正常执行。[0132]当然,在一些实施方式中,所述调整信号持续时间包括一个时钟周期或者超过一个时钟周期的最小单位时间。[0133]这样,可以在满足指令正常执行的时序范围内,以便减小对可编程指令队列的指令读取顺序调整时的影响,降低不必要的指令执行功耗。[0134]需要说明的是,所述执行延时的单位包括时钟周期或纳秒。[0135]这样可以符合指令执行是各个指令之间执行延时的计算特征,方便执行延时的计算和确定。[0136]并且随着时间的推进,会执行到可编程队列的最后一个待执行指令,为了确保当执行可编程队列中的最后一个待执行指令时,仍然能够顺利地进行执行延时的获取,保证可编程队列中的最后一个待执行指令的执行以及其他指令的获取和执行,在一些实施例中,所述当前待执行指令包括所述可编程指令队列中的最后一个待执行指令,所述下一待执行指令包括取消执行指令。[0137]需要说明的是,取消执行指令表示不再从可编程指令队列中进行指令的读取,即时序匹配过程结束。[0138]在进行可编程指令队列的编写时,在最后一个待执行指令后面编写取消执行指令,同样地,在时序表中设置最后一个待执行指令与取消执行指令的可执行指令组合,这样,当获取到最后一个待执行指令与取消执行指令的索引指令组合时,就可以按照到最后一个待执行指令与取消执行指令的索引指令组合在时序表中查找,进而得到对应的时序延时,并且在执行完最后一个待执行指令后,就停止对可编程指令队列中的指令的执行。[0139]在一种具体实施方式中,可以在时序表中将最后一个待执行指令与取消执行指令的可执行指令组合的执行延时设置为0,即当获取到的索引指令组合包括当前待执行指令和取消执行指令时,不需要再等待执行延时,直接执行完所述当前待执行指令后即可跳出时序匹配过程。[0140]这样,可以减少不必要的指令执行的等待时间,提高系统执行指令的效率。[0141]当然,在另一种实施方式中,当所述当前待执行指令为所述可编程指令队列中的最后一个待执行指令时,还可以停止获取所述下一待执行指令,并根据指令安全执行时间执行所述当前待执行指令,所述指令安全执行时间为预先设置好的能够正常执行指令的时间。[0142]在此情况下,在每次获取当前待执行指令时,进行判断,请继续参考图4,具体步骤为:[0143]步骤s16,判断调整后的新的当前待执行指令是否为可编程指令队列中的最后一条指令,若是,则执行步骤s17,若否,则继续执行步骤s10。[0144]步骤s17,停止获取所述下一待执行指令,并根据指令安全执行时间执行所述当前待执行指令。[0145]这样,当获取到最后一条指令时,不再执行时序匹配的过程,而是通过系统自动配置的指令执行时间执行最后一条指令,可以减少查询时序表中存储的执行延时所消耗的功耗,从而降低了系统总体的功耗。[0146]可以看到,本技术实施例提供的时序匹配方法,预先存储包括提前计算好的各个指令组合之间的执行延时的时序表,当进行指令执行时,首先获取两个指令即当前待执行指令和下一待执行指令,然后将获取到的两个指令进行拼接得到索引组合指令,根据所述索引指令组合在预先获取的时序表中查询对应的执行延时,最后根据查询到的执行延时将下一待执行指令调整为新的当前待执行指令。[0147]这样,在执行可编程指令队列中的各个指令时,首先,可以根据获取到的当前待执行指令和下一待执行指令组成的索引指令组合直接从时序表中进行查询,不需要每次进行可编程指令队列的编写时,都根据可编程指令队列的顺序,计算各个当前待执行指令与该指令相邻的下一待执行指令之间的执行延时,并提前配置给各个当前待执行指令,降低了计算复杂度,减少了计算的工作量,简化了可编程队列的编写流程;其次,不需要为了减少各个指令组合之间的执行延时的计算量而预先对可编程指令队列中的每一个指令都赋予一个足够大的执行延时以保证各个指令之间能够正常执行,避免了因分配过多过大的执行延时而造成的指令执行时间过长,从而增大了指令执行功耗的问题;最后,时序表中存储的各个指令组合的执行延时可以为实现不同功能的任意指令组合提供对应的执行延时,不需要因为要实现不同的功能而使得可编程指令队列中的指令组合发生变化时需要重新提前配置所有指令的执行延时,仅需要在指令执行过程中,确定执行延时即可。[0148]可见,本技术实施例所提供的时序匹配方法,可以根据在预先建立好的存储有各个可执行指令组合的时序表中查询到不同指令组合的执行延时,可以对实现不同功能的指令组合实现灵活匹配各个不同指令组合对应的指令执行延时,提高时序匹配的执行效率。[0149]在一种具体实施方式中,为了方便表示指令,并方便进行指令组合的构建和查找,进行指令组合时,可以使用指令的标识信息,例如指令名称,指令id等,所述当前待执行指令可以包括当前指令标识,所述下一待执行指令包括下一指令标识,所述时序表包括各个指令标识组合对应的执行延时,[0150]步骤s11,将所述当前待执行指令和下一待执行指令进行拼接,得到索引指令组合,可以包括:[0151]将所述当前指令标识和所述下一指令标识进行拼接,得到所述索引指令标识组合;[0152]步骤s12,根据所述索引指令组合在预先获取的时序表中查询,获取所述索引指令组合的执行延时,可以包括:[0153]根据所述索引指令标识组合在预先获取的时序表中查询,获取所述索引指令标识组合的执行延时。[0154]这样,可以灵活变更指令的标识信息,从而根据不同的指令,设计最能够符合程序执行的指令标识信息进行组合,降低指令所占字节或位宽大小,降低程序总体所占空间大小。[0155]为了解决前述问题,本技术实施例还提供一种时序匹配装置,该装置可以认为是实现本技术实施例提供的时序匹配方法所需设置的功能模块。下文描述的装置内容可与上文发送端的描述的方法内容相互对应参照。[0156]作为一种可选实现中,图5示出了本技术实施例所提供的时序匹配装置的可选结构框图。[0157]如图5所示,该时序匹配装置可以包括:[0158]获取模块105,适于获取当前待执行指令和下一待执行指令。[0159]当然,所述当前待执行指令为所述可编程指令队列中当前要执行的指令,所述下一待执行指令为所述可编程指令队列中与所述当前待执行指令相邻的下一个需要执行的指令。[0160]容易理解的是,当获取到当前待执行指令时,可以直接执行当前待执行指令,因此在一些实施例中,所述时序匹配装置还可以包括:[0161]当前指令执行模块,适于获取所述当前待执行指令之后,执行所述当前待执行指令。[0162]当然,所述当前待执行指令可以包括所述可编程指令队列中的最后一个待执行指令,所述下一待执行指令可以包括取消执行指令。[0163]组合模块106,适于将所述当前待执行指令和所述下一待执行指令进行拼接,得到索引指令组合。[0164]用于组合成索引指令组合的指令标识信息可以为指令名称、指令id、指令序号等多种用于表示指令特征的信息。[0165]执行延时查询模块107,适于根据所述索引指令组合在预先获取的时序表中查询,获取所述索引指令组合的执行延时,其中,所述时序表包括各个可执行指令组合对应的执行延时。[0166]为了能够实现对不同类型组合的指令灵活匹配对应的执行延时,在一些实施例中,所述时序表通过时序表获取模块获取,所述时序表获取模块包括:[0167]可编程指令获取单元,适于获取各个可编程指令;[0168]可执行指令组合获取单元,适于对各个所述可编程指令中的任意两个进行排列组合,得到各个指令组合,筛选各个所述指令组合中的可执行组合,得到各个所述可执行指令组合;[0169]执行延时确定单元,适于根据所述可执行指令组合的所述当前待执行指令和所述下一待执行指令确定对应的执行延时;[0170]时序表获取单元,适于存储各个所述可执行指令组合和对应的所述执行延时,得到所述时序表。[0171]在一些实施例中,当所述当前待执行指令包括当前指令标识,所述下一待执行指令包括下一指令标识,所述时序表包括各个指令标识组合对应的执行延时,所述组合模块106适于将所述当前待执行指令和下一待执行指令进行拼接,得到索引指令组合,包括:[0172]将所述当前指令标识和所述下一指令标识进行拼接,得到所述索引指令标识组合;[0173]所述执行延时查询模块107适于根据所述索引指令组合在预先获取的时序表中查询,获取所述索引指令组合的执行延时,包括:[0174]根据所述索引指令标识组合在预先获取的时序表中查询,获取所述索引指令标识组合的执行延时。[0175]指令调整模块110,适于根据所述执行延时将所述下一待执行指令调整为新的当前待执行指令。[0176]各个指令之间的执行是要按照相应的执行延时来顺序完成的,因此,当前待执行指令执行完时还需要等待相应执行延时,才可以继续执行下一待执行指令,以确保指令可以正常执行。[0177]具体的,所述指令调整模块110适于根据所述执行延时将所述下一待执行指令调整为新的当前待执行指令,包括:[0178]根据所述执行延时,产生将所述下一待执行指令调整为新的当前待执行指令的调整信号;[0179]根据所述调整信号调整所述下一待执行指令为新的当前待执行指令。[0180]在一种实施方式中,所述调整信号持续时间包括一个时钟周期或者超过一个时钟周期的最小单位时间。[0181]为了方便指令执行延时的计算,在一些实施方式中,所述执行延时的单位包括时钟周期或纳秒。[0182]为了方便指令的获取和指令的顺序执行,在一些实施例中,可以通过指针的方式顺序获取各个需要执行的指令,具体的,所述指令调整模块,适于根据所述执行延时将所述下一待执行指令调整为新的当前待执行指令,包括:[0183]根据所述执行延时,调整所述当前指针指向所述下一待执行指令,得到新的当前待执行指令,并调整所述下一指针指向所述下一待执行指令的下一个需要执行的指令,得到新的下一待执行指令,其中,所述当前指针用于确定所述当前待执行指令,所述下一指针用于确定所述下一待执行指令。[0184]当执行完所有的可编程指令队列中的指令时,需要停止时序匹配的步骤,以确保系统程序正常运行。因此,在一些实施例中,所述时序匹配装置还可以包括:[0185]停止获取指令模块111,适于当所述当前待执行指令为所述可编程指令队列中的最后一个待执行指令时,停止获取所述下一待执行指令,并根据指令安全执行时间执行所述当前待执行指令,所述指令安全执行时间为预先设置好的能够正常执行指令的时间。[0186]这样,在执行可编程指令队列中的各个指令时,首先,可以根据获取到的当前待执行指令和下一待执行指令组成的索引指令组合直接从时序表中进行查询,不需要每次进行可编程指令队列的编写时,都根据可编程指令队列的顺序,计算各个当前待执行指令与该指令相邻的下一待执行指令之间的执行延时,并提前配置给各个当前待执行指令,降低了计算复杂度,减少了计算的工作量,简化了可编程队列的编写流程;其次,不需要为了减少各个指令组合之间的执行延时的计算量而预先对可编程指令队列中的每一个指令都赋予一个足够大的执行延时以保证各个指令之间能够正常执行,避免了因分配过多过大的执行延时而造成的指令执行时间过长,从而增大了指令执行功耗的问题;最后,时序表中存储的各个指令组合的执行延时可以为实现不同功能的任意指令组合提供对应的执行延时,不需要因为要实现不同的功能而使得可编程指令队列中的指令组合发生变化时需要重新提前配置所有指令的执行延时,仅需要在指令执行过程中,确定执行延时即可。[0187]可见,本技术实施例所提供的时序匹配方法,可以根据在预先建立好的存储有各个可执行指令组合的时序表中查询到不同指令组合的执行延时,可以对实现不同功能的指令组合实现灵活匹配各个不同指令组合对应的指令执行延时,提高时序匹配的执行效率。[0188]本技术实施例还提供一种存储介质,所述存储介质存储有适于数据分析的程序,以实现如前述所述的时序匹配方法。[0189]本技术实施例还提供一种电子设备,包括至少一个存储器和至少一个处理器;所述存储器存储有程序,所述处理器调用所述程序,以执行如前述所述的时序匹配方法。[0190]这样,能够支持本技术实施例所提供的时序匹配方法的实现,并满足对实现不同功能的指令组合灵活匹配各个不同指令组合对应的指令执行延时,以提高时序匹配的执行效率的实现。虽然本技术实施例披露如上,但本技术并非限定于此。任何本领域技术人员,在不脱离本技术的精神和范围内,均可作各种更动与修改,因此本技术的保护范围应当以权利要求所限定的范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1