当前,数字信号处理器(以下简称DSP)芯片以其强大的运算能力在通信、电子、音频、视频、工业控制等各个领域得到了广泛的应用。
而最近十几年中,随着工艺发展,IC集成度的不断增加,硬件加速的效果越来越明显。对应硬件的灵活性和定制型需求越来越大,而针对不同使用场景的定制化处理器和专用DSP的技术革新再次浮现在大众的视野中。
而处理器家族中的使用,区分也多种多样,通常最常见的是按照使用的DSP数量来区分,也就是通常说的单DSP系统和多DSP系统。以此来解决单独DSP不能直接作为复杂运算的专用处理器的尴尬局面,也因此让DSP的使用可以更加倾向于定制化和专用方向。
而DSP技术因其普及化比较高,DSP技术也向着定制化的低功耗、高可靠性、高性能的DSP等类型的芯片出现,DSP已经越来越多被广大的工程师所熟悉,并随着专业定制化方向的覆盖,让各个领域对于DSP的需求越来越高。例如:ISP模块、通信指令管理模块、音频处理模块、AI技术方向等。
随着应用的发展,DSP大家族的成员不断增加,DSP不仅仅局限于利用其通用的数字信号处理芯片,也增加了专用的数字计算方法处理的功能,也有针对性的扩展了处理速度快、精确度提高、指令化定制、面积小、高可靠性、超低功耗等方向优化,满足不同的使用者要求。
本文主要基于CLM320VC5402芯片,做一次使用需求的分析。
CLM320VC5402是CHIPLON公司的定点DSP,具有低功耗、高可靠性、高性能的特点。
CLM320VC5402基于改进的Harvard结构的设计。
CPU:增加了多总线结构,具有一个程序存储总线和三个数据存储总线。而地址总线扩展为20条地址线,而不是传统的16条,扩展地址模式最大寻址,并采用分页扩展存储方案,以允许访问多达1024K的程序存储位置。
运算单元:40位算术逻辑单元(ALU),包括一个40位桶式移位器和两个独立的40位累加器。17×17位并行乘法器与40位专用加法器耦合,用于非流水线的单周期乘积/累加(MAC)操作。比较、选择和存储单元(CSSU),用于Viterbi 操作符的累加/比较选择。在一个循环周期中,指数编码器用来计算一 个40位累加器的指数值。两个地址产生器,其带有八个辅助寄存器和 两个辅助寄存器算术单元(ARAUs) 总线具有总线保持功能的数据总线。
DMA:直接内存访问(DMA)控制器在内存映射中的各点之间传输数据,而无需CPU的干预。DMA 控制器允许数据在内部程序/数据存储器或内部外围设备(例如McBSP)之间来回移动。DMA具有 六个独立的可编程通道,允许六个不同数据的DMA操作。
存储器:具有1M×16位最大可寻址外部程序空间的扩展寻址模式。同时提供片上ROM和RAM的存储器。
ROM:为一个4K字X16位的片上可屏蔽ROM。ROM使用的是EEPROM设置了安全选项可以用于保护自定义的ROM。ROM中提供了引导加载程序。该引导加载程序可用于在加电时将用户代码从外部源自动传输到程序存储器中的任何位置。如果在硬件复位期间将引脚采样为低电平,则从片上ROM的位 置FF80h开始执行操作。该位置包含了引导加载程序开始的分支指令。
RAM:包含16K×16位片上双访问RAM(DARAM)。DARAM由两个8K字的块组成。DARAM中 的每个块在一个周期内支持两次读取,或在一个周期内支持一次读取和一次写入。DARAM位于地 址范围为0060h-3FFFh的数据空间中,并且可通过将OVLY位置1来将其映射到程序/数据空间。
片上外设:软件编程等待状态发生器器和可编程组切换、带有内部振荡器或者外部时钟源的片上锁相环(PLL)、时钟发生器、两个多通道缓冲串行端口(McBSP)、增强型8bit并行主机端口接口(HPI8)、两个16bit定时器、六通道直接存储器访问(DMA)控制器。
指令集:支持单指令重复和块重复操作程序代码,存储块移动指令提供了高效的程序编程和数据管理。带有32位长的字操作数指令,具有2/3操作数读取的指令,支持并行存储和并行加载的算数指令、条件存储指令和中断快速返回指令,支持定点DSP相关的各种高级语言编程。
功耗管理:具有掉电模式的IDLE1,IDLE2,和IDLE3治理那个对功耗进行管控,可以禁用CLKOUT,以便控制不必要的功耗开销。
电源电压:适用于工作电源3.3V I/O电压和1.8V内核电压,电压偏差值再10%范围内。
运行速度:适用于3.3V电源(1.8V内核)的10ns单周 期定点指令执行时间(100MIPS)
封装:适用于144引脚塑料薄型四方扁平包装 (LQFP)(PGE后缀)和144引脚球栅阵 列(BGA)(GGU后缀)
1. 硬件电路设计
使用DSP可以使用的范围很广,而5402是DSP家族中性价比很高的一款芯片,因此广受工程师和相关领域人员的青睐。
针对于标准使用场景,做一下基本的硬件结构设计,而通过这些设计可以清晰的看到,DSP的使用场景非常广泛,而配套的传感器精度,ADC或者DAC的精度,毛刺处理能力,外设的使用,输出设备与输出接口的需求等,可以按照用户使用的方法来自己DIY。
DSP使用的I/O电压为1.8V和3.3V两个电压,因此如果对于其他电压使用需求的时候,需要添加一组levelshift器件,以便让电压与器件适配起来。
2.1针对模拟器件,使用5402的逻辑设计
本系统架构使用比较通用,可以用于语音信号处理,可以用于温度传感器、湿度传感器、磁力传感器相关的功能使用、也可以用于神经网络传感器使用,通过5402对于数据进行压缩和计算等,用于克服各种数据冗长,对于数据计算与编辑整理,而且可以实现快速查找的功能。把模拟数据转换为数字数据信息,可以直接放到PC或者其他存储介质上存放,也可以还原出来给不同的功能设计。
使用示例1:数字显示温度计
通过模拟温度设备,把模拟数据传输给5402,通过5402 DSP加速计算和编辑,把实时温度信息传输给PC或者其他外设设备。
使用示例2:数字湿度计
模拟信号转化为数字信号,通过ADC传输进来,做毛刺处理后,再送到5402中处理,处理后可以直接通过DAC来显示,也可以直接传输给外设或者存储做处理。
使用示例3:重力传感器
通过陀螺仪或者重力感应器件,可以做器件定位、方向定位等功能。通过ADC传输,经过去毛刺后的5402计算,传输给外设或者其他设备,完成重力或者方向定位等功能检测。
使用示例4:电子琴
双向控制,既可以让ADC把电子琴的音频通过模拟送入到5402中来运算处理,也可以通过PC直接让电子琴来奏乐,把数字信号还原成模拟的音频信息来播放。
使用示例5:神经网络传感器
神经网络通过对应的专用传感器,把信号转化为模拟信号,通过ADC把模拟喜欢转换为数字信号,通过5402的函数计算传输给数字AI芯片。数字AI芯片通过5402加速计算,反馈信号通过DAC传输回模拟信号侧并通过传感器反馈给对应的神经元。
2. 硬件配套的驱动程序
硬件驱动程序主要集中于硬件初始化的过程和对于板子的硬件管理。
首先对于DSP和其他相关硬件做初始化,初始化过程可通过EPROM或者PC端完成初始化,让设备处于稳定的工作状态。
5402中提供了自带的EPROM和可扩展的EPROM两个boot地址,可以直接使用DSP中自带的程序初始化,也可以使用自定义的方式初始化。
如果搭配的ADC、DAC、毛刺处理、外设选择等需要做初始化配置,可以自定义配置,5402对于用户自定义和扩展性做了很友好的优化。
3.软件程序
软件程序首先,要调用DSP初始化程序用户初始化5402和设计中的模拟接口。在分配好相应的缓冲区和产生相应的中断之后,再进行其他的配置。
针对于软件编程,在调用初始化期间后,还需要针对具体功能和相关设计来做程序设计,也就是通常所说的物理层或者应用层编程。
通常DSP的初始化,都会直接写入一个自举程序,按照程序设定好的顺序来一段一段或者按照自身SRAM大小设置,把程序搬到DSP中,让DSP完成整体初始化过程。
初始化完成后,与DSP接口部分程序,按照写入DSP的时间顺序,在特定的时间和接口处读出DSP处理结果,并将它交给应用程序来处理。应用程序同样是通过与DSP接口约定的总线方式,向DSP发出各种命令,应用程序是用户或者程序可读写接口,让软件程序得到结果或其他分类整理文件等。
在设计过程中,我们可以使用kernel程序设计,kernel功能比较少,因此可以做得非常小,也就是相当于一个极简的操作系统,这样我们可以用kernel来突破5402中4K边界限制,对于片内的SRAM控制使用更加灵活,也可以用kernel让我们精简过的代码执行起来更快,例如我们的自举程序可以用kernel替代,完成整体初始化和程序调度。
也就是说,我们可以把kernel程序和DSP的应用程序,做一下编译和转化,把对应的程序写到EPROM里,可以按照二进制或者十六进制方式保存程序文件,通过设置EPROM上电初始化的位置,来读取此段程序。
在系统启动后,CPU读取到kernel的HEX或者BIN数据,通过HPI将其在5402中组合出kernel运行的程序并启动,并逐步执行,和已经开似乎运行的kernel程序完成DSP的整个引导程序,切入到我们定制好的正确工作模式中,以此完成DSP的应用启动。
4. 优化方向
在整体硬件架构使用过程中,会出现一些特殊的浪费,这些浪费需要在算法中完成。根据不同的使用方法和不同的程序,优化方式也是五花八门,总体上与指令集优化方法不尽相同,例如:
1. 流水线整合类型优化
2. 分支预测优化
3. 代码去除db0类型的空拍操作
4. 乘法利用加法替代类型操作
5. 乘加等标准操作的定制优化
6. 并行计算与传输的优化
7. 增加硬件通路,实现多通路优化
8. ……
在这里,就不一一介绍优化方法了,如果有兴趣可以参看《计算机体系结构》有详细的优化方法介绍。