微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 采用Xtensa可配置处理器技术开发视频加速引擎

采用Xtensa可配置处理器技术开发视频加速引擎

时间:07-21 来源:互联网 点击:
4、自动化软件开发工具套件支持

可配置和可扩展的关键是不仅能够自动产生预先经过验证的RTL代码,用于设计人员定制处理器(包括所有系统扩展功能),而且还能够自动产生完整的软件工具,包括一个与处理器相匹配并经过优化的开发工具套件、一个基于时钟周期的指令集仿真器以及系统模型。

这种自动化意味着编译器知道设计人员所添加的新指令、相关的寄存器以及寄存器文件。因此,编译器能够对用户定义的指令进行调度,并执行寄存器分配操作。类似地,软件开发人员在调试时除了处理器本身的基本寄存器,还能够了解设汁人员定义的寄存器和寄存器文件;同时,软件开发人员能够利用指令集仿真器对设计人员定义的新指令进行仿真。与处理器相关的实时操作系统RTOS端口和系统模型也能够自动产生。Tensilica的软件工具能够在一个小时内自动产生上述软件工具,这是对使用可配置处理器用户的核心承诺,能够执行诸如 SAD运算,而不必采用RTL那样的实现方法。

5、采用可配置处理器构建视频加速引擎建立多操作功能部件

将SAD这样的融合操作加到一个可配置处理器中是一件麻烦的事情。一条称为“sub.abs.ac”的新指令可以完成“减法-绝对值-累加”运算操作。这条新指令能够将图2中的操作变成图3中的复操作。


将该指令添加到处理器中后,C编译器能够识别这条新的“sub.abs.ac”指令,并调度相关指令;调度器将显示“sub.abs.ac'’功能部件所使用的内部信号;汇编器能够处理这条新指令;指令集仿真器:ISS能够按照时钟周期模式进行仿真。

新的专用视频功能部件插人处理器后的数据通路简图如图4所示。注意到,除了产生功能部件逻辑外,硬件生成工具还能够自动插入前馈通路、控制逻辑以及旁路逻辑,以便将新的功能部件与数据通路中的其它逻辑互连。


包含新指令的C代码描述的SAD算法如下:


正如前面提到的,对于一个16x16宏块而言,增加新指令后程序主循环中的操作数减少到256个(即numrows=numcols=16)。

6、建立单指令流多数据流SIMD功能部件

前面的SAD程序还可以进一步优化。程序中的内循环将宏块中16列做相同的运算。这对于SIMD(单指令多数据)功能部件而言是理想选择,相应的指令“sub.abs.ac16”针对16个像素同时完成sub.abs.ac操作,如图5所示。


相应的C语言过程名为sub.abs.ac16,利用此过程名重新改写的SAD内核C程序代码如下:


通过改写后的SAD内核程序从768个算术操作减少为仅16个算术操作。

然而,仅仅只有上述C程序代码是不够的。因为指令sub.abs.ac16需要从两个宏块中读取128位的数据,这需要两个方面的支持:一个128位的寄存器文件和一个宽数据位的取数/存数接口,可配置处理器均支持这些功能。

7、建立用户定制的寄存器文件

在Xtensa可配置处理器中,说明一个任意宽度的定制寄存器文件就像写一行程序那么简单。例如,称为“myRegFile128”的过程语句建立一个宽度为128位的寄存器文件,长度为4,并建立一个相应的新的C数据类型,“myRegFile128”能够用于C/C++程序代码说明变量。软件工具也建立“MOVE”操作,用于将各种C数据类型转换为新的定制数据类型。因此,采用sub.abs.ac16过程和新寄存器文件后的SAD内核C程序代码如下:


现在C/C++编译器将会产生一条MOVE指令,将数据从一般的C数据类型移到定制的C数据类型“myRegFile128”,并为新寄存器文件分配寄存器。

8、建立高数据带宽的加载/存储接口

为了对高带宽定制寄存器文件(以及相应的单指令流多数据流SIMD功能部件)进行数据存取,处理器应当具有高带宽数据加载/存储操作能力。对可配置处理器而言,设计人员能够说明定制加载和存储操作指令,直接完成对定制寄存器文件的高带宽加载/存储数据操作。然后,编译器自动产生与高带宽加载/存储接口相应的加载/存储指令。

经过更新后的处理器数据通路如图6所示。硬件生成工具产生高带宽的定制寄存器文件、与数据存储器相关的加载/存储接口以及相应的前馈逻辑、控制逻辑和旁通逻辑。硬件工具还产生相应的硬件逻辑,用于将数据从基准寄存器文件移到用户定义的寄存器文件中。


9、更新地址的同时进行加载或者存储操作

Xtensa可配置处理器允许用户建立另一个非常有用的功能扩展,即建立一条指令,能够同时完成地址更新操作和数据加载/存储操作。建立的新的加载/存储操作指令能够并发完成如下功能:
Load A1←Memory(Addrl);Addrl=Addrl+IndexUpdate

该指令能够完成“背靠背”的加载/存储操作,而不需要专门指令对地址进行更新。

10、建立先进先出(FIF

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top