CEVA-DSP开发初识(第一篇)

最近开发完了为旌vs819l平台几乎每个模块,其他都没啥难度,dsp模块以前或多或少接触过皮毛,这次有机会好好了解和开发下,做一个完整的记录。

1、DSP的效率为什么很高

首先要理解这个概念,才能掌握dsp编程的核心。核心就是simd架构,像x86平台的sse加速,arm平台的neon加速,dsp平台也高度契合了这种设计思维,并行指令和流水线处理,这是dsp平台能够高速完成复杂算法运算的基础。

为了能够达成这种高速并行设计架构,dsp芯片内嵌了丰富的硬核化资源,如上图重点模块逐一梳理总结下。

1.1、标量处理单元SPU

单核dsp-core有4个spu独立的子单元,负责执行数值计算相关指令。算数运算操作,比如加减法、最值、比较、绝对和取反;乘法和乘累加操作;逻辑运算操作,比如and、nor;位操作,移位、插入和提取;还有其他一些如断言、饱和操作等;设想一下,spu模块一个周期就完成多个源操作数和目标操作数的运算。如scalar mac fixed point,支持8(16x16),4(32x32)运算;scalar mac floating point,支持4(32bit or 16bit)运算。

spu模块我自己总结就是重在构建程序逻辑,下边是详细的模块指令列表。

1.2、矢量处理单元VPU(LVPU)

矢量相对于标量,有2个vpu子单元和1个轻量化lvpu子单元,处理vector数据类型的资源,我觉得简单的理解就是矩阵。在dsp运算中是一个多维的表述,如下图。

vpu支持的运算类型更加丰富,以至于文档专门用了一个框图来介绍。如下图,算数运算操作、滑窗运算操作、逻辑运算操作、移位运算操作、内部操作、置换操作等,vpu支持的指令也远多于spu模块,并行的能力上也更强。如支持vector mac fixed point 128(16x8),128(16x16),16(32x32) 运算,vector mac floating point 16(32bit) or 32(16bit) 运算。

附上指令列表:

1.3、加载和存储单元LSU

在使用spu和vpu之前,首先考虑需要把数据加载到寄存器做运算,以及把寄存器运算的结果搬出来。如下图,mem->reg,reg->mem,都通过lsu产生地址和寻址,让编程开发者不用再去关心操作数和寄存器的地址。

对应dsp编程的基础指令ld和st,衍生出了好几种不同应用场景的加载模式。如下图,但我感觉可以常用的指令也就标量的st、ld和矢量的vpst、vpld,如果碰到隔行图像处理,会用到vbcpld。

同样lsu的指令也是并行的。

2、Single Instruction/Multiple Data

直译的解释就是,一个指令周期,同时处理多组操作数。

如下这个示意图,vector register代表了一类矢量指令操作的寄存器,比如上面提到的vadd,将源操作数1、源操作数2相加。同一类register代表一种operation,设想一下,vadd指令同时加载了8组源操作数,在一个指令周期时间,完成8组数据相加操作得出结果,是不是比cpu几个周期完成一次相加运算要提升几十倍效率。

那么一个关键的变量就是,一次vector指令周期,可以最多同时加载多少操作数。不同指令有些许容量差异,大抵可以以256bit带宽来衡量。如果单次运算源操作是8bit,那么一个指令周期就可以完成32次指令运算,以此类推即可。

3、总结

像其他模块,程序控制单元PCU,类似arm的寻址-译码-执行三部曲;内存子系统MSS,内存管理子系统,就不再详细解释了,比较通用。

综上,ceva-dsp的指令在设计上,都是按照simd架构并行的思路,可以同时加载、处理、存储多组源操作数和目标操作数,所以能够实现高效。如果编程上,能够使用这些底层指令来构建算法和逻辑,那自然处理算法的速度就会很快,反之,如果在dsp里边,用简单的c语言编程,就无法发挥出dsp硬件资源的优势。所以,dsp编程开发,我认为会话大量的时间去熟悉dsp指令,只有在指令熟悉的基础上,才能把他们使用好。

相关推荐
XINVRY-FPGA2 天前
XC2C256-7VQG100I Xilinx CoolRunner-II CPLD FPGA
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发·fpga
XINVRY-FPGA3 天前
EP1C6T144I7N Altera Cyclone FPGA
嵌入式硬件·fpga开发·硬件工程·dsp开发·fpga
大江东去浪淘尽千古风流人物6 天前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
轻微的风格艾丝凡6 天前
电力电子技术常用PI参数整定方法
嵌入式硬件·dsp开发
XINVRY-FPGA7 天前
XC3S1000-4FGG320I Xilinx AMD Spartan-3 SRAM-based FPGA
嵌入式硬件·机器学习·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
贝塔实验室7 天前
Altium Designer全局编辑
arm开发·经验分享·笔记·fpga开发·dsp开发·射频工程·基带工程
贝塔实验室8 天前
新手如何使用Altium Designer创建第一张原理图(二)
arm开发·fpga开发·硬件工程·dsp开发·射频工程·基带工程·嵌入式实时数据库
大江东去浪淘尽千古风流人物8 天前
【MSCKF】StateHelper 学习备注
vscode·学习·性能优化·编辑器·dsp开发
大江东去浪淘尽千古风流人物9 天前
【MSCKF】零空间 UpdaterHelper::nullspace_project_inplace 的实现细节,MSCKF边缘化含义
算法·性能优化·vr·dsp开发·mr
HAPPY酷10 天前
DDR 压测与系统验证知识全集
arm开发·驱动开发·fpga开发·硬件架构·硬件工程·dsp开发·基带工程