掌握高级处理器特性可提高编码效率
发布时间:2008/5/29 0:00:00 访问次数:467
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
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
上一篇:软件无线电技术综述