TMS320C6678多核烧写研究v1,0.ppt_第1页
TMS320C6678多核烧写研究v1,0.ppt_第2页
TMS320C6678多核烧写研究v1,0.ppt_第3页
TMS320C6678多核烧写研究v1,0.ppt_第4页
TMS320C6678多核烧写研究v1,0.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TMS320C6678多核烧写研究 樊文贵电子信息工程学院203教研室北京航空航天大学2014年5月16日 主要内容 1 可执行文件生成过程 1 可执行文件生成过程 一个Demo程序的生命周期一般是从C语言程序开始的 因为这种形式编写最为方便 为了在系统上运行Demo程序 其每一条语句都需要被转化为低级的机器指令 machinelanguage 并按照一定格式打包以二进制磁盘文件存放 该形式的程序称为可执行目标文件 executablefile 被加载到内存后 由系统运行 在文本编辑器中编辑的源程序成为可执行目标文件需要经过四步处理 预处理 preprocesser 编译 compiler 汇编 assembler 以及链接 linker 1 可执行文件生成过程 预处理阶段 预处理器根据字符 开头的命令修改C源程序 例如main c中第一行 include 告诉预处理器读取系统文件stdio h中的内容并将其直接插入到程序文本中 而宏定义告诉预处理器将程序文本中对应的字符进行替换 附带演示程序Demo 基于CCSv5开发平台编辑生成 1 可执行文件生成过程 编译阶段 编译器将预处理器输出的文件翻译成汇编语言程序 asm 汇编语言程序中的每一条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令 参看参考文献 2 汇编语言为不同高级语言的不同编译器提供了统一的输出语言 有时为提高程序的执行效率 程序员可以直接编写汇编程序文件 例如Demo程序中的sum asm 1 可执行文件生成过程 汇编阶段 汇编器将输入的汇编文本 asm 逐条翻译成二进制机器语言指令 并把这些指令打包成可重定位的目标程序 relocatableobjectprogram 保存到各自的目标文件 obj 中 该目标文件是二进制文件 它的字节编码是机器语言指令而不是字符 如果用文本编辑器打开 obj文件 将看到一堆乱码 1 可执行文件生成过程 链接阶段 通常 整个程序由多个 c文件组成 经过前面的处理生成各自对应的可重定位目标文件 obj 程序调用了若干库函数 例如printf 也保存在经过单独编译汇编过的目标文件库 lib 里 链接器在 cmd文件的指导下将这些文件合成一个可在系统上运行的可执行文件 1 可执行文件生成过程 链接阶段 编译器和汇编器生成从地址0开始的代码和数据节 链接器通过把每一个符号定义 在可重定位文件中 对程序外部文件的变量或函数的引用通过一个符号定义来表示 与存储位置联系起来 cmd 然后修改这些符号的引用 使得他们指向这个存储器的位置 引用符号由引用变量或函数的具体存储器地址代替 从而实现重定义这些细节 最后链接器将经过重定位的各代码和数据节组成一个完整的可执行目标文件 加载到处理器中即可运行 链接器的实现细节参看文献 1 的第7章链接 2 多核烧写文件生成原理 2 多核烧写文件生成原理 对于多核编程 各核源文件分别经CCS编译 汇编 链接为各自对应的 out文件 但该文件不能被直接烧写到外部Flash中 必须经过工具链处理为满足Bootloader的格式即如右图所示的镜像文件 dat 该文件经CCSv5自带的Flash烧写工程 my SPI modify 烧写到外部Flash 之后上电系统完成自举 程序正常运行 2 多核烧写文件生成原理 镜像文件就是用户要烧写到外部Flash上的全部数据文件 它是由Boot参数表 在文件前部 和应用程序的根表数据 文件后部 的合成数据文件 单核和多核的Boot参数表格式都一样 区别就是后部的根表数据 2 多核烧写文件生成原理 Boot参数表占用8个字 32Bytes 位于镜像文件的开头 不同的字段具有不同的意义 用于指导启动过程 下表列出了SPI启动模式下参数表的配置寄存器 由于SPIboot是寄存器的直接读写 因此配置过程中不会涉及到EDMA寄存器的配置 因此前12个字段被忽略 这些参数部分可以通过读取管脚配置来填充 参看参考文献 7 p 27 33 也可以被用户自定义修改 注意 无论是管脚配置还是参数表的书写都是为了生成boot参数表 在我们的系统中是通过DSP外部13个配置管脚配置Boot参数的 所以 dat文件中的Boot参数表被忽略 2 多核烧写文件生成原理 单核根表 根表是应用程序的所有代码和数据以在片上占用地址来分段存储的数据包 包的第一个4B是core0程序中main 函数的入口地址 C int00 后面由若干数据段组成 每个段前4B为该段数据的字节长度 接着4B为该段在片上的存储地址 后面是具体代码和数据 所有数据段结束后是4个字节的0作为根表的结束标记 多核根表 把各辅核的代码数据段及入口地址值按照上述单核根表的格式续写在core0根表后 其中入口地址值的地址为各核的BOOT MAGIC ADDRESS地址 最后同样以4个字节的0作为根表的结束标志 2 多核烧写文件生成原理 BOOTROM中的代码完成bootloader初始化 PLL CPU时钟 启动方式等 后会继续初始化core的L2RAM缓存的最后0 xd23f个字长的代码 此段代码用于保存Boot配置信息并指导后续boot过程 2 多核烧写文件生成原理 BOOT MAGIC ADDRESS地址是每个core各自一块固定的内存 由上表所示 BOOT MAGIC ADDRESS地址是ROM搬移到RAM信息的最后一个字 该字存放着各个core初始化之后需要跳转到的c程序入口地址 c int00 根据c66x内存的规划设计 不同core的BOOT MAGIC ADDRESS位于在该core本地L2RAM的最后一个word里 由于多核DSP采用全局地址来区别不同核的RAM地址 因此每个核的BootMagic地址是0 x1x87fffc x为核号 2 多核烧写文件生成原理 工具链 将CCS生成的 out文件转化为Bootloader可以 理解 的格式是c66x启动至关重要的一步 与以前的DSP启动相比 c66x系列的工具链更加复杂和多样化 文件转换格式也呈现多态化 以 dat文件格式为例 生成所需的镜像文件需要以下工具链做支持 2 多核烧写文件生成原理 工具链 hex6x文件需要和 rmd文件配合使用 后者描述了boot参数表模式 ROM宽度 大小端模式等信息 由此得到8个核的 btbl文件 该文件包含了大部分的内容信息 再经过两个小工具的转化可以得到有效数据信息 此时的 ccs文件只包含各个段的内容 不包含Boot参数的内容 因此需要将一定格式的参数配置信息进行解析 作为boot参数表头加在 ccs文件上成为一个含有参数配置头的 ccs文件 最后由于ROMbootloader只识别大端 BigEnd 模式数据 所有需要进行一次大小端的转化 至此一个完整的可以被ROMBootloader识别的多核镜像文件就成功生成 3 多核Boot原理 3 多核Boot原理 C66x芯片对典型C6000系列芯片做了改进 不需要由用户在外部Flash起始的1K空间编写二级Bootloader C66xDSP内部有一个固化的ROM存放着boot代码 ROMBootloader 每当DSP启动时 会自动从这里读取代码并执行 此代码是固化的不可更改的 其作用就是根据管脚配置方式对核进行初始化 比如PLL等 和完成不同模式的Boot处理 搬运程序和代码到指定的内部RAM中 3 多核Boot原理 CPU执行BootROM中的代码将外部flash中的程序和数据搬移到内部RAM中 之后core0启动初始化外设 此时其他core都会执行相关的代码映射IPC中断 并配置相应的寄存器 然后进入IDLE状态 等待core0的发起IPC Inter Process Communication 中断 当core0完成初始化后向其他core发送IPC中断 其他core在接收到中断后启动执行代码 即其他核是在core0的命令下执行第一句代码 3 多核Boot原理 core0在SPI启动中起到至关重要的作用 作为主核 核0负责着搬移镜像 写BOOT MAGIC ADDRESS地址值 以及发IPC中断触发其他核启动等多项工作 其中搬移多核镜像的工作由DSPROMBootloader完成 而剩下两项工作需要用户自定义操作 本文附带的工具链不具有将各核入口地址写入对应BOOT MAGIC ADDRESS中的功能 因此前述镜像文件格式中标为红色的部分没有被添加进去 这么做的主要原因是程序的入口地址无法确知 解决这一问题有两种方法 1 在生成 out文件之后参看 map文件获得各辅核程序的入口地址 并在主核的main 函数中分别将该地址写入到各辅核对应的BOOT MAGIC ADDRESS中 如上图所示 2 获得辅核入口地址后 修改工具链将其以数据段的形式写入到镜像文件中 如前述镜像文件 3 多核Boot原理 如果多核DSP是由同一套工程分别编译 那么每个核内存分配完全相同 core0在读取自己核的BOOT MAGIC ADDRESS地址 0 x1087fffc 下的值后 就可以得到其他核的BOOT MAGIC ADDRESS地址 但是如果各核独立编译各自工程 各变量内存映射关系不再相同 那么就无法从core0的BOOT MAGIC ADDRESS地址值去推算其他核相应地址 这个时候只能事先记录下各核的BOOT MAGIC ADDRESS地址值 然后写到核0的用户初始化代码上 3 多核Boot原理 在完成所有上述操作后 core0需要对每个核的IPCGRx寄存器写中断以唤醒其他核的正常运行状态 IPCGRx寄存器的31 4比特位是IPC中断源索引 可支持多达28个中断源 可以设置为全0 比特3 1是保留位 可以任意赋值 因此只要对最低比特赋1就可以完成对其他核IPC中断的触发 参看文献 7 p 80 82 3 多核Boot原理 到此为止基于SPI多核启动的过程全部结束 多核DSP正常运转起来 注意每个核的IPC中断生成寄存器有固定的内存映射地址 4 多核烧写文件生成过程 4 多核烧写文件生成过程 在core0的main函数中要增加写各辅核入口地址到相应的BOOT MAGIC ADDRESS及触发IPC中断的逻辑 如图所示 否则多核不可能正常boot voidMulticoreBoot int pBootMagicAddCore0 int IpcGr0 inti intcoreId 0 coreId platform get coreid if coreId 0 pBootMagicAddCore0 int 0 x1087FFFC core0的magicaddress pBootMagicAddCore0 0 x10843994 core0的 c int00函数入口地址 此处写入各辅核的入口地址 在此core1的 c int00函数入口地址 pBootMagicAddCore0 0 x01000000 4 0 x1180c300 core0发送IPC中断 IpcGr0 int 0 x02620240 for i 1 i CORE NUM 6678 i core0sentipcinterruptto IpcGr0 i IpcGr0 i 0 x00000001 可在转换工具链 spi boot suit v2 3 1 release 2 ledtestprj 1 6678 src找到原版代码 4 多核烧写文件生成过程 四核烧写文件的生成工具链选择 spi boot suit v2 3 1 release 1 utilities 1 6678 multicore boot 4cores 把要处理的四个 out文件粘贴到该文件夹下 依次修改文件名为simple0 simple3 必须为core序号一一对应关系 点击该文件夹下的批处理文件 spiboot multi 4cores bat 生成镜像文件spirom le dat 即烧写文件 4 多核烧写文件生成过程 两核烧写文件的生成修改批处理文件spiboot multi 4cores bat中内容如下 删掉多余的hex6xsimple2 rmd和hex6xsimple3 rmd以及第五行中simple2 btbl和simple3 btbl 将修改后文件保存为文件名为spiboot multi 2cores bat的批处理文件 点击该批处理文件就可以生成两核程序的 dat代码 4 多核烧写文件生成过程 c int00入口地址的获得在编译链接之后的工程下有一个文件夹 Debug 在此文件夹下有一个以工程名命名的 map文件 在此文件的开头可以看到 c int00的入口地址 各core启动之前PC指令应该指向 c int00的位置 即在执行main函数之前应该先执行 c int00开始的一段初始化过程 比如全局变量赋初值 局部变量入栈等操作 之后才开始main函数 5 多核烧写操作过程 5 多核烧写操作过程 烧写 将之前生成的烧写文件通过SPI的烧写工程my spi modify写到NorFlash里1 运行SPI工程完成初始化部分 断点到ddr3测试结束 这样可以可以确认ddr3工作正常 程序工作正常 一般断点设到Init val nor init 注意 在断点之前 设置系统工作环境并向DDR3起始地址空间写入0 9 若程序暂停到断点时DDR3起始地址空间为递增数 则说明DDR3时钟等配置正常 这一验证非常必要 因为镜像文件需要先镜像存储在DDR3中 之后由SPI写入到外部Flash 5 多核烧写操作过程 烧写 将之前生成的烧写文件通过SPI的烧写工程my spi modify写到NorFlash里2 此时 从memorybrowser里将 dat文件load到程ddr3里 在memorybrowser的范围右击 选择loadmemory 5 多核烧写操作过程 烧写 将之前生成的烧写文件通过SPI的烧写工程my spi modify写到NorFlash里3 选择之前产生的 dat文件 勾选useheadimformation的选项 点击next 注意 dat文件路径不能有中文 否则不能导入到内存中 5 多核烧写操作过程 烧写 将之前生成的烧写文件通过SPI的烧写工程my spi modify写到NorFlash里4 确定地址和长度填写正确 地址为0 x80000000ddr3首地址 长度为 dat文件长度 点击finish 5 多核烧写操作过程 烧写 将之前生成的烧写文件通过SPI的工程my spi modify写到NorFlash里5 让程序继续执行 清除掉flash里内容之后 将ddr30 x80000000开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论