广州企业网站建站,h5制作模板官网,漯河网站建设费用,100m网站空间服务费文章目录
前言
背景介绍
C28x内核
浮点单元(FPU)
快速整数除法单元(FINTDIV)
三角数学单元(TMU)
VCRC单元
CPU总线
指令流水线
总结
参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解…
文章目录
前言
背景介绍
C28x内核
浮点单元(FPU)
快速整数除法单元(FINTDIV)
三角数学单元(TMU)
VCRC单元
CPU总线
指令流水线
总结
参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(串口)通信》 背景介绍 C28x CPU是一个32位的定点处理器该器件借鉴了DSP的最佳特性、精简指令集计算(RISC)、MCU架构、固件和工具集。其在TI C2000 DSP芯片的整体架构中所处的位置如下 C28x内核 C28x CPU使用改进后Harvard架构和循环寻址。改进后的Harvard架构使指令和数据获取能够并行执行。CPU可以在读取指令和数据时同时写入数据以在整个流水线中保持单周期指令操作。CPU通过六条独立的地址/数据总线完成此操作。RISC特性包括指令单周期执行、寄存器到寄存器操作和改进后的Harvard架构。MCU特性包括通过直观的指令集、字节打包和解包以及位操作来实现易用性。C28x CPU的的组成结构如下 CPU Block用于程序存储器寻址、提取数据解码和执行指令8级流水线执行算术、逻辑和移位运算以及控制CPU寄存器、数据存储器和程序存储器之间的数据传输。 Emulation logic Block用于监测和控制DSP的各种部件和功能用于芯片Debug和Test。 Signals Block用于与提供一个CPU对外的接口连接到memory、外围设备对CPU和Emulation logic进行计时和控制显示CPU和仿真逻辑状态以及interrupts的应用。 浮点单元(FPU) C28x通过增加浮点处理器(FPU)——支持IEEE单精度浮点运算的寄存器和指令来扩展C28x原本定点CPU的功能。C28xFPU包含标准C28x寄存器集以及一组额外的浮点单元寄存器。额外的浮点单元寄存器如下 • 八个浮点Result寄存器RnH其中n0~7 • 浮点Status寄存器(STF) • 重复Block寄存器(RB) Tips除RB寄存器外所有浮点寄存器都采用shadowed技术。这种影子化技术可用于更高优先级任务的中断以实现浮点寄存器的快速上下文保存和恢复。 快速整数除法单元(FINTDIV) C28x CPU的快速整数除法单元(Fast Integer Division, FINTDIV)独特地支持三种类型的整数除法Truncated, Modulo, and Euclidean这些整数除法具有不同的数据类型大小16/16、32/16、32/32、64/32、64/64采用无符号或有符号格式。 • C语言天然支持Truncated整数除法/、% 算符。 • Modulo除法和Euclidean除法是更高效的控制算法并受C内在函数支持。 所有三种类型的整数除法都会产生商和余数分量具有可截断特性并在最少的系统周期内执行32/32除法为10个周期。此外C28x CPU的快速除法功能独特地支持浮点32位5个周期内和64位20个周期内除法的快速执行。 三角数学单元(TMU) 三角函数加速器(trigonometric math unit, TMU)利用现有的C28xFPU增加指令加速执行常见三角函数和下表中所列的算术运算以此来扩展C28xFPU的功能。 TMU已添加指数指令IEXP2F32和对数指令LOG2F32可支持计算浮点幂函数用于C2000 Digital Control Library中的非线性比例积分微分控制(NLPID)组件。添加的这两条指令可以将幂函数计算周期从使用library emulation时的典型300个周期减少到不到10个周期。 TipsTMU对现有指令、流水线和内存总线架构均未做任何更改。所有TMU指令都使用现有的FPU寄存器集R0H至R7H来执行运算。 VCRC单元 循环冗余校验(CRC)算法提供了一种简单的方法来验证大型数据块、通信数据包或代码段的数据完整性。C28xVCRC可执行8 位、16位、24位和32位的CRC。例如VCRC可以在10个系统周期内计算出10字节数据块的CRC。CRC Result寄存器包含当前CRC每次执行CRC指令时该CRC都会更新。 以下是VCRC的CRC计算逻辑使用的CRC多项式 • CRC8 多项式 0x07 • CRC16 多项式1 0x8005 • CRC16 多项式2 0x1021 • CRC24 多项式 0x5d6dcb • CRC32 多项式1 0x04c11db7 • CRC32 多项式2 0x1edc6f41 该模块可以在单个周期内为一个字节的数据计算CRC。CRC8、CRC16、CRC24和CRC32的CRC计算是按字节完成的而不是C28x内核计算CRC时读取完整的16位或32位数据以便与各种标准规定的按字节计算要求保持一致。 VCRC单元还允许用户提供自己多项式(1b-32b)来满足自定义CRC要求。使用自定义多项式时CRC执行时间会增加到三个系统周期。 CPU总线 CPU最大的作用就是寻址和读写数据。寻址就是ARAUAddress register arithmetic unit要干的事情即在Memory包括RAM、ROM和寄存器中找到当前想用的Address比如program space(program counter PC指针)、data space和register space中的某个地址。读写数据就是在这个Address上提取Bytes或者放入Bytes。这些操作都需要通过CPU总线来完成如下图所示 Address总线是传输Address的比如program space的22bit addressdata space的32bit addressregister space的映射地址。 Data总线是传输Bytes的比如program space的程序指令data space的变量值register space的寄存器值。 C28x的6条独立CPU总线互相之间的工作关系如下表所示 Tips上述6条总线是独立的所以可以同时运行互不影响。但是PAB和DWDB这两个总线是复用的比如Read program和Write program这两件事都需要用PAB总线那么这两件事就不能同时执行需要先执行一个然后再执行另一个。DWDB也同理。 指令流水线 C28x每条指令的执行都要经过8个独立的阶段形成一个指令流水线pipeline。在任何时刻最多可以有8条指令处于运行状态这8条指令都处于不同的运行阶段。如下图所示 Fetch 1 (F1)从Memory抓取指令的第一步CPU在program address bus上发出指令所在的地址22-bit Fetch 2 (F2)从Memory抓取指令的第二步CPU在program read data bus上获取指令内容32-bit Decode 1 (D1)指令解码第一步识别和判定指令是否合法 Decode 2 (D2)指令解码第二步加载到指令寄存器中完成解码 Read 1 (R1)从Memory抓取Bytes的第一步CPU在data read address bus上发出Bytes所在的地址32-bit Read 2 (R2)从Memory抓取Bytes的第二步CPU在data read data bus上获取Bytes内容32-bit Execute (E)运行指令CPU运行各种原始的multiplier、shifter、logic和ALU操作把运算结果写入CPU的result寄存区 Write (W)向Memory中写入BytesCPU在data write address bus上发出Bytes所在的地址32-bit在data write data bus上发出Bytes内容32-bit。 Tip1指令不同阶段的读写可能会对同一位置进行操作但流水线的保护机制会根据需要暂停某些指令以确保对同一位置的读写按照编程顺序正确进行。 Tip2一旦指令到达Decode 2阶段即使有中断发生也会先把这条指令运行到最后阶段完成。 Tip3不同的指令会有不一样的执行过程上述8个运行阶段不是一定都要运行有的指令只需要运行其中的几个。 总结 以上就是本人在研发中使用嵌入式处理器的C28x内核时一些个人理解和分析的总结主要介绍了C28x内核的工作原理展示了具体的使用方法并对比分析了它的特点和适用场景。 后续还会分享另外几个最近解锁的嵌入式处理器新技能欢迎评论区留言、点赞、收藏和关注这些鼓励和支持都将成文本人持续分享的动力。 另外上述例程使用的Demo工程可以到笔者的主页查找和下载。 参考资料 TMS320F28003x Real-Time Microcontrollers datasheet.pdf 版权声明原创文章转载和引用请注明出处和链接侵权必究