位置:51电子网 » 技术资料 » 通信网络

掌握高级处理器特性可提高编码效率

发布时间:2008/5/29 0:00:00 访问次数:467

数字信号处理器(dsp)在性能、外设、功耗和价格上已经结合得非常好了,许多系统工程师希望利用dsp的优势,取代传统设计方案中使用的处理器,但一个潜在难题是设计工程师已经为他们的应用开发了大量c和c++代码。很明显,工程师都愿意在dsp平台上利用现有的高级代码,同时利用dsp的体系结构特性以获得更好的性能。

  hll与汇编语言

  当开发基于dsp的软件时,必须要做的一项工作就是确定使用哪一种程序设计方法学,通常是在汇编语言和高级语言(hll)(例如c或c++语言)之间进行选择。

  c和c++的优点包括模块性、便携性以及可重复利用性。

  传统的汇编语言由于其语法和缩写难以理解和使用,长期以来不被人们所看好。目前的“代数语法”体系结构有了很大改进。表1是使用传统风格和使用代数格式的典型dsp指令实例,很显然后者的结构更加直观。在所提供的实例中,r寄存器是数据寄存器,p寄存器是指针寄存器。

  用汇编语言编程困难的一个原因是由于其数据流集中在dsp实际寄存器组、计算单元和存储器之间。用c或c++语言编程,这种操作通常通过使用变量和函数,或过程调用出现在更加抽象的处理

等级之间,从而使得代码更容易跟随。

  为提高dsp执行效率,工具开发商会使用汇编语言对重要的数据密集代码模块进行优化。hll编译优化转换可以很好地完成该项工作,而且对dsp数据流和计算的直接控制能力是极为出色的。这就是为什么设计工程师通常结合使用c/c++和汇编语言。hll适合于控制和基本的数据操作,而汇编语言适合于高效的数字计算。

  适合高效编程的体系结构的特性

  为了使汇编语言程序员能够有效地完成工作,需要了解处理器的结构类型,以便能够区分不适合高速数字计算的那些dsp处理器。这些适合高效编程的体系结构结构特性包括:

  ● 专用寻址模式

  ● 硬件环路结构

  ● 高速缓冲存储器

  ● 每周期多次操作

  ● 互锁流水线

  ● 灵活的数据寄存器文挡

  专用寻址模式

  允许处理器在单周期内访问多个数据字需要灵活的地址产生方式。除了需要更大的以dsp为中心的16bit和32bit边界的访问尺寸外,还需要字节寻址以达到最有效的处理。这是非常重要的,因为一些普通应用(例如许多基于视频的系统)都是按照8bit数据操作。当处理器访问限制在单一边界内时,处理器可能需要额外的周期来掩蔽掉相关的位。

  另外一种有利的寻址能力是“循环缓冲”。该特性必须直接由处理器支持,无须专门的软件管理开销。循环缓冲允许程序员定义存储器中的缓冲器,并且自动跨越它们。一旦缓冲器设置好,则无须专门的软件交互操作数据。地址发生器处理非同式跨幅,更重要的是可以处理图1所示的“环绕式”特性。如果没有这种自动地址产生功能,程序员必须手动跟踪缓冲器,从而浪费了宝贵的处理周期。

图1 环绕式缓冲的例子

  在此例中,基地址和起始索引地址=0x0;索引地址寄存器i0指向地址0x0;缓冲器长度l=44(11个数据元素×4字节/元素);修改寄存器m0=16(4个数据元素×4字节/元素)

  实例代码:

  r0 = [i0++m0]; //r0 = 1,i0在代码执行后指向0x10

  r1 = [i0++m0]; //r1 = 5,i0在代码执行后指向0x20

  r2 = [i0++m0]; //r2 = 9,i0在代码执行后指向0x04

  r3 = [i0++m0]; //r3 = 2,i0在代码执行后指向0x14

  r4 = [i0++m0]; //r4 = 6,i0在代码执行后指向0x24

  用于高效信号处理运算(例如快速傅立叶变换(fft)和离散余弦变换(dct))的一种重要寻址模式是比特翻转。顾名思义,“比特翻转”就是将二进制地址中的比特翻转,也就是说将权值最小的比特与权值最大的比特交换位置。由基为2的蝶形所要求的数据顺序是“已翻转比特”的顺序,因此比特翻转索引用来组合fft级。可以计算软件中的这些比特翻转索引,但是这样做的效率非常低。图2所示是比特翻转地址流实例。

图2 硬件比特翻转机理

  实例代码:

  lsetup(起始, 终止)lc0=p0

