一种C64x+ DSP软件流水循环缓冲机制的模拟方法

文档序号:7242 发布日期:2021-09-17 浏览:46次 英文

一种C64x+ DSP软件流水循环缓冲机制的模拟方法

技术领域

本发明属于体系结构模拟领域,尤其涉及一种C64x+ DSP软件流水循环缓冲机制的模拟方法。

背景技术

DSP是为数字信号处理任务而专门设计的微处理器芯片,其程序开发通常采用交叉编译的开发模式,然而这种开发流程既需要硬件设备,又难以获取足够的调试信息反馈。为了实现如动态调试、故障注入等DSP程序开发所需的重要功能,帮助程序进行功能调试、算法优化和性能评估,需要开发对应DSP芯片的软件模拟器。

TMS320C64x+(简称C64x+)系列DSP是TI(德州仪器公司)研发的基于VelociTI体系结构的高性能DSP,在国内广泛应用于国防和航空航天中。由于数字信号处理算法通常需要对一系列数据样本循环执行大量数学运算,其循环可通过软件流水调度提高4.2倍运行性能。相比于其它VLIW DSP芯片,C64x+ DSP针对软件流水循环首次引入了循环缓冲机制,以优化软件流水循环的代码和执行。循环缓冲机制的引入可使生成的软件流水代码大小平均降低17.4%,程序存储器功耗平均降低2.6倍,但是其引入增加了以循环缓冲器为核心的硬件结构、一组控制循环运行的指令,以及循环缓冲在不同情况下运行流程的细致约定,使其成为C64x+模拟器实现过程中最精细而复杂的部分。因此,正确且高性能的软件流水循环缓冲机制是C64x+ DSP模拟器实现的瓶颈和关键。

发明内容

本发明的目的在于针对C64x+软件流水循环缓冲机制的模拟复杂性,提供了一种C64x+ DSP软件流水循环缓冲机制的模拟方法。

本发明的目的是通过以下技术方案来实现的:一种C64x+ DSP软件流水循环缓冲机制的模拟方法,包括以下步骤:

(1)通过循环缓冲控制信息进行状态机的状态、阶段判断。

(2)根据步骤(1)得到的状态机的状态、阶段,选取并执行循环缓冲操作的序列组合,以实现循环缓冲运行时程序存储器和循环缓冲器的实际操作。

(3)根据步骤(2)执行的结果更新循环缓冲时序信息,依据更新后的所有循环控制信息进行状态机的状态、阶段转换,并进行循环跳出判断。

(4)根据步骤(3)中所得的循环控制信息,判断和处理普通流水线和中断的重启。

重复执行上述步骤,直至结束。其中,所述循环缓冲控制信息包括:

循环缓冲状态信息:循环缓冲状态信息记录循环缓冲的状态、阶段以及中断请求和屏蔽信息。循环缓冲完成判断信息:包括循环终止条件类别和ILC寄存器可用标识。

循环缓冲时序信息:包括软件流水阶段信息及其相应的周期信息。

用于取指的信息:包括指令屏蔽信息、流水线启停标识和排空阶段到流水线重启所需的周期数。

所述状态机的状态包括:

初始终止initial_termination状态:软件流水循环缓冲由SPLOOP指令激活且SPLOOP指令执行时ILC寄存器可用标识为0的情况下,为initial_termination状态。

正常normal状态:软件流水循环缓冲在非中断返回时由SPLOOP(D/W)三种指令的执行而激活,并至少循环迭代一次时,为normal状态。

重载reload状态:软件流水循环缓冲由SPMASKR或SPKERNELR指令的执行而激活,并且满足重装载条件时,为reload状态。

中断后after_interruption状态:软件流水循环缓冲由中断返回而重新激活时,为after_interruption状态。

空闲idle状态:软件流水循环缓冲未激活或循环已跳出时,为idle状态。

所述状态机的阶段包括:

prolog_lb阶段:包括软件流水循环组成阶段中的prolog阶段和kernel阶段的第一个stage。kernel_lb阶段:包括软件流水循环组成阶段中除第一个stage之外的kernel阶段,循环的状态在进入该阶段时都会转换回normal状态。

epilog_lb阶段:包括软件流水循环组成阶段中epilog阶段加上一个stage,以及在到达stage边缘前装载的空操作周期。

