嵌入式系统的设计人员所面临的最大挑战之一,在於确定系统的硬体设计究竟须具备多少性能。用以确定真实效能需求的必要资讯不是付之闕如,就是难以获得。即便系统设计人员对硬体性能需求做精确的估算,有时也会因意料之外的运算任务而预估失準。
因此,有些嵌入式系统开发人员认為,与其在设计初期对嵌入式系统的硬体性能需求进行分析,不如一开始就设计具备高度扩充性的系统,因為只要系统具有高度的可扩充性,就能够适应不断变动的效能需求。本文将以影像处理与视频辨识这种对硬体效能要求严苛的应用来说明,设计人员如何利用现场可编程闸阵列(FPGA)内部建置的控制平面(Control Plane)与资料平面(Data Plane)处理架构来满足系统对性能与可扩充性的要求。
对于视频监控、生产线自动检测与医学成像等应用而言,视频分析是颇受使用者欢迎的一项功能。然由于视频系统已经普遍进入高画质时代,为针对如此庞大的资料流量进行视频分析,造成一般通用型处理器的挑战。本文将介绍一种用FPGA实现视频分析功能的替代性方案,可协助研发人员在低成本的前提下,实现这类颇受市场欢迎的功能。
控制/资料平面分工 嵌入式系统效能升级
在无法或者实际上不能用软体完成所有处理工作的系统中,设计人员可以透过多种方式来获得系统所需的额外效能。设计人员可以採用对称或者非对称处理配置的多处理器,利用额外的硬体实现辅助运算器,或者将资料处理任务拆分给一个或多个专用处理元件,例如把任务分拆,分别交给控制平面与资料平面处理。
在这种编程方式下,资料处理被分成两个截然不同的面。控制平面代表著对效能影响不大的演算法元素,如管理性任务、用户介面和作业系统功能。同时,资料平面代表著资料在系统中的移动,例如视频串流、音讯串流及其处理。在资料平面上,设计人员採用如管线(Pipeline)的技术来增强资料传输能力。控制平面/资料平面处理的典型应用包括串流视频、网路封包处理及高速讯号处理。
以高画质(HD)视频串流特有的模式识别问题为例,将串行资料即时处理的运算任务分拆给控制平面与资料平面进行处理,就是一种能有效解决问题的作法。假设有一个视频系统,其视频串行的解析度為720p,画面更新频率為60Hz,则其视频串行的画素率(Pixel Rate)為74.25MHz。对处理器而言,这可以换算成222.75MBit/s的处理速率要求。
高画质视频处理是一种可以把任务分割為控制平面和资料平面,并分别予以处理的常见实际应用要求。作為一种高度平行处理的元件,FPGA在本例中负责视频处理,同时由FPGA内部的中等效能的处理器负责视频处理管线。该处理器可专用於单个应用,也可以运行如Linux般的作业系统。最终形成的硬软体混合建置方案可以把处理工作交付给能够进行最佳处理的部分,实现低成本、高效能资料处理解决方案。图1為典型的控制平面/资料平面系统。
假定采用运行在2.5GHz的双核心双指令执行处理器来处理该资料,最佳的指令率為每秒一百亿条指令。这样的处理器可针对所处理资料的每一位元组执行22.4条指令。对某些应用而言这已经足够了,但事实上对复杂的视频处理而言,22.4条指令所能处理的资料其实非常有限。若设计人员想执行内核卷积(Kernel Convo-lution)、噪音消除和其他过滤功能,处理器每秒须执行的指令数远比上述数字来的多。因此,最理想的解决方案之一,便是在资料平面上创建平行或管线处理等单元。
图1典型的控制平面/资料平面处理系统
FPGA内建处理器 降低控制平面实作成本
除了昂贵的特定应用积体电路(ASIC),FPGA是效能最高、最具经济效益的串行资料处理单元建置方法。FPGA因其灵活的架构而能让设计人员可建置包含并行和管线单元的处理系统,以最佳化系统的效能和延迟。
虽然设计人员可利用FPGA的资料平面来满足运算需求外,但仍设法控制该资料平面。以往,设计人员必须透过外部的独立微处理器来进行控制。然而,随著FPGA整合嵌入式处理器的情况越来越普及,设计人员所需的控制功能其实已不假外求。採用内部整合的处理器能够带来多项优势,例如能够大大减少处理器和资料平面单元之间的控制延迟时间,并减少电路板上布线与晶片接脚的需求量。
延迟时间减少,可以释放出更多处理器週期,其对系统运算性能的提升是显而易见的。这是许多设计人员喜欢採用内嵌式处理器的主因之一。另外,若设计人员使用外部处理器,因為外部处理器必须与资料平面保持通讯,而通讯所需的通道宽度可能是32位元或更高,因此设计人员必须用更多电路板布线与晶片接脚来进行定址和控制。额外增加的连线可能会导致设计人员必须使用高阶的处理器,或是有更多输入/输出(I/O)的FPGA,从而导致系统成本增加。
採用PCI Express介面能大幅度减少接脚与连线数量的需求,但遗憾的是,即便PCI Express在个人电脑(PC)领域已相当普遍,但在嵌入式领域,这种介面的普及率仍然不高,且支援PCI Express的元件,其成本通常也远高於不採用PCI Express的同类元件。
在FPGA内部建置控制平面处理器和资料平面可以减少元件数量、机板空间和功耗,最终形成一个低成本的解决方案。在FPGA内既可以硬体实作PowerPC等嵌入式硬核处理器,也可以软式建置赛灵思(Xilinx)的MicroBlaze等软核处理器。此外还可以根据应用要求配置以FPGA為基础的处理器。以FPGA為基础的系统能够在处理器和FPGA逻辑之间提供移动决策和计算功能,从而达到系统级的优化。
设计工具/参考设计简化系统建置
某些设计工具软体可以简化以FPGA為基础的控制平面、资料平面系统建置工作。使用软体内建的精灵工具或者透过调整现有参考设计来编译系统是其中两种常用方法。
透过引导精灵,设计人员可以迅速编译微处理器系统。在许多先进的设计工具环境下,设计人员只要使用下拉清单或者确认方块,就可以轻松配置特定的功能区块、需要的处理器和周边配置。设计人员也可以使用诸如MATLAB软体这样的工具来迅速编译具有处理器介面的讯号处理管线,以实现控制功能。还有些设计工具甚至支援C-to-HDL功能,可构建数位讯号管线。控制平面/资料平面的连接也可以简单地透过匹配匯流排介面来完成。图2显示的是啟动引导精灵的说明视窗和採用引导精灵构建的最终系统。
图2引导精灵启动萤幕截图和已完成的系统
除了藉由设计工具辅助外,调整现有的参考设计也是设计人员常用的方法。FPGA参考设计不断发展,已成為市场焦点。在本文案例研究中使用的参考设计具有完整的微处理器系统、记忆体、周边和720p高画质数位讯号处理管线。因此,该系统相当於一款完整的控制平面与资料平面解决方案。在该参考设计中,由处理器控制增益和管线中的有限脉衝响应(FIR)滤波器。使用C-to-FPGA工具创建目标探测和强调显示模组,让整个系统具备所需功能所花的设计时间甚至不到20个小时。
该处理器可以使用机板支援封包提供的补充驱动程式来控制资料管线。目前已有针对Linux的驱动程式,可以让处理器直接控制资料处理管线。Linux运用包括从Linux应用中打开I/O元件,然后针对该元件进行读出或者写入。
寻找小丑鱼 视频识别系统轻松达成任务
目标检测和识别广泛应用於监控、医学成像和工厂自动化等行业。图像的解析度越高,目标识别的準确度越高。因此,对高画质摄影机和相关的高画质视频串行处理功能的需求较為强劲。本案例(图3)研究试图解决以下问题:在720p高画质视频串行的条件下,能否检测出画面中的小丑鱼,并為它打上聚光灯效果以实现强调显示在720p高画质视频中的小丑鱼(图4)?
图3小丑鱼探测器控制平面/资料平面系统
图4小丑鱼探测器想做出的效果。
為了辨识出小丑鱼,该设计需要16位元的色谱,以便识别小丑鱼的条纹图案。一旦识别,在萤幕上的小丑鱼将被打上移动的聚光灯明显强调。此外,聚光灯的大小经设计后可以随匹配的相似性而调整。实际上,系统降低了除小丑鱼周围聚光灯外的其他区域图像亮度。聚光灯的尺寸变化和形状计算,以及为在每个画素位置搜索小丑鱼所进行的比较,将為系统带来大量的运算能力,处理器若要执行这项功能,需要的时脉周期可达74.25MHz。显然,这样的处理要求大大超出一般嵌入式处理器的能力。
在这种情况下,最好的解决办法是把串行资料处理转移到辅助运算器上。在FPGA内部建置辅助运算器能够以最低成本灵活构建能够满足效能要求的解决方案。因此,以FPGA為基础的控制平面、资料平面架构就是最佳选择。FPGA嵌入式处理可以透过匯流排介面控制负责接收视频资料、探测小丑鱼、强调显示小丑鱼并输出供显示之用的视频资料的数位讯号处理管线。
因此,在本目标检测和强调显示案例中,研发人员选择50MHz的MicroBlaze嵌入式处理器来管理和控制74.25MHz的资料处理管线,同时管理用户介面。在免除了实际执行视频处理的责任后,处理器可以处理许多其他的功能,比如託管乙太网路(Ethernet)资料通讯、管理图形用户介面(GUI)、对资料处理管线进行精细控制,如逐帧增益控制等。
Linux这类作业系统是提供多工功能、网路协定堆叠和用户介面语言支援的理想选择。图3显示所建置系统的方框图。该解决方案可以在高资料处理频宽需求和用软体控制资料处理方式之间实现理想的平衡。
与FPGA製造商合作的Linux供应商已经开发完成了可让处理器与FPGA沟通并对其进行控制的驱动程式。首先,设计必须针对该I/O元件配置Linux。配置步骤由两个步骤组成。首先,把定制的驱动程式载入到Linux内核中:
随后,将驱动程式註册到特定的元件号码(比如253):
、
通讯是透过开启该I/O元件、然后对该元件进行读写而完成的,示例编码段落如下所示:
C-to-FPGA工具实现软硬体协同设计
C-to-FPGA编译器可以让开发人员使用新的开发工具组和新技术解决软体与硬体开发问题。开发人员可以先在软体中进行演算法编码。根据笔者的过去经验,在软体中开发演算法比在硬体中开发演算法的效率更高,因為C语言这类软体语言能够让编码人员在更高的层面上开发演算法,而这种层次是使用Verilog或VHDL这样的硬体定义语言所无法达到的;其次,与同类的硬体开发工具相比,针对C语言的调整和测试工具运行速度更快、效率更高,通常也更易於使用。相当于硬件演算法,C语言演算法可以在目标处理器上全速运行,而硬件演算法须要先在类比程式上完成测试和调整;最后,C语言开发工具较同类硬件开发工具的成本要低得多。因此,工程人员一般倾向於在C语言或者类似的高阶语言中开发演算法。
一旦使用C语言这样的软体语言完成对某个演算法的验证,设计人员必须测量其效能,并确定该演算法是否能够完全在嵌入式处理器或是硬件上运行、或者硬软体混合协同处理建置方案是否為最佳选择。在这种判断过程中可以採用效能分析工具。如果编码必须被转到硬件上,则设计人员必须手工转换演算法,或者使用C-to-FPGA工具。
C-to-FPGA工具可以让开发人员迅速把演算法转為HDL,对產生的硬件处理器进行最佳化,并在一些假设的场景下平衡效能和FPGA资源。该工具还能够让软体工程师使用FPGA内部的高效能资料处理逻辑,从而变身為硬件工程师。
FPGA加持 视频分析功能轻鬆实现
数位讯号处理器(DSP)系统的资料频宽要求非常高,设计人员如果不採用昂贵的高性能通用处理器,往往无法满足应用需求。在这种情况下,设计人员一般会把资料处理系统画分為两个处理功能:使用通用处理器进行控制处理,然后由FPGA来担任硬件加速器,以进行资料处理。这种架构就是一个典型的控制平面和资料平面处理系统。
然而,在FPGA内建嵌入式处理器的情况越来越普遍后,设计人员其实已不太须要使用外部处理器,因為FPGA就已经可以同时实现控制平面和资料平面功能。一个FPGA可以包含一个或者多个像MicroBlaze这类软核处理器,或像PowerPC这类硬核处理器。将它们整合到FPGA中,可以实现控制平面处理器和资料平面处理系统之间的低延迟、高频宽通讯。
借助引导精灵和预先构建的参考设计,针对嵌入式和资料处理功能的系统编译简单明瞭。透过把在C语言中构建的演算法原型转换到高效能硬件处理单元,C-to-FPGA工具有助于优化这一流程。最后,可以利用目前可用的Linux驱动程式轻松地完成处理器和FPGA讯号处理管线之间的通讯及控制编码。
本案例研究是一个典型的应用示例,在这个例子中,透过低成本通用处理器处理高画质视频流是不可行的,但是可以透过FPGA内部的讯号处理管线轻松加以解决。处理器随即被释放出来用於提供用户介面、网络和系统管理功能,并同时监测和控制信号处理管线。