数字信号处理器(dsp)在性能、外设、功耗和价格上已经结合得非常好了,许多系统工程师希望利用dsp的优势,取代传统设计方案中使用的处理器,但一个潜在难题是设计工程师已经为他们的应用开发了大量c和c++代码。很明显,工程师都愿意在dsp平台上利用现有的高级代码,同时利用dsp的体系结构特性以获得更好的性能。

  hll与汇编语言

  当开发基于dsp的软件时,必须要做的一项工作就是确定使用哪一种程序设计方法学,通常是在汇编语言和高级语言(hll)(例如c或c++语言)之间进行选择。

  c和c++的优点包括模块性、便携性以及可重复利用性。

  传统的汇编语言由于其语法和缩写难以理解和使用,长期以来不被人们所看好。目前的“代数语法”体系结构有了很大改进。表1是使用传统风格和使用代数格式的典型dsp指令实例,很显然后者的结构更加直观。在所提供的实例中,r寄存器是数据寄存器,p寄存器是指针寄存器。

  用汇编语言编程困难的一个原因是由于其数据流集中在dsp实际寄存器组、计算单元和存储器之间。用c或c++语言编程,这种操作通常通过使用变量和函数,或过程调用出现在更加抽象的处理

等级之间,从而使得代码更容易跟随。

  为提高dsp执行效率,工具开发商会使用汇编语言对重要的数据密集代码模块进行优化。hll编译优化转换可以很好地完成该项工作,而且对dsp数据流和计算的直接控制能力是极为出色的。这就是为什么设计工程师通常结合使用c/c++和汇编语言。hll适合于控制和基本的数据操作,而汇编语言适合于高效的数字计算。

  适合高效编程的体系结构的特性

  为了使汇编语言程序员能够有效地完成工作,需要了解处理器的结构类型,以便能够区分不适合高速数字计算的那些dsp处理器。这些适合高效编程的体系结构结构特性包括:

  ● 专用寻址模式

  ● 硬件环路结构

  ● 高速缓冲存储器

  ● 每周期多次操作

  ● 互锁流水线

  ● 灵活的数据寄存器文挡

  专用寻址模式

  允许处理器在单周期内访问多个数据字需要灵活的地址产生方式。除了需要更大的以dsp为中心的16bit和32bit边界的访问尺寸外,还需要字节寻址以达到最有效的处理。这是非常重要的,因为一些普通应用(例如许多基于视频的系统)都是按照8bit数据操作。当处理器访问限制在单一边界内时,处理器可能需要额外的周期来掩蔽掉相关的位。

  另外一种有利的寻址能力是“循环缓冲”。该特性必须直接由处理器支持,无须专门的软件管理开销。循环缓冲允许程序员定义存储器中的缓冲器,并且自动跨越它们。一旦缓冲器设置好,则无须专门的软件交互操作数据。地址发生器处理非同式跨幅,更重要的是可以处理图1所示的“环绕式”特性。如果没有这种自动地址产生功能,程序员必须手动跟踪缓冲器,从而浪费了宝贵的处理周期。

图1 环绕式缓冲的例子

  在此例中,基地址和起始索引地址=0x0;索引地址寄存器i0指向地址0x0;缓冲器长度l=44(11个数据元素×4字节/元素);修改寄存器m0=16(4个数据元素×4字节/元素)

  实例代码:

  r0 = [i0++m0]; //r0 = 1,i0在代码执行后指向0x10

  r1 = [i0++m0]; //r1 = 5,i0在代码执行后指向0x20

  r2 = [i0++m0]; //r2 = 9,i0在代码执行后指向0x04

  r3 = [i0++m0]; //r3 = 2,i0在代码执行后指向0x14

  r4 = [i0++m0]; //r4 = 6,i0在代码执行后指向0x24

  用于高效信号处理运算(例如快速傅立叶变换(fft)和离散余弦变换(dct))的一种重要寻址模式是比特翻转。顾名思义,“比特翻转”就是将二进制地址中的比特翻转,也就是说将权值最小的比特与权值最大的比特交换位置。由基为2的蝶形所要求的数据顺序是“已翻转比特”的顺序,因此比特翻转索引用来组合fft级。可以计算软件中的这些比特翻转索引,但是这样做的效率非常低。图2所示是比特翻转地址流实例。

图2 硬件比特翻转机理

  实例代码:

  lsetup(起始, 终止)lc0=p0

相关IC型号

热门点击

 

推荐技术资料

耳机的焊接
    整机电路简单,用洞洞板搭线比较方便。EM8621实际采... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!