首页 理论教育 CPU内核结构解析

CPU内核结构解析

时间:2023-06-29 理论教育 版权反馈
【摘要】:C24x DSP的CPU内核模块的功能框图如图3-3所示。因此输入定标移位器的16位输入与数据总线相连,32位输出与CALU单元相连。图3-3 CPU内核模块功能框图2.乘法器C24x的16位×16位的硬件乘法器,在单个机器周期内可以产生一个32位的有符号或无符号乘积。当CALU执行完一次操作后将结果送至32位累加器,由累加器对其结果进行移位。根据CALU和累加器的状态,CALU可执行各种分支转移指令。

CPU内核结构解析

C24x DSP的CPU内核模块的功能框图如图3-3所示。CPU内核模块包括:输入定标移位器、32位中央算术逻辑单元(CALU)、16位×16位乘法器累加器和输出定标移位器等。

1.输入定标移位器

输入定标移位器(Input Scale Shifter,ISCALE)将来自程序/数据存储器的16位数据调整为32位数据送到中央算术逻辑单元(CALU)。因此输入定标移位器的16位输入与数据总线相连,32位输出与CALU单元相连。该移位器对算术定标及逻辑操作非常有用。

输入定标移位器对输入数据进行0~15位左移。左移时,输出的最低有效位(LSB)为0,最高有效位(MSB)根据状态寄存器ST1的SXM位(符号扩展方式)的值来决定是否进行符号扩展。当SXM=1时,则高位进行符号扩展。当SXM=0时,则高位填0。移位的次数由包含在指令中的常量或T寄存器(Tempora ry Register TREG,也称为临时寄存器)中的值来指定。

978-7-111-36250-0-Chapter03-5.jpg

图3-3 CPU内核模块功能框图

2.乘法器

C24x的16位×16位的硬件乘法器(Multiplier,MUL),在单个机器周期内可以产生一个32位的有符号或无符号乘积。除了执行无符号乘法指令(MPYU)外,所有的乘法指令均执行有符号的乘法操作,即相乘的两个数都作为二进制的补码数,而运算结果为一个32位的二进制的补码数。乘法器接收的两个乘数,一个来自16位的寄存器T(Tem⁃porary Register,TREG),另一个通过数据读总线(DRDB)取自数据存储器或通过程序读总线(PRDB)取自程序存储器。两个输入值相乘后,32位的乘积结果保存在32位的乘积寄存器P(Product Register,PREG)中。P寄存器的输出连接到乘积定标移位器(Product Scale Shifter),通过乘积定标移位器,乘积结果可以从乘积寄存器传送到CALU或数据存储器。

乘积定标移位器对乘积采用4种乘积移位方式,见表3-2。移位方式由状态寄存器ST1的乘积移位方式位(Product Mode,PM)指定。移位对于执行乘法/累加操作、进行小数运算或者进行小数乘积的调整都很有用。

3-2 乘积定标移位器的乘积移位方式

978-7-111-36250-0-Chapter03-6.jpg

3.中央算术逻辑单元

中央算术逻辑单元(Central ALU,CALU)实现大部分算术和逻辑运算功能,而且大多数功能只需一个时钟周期,这些运算功能包括:16位加、16位减、逻辑运算、位测试以及移位和循环功能。

由于CALU可以执行布尔运算,因此使得控制器具有位操作功能。CALU的移位和循环在累加器中完成。CALU是一个独立的算术单元,它和辅助寄存器算术单元(ARAU)在程序执行时是完全不同的两个模块。

一旦操作在CALU中被执行,运算结果会被传送到累加器中,在累加器中再实现如移位等附加操作。

CALU有两个输入,一个由累加器提供,另一个由乘积寄存器(P)或输入数据定标移位器的输出提供。当CALU执行完一次操作后将结果送至32位累加器,由累加器对其结果进行移位。累加器的输出送到32位输出数据定标移位器,经过输出数据定标移位器,累加器的高、低16位字可分别被移位或存入数据存储器。

CALU的溢出饱和方式可以由状态寄存器ST0的溢出模式(OVM)位来使能或禁止。

根据CALU和累加器的状态,CALU可执行各种分支转移指令。这些指令可以根据这些状态位有意义地结合、有条件地执行。为了溢出管理,这些条件包括OV(根据溢出跳转)和EQ(根据累加器是否为0跳转)等。另外BACC(跳转到累加器指定的地址)指令可以跳转到由累加器所指定的程序存储器地址。不影响累加器的位测试指令(BIT和BITT),允许对数据存储器中的一个指定位进行测试。

对绝大多数的指令,状态寄存器ST1的第10位即符号扩展位(SXM)决定了在CALU计算时是否使用符号扩展。若SXM=0,符号扩展无效;若SXM=1,符号扩展有效。

4.累加器(ACC)

当CALU中的运算完成后,其结果就被送至32位的累加器(ACC),并在累加器中执行单一的移位或循环操作。累加器的高位和低位字中的任意一个可以被送至输出数据定标移位器,在此定标移位后,再保存于数据存储器。32位累加器(ACC)可以分为高16位ACCH和低16位ACCL。下面是与累加器有关的状态位和转移指令:(www.xing528.com)

(1)进位标志位C

它是状态寄存器ST1的第9位。下述情况之一将影响进位标志位C。

1)加到累加器或从累加器减。

●当C=0,减结果产生借位时或加结果未产生进位时。

●当C=1,加结果产生进位时或减结果未产生借位时。

2)将累加器数值移1位或循环移1位。

在左移或循环左移的过程中,累加器的最高有效位被送至C位。在右移或循环右移的过程中,累加器的最低有效位被送至C位。

(2)溢出方式标志位(OVM)

它是状态寄存器ST0的第11位。OVM位决定ACC如何反映算术运算的溢出。当累加器处于溢出方式,即OVM=1,ACC运算溢出,累加器被设定为下列两个特定值之一:

●若正溢出,ACC中填最大正数:7FFF FFFFh。

●若负溢出,ACC中填绝对值最大的负数:80000000 h。

若OVM=0,ACC中的结果正常溢出。

(3)溢出标志位(OV)

它是状态寄存器ST0的第12位。OV=0,累加器未溢出;OV=1,累加器溢出,且被锁存。

(4)测试/控制标志位(TC)

它是状态寄存器ST1的第11位,根据被测位的值置1或清零。

与累加器有关的转移指令大都取决于C、OV、TC的状态和累加器的值。

5.输出定标移位器

输出定标移位器(Outp ut Scale Shifte r,OSCALE)根据指令中指定的位数,将累加器输出的内容左移0~7位,然后将移位器的高位字或低位字存到数据存储器中(用SACH或SACL指令)。在此过程中,累加器的内容保持不变。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