首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

将DSP设计扩展为异构硬件平台

将DSP设计扩展为异构硬件平台

 您可以在自动流程中将一个 FPGA 协处理器添加到 DSP 系统中。  视频、影像和电信市场的标准推动了异构可重配置 DSP 硬件平台的使用。就本文而言,这些平台包括 DSP 处理器和 FPGA,它们提供的现成硬件解决方案可以解决视频、影像和电信设计中的重大难题,但仍不失产品差异化所需的足够的可定制性。
  据市场研究公司 Forward Concepts 于 2005 年发表的一则调查报告(图 1)称,选择处理器和 FPGA 的主要标准不是器件本身,而是开发它们的工具。这一概念对于包含 FPGA 和 DSP 处理器的平台亦应成立。
[img][/img]
图 1 – 2005 年 Forward Concepts 市场调查
  在 DSP 处理器和 FPGA 之间,传统的 DSP 开发者通常选择前者,因为设计流程是已知的,而异构系统的优点则难于评价。可重新配置的硬件平台限制了硬件自由度,设计流程因此而具有较高的自动化程度。这种自动化排除了设计的复杂性,从而在 DSP 设计界进一步推广了硬件解决方案的优势。
  DSP 硬件平台的优点
  FPGA 和 DSP 处理器具有截然不同的架构。在一种器件上非常有效的算法,在另一种器件上却可能效率非常低。如果目标应用要求大量的并行处理或最大的多通道流量,那么单纯基于 DSP 处理器的硬件系统就可能需要更大的面积、成本或功耗。一个 FPGA 协处理器仅在一个器件上就能提供多达 550 个并行乘法和累加运算,从而以较少的器件和较低的功耗为许多应用提供同样的性能(图 2)。
[img][/img]
图 2 – 基于 FPGA 的 DSP – 并行
  尽管 FPGA 在处理大量并行数据方面出类拔萃,但对于定期系数更新、决策控制任务或高速串行数学运算这类任务来说,它们的优化程度比不上处理器。正是 FPGA 和 DSP 处理器的结合为广泛的应用提供了制胜的解决方案。
  例如,对于采用模式识别技术的智能摄像机来说,异构可重配置 DSP 平台可以作为理想的选择。FPGA 的并行处理能力非常适用于图像分割和特征提取,而视频和影像 DSP 处理器则更适合统计模式分类等数学密集型任务。异构系统可以更好地利用流水线和并行处理,这对于获得高帧速率和低延迟来说至关重要。
  基于异构平台的设计流程的优点
  基于异构平台的设计流程把单独处理器和 FPGA 设计流程采用的设计自动化概念扩展到整个平台。基于平台设计的基本原则是剔除基于硬件系统和基于软件系统的“中间件”。这样就可以让缺乏或完全没有 FPGA 设计经验的 DSP 设计者能够评估和利用 FPGA 协处理器的性能、成本和功耗优势。  
  基于平台的设计流程应能自动生成内存映射、软件接口的头文件和驱动程序文件以及硬件的接口和中断逻辑。整体系统的改动对单个软件和硬件组件的影响有限(图 3)。
[img][/img]
图 3 – 软硬件接口生成
  通过这种自动化,开发者个人不必再掌握设计 FPGA 硬件、DSP 处理器应用代码以及接口逻辑和软件所需的庞杂技术。
  设计 FPGA 协处理器
  任何给定的技术中都有多种方法可以实现信号处理算法。算法步骤常常受到目标硬件的影响。当目标是异构 DSP 硬件平台时,实现方法的选择就成了一个二步过程。您必须首先选择最合适的硬件器件,然后再确定哪种实现方法适合该器件。
  在可重新配置的 DSP 硬件平台上,处理器将作为主处理单元并且控制 FPGA。而 FPGA 则用作协处理器(其中,数据传入 DSP 处理器进行同步,然后传出),或者用作预处理器或后处理器(其中,数据从高速接口传入)。FPGA 的最佳用法取决于系统数据速率、格式和运行参数。
  像德州仪器公司 DSP 的 Code Composer Studio 这类工具包含代码分析器,用来识别可以下载到 FPGA 的软件“热点”。20% 应用代码占用 80% 可用处理器 MIPS 的情况并不罕见。
  需要一个接口将 FPGA 连接到硬件平台上独立的 DSP 处理器。可重新配置的 DSP 平台通常能支持较多通用接口(如德州仪器公司的 16/32/64 位 Tic6x DSP 扩展存储器接口 (EMIF),适用于系统控制和协处理任务)和较多高速串行接口(如 SRIO 或视频接口,用于预处理和后处理操作)。
  系统中加入 FPGA 协处理器后,软件实现就将由算法描述转变为数据传递与函数控制。对于应用软件开发者来说,FPGA 协处理器将显示为一个硬件加速器,可以通过函数调用对其进行访问。
返回列表