具体实施方式
图1为先前技术习知数据处理系统100的方块图。数据处理系统100包含精简指令集计算机(reduced instruction set computer,RISC)微处理器102,其系形成系统100之中央处理单元(CPU)。RISC微处理器102系连接至形式为随机存取内存(RAM)104的高速挥发性内存以及形式可为屏蔽只读存储器(ROM)的低速非挥发性内存(NVM)106、快闪电子可抹除可程序化只读存储器(“FLASH”)、或其类似物。系统100也包含数个未图标于图1的输入/输出装置,其系直接或通过输入/输出配接器而连接至RISC微处理器102。
为了执行手持装置(例如,PDA、行动电话、手持视讯游戏系统、及其类似物)所要求的特别处理,系统100包含通用数字信号处理器(DSP)110,其系具有分别用于资料与程序储蓄的RAM 112与NVM114。为了在RISC微处理器102与DSP 110之间传递工作(task)及结果,系统100包含共享内存108。
当计算机系统100用于低成本手持装置时有数种缺点。首先,RISC微处理器102与DSP 110为分开的芯片,这会增加系统成本。第二,各处理器需要各自分开的内存,这会增加芯片数,因而增加系统成本。第三,由于各处理器有各自的指令集,因此各需要各自分开的组译器(assembler)、编译器(compiler)、及开发工具,从而增加复杂度且降低最快的上市速度(time-to-market)。
图2为根据本发明之数据处理系统200的方块图。数据处理系统200包含RISC处理器核心300、包含RAM 205与NVM 206的内存204、接口210、以及特殊DSP列表协处理器500。跟以前一样,NVM 206可采用的形式为屏蔽ROM、快闪EEPROM、等等。在示范具体实施例中,其系将RISC处理器核心300、接口210、及DSP列表协处理器500组合于单一集成电路。不像图1的RISC处理器核心102,将RISC处理器核心300设计成可与包含协处理器的其它系统组件整合。因此,RISC处理器核心300包含特殊功能,其系用于识别使用者所界定的协处理器指令且通过接口210提供此等特殊指令至协处理器。在图标具体实施例中,RISC处理器核心300为一种与4KESTM处理器核心家族(售自美普思科技公司,山景城,美国加州)兼容的核心,但可换为有类似功能的等价处理器核心。
接口210为RISC处理器核心300与DSP列表协处理器500之间的互动地点。互动的实现系通过传输处理器之间的资料且控制该接口的信号线。相关信号线以下将予以描述,但这些显然只是用来示范。一组标示为“INSTRUCTION”的32条信号线212系对应至RISC处理器核心202的指令集中之一或更多指令。就4KESTM核心的情形而言,此时将一些先前被保留的指令给协处理器专用。在此类指令(称作使用者所界定的接口(UDI)指令)中,有一部份的指令字段是用来识别它是UDI指令,而另一部份的指令字段是用来识别待执行的运算的类型。RISC处理器核心300系使用该INSTRUCTION字段以(至少)表示将被传送到DSP列表协处理器500的UDI指令的类型。因此,该INSTRUCTION字段可与RISC处理器核心指令一样,但也可包含较少的位数,只要数目足以识别该指令。此外,该INSTRUCTION字段可编码该指令,而方式与RISC处理器核心300所认定之指令的不同。
接口210使用用以传输以“rs”标示的第一操作数的第一组32条信号线以及用以传输以“rt”标示的第二操作数的第二组32条信号线,传送达两个操作数至DSP列表协处理器500。有些UDI指令可能不需要这两组信号线中之一组或两组。
接口210包含一组信号线218,其系用来传送以“rd”标示的32位结果操作数,藉此DSP列表协处理器500将INSTRUCTION的结果传回到RISC处理器核心300。
接口210也包含标示为“CONROL”的控制总线220,其系用于传输数个控制接口210的运算的控制信号。
RISC处理器核心300与DSP列表协处理器500均与其它输入/输出装置(未图标于图2)一起整合于SOC中。RISC处理器核心300可与DSP列表协处理器500透过接口连接而不因UDI之可用性而修改它的管线(pipeline)。
系统200只包含单一内存系统204而不需要专用于DSP列表协处理器500的额外内存或者是在RISC处理器核心300与DSP列表协处理器500之间的通讯内存。以下说明操作数的流通。RISC处理器核心300首先为响应移动指令而移动资料到其通用寄存器(general-purposeregister)中之一个。资料可在内存204中,或可已自输入/输出装置接收该资料(未图标于图2)。然后,RISC处理器核心300执行移动资料至DSP列表协处理器500的UDI指令。DSP列表协处理器500包含它自己的列表内存以使它可执行许多不同类型的DSP工作而不需存取不同的内存。除了因许多DSP例程有相继性(sequential nature)以外,DSP列表协处理器500在它收到指令的同时要保存及更新数值,因此要求RISC处理器核心300的负荷与介入(intervention)要最少而保留额外的处理能力。DSP列表协处理器500通过rd信号线218送回结果,且RISC处理器核心300存储结果于以UDI指令界定之rd字段所指示的寄存器内。
为了实现有效率、不需额外内存结构的DSP处理,DSP列表协处理器500包含内部列表内存其系存储许多DDSP及相关指令所需要之一列的资料数值。在遇到某些UDI指令时,DSP列表协处理器500存储新的操作数数值于列表内存内且使用该数值及其它已在列表内存内的数值而执行该指令。不过,在其它具体实作中,当前的计算可能不使用实际所传送的数值,而只将该数值存下来供以后使用。
尽管未实际以DSP列表协处理器500具体实作,此项技术可用于其它特殊用途的计算。例如,有些数据通讯的工作(task)需要计算形式为循环冗余检查(cyclic redundancy check,CRC)的框检查顺序(framecheck sequence)。有数种习知的CRC多项式,但都应用多项式(polynomial)于一序列的资料样本以得到数字。该列表内存可用来存储计算当前CRC之资料样本的历史记录。此外,特定的CRC产生多项式(CRC generator polynomial)可预先建立或者是通过其它的指令先行予以编程。同样,可修改DSP列表协处理器500以高效地使用该列表内存作为通用多项式求值(polynomial evaluation)的一部份。
图3为图2之RISC处理器核心300的方块图。图3系图标RISC处理器核心300中对了解本发明为重要且省略其它习知特性的细节。RISC处理器核心300包含通用寄存器文件302。该通用寄存器文件302包含32个各有32个位宽(bit wide)的寄存器,分别依序以“r0”、“r1”、“r2”、...、“r31”标示。此外,RISC处理器核心300包含组态寄存器304,其系具有标示为“UDI”的位306,该位306系用于或去(enable or disable)使用者所界定之接口的运算。执行单元(execution unit)308可存取UDI位306及寄存器文件302内的寄存器两者,其系根据软件程序执行指令目录(instruction repertoire)中之指令。
有一类指令为UDI指令集。为响应UDI指令的接收,当以UDI位306致能UDI指令时,执行单元308传送表示该指令且需要寄存器数值作为操作数的字段至UDI接口控制器310。然后,UDI接口控制器310通过UDI接口210控制RISC处理器核心300与DSP列表协处理器500之间的数值交换。
当被UDI位306致能时,执行单元308译码及执行图4所示之UDI指令,图4系图标图3之RISC处理器核心300所用之协处理器指令400的格式(format)。指令400为带有7个不同位长度之字段402、404、406、308、410、412、414的32位指令。位3至0包含习知为“SET CODE”字段的字段402。该SET CODE字段系识别UDI指令的主要类型,这包括ALU运算、MAC运算、列表运算(以下将予以详述)、移至及移自运算(move to and from operation)、以及延伸ALU运算。
位5与4包含习知为“BLOCK”字段的字段404。DSP列表协处理器500的BLOCK字段404永远被设定为01。
位10至6包含习知为“SUBSET CODE”字段的字段406。SUBSETCODE字段406系界定DSP列表协处理器500认得的特定运算码(opcode),且基于SET CODE字段402的数值而有不同意思。
对大部份的SET CODE数值而言,指令系使DSP列表协处理器500执行习知的数据处理运算。不过,DSP列表协处理器500能够执行一组特殊的运算,习知为列表运算(list operation),从而可利用许多DSP运算的相继性。因此,当SET CODE字段402表示列表运算时,SUBSETCODE字段406有列于表I的编码。
表I
SUBSEICODE |
助忆码 |
说明 |
00000 |
MFXH_COMPLEX |
由X头移除32位紧缩带正负号复数(32-bit packed signed complexnumber)(两个实数的16位半字符)且开始长度为XLENGTH的管线点乘积(pieplined dot product)。送回先前的X头(40位c9b31累计值) |
00001 |
MFXH_COMPLEX_CX |
在点乘积之前X-列表为共轭 |
00010 |
MFXH_COMPLEX_CXY |
X与Y为逻辑共轭 |
00011 |
MTYH_COMPLEX |
在Y头上放入32位紧缩带正负号复数且开始用40位c9b31累计值长度为XLENGTH/2的管线点乘积(ETSI不使用复数算术,故所有MAC均为c9b31) |
00100 |
MIYH_COMPLEX_CX |
在点乘积之前X-列表为共轭 |
00101 |
MIYH_COMPLEX_CXY |
X与Y为逻辑共轭 |
00110 |
MFXH_REAL |
由X列表头移除一实数int16且开始管线实数点乘积 |
00111 |
MFXH_REAL32 |
由X列表头移除一实数int16且开始用lb31(32位)累计值管线实数点乘积(pipelined real product))以及溢位/饱和的测试(依照ETSI规定) |
01000 |
MIYH_REAL |
Y列表头上放入一实数int16且开始管线实数点乘积,继续平行进行乘法运算,得一结果(XLENGTH可为奇数) |
01001 |
MIYH_REAL32 |
Y列表头上放入一实数int16且开始管线实数1b31 ETSI规格之点乘积(pipelined real 1b31ETSI-spec dot product) |
01010 |
MFXH1 |
由X头移动短资料(short data),以*rd送回到呼叫程序,递减XLENGTH |
01011 |
MFXH2 |
由X头移动资料对(data pair),XLENGTH减2,以*rd送回先前的XHEAD资料对到呼叫程度 |
01100 |
MFYH1 |
由Y头移动短(16位)资料组件,以*rd送回先前YHEAD的资料到呼叫程序 |
01101 |
MFYH2 |
由Y头移动list Data(紧缩2×16)的资料,以*rd送回先前YHEAD的资料到呼叫程序 |
01110 |
MTXT1 |
加载int16数值到X尾 |
01111 |
MTXT2 |
加载紧缩2×16到X尾(表示1个复数或2个实数),此功能系用来复原X-列表的上下文故永远成对加载以维持效率 |
10000 |
MTYH1 |
Y头放入int16数值,不进行列表完整性检查(list integrity checking |
10001 |
MTYH2 |
Y头放入资料对,不进行列表完整性检查 |
表II列出在列表指令期间传送于RISC处理器核心300与DSP列表协处理器500之间的操作数:
表II
SUBSET CODE |
助忆码
|
Rs |
Rt |
Rd |
周期 |
00000 |
MFXH_COMPLEX |
X |
X |
N/A |
多个 |
00001 |
MFXH_COMPLEX_CX |
X |
X |
N/A |
多个 |
00010 |
MFXH_COMPLEX_CXY |
X |
X |
N/A |
多个 |
00011 |
MTYH_COMPLEX |
操作数 |
X |
N/A |
多个 |
00100 |
MTYH_COMPLEX_CX |
操作数 |
X |
N/A |
多个 |
00101 |
MTYH_COMPLEX_CXY |
操作数 |
X |
N/A |
多个 |
00110 |
MFXH_REAL |
X |
X |
结果 |
多个 |
00111 |
MFXH_REAL32 |
X |
X |
结果 |
多个 |
01000 |
MTYH_REAL |
操作数 |
X |
N/A |
多个 |
01001 |
MTYH_REAL32 |
操作数 |
X |
N/A |
多个 |
01010 |
MFXH1 |
X |
X |
结果 |
1 |
01011 |
MFXH2 |
X |
X |
结果 |
1 |
01100 |
MFYH1 |
X |
X |
结果 |
1 |
01101 |
MFYH2 |
X |
X |
结果 |
1 |
01110 |
MTXT1 |
操作数 |
X |
N/A |
1 |
01111 |
MTXT2 |
操作数 |
X |
N/A |
1 |
10000 |
MTYH1 |
操作数 |
X |
N/A |
1 |
10001 |
MTYH2 |
操作数 |
X |
N/A |
1 |
其中“X”表示忽略不计(don’t care),而“多个”表示周期数取决于X内存524及/或Y内存522内之诸列表的元素个数(亦即,列表的长度)。
位31至26系形成具有二进制数值为“011100”以表示所谓之“SPECIAL 2”指令格式的指令型字段414以表示当BLOCK字段也有01值时,该指令为想要用于DSP列表协处理器500的UDI指令。
其余的位字段包含数个操作数寄存器指定符(operand registerdesignator),各为5个位长以选定32个通用寄存器中之一个。位25-21包含第一来源操作数识别符字段412,标示为“rs”。位20至16包含第二来源操作数识别符字段410,标示为“rt”。位15至11包含目的地操作数识别符字段408,标示为“rd”。是否使用此类字段取决于该指令的类型。
图5系图标图2之DSP列表协处理器500的方块图。DSP列表协处理器500通常包含控制及定序逻辑(control and sequencing logic)510、列表内存520、以及算术逻辑单元(ALU)530。控制及定序逻辑510系管理UDI接口210,且译码以INSTRUCTION字段表示的指令。它也保存指向列表内存520的指针。此类指针包含“Y”内存522与“X”内存524中之每一内存的起始指针(head pointer)与末尾指针(tail pointer)。因此,控制及定序逻辑510输出标示为“YH”的Y起始指针、标示为“YT”的Y末尾指针、标示为“XH”的X起始指针、以及标示为“XT”的X末尾指针。如以下将进一步予以描述的,起始及末尾指针系界定数值之连续列表的开始及结束地址。控制及定序逻辑510也输出标示为“ADDRESSA”供索引Y内存522内之列表的地址、标示为“ADDRESSB”供索引X内存524内之列表的地址、标示为“DATAY”且待存储于Y内存的资料数值、以及标示为“DATAX”且待存储于X内存的资料数值。
列表内存520包含Y内存522与X内存524两者,各存储数个16位数值。就执行一个特别有用的DSP运算的目的而言,亦即,有限脉冲响应(FIR)滤波器计算,X内存524内的数值系与该滤波器的系数相对应,而Y内存522内数值与资料样本相对应。
ALU 530包含寄存器532与534、多任务器(MUX)540、乘法累加运算(multiply-and-accumulate,MAC)单元542与544、以及修补逻辑(fix-up logic)546。寄存器532系连接至Y内存522的输出且有“A”部份与“B”部份,其系用于各自存储Y内存522所输出之16位字符(16-bitword)的高字节与低字节。同样,寄存器534连接至X内存524的输出且有“C”部份与“D”部份,其系用于各自存储X内存524所输出之16位字符的高字节与低字节。MUX 540有连接至A、B、C、D寄存器之输出的输入以及4个输出。MUX 540为有利于紧缩算术运算(packedarithmetic operation)的完全4×4 MUX,如以下所做之更完整描述。MAC542有连接至MUX 540的第一与第二输出端子的第一与第二输入端子以及40位输出端子。MAC 544有连接至MUX 540之第三与第四输出端子的第一与第二输入端子以及40位输出端子。如以下所做之更完整描述,MAC 542与544各有数个可选择之饱和模式(saturation mode)以便提供不同的饱和假定(saturation assumption)给两种习知类型的信号处理。
ALU 530包含修补逻辑546电路546,其系具有连接至MAC 542之输出端子的第一输入端子、连接至MAC 544之输出端子的第二输入端子、以及连接至接口210用来提供rd数值的输出端子。更具体言之,修补逻辑546包含累加器,其系具有标示为“ACC0”的较低(lower)16位部份548与标示为“ACC1”的较高(upper)16位部份550(548与550在本文中亦有称为“累加器部份”或“累加器”)。累加器部份548与550图标成分开的部份,这是因为彼等系分开存储执行紧缩运算时的结果。不过,在执行全32位算术(full 32-bit arithhmetic)时,会将结果的下半部存储于累加器548而将上半部存储于累加器550。修补电路546系完成该指令所界定之正规化(normalization)、定标(scaling)、舍入(rounding)、及饱和。
现在请一起参考图4与图5,显然数据处理系统200系执行数个可用来作为有效率信号处理例程之一部份的协处理器指令。第一指令为所谓的点乘积型指令(dot product type instruction)。点乘积指令系将第一列表中的每一数值乘上第二列表中的对应数值,且加总乘积。因此,例如,DSP列表协处理器500可高效地执行FIR滤波器计算且对RISC处理器核心300的运算有最少的中断(disruption)。运行于RISC处理器核心300的代码系执行指令,例如MTYH REAL32指令,其系传送新的资料样本到保存于Y内存522内的列表,且开始点乘积运算(dotproduct operation)。DSP列表协处理器500首先藉由递增起始指针YH而将资料样本加到列表且存储数据样本于其中,且藉由递增末尾指针YT而移除最早的资料样本。然后,使用地址指针ADDRESSB与ADDRESSA分别从X内存524读取系数以及从数据存储器522读取对应的资料样本,再分别将彼等存储于寄存器532与534。MUX 540发送此类操作数到MAC单元542与544中之一个,在此进行相乘。通过列表的其余系数与资料数值继续该序列,直到到达LENGTH。然后,提供该结果至修补逻辑546以便进行适当的舍入与饱和。藉由在DSP列表协处理器500中维持数个列表内存,数据处理器200使得RISC处理器核心300与DSP列表协处理器500易于整合且以需要少数外部内存存取的方式成为可能。此外,将新操作数加到列表的传送以及开始计算新的计算可同时开始。
系统200的重要特征在于:DSP列表协处理器500能够为响应一INSTRUCTION(例如,MTYH_REAL32)而开始点乘积计算,且为响应另一INSTRUCTION(例如,MFXH1)而撷取结果并且将它存储于通用寄存器。因此,软件编译器可使RISC微处理器核心300可继续做有用的工作同时DSP列表协处理器500执行长点乘积计算(long dot productcalculation)。不允许起头的INSTRUCTION(MTYH_REAL32)延迟(stall)管线,然而如果结果还没备妥则收尾的INSTRUCTION(MFXH1)可延迟该管线。因此,有效率的编译器可使用这两种指令以避免浪费与协处理器潜伏(coprocessor latency)有关的周期。
另一重要的特征是在于:DSP列表协处理器500包含两种分开的MAC,各可选定以提供不同的舍入及饱和假定。其中之一为32位饱和模式,习知为ETSI(欧洲电信标准协会)算术。处于32位饱和模式时,DSP列表协处理器500使部份结果饱和至32个位。另一模式为40位饱和模式。处于40位饱和模式时,DSP列表协处理器500累积部份结果于40位累加器且只在计算结束时使最后的总和饱和至32位。这两种技术有时会产生不同的结果,且DSP列表协处理器500维持这两种算法中的每一个的位准确度(bit accuracy)。在其它具体实施例中,也支持DSP列表协处理器500的可额外选定的舍入及饱和模式。此类可选定模式可支持范围广泛的数学表式(mathematical representation),不一定是线性,这对像图形变换、影像处理、以及密码学这类的应用系统很有用。
另一重要的特征为所谓的序列MAC模式(serial MAC mode)。在许多DSP算法中,一MAC指令系立即接着另一MAC指令。在这种情形下,将MAC结果饱和至32位可能无法令人满意,而是组合第一MAC指令的未饱和40位结果与第二MAC指令的未饱和40位结果。DSP列表协处理器500使用双乘法累加(DMAC)指令而高效地提供此类型的运算。修补逻辑546系组合MAC单元542与544的两个40位结果于饱和结果为32位之前。
有两个MAC使得DSP列表协处理器500可高效地进行紧缩算术(packed arithmetic)。例如,可将此类操作数当作两个16位操作数或4个8位操作数处理。这两个MAC使得两个独立的相乘可同时进行。
此外,DSP列表协处理器500包含许多指令,包括也有利于特殊列表与紧缩算术运算的标准ALU与操作数移动指令。为了设定列表的长度,移动至长度寄存器(move to length register,MTL)的指令可用来移动rd信号线上的数值到内部的LENGTH寄存器。
因此,本文所述之数据处理器实现了有效率的信号处理。数据处理器提供许多超过习知数据处理器的优点。第一,它大幅提升通用RISC处理器的性能,包括单一大型内存集用区(memory pool)的内存管理、一大组的通用寄存器、通用指令、RISC的哈佛架构(Harvardarchitecture)、以及控制流(control flow)。
第二,藉由包含带有DSP运算专用电路的专用协处理器,数据处理器可更高效地执行DSP功能同时消耗更少的电力。
第三,由于不需要特殊的引擎提取(engine fetch)、存储、冲突(conflict)、异常(exception)、等等,DSP列表协处理器不会中断RISC的管线。
第四,藉由提供两种不同尺寸的替代MAC单元,数据处理器使得程序设计员可保持DSP算法的位准确度,不论是用ETSI标准计算或者是AMD型计算。
第五,数据处理器大幅提升用于RISC处理器核心的极先进编译器技术,其系提供可内含于线内(in-line)作为组合或C语言代码的低阶及高阶宏。
第六,DSP列表协处理器包含相对小型的局部列表内存用以存储常用于DSP运算的操作数。数据处理器可一次由主存储器以相对高的电力成本提取此类操作数,然后在DSP列表协处理器内以相对低的电力成本重复使用此类操作数。
第七,藉由使开始及结束指令可用于冗长的DSP运算,数据处理器允许CPU的管线与DSP列表协处理器管线继续平行运算,稍后只在结果还没备妥时才会延迟CPU的管线。
第八,DSP列表协处理器有可扩充式(scalable)ALU。在图标具体实施例中,DSP列表协处理器包含两个MAC单元,但可减少MAC单元的数目为只有一个或增加为较大的个数,例如4个,以满足不同的设计取舍。
第九,数据处理器使用以列表为基底的内存,这对DSP运算,例如FIR滤波器与卷积(convolution)特别有效率。此架构提供内部列表内存的显著重复使用性且减少从主存储器加载新资料的要求,以致可节省电力且使处理有效率。
第十,DSP列表协处理器支持不同的操作数长度及格式,使得可高效地执行有用的DSP计算。因此,例如DSP列表协处理器可计算单一实数点乘积、两个平行点乘积、或单一复数点乘积。
第十一,数据处理器便于支持紧缩算术。因此,数据处理器利用现存的32位寄存器接口即可使DSP列表协处理器同时加载两个16位大小的DSP变量(两个实数或者是一个复数)于DSP列表协处理器的列表内存内。
第十二,数据处理器的架构容易通过列表内存的构造支持上下文交换(context switching)。因此,可扩展此架构以支持硬件内的多重上下文(multiple contexts)以避免与上下文交换有关的正常负荷(normaloverhead)。
第十三,在处理时间和电力消耗方面,数据处理器进一步最佳化RISC处理器核心的整体性能,此系藉由提供一组可被DSP列表协处理器执行的丰富指令以完成有用的功能。此类功能的例子包含:包装地址于指定范围内且由输入数组计算出自相关数组(autocorrelationarray),该输入数组系经加载于在DSP列表协处理器内部里的列表。至于许多其它有用的功能,熟谙此艺者也可由以上指令集的说明了解。
尽管以上的详细说明描述了至少一示范具体实施例,应了解仍有许多变化。也应了解,此类示范具体实施例都只是实施例,且不希望以任何方式限定本发明的范畴、适用范围、或组态。反而是,以上的详细描述系提供熟谙此艺者一个便于具体实施此类示范具体实施例的蓝图。应了解,对于功能及组件的排列可做成各种改变而不脱离依照附上之申请专利范围及其合法等价陈述所界定的本发明范畴。