基于RISC结构的多功能嵌入式处理器结构设计应用

[11-20 15:53:05]   来源:http://www.88dzw.com  arm嵌入式   阅读:8631

文章摘要:FIR滤波器的计算就是一个复杂函数并行操作的例子,其执行过程如下面的代码所示。函数内部含有一个循环,数据装载和乘法运算在循环内并行执行。由于RISC和DSP单元并行操作,整个算法的任务可以被协调分配给DSP和RISC两个单元来执行,同时各自优化两个单元的指令流程以确保指令管道畅通,这就使得指令执行速度大大提高。下面给出FIR滤波器的内部循环的示例代码:LDW.PL15,L11; L15 系数指针,装两个系数LDW. PL7,L12; L7 历史指针,装两个记录MOVDG14.0 ; 清除G14/G15循环累加器LDW.PL13,L15: L13指向下两个系数LDW,PL7L14: L14下两个

基于RISC结构的多功能嵌入式处理器结构设计应用,标签:arm嵌入式系统,arm系统,http://www.88dzw.com

  FIR滤波器的计算就是一个复杂函数并行操作的例子,其执行过程如下面的代码所示。函数内部含有一个循环,数据装载和乘法运算在循环内并行执行。由于RISC和DSP单元并行操作,整个算法的任务可以被协调分配给DSP和RISC两个单元来执行,同时各自优化两个单元的指令流程以确保指令管道畅通,这就使得指令执行速度大大提高。

  下面给出FIR滤波器的内部循环的示例代码:

  LDW.PL15,L11; L15 系数指针,装两个系数

  LDW. PL7,L12; L7 历史指针,装两个记录

  MOVDG14.0 ; 清除G14/G15循环累加器

  LDW.PL13,L15: L13指向下两个系数

  LDW,PL7L14: L14下两个历史记录的值

  ADDIL8,-4: 循环计数器减4

  EHMCD L11,L12: 半字长度乘累加

  EHMACD L13,L14; 半字长度乘累加

  LDW.PL15,L11; L11 指向下两个系数

  LDW.PL7,L12

  DBGT LOOP ; 如果L8>0,延时跳转

  EHMACD L13,L14; 半字长度乘累加

  扩展进来的DSP指令集有一个重要特征,即通过对两个独立的16位字运算组合,可以进行32位字操作数运算。每次运行滤波器内部循环时,装载指令(LDW)都会把两个16位数据合并成一个32位字。 EHMACD指令实现2个32位字的乘法运算,实质是执行两次16位数的乘法得到两个32位数,再把这两个数合并存储在一个64位的累加器G14/15里,得到一个64位的计算结果。ADDI和DBGT指令用于循环控制。循环每执行1次,有4次运算结果产生并被累加,因此循环计数器要减去4。图3示意了用E1-32 DSP/RISC内核执行FIR滤波器的内部循环中指令的管道执行。从中可以看出用E1-32结构在运行这一算法时的获得的并行程度,也可以看出使用双执行单元的效率优势。

  指令缓存的设计优化了对复杂函数的处理

  单内核RISC/DSP结构的很多优越机制的实现,一方面依赖于该结构给RISC和DSP提供了一个稳定的指令流程,另一方面依赖于该结构可以及时进行复杂函数处理。Hyperstone公司在片上设计了一个非常简单的指令缓存,含有32个非结构性的32位指令字。这是一个环形缓冲器,通过两个计数器来管理缓冲器内指令。一个前向计数器记录指令字的高端地址,一个后向计数器记录指令字的低端地址,这样一来在指令缓存内可以实现半字长度的短跳转。这一机制在指令执行时就好象产生了一个移动窗,滚动向前越过那些已经被执行过的指令,当遇到循环程序时窗口移动停止,执行循环程序。

  由于这种提前取指可以在指令缓存内放入至多8个指令字,所以只能给程序循环剩下24个指令字空间。也就是说包括结束循环的跳转指令在内,程序循环的最大长度为96字节或94字节(依据当时的队列情况有所不同)。当跳转目的地址在缓存区内,且当时缓存没有溢出时,一个短前向跳转落在前向计数器的前两个指令字位置。

  不考虑指令边界的情况下,对提前取指的控制字以32位方式管道装载。每进行一次前向取指令操作,前向计数器加4,并且前向取得的指令放入指令缓存的位置由前向计数器的第6位到第2位之间的五位来确定。如果计算出新放入的前向指令将要覆盖后向计数器所记录的指令时,则将前向指令向前移动4个字节,象标准的环行存储器操作一样,把它放在环形寄存器最低端。

  当执行长跳转或延时跳转时,需要检查跳转的目的地址位置。如果跳转的目的地址在两个计数器的值之间,则判断为缓存内的短跳转;如果跳转的目的地址不在缓存内,当跳转的目的地址被拷备到两个计数器内时,此时目标指令被装载到指令缓存内,就会出现指令缓存溢出的现象。延时跳转是指新指令跳转到前向计数器所指向的位置之前的缓存内某个位置,并装载新的指令到这一位置但不改变两个寄存器的值的一种跳转形式。从上可以看出,所有这些针对指令缓存的操作只适用于短跳转指令,并且只有当缓存模式控制标志位设置后才能生效(缓存模式控制标志位在执行普通跳转指令或帧指令时被清零)。

上一页  [1] [2] [3] [4]  下一页


Tag:arm嵌入式arm嵌入式系统,arm系统arm嵌入式

《基于RISC结构的多功能嵌入式处理器结构设计应用》相关文章

分类导航
最新更新
热门排行