early_exit_lb阶段:所述early_exit_lb阶段发生在循环由于迭代次数不够而在达到kernel_lb阶段前ILC已递减为0的情况下,此时prolog_lb阶段转换为early_exit_lb阶段。

进一步地,所述循环缓冲操作包括:

pipeline操作:从程序存储器中取指并执行。

load操作:从程序存储器中取指,当指令与SPLOOP(D/W)指令并行、指令被SPMASK(R)指令屏蔽或指令属于NOP、循环缓冲相关指令时,指令只执行;其它指令装载进入循环缓冲器相应位置中,置为有效并执行。

fetch操作:从循环缓冲器中取出LBC对应cycle的指令,当指令有效时执行。

drain操作:将循环缓冲器中draincounts对应cycle对应stage的指令置为无效。所述LBC记录目前处于该stage的第几个周期,所述draincounts记录循环drain操作共执行的周期数。当循环重载发生时,如果重载后的循环进入early_exit_lb阶段,此时可能发生前、后两个循环都需要进行drain操作,此时前一个循环使用第二对LBC和loadcounts来指示信息。

reload操作:将循环缓冲器中loadcounts对应cycle对应stage的指令置为有效。所述loadcounts记录循环load操作共执行的周期数。

initial_load操作:专属于initial_termination状态的操作,从程序存储器中取指,当指令与SPLOOP(D/W)指令并行、指令被SPMASK(R)指令屏蔽或指令属于循环缓冲相关指令时执行;其它指令装载进入指令缓冲器相应位置中并置为无效。

进一步地,所述循环缓冲状态和阶段对应操作组合序列如下所示:

*cond A表示(循环重载时指明上一个循环epilog_lb阶段是否结束)last_spl==1(未结束),cond B表示loadcounts<dynlen或一个branch指令生效

*drain2、fetch2表示对循环重载前一个循环的操作

进一步地,所述状态机的状态和阶段转换具体为:

*n/r/a为normal/reload/after_interruption缩写

*initial_t为initial_termination缩写,after_itr为after_interruption缩写

*Judge_spl_terminal()函数判断循环是否完成

进一步地,所述步骤4中,普通流水线的重启条件具体如下:

SPLOOP(D)循环完成epilog_lb阶段后跳出,此时循环缓冲变为idle状态,普通流水线重启。

SPLOOPW循环在循环终止条件满足时,循环缓冲直接变为idle状态,普通流水线重启。

SPLOOP(D)循环进入epilog_lb阶段,在执行了SPKERNEL(R)指令中fstg/fcyc字段所指示的周期后,普通流水线重启与循环缓冲并行。

非reload状态下的循环,若循环激活时有分支指令生效,则循环缓冲直接变为idle状态,普通流水线重启。

中断被处理导致循环缓冲进入epilog_lb阶段,并完成排空后跳出。此时循环缓冲变为idle状态,普通流水线重启。

进一步地,所述步骤4中,循环缓冲激活时,在满足以下所有条件下可以处理未决中断,然后循环缓冲进入epilog_lb阶段:

LBC寄存器值为0且不满足循环终止的条件;

循环处于kernel_lb阶段,且循环不处于reload状态。

循环至少运行了4个周期。

ILC≥ceil(dynlen÷interation_interval),确保中断返回后的循环不会进入early_exit_lb状态。

本发明的有益效果是:本发明能够对64x+ DSP软件流水循环缓冲机制进行CPU周期精确的模拟,模拟速度为官方模拟器的3.3倍。

附图说明

图1是本发明的循环缓冲模拟模块框架图。

具体实施方式

一种C64x+ DSP软件流水循环缓冲机制的模拟方法,如图1所示,包括以下步骤:

(1)通过循环缓冲控制信息进行状态机的状态、阶段判断。

(2)根据步骤(1)得到的状态机的状态、阶段,选取并执行循环缓冲操作的序列组合,以实现循环缓冲运行时程序存储器和循环缓冲器的实际操作。

(3)根据步骤(2)执行的结果更新循环缓冲的时序信息,依据更新后的所有循环控制信息进行状态机的状态、阶段转换,并进行循环跳出判断。

(4)根据步骤(3)中所得的循环控制信息,判断和处理普通流水线和中断的重启。

重复执行上述步骤,直至结束。

