DSP

嵌入式多媒体处理器:选择双内核或单内核?

2019-07-13 16:21发布

针对嵌入式多媒体应用选择一个处理器是一项复杂的工作,涉及到对处理器内核架构以及外设的全面分析,需要完全掌握视频、音频数据在系统中传输方式,以及正确评价在一个可接受的功耗水平下可达到什么样的处理能力。 到最近为止,解决这个问题的标准方法是将其划分成由微控制器(MCU)芯片处理的“控制域”,以及由数字信号处理器(DSP)处理的“计算域”。RISC MCU和DSP传统上适合于媒体丰富的嵌入式应用,然而,它们的用途不可互相替代,更确切地说,它们要协调一致地工作。MCU架构非常适合于高效率的异步控制流,而DSP架构的“生存之道”是同步恒定速度数据流(例如,滤波和变换操作)。 因为在当今的媒体处理应用中,两种功能集都是必需的,工程师通常使用独立的MCU和DSP芯片。这种组合为广泛的多媒体应用提供了很好的处理引擎,但是增加了多媒体处理设计、多种开发工具组以及有待学习和调试的不同种类架构的复杂性。 为减轻这些问题,芯片厂商尝试过不同的解决方案。不同的MCU厂商都集成了某些信号处理功能,例如指令集扩展以及乘法累加(MAC)单元,但是这种努力通常缺乏针对先进信号处理应用所要求的基本架构基础。类似地,DSP生产商已经包含了有限的MCU功能,但是不可避免地在系统控制方面有所妥协。 最近,出现了另外的选择——单内核以及双内核的嵌入式媒体处理器(EMP)架构,这种架构在一个统一的设计中提供了MCU和DSP功能,允许在控制和信号处理需求方面进行灵活地划分。如果应用需要的话,EMP可以作为100%的MCU(代码密度与行业标准一致)、100%的DSP(时钟速度达到DSP技术的前沿)、或两者之间的某种组合。 单内核EMP架构评估 图1显示了一个单内核EMP架构,这个架构融合了一个32位RISC指令集、双16位MAC单元和一个8位视频处理引擎。其可变长指令集扩展到DSP内部环路所使用的64位操作码,但是经过了最优化以便16位的操作码代表最常用的指令。因此,编译后的代码密度可以与行业领先的MCU竞争,而其互锁流水线和代数指令语法能促进在C/C++和汇编两种环境中的开发。 像MCU一样,EMP具有受保护和未受保护的两种操作模式,防止用户访问或影响系统的共享部分。此外,它们提供定义不同应用开发空间的存储器管理功能,同时防止截然不同的代码部分被覆盖。它们还允许异步中断以及同步异常两种功能,以及可编程的中断优先级。因此,EMP非常适合于嵌入式操作系统(此前是MCU的天下)。 在DSP方面,EMP结构使数据的流动有效率且性能非常高,所配备的外设支持高速串行和并行数据搬移。此外,EMP包含先进的电源管理功能,允许系统设计工程师、架构师以最低的动态功耗曲线精心设计。   图1:单内核嵌入式媒体处理器BF533的框图 单内核开发方法 在当今的设计范例中,MCU和DSP程序员通常被分成两个完全独立的组,两方面的交互工作只发生在他们的功能范围相交的“系统边界”层面。这具有一定意义,因为两个开发组都形成了他们自己的设计习惯。例如,信号处理开发工程师可能熟知处理器架构的细节本质,能通过一些实现技巧来提高设计性能。 另一方面,MCU程序员可能更愿意采用这样的模式:只须启动器件,它就能完成所有的工作。这就是为什么EMP支持DMA和缓存存储器控制器来在系统中搬移数据的原因。多个高速DMA通道在外设和存储器系统中往返搬移数据,允许在不耗尽宝贵的内核处理器时钟周期的条件下,对控制进行精细地调整,这正是DSP设计工程师所追求的。相反地,片上可编程指令和数据缓存允许对管理代码和数据采用一种传递方法,这种方式类似于MCU程序员的做法。通常,在系统集成层面,两种方法的组合是最理想的。 一直以来,MCU和DSP开发团队划分的另一个原因是两个处理器具有两套不同的设计规则。从技术的角度来看,负责构建系统的工程师某些时候不愿意在同一个处理器上将“控制”应用与信号处理应用混在一起。他们通常担心非实时的任务将影响到硬实时任务。例如,负责处理图形用户界面(GUI)或联网堆栈的程序员不应该担心妨碍系统的实时信号处理。当然,“实时”的定义会根据特定应用而变化。在某种嵌入式应用中,关键是在于服务一个中断需要的时间。为此,我们假定在服务程序开始时,在发生中断和系统环境被保存之间的时间帧小于十毫秒。 尽管MCU控制代码通常用C语言编写并且以为库基础,而实时DSP代码通常采用汇编语言编写,并由手动设计为给定应用提取最可能的性能。不幸的是,这种最优化也限制了应用程序的可移植性,并因此也限制了在未来项目上两个编程团队之间对不同技巧和工具集的传播。 然而,在引入EMP后,可以实现以C/C++为中心的统一代码。这允许开发者利用以前开发的现成的大量应用程序代码。因为EMP同时针对控制和信号处理操作两种功能进行了最优化,编译器可以产生同时满足“紧凑”(从代码密度来看)和高效率的代码(对于计算密集的信号处理应用)。EMP高的工作频率(超过750MHz)可以弥合编译器之间的性能差距,这个频率位于当前主流DSP的前沿。此外,针对目标应用汇编代码依然是最优化关键处理环的一个选项。 尽管转向采用EMP可以大大地降低用汇编写代码的需求,但仅仅这一点还不足以证明转换到这种统一平台就是正确的,支持操作系统(OS)也很关键。通过OS或实时内核,可以实现几层任务。为确保依然能达到目标性能,有必要采用支持多个优先级的中断控制器。环境切换必须通过基于硬件的堆栈和对帧指针的支持来实现。这就允许开发者在同一个器件中创建包含控制和实时信号处理的系统。 此外,EMP的存储器管理工具允许OS支持存储器保护。这允许一个任务通过存储器分页机制,被另外一个任务屏蔽存储器或指令访问。当对一个受保护的存储器区域被未授权访问时,将产生一个异常。 EMP能获得的高处理速度可以转换成几种实实在在的好处。首先是上市时间-如果存在大量的剩余处理能力,在降低或免除代码最优化上可以节省大量的时间。第二个关键的好处是减少软件维护,否则的话这种维护要支配产品生命周期的成本。最后一点,对于可扩展的EMP架构,可能在最具处理能力的系列器件上设计一个系统,然后针对最终应用的计算规模设定“合理大小”的处理器。 当单内核EMP不足时 随着处理需求的不断增加,出现了这样的观点:即使一个600MHz的EMP对于某些应用来说都是不够的。这就是考虑采用双内核EMP的一个原因,例如ADSP-BF561(见图2)。   图2:双内核嵌入式媒体处理器ADSP-BF561的框图 增加另外一个处理器内核,不仅仅能将处理能力相对于单处理器的能力倍增,而且还有某些令人吃惊的结构好处,这种好处并不是立竿见影的。 传统的双内核处理器的应用采用了离散的且通常在每个内核上运行不同的任务。例如,一个内核可能执行所有的与控制相关的任务,例如图形和覆盖功能、网络连接、与大存储器的接口以及整体流控制。该内核还是操作系统或核(kernel)很可能驻留的地方。与此同时,第二个内核可能专门用于应用中的高密度处理功能。例如,压缩数据包可能通过网络接口传输到第一个内核,该内核对其进行预处理,并递交到第二个内核进行音频和视频解码。 这种模式受到采用分开的软件开发团队的开发商青睐。将这些功能类型进行划分的能力允许并行设计处理,消除项目中对关键路径依赖性。这种编程模式还对项目中的测试和验证阶段有所帮助。例如,如果一个内核上的代码发生变化,不一定会使另外一个内核上已经完成的测试工作付之东流。 对称的与非对称的多内核处理 为理解是什么让这种双内核方法令人兴奋,我们需要首先讨论“对称多处理(SMP)”。这是指一种通过高速路经相连接的两个相似(或相同)的处理器,并共享一组外设和存储器空间。它与“非对称多处理(AMP)”方法形成对比,其中结合了两颗不同的处理器,通常是在一个混合的架构中集成一个MCU和一个DSP。AMP方法的一种局限性在于,设计工程师必须对控制和DSP功能的共享部分进行“50/50”划分;例如一旦DSP“胜出”,MCU将不能进行计算处理。SMP架构没有这种局限性,因为两个处理器内核是相同的,可以按照应用要求进行划分,甚至划分为100%的DSP或100%的MCU工作。此外,对称处理器还具有提供一种普通的集成设计环境的优点。只需要一组开发工具,而且针对单一开发平台培训开发团队的负担较小。   图3: BF5601就是对称多处理的很好体现 作为一种SMP友好的器件,BF561(图3)包含属于每个内核的高速L1指令和数据存储器,以及在两个内核之间的一种共享128KB L2存储器。每个内核都能同等地访问范围广阔的外设-视频端口、串行口、定时器等等。这样的安排扩展了器件的可配置性,允许其工作在几种相同的有效架构下。这些模式(见图4)可以总结性地称为“MCU/DSP分离”、“串行处理”和“分离处理”。   图4:双内核编程模式举例 选择合适的数据模式 “MCU/DSP分离”模式涉及到分离的以及通常运行在每个内核上的不同任务。一个内核被分配给所有的“MCU类”行为,例如图形覆盖、联网管理以及流控制。此外,如果是用了操作系统的话,该内核还支持操作系统。与此同时,第二个内核专门用于应用的高密度DSP功能。例如,压缩数据通过第一个内核从网络传递。接收到的数据包然后提供给第二个内核,该内核再进行音频和视频的处理(图4)。 这种模式非常适合那些采用分离的基于任务的团队进行软件开发的公司。拥有“控制团队”和“DSP团队”可以使开发并行实施,减少项目对关键路径的依赖性。这种编程模式还能促进设计的测试和验证阶段。例如,在一个内核上的代码改变未必使另一个内核上已经完成的测试工作变得无效。此外,拥有两个相同的内核还允许重新分配在任何内核上任何“未用”的处理带宽,以在不同的功能和任务上再分配。 在“串行处理”使用模式中,第一个内核在输入数据组上执行若干中间级控制和计算,然后传第一个中间数据流到第二个内核进行最后的处理。这种方法的一个变化方法是:将任务在每个内核上进行划分,在这种方式中,中间数据实际上在内核之间搬移几次,直到获得最后的结果。非常适合这种使用模式的算法是MPEG编码或解码。 “分离处理”模式为每个内核提供了更均衡的使用。因为在对称处理器中有两个相同的内核,传统的计算密集应用可以在每个内核之间平均划分。架构功能,像丰富的片上存储器、很宽的内部数据路径和高带宽DMA控制器都有助于基于“分离处理”的系统设计的成功。在这种模式中,运行在每个内核上的代码是相同的;只有被处理的数据不同。在一个通道流应用中,这意味着一半的通道由第一个内核处理,而另外一半由第二个内核处理。作为另外一个实例,在视频或成像应用中,可能由每个内核处理交替帧。 即使当某个应用适合某个单内核处理器,也可以利用双内核系统来降低整体的能耗。例如,如果一个应用需要600MHz的时钟速度以在一个单内核处理器(如ADSP-BF533)上运行,它还必须工作在更高的电压下(1.2V)以达到这个速度。然而,如果相同的应用在一个双内核器件(BF561)上进行划分,每个内核可以运行在大约300MHz的速度下,每个内核的电压可以极大地降低到0.8V。因为功耗与频率呈正比并与工作电压的平方成正比,电压从1.2V降低到0.8V(同时频率从600MHz降低到300MHz)能对功耗产生显著的影响,与单内核解决方案相比实际上节省了能耗。