Blackfin双核处理器与应用开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

信息处理与控制是当前应用非常广泛的领域。随着应用的复杂化和实时性等要求,系统设计中迫切需要高性能的数字信号处理器(DSP)功能模块和微控制器(MCU)功能模块。例如在手机系统中,基带通信、语音编码处理等复杂算法是由DSP模块实现的,用户界面、通信协议栈等管理功能是由MCU模块实现的。更重要的是,在将来更多更复杂的应用中,DSP功能和MCU功能的结合将更加紧密,甚至更加难以明确划分。

DSP是与数字信号处理算法紧密相关的一种处理器。Analog Devices Incorporation(ADI)是主要的DSP芯片供应商之一。近年来ADI推出了Blackfin系列多款不同配置的嵌入式处理器产品,采用了结合DSP/MCU双功能的微信号架构,设计了增强多媒体算法效能的技术,实现了信号处理、媒体处理与控制功能的汇聚,并提供了丰富的应用接口,能够胜任众多的应用要求。Blackfin处理器具有很好的性价比,目前已经在多媒体处理、通信系统、控制系统、生物医疗、汽车、航天等众多领域中得到了广泛的应用。

针对高端应用,ADI推出了对称双核嵌入式媒体处理器ADSP-BF561。该处理器有两个相同的内核,可以运行相同的代码,共同参与密集计算;具有更多的程序设计模式选择,以适应不同性能、成本和功耗的要求。BF561也支持RISC/DSP编程模型,可以满足对非对称架构的应用需求。充分理解BF561双核处理器的特点,并掌握其软件设计与编程是非常重要的。

本书主要介绍BF561处理器的体系结构和编程方法,共分为11章。

绪论介绍了数字信号处理的发展趋势与需求,数字信号处理器的发展与应用,非对称处理器(AMP)的特点,以及Blackfin对称双核处理器(SMP)架构的优势。

第1章概述了BF561处理器的设计理念和架构特色,包括内核与存储器体系结构、时钟、电源、引导模式、事件处理、外设,然后比较详细地介绍了VisualDSP++ 5.0开发环境,包括工程开发、代码开发工具、处理器工程所涉及的诸多概念,为程序开发提供了比较全面的基本知识点。

第2章讲解了计算单元,包括寄存器文件、数据类型、算术逻辑单元、乘累加器、桶式移位器、数据地址产生器,通过这些内容便于使读者深入了解处理器计算功能的基本特点,并认识一些基本的编程方法。

第3章讲解了BF561处理器的运行模式和程序控制,不同的处理器工作模式有不同的使用处理器资源的能力,从而可以提供资源保护;程序控制器是处理器的核心之一,高性能的中断机制及其管理模块控制着用户希望的程序流程,这部分内容对程序设计起着关键作用;处理器运行模式与电源管理关系密切,BF561的动态电源管理功能模块可以改变处理器的时钟频率,也可以控制工作电压,从而满足用户希望的功耗开销。

第4章讲解了BF561的存储器机制和使用特点。BF561支持分级的存储器:快速的小容量的片上核内L1存储器、稍慢的容量稍大的片上核外L2存储器、慢速的但容量较大的片外L3存储器;每个核都有自己的L1存储器,两个核共享L2和L3存储器;部分L1存储器可配置为Cache,L2和L3存储器可配置成被Cache的页面;基于页面的存储器管理单元(MMU)提供了任务间存储器和I/O资源分配的灵活管理;存储器具有流水线互锁、原子操作指令等多种功能。掌握这些内容对于有效地使用存储器非常关键,对于复杂的程序设计极为重要。

第5章讲解了BF561的片上总线和DMA。片上总线决定了数据在系统中如何有效地传输,对高效率的程序设计影响很大,譬如要合理地设计才能提高总线的利用率。DMA是关键模块之一,它与总线密切相关。BF561的高性能DMA功能模块为复杂应用环境中的音视频采集、数据传输和其他通信所涉及的数据传输提供了强有力的支持。多种DMA传输模式提供了灵活性。DMA的性能优化与软件管理是使用好DMA的关键问题,影响到整个系统的全局性能。