进一步地,所述循环缓冲控制信息具体为:

循环缓冲状态信息:循环缓冲状态信息记录循环缓冲的状态、阶段以及中断请求和屏蔽信息。循环缓冲完成判断信息:包括循环终止条件类别和ILC寄存器可用标识(用于标记ILC寄存器是否可以使用)。其中,循环终止条件类别包括SPLOOP(D/W)三种指令不同的终止条件,利用terminal_cond进行记录,取值1-3分别对应SPLOOP(D/W)不同的终止条件。

循环缓冲时序信息:包括软件流水阶段信息及其相应的周期信息。其中,软件流水阶段信息具体是指处于循环缓冲阶段的第几个stage,如处于prolog_lb阶段的第几个stage。周期信息是指处于软件流水阶段信息的第几个周期以及每个stage具有的周期数目即:处于该stage的第几个周期LBC、循环缓冲操作、load操作共执行的周期数loadcounts和drain操作共执行的周期数draincounts。

用于取指的信息:包括指令屏蔽信息、流水线启停标识和排空阶段到流水线重启所需的周期数。

进一步地,所述状态机的状态具体为:

(1)initial_termination状态:软件流水循环缓冲由SPLOOP指令激活且SPLOOP指令执行时ILC为0(不可用)的情况下,称其为initial_termination(初始终止)状态。在这种循环缓冲状态下,循环初始化指令应得到执行,循环体中的指令虽然作为NOP指令(空指令,会带来一个周期的停顿)执行,但是会装载到循环缓冲器中并置为无效。

(2)normal状态:软件流水循环缓冲在非中断返回时由SPLOOP(D/W)三种指令的执行而激活,并至少循环迭代一次时,称其为normal(正常)状态。该状态下程序存储器将取指的循环体指令装载到循环缓冲器中,同时程序存储器取指的循环初始化指令与循环缓冲器中所取指令并行。之后,循环缓冲在核心阶段循环,然后排空。

(3)reload状态:软件流水循环缓冲由SPMASKR或SPKERNELR指令的执行而激活,并且满足重装载条件时,称其为reload(重载)状态。在这种状态下,一个已经执行过的软件流水循环重新执行,循环缓冲器中的指令重新变得有效。循环体中的指令只从循环缓冲器中取指,外循环和内循环的初始化指令从程序存储器中取指并和循环体中的指令并行执行。

(4)after_interruption状态:软件流水循环缓冲由中断返回而重新激活时,称其为after_interruption(中断后)状态。这种状态下,被中断的软件流水循环重新执行。硬件机制的中断返回是重新从循环启动指令执行,但在模拟器中可通过重载进行模拟。其和reload状态的不同是没有初始化阶段,不会从程序存储器中取指。

(5)idle状态:软件流水循环缓冲未激活或循环已跳出时,称其为idle(空闲)状态。此时普通流水线正常执行,不需要使用循环缓冲模块。

进一步地,所述状态机的阶段具体为:

(1)prolog_lb阶段:这个阶段包括软件流水循环组成阶段中的prolog阶段和kernel阶段的第一个stage,其在循环中的作用是增加循环缓冲器中的有效指令。增加的有效指令在normal状态下是来自于程序存储器的装载,在reload状态和after_interruption状态是来自于循环缓冲器中指令的重新激活。在该阶段,程序存储器可能与循环缓冲器并行取指和执行。

(2)kernel_lb阶段:这个阶段包括软件流水循环组成阶段中除第一个stage之外的kernel阶段,循环的状态在进入该阶段时都会转换回normal状态。在这个阶段循环缓冲状态不变,模拟器只执行循环缓冲器中取出的有效指令。

(3)epilog_lb阶段:这个阶段包括软件流水循环组成阶段中epilog阶段加上一个stage,以及在到达stage边缘前装载的空操作周期。由于循环重载的存在,这个阶段也可能重叠重载循环的prolog_lb阶段的部分或全部。在该阶段,循环缓冲器中的指令在相应周期被置为无效。当排空完成但没有到达stage边缘时,继续执行空操作,直到stage边缘时把循环缓冲状态转换为空闲。在排空过程中,程序存储器可能会重启,然后与循环缓冲器并行取指和执行;也可能会发生循环重载,之后循环缓冲器中指令的重新激活与排空同时进行。

