正如前面提到的,对于一个16x16功率电感宏块而言,增加新指电感器大小令后程序主循环中的操作数减少到256个(即numrows = numcols = 16)。
6、建立单指令流多数据流SIMD功能部件
前面的SAD程序还可以进一步优化。程序中的内循功率电感器环将宏块中16列做相同的运算。这对于SIMD(单指令多数据)功能部件而言是理想选择,相应的指令“sub.abs.ac16”针对16个像素同时完成sub.abs.ac操作,如图5所示。
图5 对16个像素同时进行sub.abs.ac指令的单指令流多数据流计算操作
相应的C语言过程名为sub.abs.ac16,利用此过程名重新改写的SAD内核C程序代码如下:
for (row = 0; row < numrows; row++) {
sub.abs.ac16( accum, macroblk1[row], macroblk2[row]);
} /* row loop */
通过改写后的SAD内核程序从768个算术操作减少为仅16个算术操作。
然而,仅仅只有上述C程序代码是不够的。因为指令sub.abs.ac16需要从两个宏块中读取128位的数据,这需要两个方面的支持:一个128位的寄存器文件和一个宽数据位的取数/存数接口,可配置处理器均支持这些功能。
7、建立用户定制的寄存器文件
在Xtensa可配置处理器中,说明一个任意宽度的定制寄存器文件就像写一行程序那么简单。例如,称为“myRegFile128”的过程语句建立一个宽度为128位的寄存器文件,长度为4,并建立一个相应的新的C数据类型,“myRegFile128”能够用于C/C++程序代码说明变量。软件工具也建立&l功率电感器dquo;MOVE”操作,用于将各种C数据类型转换为新的定制数据类型。因此,采用sub.abs.ac16过程和新寄存器文件后的SAD内核C程序代码如下:
for (row = 0; row < numrows; row++) {
myRegFile128 mblk1, mblk2;
mblk1 = macroblk1[row];
mblk2 = macroblk2[row];
sub.abs.ac16( accum, mblk1, mblk2);
} /* row loop */
现在C/C++编译器将会产生一条MOVE指令,将数据从一般的C数据类型移到定制的C数据类型“myRegFile128”,并为新寄存器文件分配寄存器。
8、建立高数据带宽的加载/存储接口
为了对高带宽定制寄存器文件(以及相应的单指令流多数据流SIMD功能部件)进行数据存取,处理器应当具有高带宽数据加载/存储操作能力。对可配置处理器而言,设计人员能够说明定制加载和存储操作指令,直接完成对定制寄存器文件的高带宽加载/存储数据操作。然后,编译器自动产生与高带宽加载/存储接口相应的加载/存储指令。
经过更新后的处理器数据通路如图6所示。硬件生成工具产生高带宽的定制寄存器文件、与数据存储器相关的加载/存储接口以及相应的前馈逻辑、控制逻辑和旁通逻辑。硬件工具还产生相应的硬件逻辑,用于将数据从基准寄存器文件移到用户定义的寄存器文件中。
图6 插入寄存器文件和高带宽加载/存储接口的数据通路
9、更新地址的同时进行加载
或者存储操作
Xtensa可配置处理器允许用户建立另一个非常有用的功能扩展,即建立一条指令,能够同时完成地址更新操作和数据加载/存储操作。建立的新的加载/存储操作指令能够并发完成如下功能: Load A1 ← Memory(Addr1绕行电感器);Addr1 = Addr1 + IndexUpdate
该指令能够完成“背靠背”的加载/存储操作,而不需要专门指令对地址进行更新。
10、建立先进先出(FIFO)接口
和通用输入/输电感生产厂家出端口
视频和音频均为流媒体,需要对处理器进行快速数据访问。传统的处理器受限于系统总线接口,以及数据操作执行前对所以数据的加载与存储访问。
为支持流媒体数据/输出操作,Xtensa可配置处理器允许设计人员定义先进先出(FIFO)接口以及通用输入/输出(GPIO)端口,以便直接对数据通路进行读写访问。FIFO和GPIO端口可以是任意数据宽度(可达1024位),数量不限(每个可包含1024个FIFO和GPIO端口)。这些高带宽接口可以直接与数据通路相连,提供很高的数据吞吐量,通过处理器内核对数据进行读、处理和写操作,这对于多媒体和网络应用而言是非常重要的。
基于Matlab的FIR带通滤波器设计与实现 4月08日 第三届·无线通信技术研讨会 立即报名 12月04日 2015•第二届中国IoT大会 精彩回顾 10月30日ETF•智能硬件开发技术培训会 精彩回顾 10月23日ETF•第三届 消费 关于BMS的二次保护芯片关于BMS的二次保护芯片已经用了电池管理芯片管理电池组每节电芯那二级保护芯片也有对应的管脚接在每节的电芯上这样不会和电池管理芯片冲突吗?芯片之间不会发生灌流? IR2110S+IRF3205总是炸MOS,麻烦大神指点一下电路 电路如图:
控制频率10Khz
刚开始Vcc给的20V,Q7坏了几块(没有炸,直接击穿导通了)后来把Vcc降到13V左右,Q8直接炸了。。
之前测试的电流大概在10A左右,VB
3/4 首页 上一页 1 2 3 4 下一页 尾页 |