加速FFT运算
按频率抽取快速傅立叶变换FFT算法的核心是一种称为“蝶形”的运算。蝶形操作是FFT算法的最里层循环的运算。每个蝶形运算需要六次加法和四次乘法来计算基2蝶形结果的实部和虚部。采用TIE(Tensilica Instruction Extention)语言,设计团队可以用四个加法器和两个乘法器来扩展整个Xtensa处理器的流水线,以便使得一半FFT蝶形运算可以在一个流水线时钟周期内完成。
Xtensa处理器的可配置数据总线接口可以定义成128位宽,这样所有蝶形结果的实部和虚部整数输入项就可以在一个时钟周期内加载到专用的FFT输入寄存器中。所有计算完成的输出部分也可以在一个时钟周期内存储到存储器中。由于每一个FFT蝶形运算的加载和存储操作都需要一个时钟周期,因此FFT计算最有效的办法是将每个FFT一半蝶形运算扩展为两个时钟周期,这样后续蝶形运算的加载操作和前面蝶形运算的存储操作就可以同时进行。这种方法节省了硬件开销,同时也匹配了数据运算资源和数据传输资源。
加速维特比编码
在通常情况下,RISC处理器需要50个到80个指令周期才能完成一个维特比蝶形运算。一个高端的超长指令字DSP(如TI的TMS320C64XX)只需要1.75个时钟周期就可以完成一个维特比蝶形运算。Tensilica的指令扩展语言TIE允许用户在Xtensa处理器体系结构ISA中增加一条维特比蝶形运算指令。该设计使用了处理器中可配置的128位I/O总线来每次加载8个符号、增加流水线硬件,如下图所示。
加速MPEG-4解码器
通过指令扩展和并行操作执行来提升性能的另一个例子是视频应用领域的MPEG-4。MPEG-4视频数据编码中最困难的地方是动态估计,它需要搜索相邻的视频数据帧得到相似的象素数据块。这个搜索算法的最内层循环包括一个SAD(绝对差之和)运算操作,该操作包括一次减法、一次绝对值运算和对前一个计算出来的结果值进行的一次加法运算。在一个时钟周期内,可以混合执行所有这三个SAD部件操作(减法、取绝对值和加法操作),并且在一个时钟周期内,SIMD操作可以完成所有的16个像素的计算操作,这就将系统需要完成的每秒六亿四千一百万次操作降低为每秒一千四百万次操作,大大减少了系统的运算量。
总体而言,采用可配置、可扩展处理器核来设计处理器可以加速嵌入式算法的性能,这是通过多对专用算法量身定做的,而不是通过汇编语言代码或者RTL硬件设计来完成的。采用可扩展处理器的好处是设计人员可以准确地添加系统资源以获得算法的理想性能,而不是试图将算法生搬硬套到固定指令集体系结构的处理器中。这种新的处理器设计方法所带来的结果是极大地提高了执行算法的处理器性能,通常超出了现在最先进的固定指令集体系结构微处理器和数字信号处理器DSP核的能力。在多数情况下,设计人员可以用可配置处理器去替换整个的RTL模块以适合所需要的系统应用,并且由于这种设计方法所固有的编程特性而节约了关键的设计和验证时间,并增加了系统的灵活性。