(4)early_exit_lb阶段:这个阶段发生在循环由于迭代次数不够而在达到kernel_lb阶段前ILC已递减为0的情况下,此时prolog_lb阶段转换为early_exit_lb阶段。该阶段循环缓冲器的装载和排空同时进行,因此程序存储器可能与循环缓冲器并行取指和执行。

进一步地,所述循环缓冲操作具体为:

(1)pipeline操作:从程序存储器中取指并执行。为了易于实现,循环重载时的普通流水线的取指、执行操作交由循环缓冲操作执行。

(2)load操作:从程序存储器中取指,当指令与SPLOOP(D/W)指令并行、指令被SPMASK(R)指令屏蔽或指令属于NOP、循环缓冲相关指令时,指令只执行;其它指令装载进入循环缓冲器相应位置中,置为有效并执行。

(3)fetch操作:从循环缓冲器中取出对应cycle(在LBC中存储)的指令,当指令有效时执行。

(4)drain操作:将循环缓冲器中对应cycle对应stage(在draincounts中存储)的指令置为无效。当循环重载发生时,如果重载后的循环进入early_exit_lb阶段,此时可能发生前、后两个循环都需要进行drain操作,此时前一个循环使用第二对LBC和loadcounts来指示信息。

(5)reload操作:将循环缓冲器中对应cycle对应stage(在loadcounts中存储)的指令置为有效。

(6)initial_load操作:专属于initial_termination状态的操作,从程序存储器中取指,当指令与SPLOOP(D/W)指令并行、指令被SPMASK(R)指令屏蔽或指令属于循环缓冲相关指令时执行;其它指令装载进入循环缓冲器相应位置中并置为无效。

进一步地,所述循环缓冲状态和阶段对应操作组合序列具体为:

表1循环缓冲状态和阶段对应操作组合序列

*cond A表示last_spl==1,即循环重载时上一个循环epilog_lb阶段未结束,cond B表示loadcounts<dynlen或一个branch指令生效,(if X)Y表示满足A条件时执行Y操作。

*drain2、fetch2表示对循环重载前一个循环的操作

进一步地,所述状态机的状态和阶段转换具体为:

表2循环缓冲状态、阶段的判断和转换表

*n/r/a为normal/reload/after_interruption缩写

*initial_t为initial_termination缩写,after_itr为after_interruption缩写

*Judge_spl_terminal()函数判断循环是否完成

其中,&&表示逻辑与,||表示逻辑或。LoopBuffer.active_nums为循环缓冲激活次数

进一步地,所述步骤(4)中普通流水线和中断的重启条件具体为:

普通流水线在下列条件下重启:

·SPLOOP(D)循环完成epilog_lb阶段后跳出,此时循环缓冲变为idle状态,普通流水线重启。

·SPLOOPW循环在循环终止条件满足时,由于不需要epilog_lb阶段,循环缓冲直接变为idle状态,普通流水线重启。

·SPLOOP(D)循环进入epilog_lb阶段,在执行了SPKERNEL(R)指令中fstg/fcyc字段所指示的周期后,普通流水线重启与循环缓冲并行。

·非reload状态下的循环,若循环激活时有分支指令生效,则循环缓冲直接变为idle状态,普通流水线重启。

·中断被处理导致循环缓冲进入epilog_lb阶段,并完成排空后跳出。此时循环缓冲变为idle状态,普通流水线重启。

循环缓冲激活时,在满足以下所有条件下可以处理未决中断,然后循环缓冲进入epilog_lb阶段:

·LBC寄存器值为0且不满足循环终止的条件,否则循环应进入epilog_lb阶段正常排空后跳出。

·循环处于kernel_lb阶段,且循环不处于reload状态。

·循环至少运行了4个周期。

·ILC≥ceil(dynlen÷interation_interval),确保中断返回后的循环不会进入early_exit_lb状态。其中,interation_interval表示每个stage具有的cycle数目,ceil表示向上取整。

显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其他不同形式的变化或变动。这里无需也无法把所有的实施方式予以穷举。而由此所引申出的显而易见的变化或变动仍处于本发明的保护范围。

完整详细技术资料下载
上一篇:石墨接头机器人自动装卡簧、装栓机
下一篇:交互配置方法、装置、系统及电子设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!