2024年6月14日发(作者:象泰平)
(19)中华人民共和国国家知识产权局
(12)发明专利说明书
(21)申请号 CN2.7
(22)申请日 2012.06.29
(71)申请人 中国电子科技集团公司第五十八研究所
地址 214035 江苏省无锡市滨湖区惠河路5号
(72)发明人 杨晓刚 张庆文 黄嵩人 屈凌翔
(74)专利代理机构 无锡市大为专利商标事务所
代理人 殷红梅
(51)
G06F9/38
权利要求说明书 说明书 幅图
(10)申请公布号 CN 102779026 A
(43)申请公布日 2012.11.14
(54)发明名称
一种高性能DSP处理器中的指令多
发射方法
(57)摘要
本发明公开了一种高性能DSP处理
器中的指令多发射方法。这种多发射机制
的实现包括指令Cache的组织结构,能够
支持多条指令的取指;指令的对齐与预
取,能够根据CPU发送的取指地址快速定
位到所需的指令;指令的多发射装置,能
够根据指令的类型,将指令发送到相应的
流水线中。其优点是:本发明能够提高取
指与指令发射的效率,从而提高DSP处理
器整体性能。
法律状态
法律状态公告日
法律状态信息
法律状态
权 利 要 求 说 明 书
1. 一种高性能DSP处理器中的指令多发射方法,其特征是:
a. CPU取指单元发出取指地址,从指令缓存中取出所需的指令;如果指令缓存发
生缺失,则从外部存储单元中取指令,并更新相应的缓存行;
b. 将取到的指令对齐后放入预取缓冲器中,预取缓冲器根据CPU取指地址的偏移
位将指令进行排列对齐,将取值单元首次取到的指令对齐后放入预取缓冲器的低4
位,将取值单元第2次取到的指令对齐后放入预取缓冲器的高4位,最后预取缓冲
器将排列对齐好的指令放入取指缓冲器中等待发射到相对应的流水线中;
c. 取指缓冲器是一个堆栈结构,取指缓冲器低4位的指令通过发射寄存器发射出去
后,取指缓冲器就将高4位中的指令开始下压到取指缓冲器低4位,准备下一次开
始发射,并腾出高位的空间来存放来自预取缓冲器中的指令,等待发射;
d. 指令的发射通过两个发射寄存器:第零发射寄存器和第一发射寄存器来实现指令
的多发射,第零发射寄存器始终取取指缓冲器低位中的指令,第一发射寄存器取接
下来的指令,并根据所取的指令的类型与大小,分别将指令发送到不同流水线中去。
2.如权利要求1所述的高性能DSP处理器中的指令多发射方法,其特征是,所述指
令缓存的组织结构采用两路组相联结构,行大小为256位,能够支持取多条指令;
对于不可缓存的地址,专门添加大小为256位行缓冲器作为单行缓存行。
3.如权利要求1所述的高性能DSP处理器中的指令多发射方法,其特征是,将指令
从指令缓存中取到预取缓冲器中后,根据CPU取指地址的偏移位进行排列对齐,
并将排列对齐好的指令放入取指缓冲器中等待发射到相对应的流水线中;取指缓冲
器为一堆栈结构,每次取指时都是取取指缓冲器低位中的指令;当取指缓冲器低位
中的指令发送出去后,取指缓冲器中高位的指令就开始下压到低位,并腾出高位的
空间来存放来自指令缓存中的指令。
4.如权利要求1所述的高性能DSP处理器中的指令多发射方法,其特征是,第零发
射寄存器与第一发射寄存器相互配合,负责从取指缓冲器中取指,并根据指令的大
小与类型,将指令安排到不同的流水线中去;第零发射寄存器根据所取指令的类型,
将指令发射到相应流水线中,第一发射寄存器根据第零发射寄存器所取指令的大小,
取取指缓冲器中接下来的指令,并判断指令的类型,如果与第零发射寄存器所取指
令类型相同,则交给第零发射寄存器等待发射,避免流水线阻塞,如果与第零发射
寄存器所取指令类型不同,则直接发送到另一条流水线中;一旦发射寄存器中指令
发送出去后,立即填入取指缓冲器中的指令。
说 明 书
技术领域
本发明涉及DSP处理器内核的设计,具体是一种高性能DSP处理器中的指令多发
射方法。
背景技术
数字信号处理器DSP(Digital Signal Processor)是一种专门用于数字信号处理的微
处理器,它能够实时快速完成各种数字信号的算法处理。由于DSP具有快速响应
和高速运算的特点,因此它在消费类电子、通信、航空航天以及国防安全等领域得
到了广泛的应用。DSP微处理器的飞速发展对国防安全以及人们的日常生活都产
生了巨大的影响。
高性能DSP处理器的研发是世界上各个国家科技实力竞争的一个至高点,我国现
在也非常重视在微处理器研发这一领域,目前有许多高校以及科研机构都对微处理
器展开了研究和设计工作,并且也取得了一定的成果,如“龙芯”、“方舟”、“银河
飞腾”相继问世。但是由于我们国家在这一领域起步较晚,所研制出的处理器无论
是在性能上还是在具体的实际应用上都还无法与国外的芯片进行竞争,在一些核心
的关键技术上依然受制于人。因此研制具有我国自主知识产权的高性能处理器对我
国经济发展和国防安全均具有重大意义。
先进的半导体加工工艺让同等面积的硅片上面集成更多数量的晶体管成为可能,这
为更高复杂度处理器芯片的实现提供了强有力的保障。与此同时,先进的设计技术
进一步推动了高性能处理器的发展。比如指令的多发射技术,使微处理器能够在同
一个时钟周期发射和执行多条指令,进一步提高了处理器运行指令的并行度,减少
了各个路径中每级流水线运行所需的时间。指令的多发射技术极大促进了处理器的
性能提升。
发明内容
本发明的目的是克服现有技术中存在的不足,提供一种高性能DSP处理器中的指
令多发射方法,来提高整个DSP处理器性能。
按照本发明提供的技术方案,一种高性能DSP处理器中的指令多发射方法,包括
以下步骤:
a. CPU取指单元发出取指地址,从指令缓存中取出所需的指令;如果指令缓存发
生缺失,则从外部存储单元中取指令,并更新相应的缓存行;
b. 将取到的指令对齐后放入预取缓冲器中,预取缓冲器根据CPU取指地址的偏移
位将指令进行排列对齐,将取值单元首次取到的指令对齐后放入预取缓冲器的低4
位,将取值单元第2次取到的指令对齐后放入预取缓冲器的高4位,最后预取缓冲
器将排列对齐好的指令放入取指缓冲器中等待发射到相对应的流水线中;
c. 取指缓冲器是一个堆栈结构,取指缓冲器低4位的指令通过发射寄存器发射出去
后,取指缓冲器就将高4位中的指令开始下压到取指缓冲器低4位,准备下一次开
始发射,并腾出高位的空间来存放来自预取缓冲器中的指令,等待发射;
d. 指令的发射通过两个发射寄存器:第零发射寄存器和第一发射寄存器来实现指令
的多发射,第零发射寄存器始终取取指缓冲器低位中的指令,第一发射寄存器取接
下来的指令,并根据所取的指令的类型与大小,分别将指令发送到不同流水线中去。
所述指令缓存的组织结构采用两路组相联结构,行大小为256位,能够支持取多条
指令;对于不可缓存的地址,专门添加大小为256位行缓冲器作为单行缓存行。
将指令从指令缓存中取到预取缓冲器中后,根据CPU取指地址的偏移位进行排列
对齐,并将排列对齐好的指令放入取指缓冲器中等待发射到相对应的流水线中;取
指缓冲器为一堆栈结构,每次取指时都是取取指缓冲器低位中的指令;当取指缓冲
器低位中的指令发送出去后,取指缓冲器中高位的指令就开始下压到低位,并腾出
高位的空间来存放来自指令缓存中的指令。
第零发射寄存器与第一发射寄存器相互配合,负责从取指缓冲器中取指,并根据指
令的大小与类型,将指令安排到不同的流水线中去;第零发射寄存器根据所取指令
的类型,将指令发射到相应流水线中,第一发射寄存器根据第零发射寄存器所取指
令的大小,取取指缓冲器中接下来的指令,并判断指令的类型,如果与第零发射寄
存器所取指令类型相同,则交给第零发射寄存器等待发射,避免流水线阻塞,如果
与第零发射寄存器所取指令类型不同,则直接发送到另一流水线中;一旦发射寄存
器中指令发送出去后,立即填入取指缓冲器中的指令。
本发明的优点是:1.片外存储单元地址的分为可Cache部分与不可Cache部分,对
于不可Cache部分的这段地址空间来说,添加Line Buffer作为单行Cache,大大提
高了这部分地址的取指效率。2.专门设计了两个发射寄存器,来实现指令类型与大
小的判断,特别是第一发射寄存器,根据第零发射寄存器所取指令的类型与大小,
确定接下来所取指令的大小,并且还要根据所取指令的类型,判断出发送到哪一条
流水线。用两个发射寄存器来发送指令,大大提高了指令性的发射效率,提高了
DSP处理器的性能。
附图说明
图1为指令缓存(Cache)的组织结构图。
图2为行缓冲器(Line Buffer)结构图。
图3预取缓冲器(prefetch buffer)经过对齐操作后存入取指缓冲器中(fetch buffer)
的示意图。
图4指令的多发射原理图。
具体实施方式
下面结合附图和实施例对本发明作进一步说明。
本发明所述的高性能DSP处理器中的指令多发射方法,步骤如下:
a. CPU取指单元发出取指地址,从指令缓存中取出所需的指令;如果指令缓存发
生缺失,则从外部存储单元中取指令,并更新相应的缓存行;CPU取指单元每次
取64位大小的指令;
b. 将取到的指令对齐后放入预取缓冲器中,预取缓冲器总大小为128位,由8个
16位预取缓冲器组成:预取缓冲器0,预取缓冲器1,…预取缓冲器7。预取缓冲
器根据CPU取指地址的偏移位将指令进行排列对齐,将取值单元首次取到的指令
对齐后放入预取缓冲器低4位:预取缓冲器0、预取缓冲器1、预取缓冲器2、预
取缓冲器3。将取值单元第2次取到的指令对齐后放入预取缓冲器高4位:预取缓
冲器4、预取缓冲器5、预取缓冲器6、预取缓冲器7。最后预取缓冲器将指令送到
取指缓冲器中,等待发射到相对应的流水线中;
c. 取指缓冲器是一个大小为128位的堆栈结构,由8个16位取指缓冲器组成:取
指缓冲器0,取指缓冲器1,…取指缓冲器7。其中取指缓冲器低4位:取指缓冲
器0,取指缓冲器1,取指缓冲器2,取指缓冲器3中的指令首先通过发射寄存器
发射出去后。取指缓冲器高4位:取指缓冲器4,取指缓冲器5,取指缓冲器6,
取指缓冲器7中的指令开始下压到取指缓冲器0、1、2、3,准备下一次开始发射,
并腾出空间来存放来自预取缓冲器中的指令,等待发射;
d. 指令的发射通过两个发射寄存器:第零发射寄存器和第一发射寄存器来实现指令
的多发射,第零发射寄存器始终取取指缓冲器低位中的指令,第一发射寄存器取接
下来的指令,并根据所取的指令的类型与大小,分别将指令发送到不同流水线中去。
DSP处理器的指令Cache的组织结构,如行大小、组相联度,能够支持多条指令的
取指。所述指令Cache的组织结构采用两路组相联结构,行大小为256位,能够支
持取多条指令;对于不可Cache的地址,专门添加大小为256位行缓冲器
(Line Buffer)作为单行缓存行(Cache Line)。本发明在指令Cache与CPU取指单
元之间添加了大小为256位Line Buffer。对于可Cache的地址,Line Buffer就作为
一个指令流的缓冲器;对于不可Cache的地址,Line Buffer作为单行Cache Line。
在绝大多数的应用程序中都含有相当一部分的循环指令与子程序段,CPU对这部
分的地址的程序会频繁访问,而对这部分地址范围之外的程序访问很少。添加
Line Buffer对于不可Cache地址部分来说,能够大大提高取这部分地址中的指令的
效率,有效减少了CPU与片外存储单元之间的通信次数。
指令的预取与对齐:从指令Cache中取出的指令放入预取缓冲器(prefetch buffer)
后,根据CPU取指地址进行对齐。指令Cache中每一行缓存行(Cache Line)存储体
由四个32位大小的存储单元pmem0、pmem1、pmem2、pmem3组成。取指单元每
次从指令Cache取的指令由高到低依次为pmem3、pmem2、pmem1、pmem0中的
指令,将指令放入预取缓冲器后,根据CPU取指地址的偏移位再进行进一步的排
列对齐,最后将排列对齐好的指令放入取指缓冲器(fetch buffer)中等待发射到相
对应的流水线中。
DSP处理器总共有4条流水线:IP流水线,LS流水线,MAC流水线和SIMD流水
线。在不存在数据冒险的情况下,每个时钟周期能运行4条指令。指令的发射通过
两个发射寄存器:第零发射寄存器issue_stream_inst0和第一发射寄存器
issue_stream_inst1。第零发射寄存器issue_stream_inst0始终取第零位取指缓冲器
fetch buffer0(如果是16位指令)或者是第零位取指缓冲器fetch buffer0与第一位
取指缓冲器fetch buffer1中的指令(如果是32位指令)。第一发射寄存器
issue_stream_inst1所取的指令并不一定与第零发射寄存器issue_stream_inst0所取的
指令是不同类型的,而是要根据第零发射寄存器issue_stream_inst0所取指令的类
型与大小等情况而定,并将所取的指令分配到各个流水线上去。取指缓冲器为一堆
栈结构,每次取指时都是取取指缓冲器低4位中的指令;当取指缓冲器中的指令发
送出去后,取指缓冲器中高4位的指令就开始下压到低位,并腾出高位的空间来存
放来自指令Cache中的指令。
如图1所示,指令Cache采用两路组相联结构,取指地址分为标签位tag、索引位
index和偏移位byte,主要用于指令的快速定位和命中情况的判断。指令Cache分
为标签(tag)部分与数据(data)部分,并在每一行缓存行中设计了有效位valid bit用来
指示当前缓存行中的数据是否有效。当取指地址中的标签位与指令Cache中的标签
位比较匹配并且有效位有效,则指令Cache发生命中。当标签位比较不匹配或者是
当前指令Cache中的数据无效,则指令Cache发生缺失。
当指令Cache命中时,指令Cache的输出来自于命中的那一路,每一行缓存行
(Cache Line)存储体由四个32位大小的存储单元pmem0、pmem1、pmem2、pmem3
组成。这四个存储单元的高16位构成指令Cache的第1路,低16位构成指令
Cache的第0路。两路的标签(Tag)的比较与Cache存储体中64位指令的定位是在
同一个时钟周期内并行执行的,一旦标签完成比较,指令Cache就将命中的那一路
中的指令发送出去。例如命中逻辑单元标签比较的结果是1路命中,那么CPU取
指单元取到的64位指令为:pmem3存储单元中高16位指令,pmem2存储单元中
高16位指令,pmem1存储单元中高16位指令,pmem0存储单元中高16位指令。
指令Cache根据取指地址定位到指令Cache存储体中首个16位的指令,然后以此
为基址,取接下来的三个16位指令。该设计还存在着一种特殊情况:当CPU取指
请求发生在行末尾时,这时指令Cache的4个存储体的偏移值也定位到了最后一行,
在这种情况下CPU不能一次取64位的指令,而是需要分两次,进行跨行取指。
行缓冲器(Line Buffer)存储体的设计如图2所示,行缓冲器大小定为256位,与缓
存行的大小相同,可以存放8条32位的指令,并支持关键双字优先技术。为了便
于CPU取指时能够快速定位到所需的指令,把行缓冲器分为4个64位的存储体,
每个存储体又以16位为单位分成4行,CPU每次取指时分别取4个存储体中的1
行。如图2所示,其4个存储体组织结构根据CPU取指地址4到1位进行编码划
分,其中第3、4位作为行偏移用来确定选择哪一行,第1、2位作为列偏移用来确
定选择哪一列。
将指令从指令Cache中取出后,接下来就的操作就要根据CPU取指地址的偏移位
进行对齐操作。如图3所示,Cache存储体中4个存储单元中指令的最高16位为
pmem3存储单元中的指令,最低16位为pmem0存储单元中的指令。因为总共有4
个存储单元,所以只要在CPU取指地址中设置2个偏移位就能实现其对齐。指令
的对齐我们按如下方式进行,当取指地址的偏移位为“00”时,
prefetch buffer3=pmem3,prefetch buffer2=pmem2,prefetch buffer1=pmem1,
prefetch buffer0=pmem0;当取指地址的偏移位为“01”时,prefetch buffer3=pmem0,
prefetch buffer2=pmem3,prefetch buffer1=pmem2,prefetch buffer0=pmem1;当取
指地址的偏移位为“10”时,prefetch buffer3=pmem1,prefetch buffer2=pmem0,
prefetch buffer1=pmem3,prefetch buffer0=pmem2;当取指地址的偏移位为“11”时,
prefetch buffer3=pmem2,prefetch buffer2=pmem1,prefetch buffer1=pmem0,
prefetch buffer0=pmem3。等号表示左边预取缓冲器取右边对应存储单元的指令。
与前述预取缓冲器低4位部分相同,预取缓冲器高4位部分:prefetch buffer7,
prefetch buffer6,prefetch buffer5,prefetch buffer4也按同种对齐方式取接下来64
位指令。
指令对齐完成后,再将对齐后的指令放入取指缓冲器(fetch buffer)中,指令发射时,
按照由低到高的顺序进行发射,即先取取指缓冲器低4位:fetch buffer0,
fetch buffer1,fetch buffer2,fetch buffer3中的指令。取指缓冲器实际是一个堆栈结
构,指令取出后,取指缓冲器高4位:fetch buffer4,fetch buffer5,fetch buffer6和
fetch buffer7中的指令开始下压,准备下一次开始发射。并腾出高位的空间来存放
来自预取缓冲器中的指令,等待发射。
第零发射寄存器issue_stream_inst0与第一发射寄存器issue_stream_inst1是指令发
射阶段的两个发射寄存器,负责从取指缓冲器中取指,如图4所示。第零发射寄存
器issue_stream_inst0始终取第零位取指缓冲器fetch buffer0(如果是16位指令)或
者是第零位取指缓冲器fetch buffer0与第一位取指缓冲器fetch buffer1中的指令
(如果是32位指令)。第一发射寄存器issue_stream_inst1所取的指令并不一定就
是与第零发射寄存器issue_stream_inst0同种类型的指令,而是要根据
issue_stream_inst0所取指令的类型与大小等情况而定,总共有以下3种情况:
1. 当第一条指令为16-bit的整数运算类(IP)指令,那么issue_stream_inst1取
fetch buffer1和fetch buffer2中的指令。
2. 当之前的指令为32-bit的IP指令,那么issue_stream_inst1取fetch buffer2和
fetch buffer3中的指令。
3. 当之前的指令为LS指令,那issue_stream_inst1取fetch buffer0和fetch buffer1
中的指令。
如果第一发射寄存器issue_stream_inst1所取的指令为存取(LS)类的指令,那么就直
接发送到LS流水线,如果第一发射寄存器issue_stream_inst1所取的指令为单指令
多数据(SIMD)类的指令,那么就直接发送到SIMD流水线,如果第一发射寄存器
issue_stream_inst1所取的指令为乘累加(MAC)类的指令,那么就直接发送到MAC
流水线。一种比较常见的情况是之前发射的指令与现在所取的指令为同一种类型,
即这两条指令要分配到同一条流水线中。由于同种类型的指令只有一组执行单元,
为了避免流水线阻塞,第一发射寄存器issue_stream_inst1就会将所取的指令交给
第零发射寄存器issue_stream_inst0等待发射,同时第一发射寄存器
issue_stream_inst1取接下来的指令发射到流水线中去。
2024年6月14日发(作者:象泰平)
(19)中华人民共和国国家知识产权局
(12)发明专利说明书
(21)申请号 CN2.7
(22)申请日 2012.06.29
(71)申请人 中国电子科技集团公司第五十八研究所
地址 214035 江苏省无锡市滨湖区惠河路5号
(72)发明人 杨晓刚 张庆文 黄嵩人 屈凌翔
(74)专利代理机构 无锡市大为专利商标事务所
代理人 殷红梅
(51)
G06F9/38
权利要求说明书 说明书 幅图
(10)申请公布号 CN 102779026 A
(43)申请公布日 2012.11.14
(54)发明名称
一种高性能DSP处理器中的指令多
发射方法
(57)摘要
本发明公开了一种高性能DSP处理
器中的指令多发射方法。这种多发射机制
的实现包括指令Cache的组织结构,能够
支持多条指令的取指;指令的对齐与预
取,能够根据CPU发送的取指地址快速定
位到所需的指令;指令的多发射装置,能
够根据指令的类型,将指令发送到相应的
流水线中。其优点是:本发明能够提高取
指与指令发射的效率,从而提高DSP处理
器整体性能。
法律状态
法律状态公告日
法律状态信息
法律状态
权 利 要 求 说 明 书
1. 一种高性能DSP处理器中的指令多发射方法,其特征是:
a. CPU取指单元发出取指地址,从指令缓存中取出所需的指令;如果指令缓存发
生缺失,则从外部存储单元中取指令,并更新相应的缓存行;
b. 将取到的指令对齐后放入预取缓冲器中,预取缓冲器根据CPU取指地址的偏移
位将指令进行排列对齐,将取值单元首次取到的指令对齐后放入预取缓冲器的低4
位,将取值单元第2次取到的指令对齐后放入预取缓冲器的高4位,最后预取缓冲
器将排列对齐好的指令放入取指缓冲器中等待发射到相对应的流水线中;
c. 取指缓冲器是一个堆栈结构,取指缓冲器低4位的指令通过发射寄存器发射出去
后,取指缓冲器就将高4位中的指令开始下压到取指缓冲器低4位,准备下一次开
始发射,并腾出高位的空间来存放来自预取缓冲器中的指令,等待发射;
d. 指令的发射通过两个发射寄存器:第零发射寄存器和第一发射寄存器来实现指令
的多发射,第零发射寄存器始终取取指缓冲器低位中的指令,第一发射寄存器取接
下来的指令,并根据所取的指令的类型与大小,分别将指令发送到不同流水线中去。
2.如权利要求1所述的高性能DSP处理器中的指令多发射方法,其特征是,所述指
令缓存的组织结构采用两路组相联结构,行大小为256位,能够支持取多条指令;
对于不可缓存的地址,专门添加大小为256位行缓冲器作为单行缓存行。
3.如权利要求1所述的高性能DSP处理器中的指令多发射方法,其特征是,将指令
从指令缓存中取到预取缓冲器中后,根据CPU取指地址的偏移位进行排列对齐,
并将排列对齐好的指令放入取指缓冲器中等待发射到相对应的流水线中;取指缓冲
器为一堆栈结构,每次取指时都是取取指缓冲器低位中的指令;当取指缓冲器低位
中的指令发送出去后,取指缓冲器中高位的指令就开始下压到低位,并腾出高位的
空间来存放来自指令缓存中的指令。
4.如权利要求1所述的高性能DSP处理器中的指令多发射方法,其特征是,第零发
射寄存器与第一发射寄存器相互配合,负责从取指缓冲器中取指,并根据指令的大
小与类型,将指令安排到不同的流水线中去;第零发射寄存器根据所取指令的类型,
将指令发射到相应流水线中,第一发射寄存器根据第零发射寄存器所取指令的大小,
取取指缓冲器中接下来的指令,并判断指令的类型,如果与第零发射寄存器所取指
令类型相同,则交给第零发射寄存器等待发射,避免流水线阻塞,如果与第零发射
寄存器所取指令类型不同,则直接发送到另一条流水线中;一旦发射寄存器中指令
发送出去后,立即填入取指缓冲器中的指令。
说 明 书
技术领域
本发明涉及DSP处理器内核的设计,具体是一种高性能DSP处理器中的指令多发
射方法。
背景技术
数字信号处理器DSP(Digital Signal Processor)是一种专门用于数字信号处理的微
处理器,它能够实时快速完成各种数字信号的算法处理。由于DSP具有快速响应
和高速运算的特点,因此它在消费类电子、通信、航空航天以及国防安全等领域得
到了广泛的应用。DSP微处理器的飞速发展对国防安全以及人们的日常生活都产
生了巨大的影响。
高性能DSP处理器的研发是世界上各个国家科技实力竞争的一个至高点,我国现
在也非常重视在微处理器研发这一领域,目前有许多高校以及科研机构都对微处理
器展开了研究和设计工作,并且也取得了一定的成果,如“龙芯”、“方舟”、“银河
飞腾”相继问世。但是由于我们国家在这一领域起步较晚,所研制出的处理器无论
是在性能上还是在具体的实际应用上都还无法与国外的芯片进行竞争,在一些核心
的关键技术上依然受制于人。因此研制具有我国自主知识产权的高性能处理器对我
国经济发展和国防安全均具有重大意义。
先进的半导体加工工艺让同等面积的硅片上面集成更多数量的晶体管成为可能,这
为更高复杂度处理器芯片的实现提供了强有力的保障。与此同时,先进的设计技术
进一步推动了高性能处理器的发展。比如指令的多发射技术,使微处理器能够在同
一个时钟周期发射和执行多条指令,进一步提高了处理器运行指令的并行度,减少
了各个路径中每级流水线运行所需的时间。指令的多发射技术极大促进了处理器的
性能提升。
发明内容
本发明的目的是克服现有技术中存在的不足,提供一种高性能DSP处理器中的指
令多发射方法,来提高整个DSP处理器性能。
按照本发明提供的技术方案,一种高性能DSP处理器中的指令多发射方法,包括
以下步骤:
a. CPU取指单元发出取指地址,从指令缓存中取出所需的指令;如果指令缓存发
生缺失,则从外部存储单元中取指令,并更新相应的缓存行;
b. 将取到的指令对齐后放入预取缓冲器中,预取缓冲器根据CPU取指地址的偏移
位将指令进行排列对齐,将取值单元首次取到的指令对齐后放入预取缓冲器的低4
位,将取值单元第2次取到的指令对齐后放入预取缓冲器的高4位,最后预取缓冲
器将排列对齐好的指令放入取指缓冲器中等待发射到相对应的流水线中;
c. 取指缓冲器是一个堆栈结构,取指缓冲器低4位的指令通过发射寄存器发射出去
后,取指缓冲器就将高4位中的指令开始下压到取指缓冲器低4位,准备下一次开
始发射,并腾出高位的空间来存放来自预取缓冲器中的指令,等待发射;
d. 指令的发射通过两个发射寄存器:第零发射寄存器和第一发射寄存器来实现指令
的多发射,第零发射寄存器始终取取指缓冲器低位中的指令,第一发射寄存器取接
下来的指令,并根据所取的指令的类型与大小,分别将指令发送到不同流水线中去。
所述指令缓存的组织结构采用两路组相联结构,行大小为256位,能够支持取多条
指令;对于不可缓存的地址,专门添加大小为256位行缓冲器作为单行缓存行。
将指令从指令缓存中取到预取缓冲器中后,根据CPU取指地址的偏移位进行排列
对齐,并将排列对齐好的指令放入取指缓冲器中等待发射到相对应的流水线中;取
指缓冲器为一堆栈结构,每次取指时都是取取指缓冲器低位中的指令;当取指缓冲
器低位中的指令发送出去后,取指缓冲器中高位的指令就开始下压到低位,并腾出
高位的空间来存放来自指令缓存中的指令。
第零发射寄存器与第一发射寄存器相互配合,负责从取指缓冲器中取指,并根据指
令的大小与类型,将指令安排到不同的流水线中去;第零发射寄存器根据所取指令
的类型,将指令发射到相应流水线中,第一发射寄存器根据第零发射寄存器所取指
令的大小,取取指缓冲器中接下来的指令,并判断指令的类型,如果与第零发射寄
存器所取指令类型相同,则交给第零发射寄存器等待发射,避免流水线阻塞,如果
与第零发射寄存器所取指令类型不同,则直接发送到另一流水线中;一旦发射寄存
器中指令发送出去后,立即填入取指缓冲器中的指令。
本发明的优点是:1.片外存储单元地址的分为可Cache部分与不可Cache部分,对
于不可Cache部分的这段地址空间来说,添加Line Buffer作为单行Cache,大大提
高了这部分地址的取指效率。2.专门设计了两个发射寄存器,来实现指令类型与大
小的判断,特别是第一发射寄存器,根据第零发射寄存器所取指令的类型与大小,
确定接下来所取指令的大小,并且还要根据所取指令的类型,判断出发送到哪一条
流水线。用两个发射寄存器来发送指令,大大提高了指令性的发射效率,提高了
DSP处理器的性能。
附图说明
图1为指令缓存(Cache)的组织结构图。
图2为行缓冲器(Line Buffer)结构图。
图3预取缓冲器(prefetch buffer)经过对齐操作后存入取指缓冲器中(fetch buffer)
的示意图。
图4指令的多发射原理图。
具体实施方式
下面结合附图和实施例对本发明作进一步说明。
本发明所述的高性能DSP处理器中的指令多发射方法,步骤如下:
a. CPU取指单元发出取指地址,从指令缓存中取出所需的指令;如果指令缓存发
生缺失,则从外部存储单元中取指令,并更新相应的缓存行;CPU取指单元每次
取64位大小的指令;
b. 将取到的指令对齐后放入预取缓冲器中,预取缓冲器总大小为128位,由8个
16位预取缓冲器组成:预取缓冲器0,预取缓冲器1,…预取缓冲器7。预取缓冲
器根据CPU取指地址的偏移位将指令进行排列对齐,将取值单元首次取到的指令
对齐后放入预取缓冲器低4位:预取缓冲器0、预取缓冲器1、预取缓冲器2、预
取缓冲器3。将取值单元第2次取到的指令对齐后放入预取缓冲器高4位:预取缓
冲器4、预取缓冲器5、预取缓冲器6、预取缓冲器7。最后预取缓冲器将指令送到
取指缓冲器中,等待发射到相对应的流水线中;
c. 取指缓冲器是一个大小为128位的堆栈结构,由8个16位取指缓冲器组成:取
指缓冲器0,取指缓冲器1,…取指缓冲器7。其中取指缓冲器低4位:取指缓冲
器0,取指缓冲器1,取指缓冲器2,取指缓冲器3中的指令首先通过发射寄存器
发射出去后。取指缓冲器高4位:取指缓冲器4,取指缓冲器5,取指缓冲器6,
取指缓冲器7中的指令开始下压到取指缓冲器0、1、2、3,准备下一次开始发射,
并腾出空间来存放来自预取缓冲器中的指令,等待发射;
d. 指令的发射通过两个发射寄存器:第零发射寄存器和第一发射寄存器来实现指令
的多发射,第零发射寄存器始终取取指缓冲器低位中的指令,第一发射寄存器取接
下来的指令,并根据所取的指令的类型与大小,分别将指令发送到不同流水线中去。
DSP处理器的指令Cache的组织结构,如行大小、组相联度,能够支持多条指令的
取指。所述指令Cache的组织结构采用两路组相联结构,行大小为256位,能够支
持取多条指令;对于不可Cache的地址,专门添加大小为256位行缓冲器
(Line Buffer)作为单行缓存行(Cache Line)。本发明在指令Cache与CPU取指单
元之间添加了大小为256位Line Buffer。对于可Cache的地址,Line Buffer就作为
一个指令流的缓冲器;对于不可Cache的地址,Line Buffer作为单行Cache Line。
在绝大多数的应用程序中都含有相当一部分的循环指令与子程序段,CPU对这部
分的地址的程序会频繁访问,而对这部分地址范围之外的程序访问很少。添加
Line Buffer对于不可Cache地址部分来说,能够大大提高取这部分地址中的指令的
效率,有效减少了CPU与片外存储单元之间的通信次数。
指令的预取与对齐:从指令Cache中取出的指令放入预取缓冲器(prefetch buffer)
后,根据CPU取指地址进行对齐。指令Cache中每一行缓存行(Cache Line)存储体
由四个32位大小的存储单元pmem0、pmem1、pmem2、pmem3组成。取指单元每
次从指令Cache取的指令由高到低依次为pmem3、pmem2、pmem1、pmem0中的
指令,将指令放入预取缓冲器后,根据CPU取指地址的偏移位再进行进一步的排
列对齐,最后将排列对齐好的指令放入取指缓冲器(fetch buffer)中等待发射到相
对应的流水线中。
DSP处理器总共有4条流水线:IP流水线,LS流水线,MAC流水线和SIMD流水
线。在不存在数据冒险的情况下,每个时钟周期能运行4条指令。指令的发射通过
两个发射寄存器:第零发射寄存器issue_stream_inst0和第一发射寄存器
issue_stream_inst1。第零发射寄存器issue_stream_inst0始终取第零位取指缓冲器
fetch buffer0(如果是16位指令)或者是第零位取指缓冲器fetch buffer0与第一位
取指缓冲器fetch buffer1中的指令(如果是32位指令)。第一发射寄存器
issue_stream_inst1所取的指令并不一定与第零发射寄存器issue_stream_inst0所取的
指令是不同类型的,而是要根据第零发射寄存器issue_stream_inst0所取指令的类
型与大小等情况而定,并将所取的指令分配到各个流水线上去。取指缓冲器为一堆
栈结构,每次取指时都是取取指缓冲器低4位中的指令;当取指缓冲器中的指令发
送出去后,取指缓冲器中高4位的指令就开始下压到低位,并腾出高位的空间来存
放来自指令Cache中的指令。
如图1所示,指令Cache采用两路组相联结构,取指地址分为标签位tag、索引位
index和偏移位byte,主要用于指令的快速定位和命中情况的判断。指令Cache分
为标签(tag)部分与数据(data)部分,并在每一行缓存行中设计了有效位valid bit用来
指示当前缓存行中的数据是否有效。当取指地址中的标签位与指令Cache中的标签
位比较匹配并且有效位有效,则指令Cache发生命中。当标签位比较不匹配或者是
当前指令Cache中的数据无效,则指令Cache发生缺失。
当指令Cache命中时,指令Cache的输出来自于命中的那一路,每一行缓存行
(Cache Line)存储体由四个32位大小的存储单元pmem0、pmem1、pmem2、pmem3
组成。这四个存储单元的高16位构成指令Cache的第1路,低16位构成指令
Cache的第0路。两路的标签(Tag)的比较与Cache存储体中64位指令的定位是在
同一个时钟周期内并行执行的,一旦标签完成比较,指令Cache就将命中的那一路
中的指令发送出去。例如命中逻辑单元标签比较的结果是1路命中,那么CPU取
指单元取到的64位指令为:pmem3存储单元中高16位指令,pmem2存储单元中
高16位指令,pmem1存储单元中高16位指令,pmem0存储单元中高16位指令。
指令Cache根据取指地址定位到指令Cache存储体中首个16位的指令,然后以此
为基址,取接下来的三个16位指令。该设计还存在着一种特殊情况:当CPU取指
请求发生在行末尾时,这时指令Cache的4个存储体的偏移值也定位到了最后一行,
在这种情况下CPU不能一次取64位的指令,而是需要分两次,进行跨行取指。
行缓冲器(Line Buffer)存储体的设计如图2所示,行缓冲器大小定为256位,与缓
存行的大小相同,可以存放8条32位的指令,并支持关键双字优先技术。为了便
于CPU取指时能够快速定位到所需的指令,把行缓冲器分为4个64位的存储体,
每个存储体又以16位为单位分成4行,CPU每次取指时分别取4个存储体中的1
行。如图2所示,其4个存储体组织结构根据CPU取指地址4到1位进行编码划
分,其中第3、4位作为行偏移用来确定选择哪一行,第1、2位作为列偏移用来确
定选择哪一列。
将指令从指令Cache中取出后,接下来就的操作就要根据CPU取指地址的偏移位
进行对齐操作。如图3所示,Cache存储体中4个存储单元中指令的最高16位为
pmem3存储单元中的指令,最低16位为pmem0存储单元中的指令。因为总共有4
个存储单元,所以只要在CPU取指地址中设置2个偏移位就能实现其对齐。指令
的对齐我们按如下方式进行,当取指地址的偏移位为“00”时,
prefetch buffer3=pmem3,prefetch buffer2=pmem2,prefetch buffer1=pmem1,
prefetch buffer0=pmem0;当取指地址的偏移位为“01”时,prefetch buffer3=pmem0,
prefetch buffer2=pmem3,prefetch buffer1=pmem2,prefetch buffer0=pmem1;当取
指地址的偏移位为“10”时,prefetch buffer3=pmem1,prefetch buffer2=pmem0,
prefetch buffer1=pmem3,prefetch buffer0=pmem2;当取指地址的偏移位为“11”时,
prefetch buffer3=pmem2,prefetch buffer2=pmem1,prefetch buffer1=pmem0,
prefetch buffer0=pmem3。等号表示左边预取缓冲器取右边对应存储单元的指令。
与前述预取缓冲器低4位部分相同,预取缓冲器高4位部分:prefetch buffer7,
prefetch buffer6,prefetch buffer5,prefetch buffer4也按同种对齐方式取接下来64
位指令。
指令对齐完成后,再将对齐后的指令放入取指缓冲器(fetch buffer)中,指令发射时,
按照由低到高的顺序进行发射,即先取取指缓冲器低4位:fetch buffer0,
fetch buffer1,fetch buffer2,fetch buffer3中的指令。取指缓冲器实际是一个堆栈结
构,指令取出后,取指缓冲器高4位:fetch buffer4,fetch buffer5,fetch buffer6和
fetch buffer7中的指令开始下压,准备下一次开始发射。并腾出高位的空间来存放
来自预取缓冲器中的指令,等待发射。
第零发射寄存器issue_stream_inst0与第一发射寄存器issue_stream_inst1是指令发
射阶段的两个发射寄存器,负责从取指缓冲器中取指,如图4所示。第零发射寄存
器issue_stream_inst0始终取第零位取指缓冲器fetch buffer0(如果是16位指令)或
者是第零位取指缓冲器fetch buffer0与第一位取指缓冲器fetch buffer1中的指令
(如果是32位指令)。第一发射寄存器issue_stream_inst1所取的指令并不一定就
是与第零发射寄存器issue_stream_inst0同种类型的指令,而是要根据
issue_stream_inst0所取指令的类型与大小等情况而定,总共有以下3种情况:
1. 当第一条指令为16-bit的整数运算类(IP)指令,那么issue_stream_inst1取
fetch buffer1和fetch buffer2中的指令。
2. 当之前的指令为32-bit的IP指令,那么issue_stream_inst1取fetch buffer2和
fetch buffer3中的指令。
3. 当之前的指令为LS指令,那issue_stream_inst1取fetch buffer0和fetch buffer1
中的指令。
如果第一发射寄存器issue_stream_inst1所取的指令为存取(LS)类的指令,那么就直
接发送到LS流水线,如果第一发射寄存器issue_stream_inst1所取的指令为单指令
多数据(SIMD)类的指令,那么就直接发送到SIMD流水线,如果第一发射寄存器
issue_stream_inst1所取的指令为乘累加(MAC)类的指令,那么就直接发送到MAC
流水线。一种比较常见的情况是之前发射的指令与现在所取的指令为同一种类型,
即这两条指令要分配到同一条流水线中。由于同种类型的指令只有一组执行单元,
为了避免流水线阻塞,第一发射寄存器issue_stream_inst1就会将所取的指令交给
第零发射寄存器issue_stream_inst0等待发射,同时第一发射寄存器
issue_stream_inst1取接下来的指令发射到流水线中去。