1.54k likes | 1.68k Views
第 2 章 F240X 系列 DSP 内部资源介绍. 2.1 F240x 系列 DSP CPU (Central Processing Unit) 内部功能模块介绍. CPU 功能模块 : 总线:程序总线和数据总线 运算部分:中央算术逻辑单元,乘法器,输入定标器 辅助寄存器部分:辅助寄存器, ARAU 存储器: FLASH, DARAM 控制部分:程序控制,器件状态配置,堆栈等. 2407A CPU 功能模块图. 注: Data Bus 和 Program Bus 包括地址和数据位。. CPU 地址和数据总线结构.
E N D
2.1 F240x系列DSPCPU (Central Processing Unit)内部功能模块介绍 CPU功能模块: 总线:程序总线和数据总线 运算部分:中央算术逻辑单元,乘法器,输入定标器 辅助寄存器部分:辅助寄存器,ARAU 存储器:FLASH, DARAM 控制部分:程序控制,器件状态配置,堆栈等
2407A CPU 功能模块图 注: Data Bus和 Program Bus 包括地址和数据位。
data-read address bus (DRAB):A 16-bit internal bus that carries the address for each read from data memory. data read bus (DRDB):A 16-bit internal bus that carries data from data memory to the CALU and the ARAU. data-write address bus (DWAB):A 16-bit internal bus that carries the address for each write to data memory. data write bus (DWEB):A 16-bit internal bus that carries data to both program memory and data memory. program address bus (PAB):A 16-bit internal bus that provides the addresses for program-memory reads and writes. program read bus (PRDB):A 16-bit internal bus that carries instruction code and immediate operands, as well as table information, from program memory to the CPU.
中央处理单元CPU (Central Processing Unit) • 32位中央算术逻辑部分(Central Arithmetic Logic Unit CALU ) • 16×16位的并行乘法器(Multiplier) • 16位输入定标移位器(Input shifter) • 辅助寄存器算术单元(ARAU) • 状态寄存器
关于运算部分 输入定标器、中央算术逻辑部分和乘法器
一、中央算术逻辑部分 • 32位中央算术逻辑单元(Central Arithmetic Logic Unit CALU) • 32位累加器(Accumulator ACC) • 32位数据输出移位器(Output shifter)
1.中央算术逻辑单元(CALU) 能实现许多算术和逻辑运算功能,且大多数的运算只需一个时钟周期。 • 运算功能包括: • 16位加 • 16位减 • 布尔运算 • 位测试 • 移位功能
CLAU有两个输入 一个:总是由累加器(ACC)提供; 另一个:由乘法器的乘积寄存器(PSCALE)或输入数据定标移位器(ISCALE)提供 。 累加器的高位字和低位字都可进行单独移位和存储 输出数据移位过程中ACC中的内容保持不变
CALU的运算结果 一旦CALU完成算术运算或逻辑运算操作,其结果总是送到32位累加器; • 由累加器对结果进行附加运算(如移位); • 累加器的输出连接到32位输出数据定标移位器(OSCALE); • 经过OSCALE移位,数据的高16位和低16位分别移位或存入数据寄存器。
2. 32位累加器ACC 32位累加器是CLAU的寄存器输出。 CALU中的32位运算结果送至累加器中执行单一的移位或循环操作。 通过进位位实现累加器内容的移位和旋转。 累加器的高位字和低位字分别送至输出数据定标移位器,在此定标移位后,再存至数据存储器。
SFL和SFR(左移、右移)指令ROL和ROR(左、右旋转)指令SFL和SFR(左移、右移)指令ROL和ROR(左、右旋转)指令 SFL:溢出最高位到进位位,最低位填0。 ROL:溢出最高位到进位位,进位位移至最低位。 SFR:当为逻辑右移,最低位到进位位,最高位填0;当为算术右移,最低位到进位位,最高位31复制30位,进位位不变。 ROR:最低位到进位位,进位位移至最高位。
SXM位影响SFR(累加器右移)指令的定义 当SXM=1,SFR完成一个算术右移且累加器中数据的符号保留; 当SXM=0,SFR实现一个逻辑右移,最低位溢出,最高位填0。 但,SXM不影响SFL(累加器左移)指令。
ACC的位操作功能 由于CALU的位移动和旋转在累加器中完成,因此CALU可以执行布尔运算,使得DSP具有位操作功能。。 • 进位位C:状态寄存器ST1第9位; • 溢出方式位OVM :状态寄存器ST0第11位; • 溢出标志位OV:状态寄存器ST0第12位; • 测试/控制标志位TC:状态寄存器ST1第11位。 位测试指令:允许测试数据存储器中一个字的特定位,测试操作不影响累加器。
进位位C • 影响进位位C的操作: • 加至ACC或从ACC减; • 将ACC的数据进行移位或循环移位。 进位位的状态提供两个条件算子C、NC,它们影响分支、调用、返回和条件执行。 硬件复位进位位置1。 但,装载累加器、逻辑操作或非算术运算以及控制指令不影响进位位。
溢出方式位OVM CLAU的溢出方式可以由ST0的OVM位使能。 OVM=0,累加器发生溢出时装载正常溢出值; OVM=1,溢出方式使能,累加器发生溢出时装载以下两个特定值之一: 若为正溢出,累加器装载最大正数7FFF FFFFh; 若为负溢出,累加器装载最大负数8000 0000h。 注意:逻辑运算的结果不发生溢出。
溢出标志位OV • 当溢出发生时,置OV=1(锁存); • 当未检测到ACC输出时, OV=0(不锁存)。 测试/控制标志位TC 根据被测试位的值,对该位置0或1。
CLAU可以根据CLAU和累加器的状态执行分支类指令。CLAU可以根据CLAU和累加器的状态执行分支类指令。 • 分支类指令有: • 基于状态位OV(溢出标志); • EQ(累加器等于0)的值执行条件分支指令; • 由累加器提供分支地址执行分支指令。
3. 32位数据输出移位器(Output shifter) 数据输出移位器:为1个16到32位的桶型左向移位寄存器。 寄存器符号:OSCALE OSCALE将32位累加器输出左移0到7位,然后用SACH或SACL指令将移位器的高位字(高16位)或低位字(低16位)输出到数据写总线(DWEB) 。 当数据传送到数据总线上移位就完成,此时累加器中的内容仍保持不变。
输出定标器用于累加器的高字位段时(16~31位),最高有效位丢失,最低有效位用移入的低字位段(0~15位)填写;输出定标器用于累加器的高字位段时(16~31位),最高有效位丢失,最低有效位用移入的低字位段(0~15位)填写; 当输出定标器用于累加器的低字位段时,最低有效位填0。
16bit 32bit ISCALE CALU 二、16位输入定标移位器(Input shifter) 输入定标移位器:是1个16到32位的桶型左向移位器。移位器符号:ISCALE
16位输入和数据总线相连; 32位输出和CALU单元相连。
输入定标移位器 • ISCALE能将输入的16位数据的0到16位在本周期内向左移位,以得到32位的输出。因此,输入定标移位操作不需要额外的周期。 • 左移范围:0~15 • 左移时的符号扩展方式由ST1中的SXM决定
数据调整时,输入定标移位器将输入的数据左移0~16位,移位后输出数据的最低有效位段填0,而最高有效位段要根据状态寄存器ST1的符号扩展方式位(SXM)的值来决定。数据调整时,输入定标移位器将输入的数据左移0~16位,移位后输出数据的最低有效位段填0,而最高有效位段要根据状态寄存器ST1的符号扩展方式位(SXM)的值来决定。 当SXM=1时,高位进行符号扩展; 当SXM=0时,高位填0。 输入数据的移位量由指令字所包含的常量或临时寄存器(TREG)指定。 基于TREG的移位允许动态调整定标因子,从而使数据适应不同的系统性能。
三、 16×16位的并行乘法器(Multiplier) 乘法器:是1个16X16位的硬件乘法器,它可以在单个机器周期内产生1个32位结果的有符号或无符号数。 乘法器的输入: 一个来自16位的暂存器(TREG), 另一个通过数据读总线(DRDB)来自数据存储器,或者通过程序读总线(PRDB)来自程序存储器。 两个输入值相乘后,32位的乘积结果存放在32位的乘积寄存器(PREG)中。
乘数和被乘数都视为2的补码,其32位乘积数也是2的补码。乘数和被乘数都视为2的补码,其32位乘积数也是2的补码。 PREG的输出:连接到乘积定标移位器,通过乘积定标移位器(PSCALE),乘积结果可以从PREG 送到CALU或数据存储器。 乘积定标移位器PSCALE:对乘积结果采用4种乘积移位方式。
移位方式:由状态寄存器ST1的乘积移位方式位(PM)指定。 注:Q31格式是一种二进制小数格式,该格式在二进制小数点的后面有31个数字。
四、辅助寄存器算术单元(ARAU) ARAU的主要功能:是在CALU操作的同时执行8个辅助寄存器(AR7~AR0)上的算术运算。 ARAU:对当前辅助寄存器AR的内容增加、减少或作无符号16位算术运算。 由辅助寄存器指针ARP所指定的寄存器(AR7~AR0)被当做当前辅助寄存器AR。
可以从数据存储器、ACC、乘积寄存器或指令的立即操作数装载。可以从数据存储器、ACC、乘积寄存器或指令的立即操作数装载。 辅助寄存器 ARP 1. 数据装载 当ARP装载了新的值后,原来ARP的值就装载到辅助寄存器指针缓冲器ARB中。 寄存器中的内容可存贮在数据存储器中或作为ARAU的输入。
2. 说明 1. 辅助寄存器算术单元(ARAU)完全独立于中央算术逻辑单元(CALU)。 2. 利用包含在辅助寄存器中的16位地址可以访问64K数据空间中的任意单元。 这8个辅助寄存器提供了强大而灵活的间接寻址能力。
在一条指令的执行过程中,当前辅助寄存器存放被访问数据存储区的地址。在一条指令的执行过程中,当前辅助寄存器存放被访问数据存储区的地址。 若指令为读数据存储区数据,ARAU就将该地址送至DRAB(数据读地址总线); 若指令为向数据存储区写数据,ARAU就将该地址送至DWAB(数据写地址总线)。
3. ARAU执行的操作 • 通过执行任何一条支持间接寻址的指令将辅助寄存器值增1或减1,或者增一个或减一个变址值。 • 将一个常数加至辅助寄存器值或从辅助寄存器值减去一个常数。该常数取自指令字的8位最低有效位。 • 比较AR0和当前AR的内容,然后将比较结果放至状态寄存器ST1中的测试/控制位TC。结果经数据写总线DWEB传送至TC。
4. ARAU执行其算术运算 在流水线的译码阶段(即当指令所指明的操作正被译码时),ARAU执行算术运算。使得在下一条指令的译码阶段之前能够产生本条指令的地址。 但有一种情况例外:在处理NORM异或指令时,是在流水线的执行过程中完成对辅助寄存器的修改。
5. 辅助寄存器的其他用途 辅助寄存器除用作数据存储器的地址存储器外,还可用作其他用途 。 • 通过CMPR比较指令,利用辅助寄存器支持条件转移、调用和返回。 • CMPR指令将AR0的内容和当前AR的内容进行比较,并将比较结果存至状态寄存器ST1中的测试/控制位TC。
将辅助寄存器作为暂存单元。 • 例如,使用LAR指令向辅助寄存器装入数值,以及使用SAR指令将辅助寄存器值存至数据存储器。 • 将辅助寄存器用作软件计数器,根据需要将其增1或减1。
五、状态寄存器 F240X系列DSP有两个状态寄存器ST0和ST1,是应用中特别重要的两个寄存器。它们含有各种状态和控制位 ST0和ST1的内容可以保存到数据存储器或从数据存储器读出加载到ST0、ST1,从而在子程序调用或进入中断时实现CPU各种状态的保存。
2.2 存储器和I/O空间 F240X系列DSP的地址映象被组织为3个可独立选择的空间: 程序存储器(64K字); 数据存储器(64K字); 输入/输出(I/O)空间(64K字)。 这些空间提供了共192K字的地址范围。
F240X有3组并行总线 程序地址总线(PAB); 数据读地址总线(DRAB); 数据写地址总线(DWAB)。 F240X可以通过3组并行总线访问多个存储空间。 由于总线工作是分离的,所以可以同时访问程序和数据空间。 在一个给定的机器周期内,CALU可以执行多达3次的并行存储器操作。
存储模式 • TMS320LF240xA控制器配置了如下存储模式: • 双口RAM(DARAM) • 单口RAM(SARAM) • Flash EEPROM • ROM • Boot ROM
(1)双口RAM(DARAM) 所有Lx240xA控制器中有544字×16位的片内DARAM。 在流水线操作方式下,CPU一般在第三个周期读数据,第四个周期写数据。 而DARAM允许在同一个机器周期读、写DARAM,即CPU在一个周期的主段向DARAM写数据;在从段读取DARAM的数据。 当用作片内RAM时,240xA全速运行无等待状态。
DARAM被配置成3块: 块0(B0); 块1(B1); 块2(B2)。 1)B0包含256个字,它即可以配置在数据存储器空间也可以配置在程序存储器空间; 指令SETC CNF,B0配置为程序存储器; 指令CLRC CNF,B0配置为数据存储器。 2)B1包含256个字; 3)B2包含32个字,它们位于数据存储器空间。 指令通过软件动态配置存储器映射图。