![]()
内容推荐 本书系统介绍了C66x多核软件开发的知识,并基于C6678的设计实例介绍了相关设计经验。系统介绍了C66x DSP器件的基础概念和多核软件设计的基础知识,引领读者循序渐进地掌握多核软件设计技术。对于传统DSP开发人员比较陌生的一些概念,如Cache、预取、数据一致性、数据依赖、死锁等,进行了重点描述。系统介绍了C66x多核器件的存储器、DMA传输、中断等内容,并结合工作实际,介绍了多核软件优化、多核并行设计及任务级优化经验。最后,以多普勒成像的设计实例描述了如何实现并行设计。 全书共13章,内容包括C66x DSP的基本组成,如存储器组织、DMA传输、中断和异常、Cache缓存和数据一致性等,并包含CCS软件开发环境、SYS/BIOS实时操作系统、多核并行设计、软件设计优化等相关知识。 本书的特点是由浅入深、概念齐全、实践性强、指导性强。本书结合了多年多核软件开发的实际经验,对多核设计中常见的问题进行了详细的描述; 从基本概念出发,层层推进,介绍了多核并行、数据传输与处理并行和多层次并行设计的经验。 对于从事C66x多核软件开发的设计师,本书具有很强的指导意义,本书还适合作为高校计算机、数据处理、信号处理、通信等相关专业的本科生和研究生教材。 目录 第1章 TI多核C66x DSP介绍 1.1 C6678处理器 1.1.1 C6678概览 1.1.2 外围设备 1.26 6AK处理器 1.36 6AK2H14/12/06和C6678各项功能对比 1.4 C66x处理器内核 1.5 电源休眠控制器 1.5.1 C66x内核电源休眠管理介绍 1.5.2 电源休眠管理特征 1.6 锁相环及其设置 1.6.1 主PLL和PLL控制器 1.6.2 DDR3 PLL 1.6.3 PASS PLL 1.7 C6678处理器接口通信相关外围设备 1.7.1 I2C外围设备 1.7.2 SPI外围设备 1.7.3 HyperLink 外围设备 1.7.4 UART外围设备 1.7.5 PCIe外围设备 1.7.6 TSIP 外围设备 1.7.7 EMIF16外围设备 1.7.8 网络协处理器和以太网驱动程序 1.7.9 串行RapidIO(SRIO)端口 1.7.10 通用目的输入/输出(GPIO) 1.8 定时器 1.9 信号量 1.10 多核导航器 1.10.1 PDSP固件 1.10.2 Packet DMA 1.10.3 队列管理器 1.10.4 描述符 1.10.5 包发送过程概述 1.10.6 包接收过程概述 1.10.7 映射信息 1.11 设计建议 1.11.1 初始化 1.11.2 接口驱动程序 1.11.3 时间戳的获取 1.11.4 EVM板的使用 1.11.5 示例程序 第2章 C66x多核引导方法 2.1 多核引导概述 2.2 复位 2.3 RBL引导 2.3.1 RBL简介 2.3.2 RBL引导过程 2.3.3 引导模式分类 2.3.4 引导模式设置 2.3.5 引导配置格式 2.4 EVM板上SPI NOR Flash引导设计 2.4.1 RBL执行过程 2.4.2 需要引导的应用程序 2.4.3 应用程序中的引导代码 2.4.4 烧写引导镜像的生成 2.4.5 程序烧写 2.4.6 SPI NOR Flash二次引导的设计 2.5 多核引导和改进 2.6 I2C二级引导(IBL和MAD) 2.6.1 MAD基础组件 2.6.2 MAD使用模式 2.6.3 多核应用程序部署工具包 2.6.4 在目标上调试应用程序 2.6.5 Image Processing示例程序使用MAD工具实现多核加载 2.7 设计建议和注意事项 第3章 SRIO 3.1 SRIO介绍 3.1.1 物理层1×/4×LP系列规范 3.1.2 SRIO外围数据流 3.1.3 SRIO包 3.2 SerDes宏及其配置 3.3 DeviceID配置 3.4 支持Rx组播和多个DestID 3.4.1 离散组播ID支持 3.4.2 混杂ID和DestID 支持 3.4.3 接收模式设置 3.5 回环 3.5.1 内部数字回环 3.5.2 SERDES回环 3.5.3 外部线路回环 3.6 菊花链操作和包转发 3.6.1 包转发介绍 3.6.2 包转发设置 3.7 DirectIO操作 3.7.1 LSU模块介绍 3.7.2 定义LSU寄存器组合及中断状态方式 3.7.3 设置LSU寄存器 3.7.4 详细数据路径描述 3.7.5 Tx操作 3.7.6 Rx操作 3.7.7 DirectIO操作特殊情况 3.7.8 调度 3.7.9 错误处理 3.7.10 DirectIO编程注意事项 3.8 消息传递 3.8.1 Rx操作 3.8.2 Tx操作 3.8.3 消息Packet DMA设置 3.8.4 消息传送编程示例 3.9 维护 3.10 门铃操作 3.11 原子操作 3.12 拥塞控制 3.13 字节存储顺序 3.13.1 内存映射寄存器空间的转换 3.13.2 有效负载数据的转换 3.14 中断操作 3.14.1 DirectIO(门铃)服务中断 3.14.2 消息传递服务中断 3.14.3 中断寄存器 3.14.4 中断处理 3.14.5 中断调步 3.15 中断设置 3.16 其他SRIO编程注意事项 3.16.1 匹配ACKID 3.16.2 软件复位 3.16.3 优化和技巧提示 3.17 SRIO_LoopbackDioIsrexampleproject介绍 第4章 C66x存储器组织 4.1 C66x存储控制器 4.1.1 L1P存储控制器 4.1.2 L1D存储控制器 4.1.3 L2存储控制器 4.1.4 外部存储控制器 4.1.5 扩展存储控制器 4.2 多核共享存储控制器 4.2.1 概览 4.2.2 C66x内核从接口 4.2.3 系统从接口 4.2.4 系统主接口 4.2.5 外部存储器主接口 4.2.6 MSMC存储器 4.3 扩展存储控制器XMC 4.3.1 存储器映射寄存器概要 4.3.2 XMC存储器保护和地址扩展 4.3.3 存储器保护和地址扩展过程 4.3.4 地址扩展 4.3.5 XMC存储器保护结构支持 4.3.6 预取缓冲 4.4 存储器保护架构 4.4.1 存储器保护的目的 4.4.2 特权级别 4.4.3 存储器保护架构 4.5 带宽管理 4.5.1 介绍 4.5.2 带宽管理架构 4.5.3 带宽管理寄存器 4.6 设计建议 4.6.1 合理规划使用存储器 4.6.2 存储器设置成不被Cache缓存和预取 第5章 Cache缓存和数据一致性 5.1 为什么使用Cache 5.2 C64x和C66x DSP之间的Cache区别 5.3 Cache存储器结构概览 5.4 Cache基础知 序言 前言 C66x是TI(Texas Instruments)公司推 出的新一代处理器内核,包含定点和浮点计算能 力,C66x包含 90个新指令用于提升浮点和矢量 运算。TMS320C6678是基于C66x内核的8核处理 器,66AK2Hx是基于ARM CortexA15和C66x内 核的异构多核处理器。基于C66x内核的DSP处理 器已经成为主流的高性能DSP。多核DSP的软件 开发技术对DSP嵌入式软件开发人员具有一定的 挑战性。多核任务划分、并行处理设计、同步设 计以及Cache一致性等问题是多核并行设计的关 键,良好的并行设计才能发挥C66x处理器的优 势。通过多年的研究并结合工程设计实践,总结 了C66x多核DSP并行开发技术经验和设计中一些 经常遇到的问题。本书以C6678为例系统介绍了 C66x多核DSP、数据一致性、CCS使用、 SYS/BIOS实时操作系统、多核并行设计和优化 等设计方法,用一个设计实例完整地描述了从任 务并行设计到具体实现的过程。 在C66x多核软件设计中,程序员的软件设 计思想、设计方法需要调整和提高。本书从程序 员的工作需要和高校学生的学习需要出发,结合 实际工作,详细叙述了多核软件开发技术。初学 者可以循序渐进地建立基于C66x多核并行开发 的概念,并积累优化设计的经验,提高设计水平 ,从初学就设计出高性能的并行代码。各章的内 容要点如下: 第1章主要介绍了C66x处理器, 并以C6678为例介绍了处理器概况、处理器内核 、外围设备、多核导航器等模块。第2章详细介 绍了C66x多核引导(Boot)的方法。以C6678为 例介绍了RBL(ROM Boot Loader)引导过程、 在EVM板上实现SPI Flash引导的实例及多核引 导的改进方法。第3章详细介绍了SRIO接口,包 括SRIO、SerDes宏、DeviceID配置、组播和多 个DestID支持、包转发、DirectIO操作、消息 传递、Doorbell、中断操作等相关知识,并介 绍了其他SRIO编程注意事项。第4章主要介绍了 C6678存储控制器、多核共享存储控制器、外部 存储控制器EMC、扩展存储控制器XMC、存储器 保护架构、带宽管理等存储器相关内容。第5章 主要介绍了Cache基础知识,C66x的各级Cache 、Cache的使用、数据一致性等内容。第6章主 要介绍了IDMA、EDMA使用的一些知识。第7章介 绍了C66x中断控制器、内核事件以及中断控制 器与DSP交互的相关知识。第8章介绍了如何使 用CCS进行相关的操作和配置。第9章介绍了 SYS/BIOS实时操作系统,并给出了相关设计例 程。第10章介绍了多核并行设计的相关问题,如 并行粒度、并行方式、依赖关系、死锁活锁、同 步等问题,并介绍了任务级优化设计的例子。第 11章介绍了软件优化技术,如for循环优化、软 件流水、编译指示和关键字的使用、内建函数的 使用等。第12章介绍了一个多核软件设计的实例 。第13章介绍了多核发展的趋势及一些思考。附 录中列出了常用的存储器地址映射、MAR寄存器 地址对照表、C6678 EDMACC事件列表、C6678内 核System Event事件输入列表和C6678 System Interrupt事件输入列表。 本书中关于TI C66x多核DSP的相关资料来 源于德州仪器(Texas Instruments,TI)相关 网站,如德州仪器官网、德州仪器在线技术支持 社区等,相关资料的最新版本可以从中查询。 刘晶参与本书的修订工作,为本书的出版 做出了重要贡献。参与本书审校的有牛蕾、习建 博、邓庆勇、郭琦、白晓慧、张玉营、潘勇先、 朱鹏等,方志红、梁之勇、宋皓、顾庆远等在多 核开发技术方面做出了很大贡献。感谢夏靖涵在 本书出版过程中给予的鼓励和支持。感谢家人一 直以来的支持和付出。为本书的形成及多核 C66x DSP开发技术做出贡献的人还有很多,在 这里一并致谢! 多核开发技术发展迅速,基于C66x的多核 开发技术难点较多,由于作者水平有限,书中难 免有疏漏之处,欢迎读者指正。 本书提供“C66x多核Boot方法”等内容和 代码,以及本书配套教学课件作为附加资源,读 者可从清华大学出版社网站下载。作者2021年6 月于合肥 导语 本书由浅入深、概念齐全、实践性强、指导性强,结合了多年嵌入式多核软件开发的实际经验,对多核设计中常见的问题进行了详细描述。 从基本概念出发,层层推进,介绍了多核并行、数据传输与处理并行和多层次并行设计的经验,是嵌入式多核DSP并行软件开发者必备的参考书。 精彩页 第3章SRIO RapidIO是一种通用、高带宽、低引脚数、基于数据包交换的系统级互连体系结构的一种开放式互连技术标准。它主要用作系统内部接口,用于以每秒千兆字节的性能水平进行芯片到芯片及板到板通信。KeyStone器件中使用的RapidIO外围设备称为串行RapidIO(Serial RapidIO,SRIO)。 SRIO接口支持4通道SRIO 2.1规范,每通道支持1.25/2.5/3.125/5Gb/s波特率传输。PCIE Gen2单个接口支持1通道或两通道,每通道最高可支持5Gb/s波特率。 SRIO端口在C6678器件上是一个高性能、接口数量少的内部连接方式。在一个基带板内部使用RapidIO进行连接设计,可以创建一个对等的互连环境,在部件间提供更多的连接和控制,性能可达GB/s。RapidIO基于处理器总线中存储器和器件寻址概念,事务处理完全由硬件管理。采用RapidIO互连不仅可以降低系统成本,还可以降低潜在风险,减小包数据处理的间接消耗并提供更高的系统带宽。 这种体系结构可以用于连接微处理器、内存和内存映射的I/O器件,通常应用于网络设备、内存子系统和通用处理系统。 RapidIO的主要特点包括: (1) 灵活的系统架构,允许点对点通信。 (2) 具有错误检测功能、强大的通信能力。 (3) 频率和端口宽度可扩展性。 (4) 非软件密集型操作。 (5) 高带宽互连,低开销。 (6) 引脚数少。 (7) 低功率。 (8) 低延迟。 3.1SRIO介绍 RapidIO体系架构和RapidIO互连结构分别如图3.1和图3.2所示。 图3.1RapidIO体系架构 图3.2RapidIO互连结构 SRIO中的RapidIO外部设备要求: SRIO为所有符合RapidIO物理层1×/4×LP系列规范V1.2的设备提供无缝接口。这包括多个供应商提供的ASIC、微处理器、DSP和交叉开关网络(Switch Fabric)设备。 SRIO的驱动库在ti\pdk_C6678_x_x_x_x\packages\ti\drv\srio目录下,相关文档在docs目录,例程在example目录下。 SRIO的编程示例程序基于寄存器层CSL(芯片支持层)。大多数代码使用如下定义的SRIO寄存器指针: #include #include CSL_SrioRegs * srioRegs = (CSL_SrioRegs *)CSL_SRIO_CONFIG_REGS; 3.1.1物理层1×/4×LP系列规范 目前,RapidIO行业协会认可两种物理层规范: 8/16 LPLVDS和1×/4×LP系列。8/16 LPLVDS规范是一个点对点同步时钟源DDR接口。1×/4×LP串行规格是一个点对点、交流耦合、时钟恢复的接口。两个物理层规格不兼容。 SRIO符合1×/4×LP系列规范。SRIO中的 SerDes(Serializer/Deserializer)技术也与该规范一致。 RapidIO物理层1×/4×LP串行规范目前涵盖四个频点: 1.25Gb/s、2.5Gb/s、3.125Gb/s和5Gb/s。这定义了每个I/O信号差分对的总带宽。由于8位/10位编码开销,每个差分对的有效数据带宽分别为1.0Gb/s、2.0Gb/s、2.5Gb/s和4Gb/s。 SRIO物理层结构如图3.3所示。 图3.3SRIO物理层结构 1. 1×和4×连接 SRIO物理层1×/4×互连结构如图3.4所示。SRIO设备引脚采用高速差分信号接收数据。 一个设备的每条正传输数据线(TDx)都连到另一个设备上对应编号的正接收数据线。 同样,每条负传输数据线(TDx)连接到一个对应编号的负接收数据线 (RDx)。图3.4中RD为接收数据线( Receive Data Line)的简写,TD为传输数据线( Tranceive Data)的缩写。 图3.4SRIO 1×和4×互连结构 2. SRIO引脚 SRIO设备引脚是基于电流模式逻辑(CurrentMode Logic,CML)开关电平的高速差分信号。发送和接收缓冲区独立于时钟恢复块中。参考时钟输入未合并到SerDes宏中。它使用了一个差分输入缓冲器,与晶体振荡器制造商提供的LVDS和LVPECL接口兼容。表3.1描述了SRIO外围设备的引脚。 表3.1SRIO外围设备的引脚 引脚名引脚数信号方向描述 RIOTX3/ RIOTX32Output发送数据差分点对点单向总线。将数据包数据发送到接收设备的Rx引脚,用于1个4×设备中的最高有效位,也可用于4个1×设备 RIOTX2/ RIOTX22Output发送数据差分点对点单向总线。将数据包数据发送到接收设备的Rx引脚, 用于4个1×设备和1个4×设备的位 RIOTX1/ RIOTX12Output发送数据差分点对点单向总线。将数据包数据发送到接收设备的Rx引脚, 用于4个1×设备和1个4×设备的位 RIOTX0/ RIOTX02Output发送数据差分点对点单向总线。将数据包数据发送到接收设备的Rx引脚, 用于1个1×设备、4个1×设备和1个4×设备的位 RIORX3/ RIORX32Input接收数据差分点对点单向总线。接收发送设备的Tx引脚的数据包数据。1个4×设备中的最高有效位,也可用于4个1×设备 RIORX2/ RIORX22Input接收数据差分点对点单向总线。接收发送设备的Tx引脚的数据包数据,用于4个1×设备和1个4× |