【研发日记】嵌入式处理器技能解锁(三)——TI C2000 DSP的C28x内核

文章目录
前言
背景介绍
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的功能。C28x+FPU,包含标准C28x寄存器集以及一组额外的浮点单元寄存器。额外的浮点单元寄存器如下:
• 八个浮点Result寄存器,RnH(其中n=0~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),利用现有的C28x+FPU增加指令,加速执行常见三角函数和下表中所列的算术运算,以此来扩展C28x+FPU的功能。

TMU已添加指数指令IEXP2F32和对数指令LOG2F32,可支持计算浮点幂函数,用于C2000 Digital Control Library中的非线性比例积分微分控制(NLPID)组件。添加的这两条指令,可以将幂函数计算周期,从使用library emulation时的典型300个周期减少到不到10个周期。
Tips:TMU对现有指令、流水线和内存总线架构均未做任何更改。所有TMU指令都使用现有的FPU寄存器集(R0H至R7H)来执行运算。
VCRC单元
循环冗余校验(CRC)算法提供了一种简单的方法来验证大型数据块、通信数据包或代码段的数据完整性。C28x+VCRC可执行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最大的作用就是寻址和读写数据。寻址就是ARAU(Address 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 address,data space的32bit address,register 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中写入Bytes,CPU在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
版权声明,原创文章,转载和引用请注明出处和链接,侵权必究!

相关文章:
【研发日记】嵌入式处理器技能解锁(三)——TI C2000 DSP的C28x内核
文章目录 前言 背景介绍 C28x内核 浮点单元(FPU) 快速整数除法单元(FINTDIV) 三角数学单元(TMU) VCRC单元 CPU总线 指令流水线 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解…...
LeetCode.27.移除元素
题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以…...
redis面试(十二)可重入锁总结
可重入锁总结 从实现原理以及源码的层面,真正剖析和了解到了redis分布式锁的企业级的实现,这个分布式锁实现的还是非常漂亮的,麻雀虽小,五脏俱全,分布式的可重入锁,总结一下流程 (1࿰…...
软件测试知识点3
063、一份测试计划应该包括哪些内容? 背景、项目简介、目的、测试范围、测试策略、人员分工、资源要求、进度计划、参考文档、常用术语、提交文档、风险分析。 065、如何定位测试用例的作用? 组织性:编写、组织性、功能覆盖、重复性、跟踪、测试确认 066、什么…...
WPF Treeview开启虚拟化后如何找到TreeViewItem
用VirtualizingStackPanel的BringIndexIntoViewPublic方法就好,没必要像微软给的例子那样还要继承一个VirtualizingStackPanel /// <summary> /// Recursively search for an item in this subtree. /// </summary> /// <param name"container…...
给python初学者的一些建议
写在开篇 关于Python,可以这么说,这几年借着数据科学、机器学习与人工智能的东风,Python 老树开新花,在风口浪尖上居高不下。 Python 之所以这么受大家的青睐,是因为它语言简洁,上手容易,让非…...
【Python学习手册(第四版)】学习笔记17-作用域
个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文介绍Python作用域,介绍了变量名解析的LEGB原则,以及内置作用域,全局作用域global语句,嵌套作用域及nonlocal语…...
大语言模型(LLM)文本预处理实战
大语言模型(LLM)文本预处理实战 文章目录 大语言模型(LLM)文本预处理实战2.1 理解词嵌入2.2 文本分词2.3 将 token 转换为 token ID2.4 添加特殊上下文 token2.5 字节对编码 (BytePair Encoding, BPE)2.6 使用滑动窗口进行数据采样…...
宠物健康新守护:智能听诊器的家庭应用
宠物已成为我们情感的寄托和生活的一部分,为宠物的健康守护带来了科技的温度。 科技与关怀结合 这款智能听诊器,以其科技感和关怀精神,为宠物的健康监测提供了全新的视角。 家庭友好设计:考虑到家庭使用环境,智能听…...
六、go函数
函数在任何语言中并不难理解,但是不论是有几年开发经验的人,真正想要写好一个函数并不是那么容易的 1、go语言中函数结构 func main() {fmt.Println(isEven(2)) } func isEven(x int) bool {return x%2 0 }(这里我写了一个简单的判断是否是…...
高原型垂直起降高速无人机技术详解
1. 技术概述 高原型垂直起降高速无人机(High-Altitude Vertical Take-off and Landing High-Speed Unmanned Aerial Vehicle, HAVTHS UAV)是针对高原复杂环境设计的一种先进无人机系统。它结合了垂直起降的灵活性与高速飞行的能力,能够克服高…...
Selenium + Python 自动化测试10(unittest概念)
我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 上几篇我们讨论了元素的定位方法、操作方法以及一些特殊元素的操作。 在实际的测试项目组中每个模块会写多条案例,如第一条用例那里我们的登录。登录的话就可以有多…...
大数据-67 Kafka 高级特性 分区 分配策略 Ranger、RoundRobin、Sticky、自定义分区器
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
深度学习与图像修复:ADetailer插件在Stable Diffusion中的应用
文章目录 引言ADetailer插件介绍插件安装常用模型控制提示词参数配置参数详解 实践建议 示例插件的对比:1. ADetailer插件2. Photoshop插件(如Nik Collection)3. GIMP插件(如GMIC)4. Affinity Photo插件 结语 引言 无…...
【Pytorch】topk函数
topk 是 PyTorch 中的一个函数,用于从张量中选取最大(或最小)的 k 个元素及其对应的索引。其定义如下: values, indices torch.topk(input, k, dimNone, largestTrue, sortedTrue, *, outNone)参数说明 input (Tensor): 输入张…...
使用mybatis注解和xml映射执行javaWeb中增删改查等操作
Mapper接口 使用注解执行SQL语句操作和相应的Java抽象类(对于简单的增删改查使用注解) Mapper public interface EmpMapper {// 根据id删除员工信息Delete("delete from mybatis.emp where id#{id}")public int EmpDelete(Integer id);// 查…...
SpringBoot3 响应式编程
Spring Boot 3 中的响应式编程是一个重要的特性,它允许开发者构建非阻塞、异步和基于事件的应用程序,这对于处理高并发和实时数据流的应用场景尤为重要。以下是对Spring Boot 3响应式编程的详细解析: 一、响应式编程概述 响应式编程是一种编…...
【C++ 面试 - 基础题】每日 3 题(二)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...
Modelica建模,Modelica语言的学习,技术调研工作
Modelica建模,Modelica语言的学习,技术调研工作 参考资料: 苏州同元软控信息技术有限公司 - 同元 Modelica 再探冷却 modelica学习-CSDN博客 1、 Modelica简介 Modelica是由Modelica协会维护、免费开放的物理系统面向对象的统一建模语言规…...
Oracle数据字典之——v$lock 和v$locked_object
v$lock视图 v$lock视图列出当前系统持有的或正在申请的所有锁的情况,其主要字段说明如下: 11g如下: 字段名称类型说明ADDRRAW(8)锁定状态对象的地址KADDRRAW(8)锁的地址SIDNUMBER会话(SESSION)标识;TYPE…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