第6章讲解了BF561的片上外设,串行外设接口(SPI)可以连接各种SPI兼容设备;两个并行外设接口(PPI)可以连接并行A/D、D/A、视频编解码器和其他通用外设;两个同步串行口(SPORT)为各种标准的数据转换器和编解码器等串行设备提供了无缝硬件接口,并支持多处理器系统中处理器间的直接互连;UART端口支持灵活地异步串行通讯,并在嵌入式系统设计中通过它建立应用程序和驱动程序的调试界面;可编程标志引脚(PF)可作为通用I/O引脚,或配置为其他外设所需要的引脚;定时器包括通用定时器、内核定时器和看门狗定时器,这些定时器可以实现脉宽调制模式、脉宽计数和捕获模式、外部事件计数模式、产生周期性的定时中断等多种功能。

第7章介绍了当前比较流行的视频编解码器H.264/AVC,其卓越性能使得基于该视频编解码器规范的具体方案在嵌入式视频编解码应用中日益受到重视;然后讲解了在BF561上移植H.264/AVC的一些方法和建议,以及移植视频解码器p264的部分代码优化实例。作为视频应用领域中的嵌入式媒体处理器,BF561有特殊的视频处理单元以及高效的视频处理指令,为视频编解码算法的移植提供了重要的软硬件支持。本章讲解的这些代码对于移植视频编码器x264以及其他编解码器也是可借鉴的。

第8章讲解了BF561的编程模式和优化功能。BF561可以实现单核应用、双核单独应用、双核单一应用三类程序设计开发模式。在双核单独应用开发模式下,资源共享是粗粒度的且由开发者管理;在双核单一应用开发模式下,资源共享是细粒度的且受链接器管理,因此它是最有效的开发方式,同时也有着更多的细节问题需要考虑,包括一些限制。接下来讲解了基于该处理器的客户端——服务器程序设计方法、双核开发模式中剖析引导优化(PGO)和程序间分析(IPA)工具的使用以及文件属性和同步函数的使用。考虑到BF561的双核特性使得它具有计算机领域中多机并行计算系统里的共享存储的对称多处理机(SMP)的特性,因此可以借鉴并行算法中的一些理论(如PCAM设计方法学)来解决应用中的一些问题,又由于BF561有两个对称的内核,所以在其上开发并行计算程序相对简单,本章最后以经典的快速傅里叶变换(FFT)为例展示了开发并行算法的基本方法。

第9章讲解了在BF561上开发嵌入式操作系统uClinux所涉及的一些基本操作。由于BF561的双核特性,可以让一个核主要运行嵌入式操作系统,而让另一个核主要运行视频编解码算法等应用,从而发挥该处理器的潜在能力。uClinux是一种嵌入式Linux,Linux的优良特性使得嵌入式Linux得到了广泛的应用,uClinux在架构上与标准Linux完全一致,具有Linux的绝大部分优良特性,并主要是针对无MMU的处理器而设计的,目前支持多种处理器,包括Blackfin处理器。限于篇幅,本章主要涉及工具链的安装、U-Boot引导程序的编译与烧写、内核与文件系统的编译与下载、编译与调试应用程序的NFS方法,以及串口通信服务、TFTP服务的安装与使用。

第10章讲解了ADI VDK的基本原理与使用。VDK是ADI提供的集成在VisualDSP++开发环境中的实时操作系统,是为有效使用ADI处理器而特别设计的。通过VDK,有助于开发结构化的应用软件,便于用户开发更加复杂的程序。限于篇幅,本章重点介绍了线程、线程调度、用于同步和通信的信号(信号量、互斥、消息、事件与事件位、设备标志)机制,最后介绍了VDK API函数的使用方法,并给出了几个例子以加深读者对部分VDK API函数的理解。

本书的编著过程中涉及较多的翻译工作,最后经过压缩整理而成,若译文有不当之处,敬请读者指出,作者邮箱是jtang@ustc.edu.cn。在有的地方保留了一些细节,主要是考虑到初学者自学的需要,若有取舍不当,或有疑惑之处,也请告知。由于时间和水平有限,关于代码优化与程序设计,本书未能涉及更多,也没有更加全面地讲解更多的程序优化。

参加本书编著的有实验室学生郑建峰、唐润鸿、张传金、金发逊、陶为、周芳燕、丁聪敏等人,对他们表示衷心感谢!感谢电子工业出版社的竺南直先生,ADI公司的景妮女士、高威先生、孔庆峰先生、刘利先生,以及《ADI处理器使用丛书》编委会的同事们,大家在一起认真讨论了书稿内容,并提出了宝贵意见。

借此机会,向北京亿旗创新科技发展有限公司的吴勇先生表示衷心感谢,他对我们实验室提供了很大的帮助和支持。

唐建

2010年4月于中国科学技术大学