内容简介
本书系统介绍了C66x多核软件开发的知识,并基于C6678的设计实例介绍了相关设计经验。系统介绍了C66x DSP器件的基础概念和多核软件设计的基础知识,读者循序渐进地掌握多核软件设计技术。对于传统DSP开发人员比较陌生的一些概念,如Cache、预取、数据一致、数据依赖、死锁等,进行了描述。系统介绍了C66x多核器件的存储器、DMA传输、中断等内容,并结合工作实际,介绍了多核软件优化、多核并行设计及任务级优化经验。后,以多普勒成像的设计实例描述了如何实现并行设计。 全书共13章,内括C66x DSP的基本组成,如存储器组织、DMA传输、中断和异常、Cache缓存和数据一致等,含CCS软件开发环境、SYS/BIOS实时操作系统、多核并行设计、软件设计优化等相关知识。 本书的特点是由浅入深、概念齐全、实践强、指导强。本书结合了多年多核软件开发的实际经验,对多核设计中常见的问题进行了详细的描述; 从基本概念出发,层层推进,介绍了多核并行、数据传输与处理并行和多层次并行设计的经验。 对于从事C66x多核软件开发的设计师,本书具有很强的指导意义,本书还适合作为高校计算机、数据处理、信号处理、通信等相关专业的本科生和研究生教材。
目录
目录第1章TI多核C66x DSP介绍1.1C6678处理器1.1.1C6678概览 1.1.2外围设备1.266AK处理器1.366AK2H14/12/06和C6678各能对比1.4C66x处理器内核1.5电源休眠控制器1.5.1C66x内核电源休眠管理介绍1.5.2电源休眠管理特征1.6锁相环及其设置1.6.1主PLL和PLL控制器1.6.2DDR3 PLL1.6.3PASS PLL1.7C6678处理器接口通信相关外围设备1.7.1I2C外围设备1.7.2SPI外围设备1.7.3Hyperlink 外围设备1.7.4UART外围设备1.7.5PCIe外围设备1.7.6TSIP 外围设备1.7.7EMIF16外围设备1.7.8网络协处理器和以太网驱动程序1.7.9串行RapidIO(SRIO)端口1.7.10通用目的输入/输出(GPIO)1.8定时器1.9信号量1.10多核导航器1.10.1PDSP固件1.10.2Packet DMA1.10.3队列管理器1.10.4描述符1.10.发送过程概述1.10.接收过程概述1.10.7映射信息1.11设计建议1.11.1初始化1.11.2接口驱动程序1.11.3时间戳的获取1.11.4EVM板的使用1.11.5示例程序第2章C66x多核引导方法2.1多核引导概述2.2复位2.3RBL引导2.3.1RBL简介2.3.2RBL引导过程2.3.3引导模式分类2.3.4引导模式设置2.3.5引导配置格式2.4EVM板上SPI NOR Flash引导设计2.4.1RBL执行过程2.4.2需要引导的应用程序2.4.3应用程序中的引导代码2.4.4烧写引导镜像的生成2.4.5程序烧写2.4.6SPI NOR Flash二次引导的设计2.5多核引导和改进2.6I2C二级引导(IBL和MAD)2.6.1MAD基础组件2.6.2MAD使用模式2.6.3多核应用程序部署工2.6.4在目标上调程序2.6.5Image Processing示例程序使用MAD工具实现多核加载2.7设计建议和注意事项第3章SRIO3.1SRIO介绍3.1.1物理层1×/4×LP系列规范3.1.2SRIO外围数据流3.1.3SRI3.2SerDes宏及其配置3.3DeviceID配置3.4支持Rx组播和多个DestID3.4.1离散组播ID支持3.4.2混杂ID和DestID 支持3.4.3接收模式设置3.5回环3.5.1内部数字回环3.5.2SERDES回环3.5.3外部线路回环3.6菊花链操作转发3.6.转发介绍3.6.转发设置3.7DirectIOr/>3.7.1LSU模块介绍3.7.2定义LSU寄存器组合及中断状态方式3.7.3设置LSU寄存器3.7.4详细数据路径描述3.7.5Txr/>3.7.6Rxr/>3.7.7DirectIO操作特殊情况3.7.8调度3.7.9错误处理3.7.10DirectIO编程注意事项3.8消息传递3.8.1Rxr/>3.8.2Txr/>3.8.3消息Packet DMA设置3.8.4消息传送编程示例3.9维护3.10门铃r/>3.11原子r/>3.12拥塞控制3.13字节存储顺序3.13.1寄存器空间的转换3.13.2有效负载数据的转换3.14中断r/>3.14.1DirectIO(门铃)服务中断3.14.2消息传递服务中断3.14.3中断寄存器3.14.4中断处理3.14.5中断调步3.15中断设置3.16其他SRIO编程注意事项3.16.1匹配ACKID3.16.2软件复位3.16.3优化和技巧提示3.17SRIO_LoopbackDioIsrexampleproject介绍第4章C66x存储器组织4.1C66x存储控制器4.1.1L1P存储控制器4.1.2L1D存储控制器4.1.3L2存储控制器4.1.4外部存储控制器4.1.5扩展存储控制器4.2多核共享存储控制器4.2.1概览4.2.2C66x内核从接口4.2.3系统从接口4.2.4系统主接口4.2.5外部存储器主接口4.2.6MSMC存储器4.3扩展存储控制器XMC4.3.1存储器映射寄存器概要4.3.2XMC存储器保护和地址扩展4.3.3存储器保护和地址扩展过程4.3.4地址扩展4.3.5XMC存储器保护结构支持4.3.6预取缓冲4.4存储器保护架构4.4.1存储器保护的目的4.4.24.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为什么使用Cache5.2C64x和C66x DSP之间的Cache区别5.3Cache存储器结构概览5.4Cache基础知识5.4.1直接映射Cache——L1P Cache5.4.2Cache缺失的类型5.4.3组相联Cache5.4.4二级Cache5.5L1P Cache5.5.1L1P存储器和Cache5.5.2L1P Cache结构5.5.3L1P冻结模式5.5.4程序启动的一致r/>5.6L1D Cache5.6.1L1D存储器和Cache5.6.2L1D Cache结构5.6.3L1D冻结模式5.6.4程序发起的Cache一致r/>5.7L2 Cache5.7.1L2存储器和Cache5.7.2L2 Cache结构5.7.3L2冻结模式5.7.4程序发起的Cache一致r/>5.7.5Cache能力控制5.8使用Cache5.8.1配置L1 Cache5.8.2配置L2 Cache5.9数据一致5.9.1Snoop一致协议5.9.2在外部存储器和Cache之间维持一致5.9.3对L2 Cache一致操作使用指导5.9.4对L1 Cache一致操作使用指导5.10片上Debug支持5.11在运行中改变Cache配置5.11.1禁用外部存储器Cach能5.11.2在运行中改变Cache尺5.12优化Cache能5.12.1Cache能特征5.12.2阻塞情况5.12.3优化技术概览5.12.4应用级优化5.12.5过程级优化5.12.6C66x DSP Cache一致操作小结5.13设计建议5.13.1消除虚假地址5.13.2数据一致问题第6章DMA传输6.1IDMA6.1.1IDMA结构6.1.2IDMA通道06.1.3IDMA通道16.2EDMA3控制器6.2.1EDMA3控制器介绍6.2.2EDMA3器件特定的信息6.2.3EDMA3通道控制器配置6.2.4EDMA3传输控制器配置6.2.5EDMA3通道同步事件6.2.6EDMA3通道控制器6.2.7EDMA3传输控制器6.3EDMA3传输类型6.3.1A同步传输6.3.2AB同步传输6.4参数RAM6.4.1PaRAM参数集6.4.2Dummy与Null传输比较6.4.3参数集更新6.4.4连接传输6.4.5常数地址模式传输/对齐问题6.4.6单元大小6.5发起一个DMA传输6.5.1DMA通道6.5.2QDMA通道6.5.3完成一个DMA传输6.5.4EDMA3中断6.6提升DMA能的几点建议6.6.1尽量用较大的AT6.6.2线传输6.6.3地址对齐6.6.4恰当使用多个CC和TC传输第7章中断和异常7.1C6678处理器中断简介7.2芯片中断控制器7.3C66x内核中断控制器概述7.3.1特征7.3.能块图7.4中断控制器结构7.4.1事件寄存器7.4.2事件合并器7.4.3中断选择器7.4.4异常合并器7.5C66x内核事件7.6中断控制器与DSP交互7.6.1DSP中断控制器接口7.6.2DSP服务中断事件7.7C6678中断的设计7.7.1不经过CIC的中断事件7.7.2经过CIC的中断7.7.3中断挂接7.7.4多个事件映射同一中断的挂接7.8中断设计建议7.8.1不要过多使用中断或中断嵌套7.8.2中断服务程序中代码不宜过长7.8.3中断服务程序改变的全局变量要加上volatile标志第8章如何使用CCS8.1常用界面8.1.1Project Explorer8.1.2程序窗口8.1.3目标配置窗口8.1.4Debug窗口8.1.5Memory窗口8.1.6expressions窗口8.1.7Breakpoints窗口8.1.8Problems窗口8.1.9Console窗口8.2新建工程8.3新建一个目标配置文件8.3.1新建ccxml文件8.3.2设置仿真器8.3.3添加器件8.4常用r/>8.4.1Launch8.4.2Group8.4.3Connect8.4.4加载程序8.4.5设置断点调试程序8.4.6复位8.5常见问题8.5.1头文件找不到8.5.2EVM板未初始化,调试找不到DDR38.5.3选中不了仿真器8.5.4加断点调试错误8.5.5域选择不正确8.5.6仿真器连接中断电8.6设置字体和代码风格8.6.1修改字体8.6.2代码风格设置8.7MCSDK8.7.1MCSDK架构8.7.2MCSDK特点8.8TI函数库调用8.8.1格式选择8.8.2库的调用8.8.3库的使用8.9理解CMD文件8.9.1CMD文件简介8.9.2MEMORY命令8.9.3SECTIONS命令第9章SYS/BIOS实时操作系统9.1什么是SYS/BIOS9.1.1SYS/BIOS的优势9.1.2SYS/BIOS和XDC TOOL的关系9.2SYS/BIO9.3SYS/BIOS中使用C++9.3.1存储器管理9.3.2Name Mangling9.3.3从配置调用对象方法9.3.4类构造器和析构器9.4SYS/BIOS配置和编译9.4.1在工程中添加SYS/BIOS支持9.4.2创建一个独立的配置工程9.4.3配置SYS/BIOS应用9.4.4用XGCONF打开一个配置文件9.4.5用XGCONF执行任务9.4.6保存配置9.4.7关于XCONFG视图9.4.8使用可用产品视图9.4.9使用概要视图9.4.10使用属视图9.4.11使用问题视图9.4.12找到并修正错误9.5编译一个SYS/BIOS应用9.5.1了解编译流程9.5.2编译和连接优化9.6线程模块9.6.1SYS/BIOS启动顺序9.6.2线程模块的概览9.6.3线程类型9.6.4线程优先级9.6.5让步和抢占9.6.6钩子9.7硬件中断9.7.1创建中断9.7.2硬件中断嵌套和系统堆栈大小9.7.3硬件钩子9.8软件中断9.8.1创建软件中断对象9.8.2设置软件中断优先级9.8.3软件中断优先级和系统堆栈大小9.8.4软件中断执行9.8.5优点和折中9.8.6软件中断函数同步9.8.7软件钩子9.9任务9.9.1创建任务9.9.2任务执行状态和调度9.9.3任务堆栈9.9.4测试堆栈溢出9.9.5任务钩子9.9.6空闲循环9.10SYS/BIOS同步模块9.10.1信号量9.10.2事件模块9.10.3门模块9.10.4邮箱9.10.5队列9.11定时服务9.12Memory9.12.1新建一个Platform9.12.2栈9.12.3Cache配置9.12.4Cache Runtime API9.12.5动态存储器分配9.12.6Heap的实施9.13硬件抽象层9.14典型设计实例和建议9.14.1典型设计9.14.2设计建议9.14.3RTA分析9.14.4SYS/BIOS Semaphore与Semaphore2第10章多核并行设计10.1并行粒度和并行级别10.2并行方式10.3任务类型10.3.1相同任务的多个副本10.3.2多个独立任务10.3.3单个任务拆分成多个子任务10.3.4多个松散耦合任务10.3.5耦合度高的任务10.4依赖关系10.4.1数据依赖10.4.2存储器依赖10.5死锁和活锁10.5.1死锁10.5.2活锁10.6同步10.6.1SYS/BIOS同步模块10.6.2采用控制信号实现多核对等同步10.7forkjoin10.8OpenMP并行设计10.9任务级优化设计10.9.1一种典型的任务处理流程10.9.2优化设计实例第11章软件优化设计11.1for循环优化11.1.1移出能在循环外完成的计算11.1.2循环体内的大运算换成小运算11.1.3多重循环11.1.4for循环中有判断11.2多核for循环并行任务优化11.2.1资源占用小的for循环11.2.2资源占用大的for循环11.3if声明优化11.3.1if转换11.3.2消f声明11.3.3相同代码合并减少if声明11.3.4减少嵌套的if11.3.5优化条件表达式11.3.6优化稀疏矩阵11.4软件流水11.5正确使用编译指示和关键字11.5.1restrict关键字11.5.2_nassert关键字11.5.3interrupt中断关键字11.5.4near和far关键字11.5.5const关键字11.5.6UNROLL编译指示11.5.7MUST_ITERATE编译指示11.5.8CODE_SECTION编译指示11.5.9DATA_SECTION编译指示11.5.10SET_CODE_SECTION和SET_DATA_SECTION编译指示11.5.11DATA_ALIGN编译指示11.5.12STRUCT_ALIGN11.6采用内建函数11.6.1数据移动和函数11.6.2使用除法指令11.6.3使用C66x定点指令实现复数矩阵操作和向量r/>11.6.4浮点和矢量运算11.7选定正确的优化级别11.8软件优化小结第12章距离多普勒成像设计实例12.1背景介绍12.2距离多普勒成像算法12.3数据组织形式12.4算法的并行化设计12.5forkjoin的设计12.6脉冲压缩的设计12.6.1IFFT转为FFT12.6.2无缓存的大点数FFT、IFFT设计12.6.3有数据缓冲多核大点数FFT、IFFT设计12.6.4资源使用情况12.6.5复数相乘12.6.6脉冲压缩的伪码实现12.7其他阶段任务分解12.8实验结果分析第13章展望13.1异构多核SoC处理器13.1.1异构多核DSP13.1.2异构多核FPGA 13.2嵌入式软件设计思考13.2.1掌握系统架构13.2.2做好软件模块化设计13.2.3片上系统架构设计的挑战13.2.4自动化并行设计附录A附录B附录C附录D附录E参考文献



VIP会员