在TI的产品线中,F2803x Piccolo™系列处理器主打低成本高效控制的路线。在数据计算部分,虽然有IQMath这个伪浮点数计算库,但是在平均最高60MHz的处理速度下,仍然后很多工作无法胜任。为了提高性价比,TI在其中引入了一个新的概念:控制率加速器(Control Law Accelerator, 简称CLA),主要功能是:在原有的CPU构架外,新增一个支持浮点运算的并行处理核心,实现“双核”控制。
什么时候需要用CLA?
1. 有大量的浮点数学运算,CPU在计算之余,还需要去响应各种外设的请求。
由于CLA是与原有的CPU并行进行计算,因此在原有的CPU中只需要设置好交换的数据并使能对应的CLA任务,CPU就可以去运行其它的任务,CLA运行完毕后会自动将规定好的数据传回。就好象对自己的助手说:“嘿,张三,帮我把这个表格按照公司的格式生成统计结果”,张三做完后会把数据送回来,而这段时间里你可以继续做其它的事情。
2. 采用IQMath库的时候,无法同时满足“精度”和“范围”的需求。
在IQMath库中,CPU将浮点运算转换成定点运算,因此有时无法在精度和范围两方面灵活互补,而CLA采用了浮点数,系统会自动对计算的精度和范围进行调整,达到最优的效果。
3. 程序需要对运行速度进行深度优化。
CLA运行的程序只能使用对应的汇编语言进行编程,用户可以在程序执行的流水线等待阶段插入不影响结果的语句,充分利用强大的计算能力,榨干处理器的每一点计算能力。
什么时候不适合使用CLA?
1. 有大量的判断、跳转语句(if…else… for… while…)需要运行。
由于CLA采用8级流水线结构,数据的计算能力非常强大,但是在判断和跳转语句中会造成后续的流水线失败,因此,大量的判断和跳转操作最好放在CPU中进行。
2. 需要访问复杂的外设。
CLA虽然和CPU共用大多数资源,但是前者只能访问PWM和ADC的有限的寄存器,其它的寄存器访问需要间接的向CPU请求,由此也可以看出来,CLA的存在,主要是为了强化基于PWM控制的运算,而CPU可以更轻松的控制丰富的外设。
CLA的有什么不足?
1. 与CPU共用内存资源
CLA没有自己的内存资源,因此必须从CPU中划分出对应的内存区域供CLA的程序和数据使用。
2. 没有只有乘法器和加法器
CLA只有乘法器和加法器,没有硬件除法器,因此除法运算需要的周期还是远大于乘法。
以上是关于选用CLA使用的一些简介。
10#:
通俗易懂,建议参考。
在TI的产品线中,F2803x Piccolo™系列处理器主打低成本高效控制的路线。在数据计算部分,虽然有IQMath这个伪浮点数计算库,但是在平均最高60MHz的处理速度下,仍然后很多工作无法胜任。为了提高性价比,TI在其中引入了一个新的概念:控制率加速器(Control Law Accelerator, 简称CLA),主要功能是:在原有的CPU构架外,新增一个支持浮点运算的并行处理核心,实现“双核”控制。
什么时候需要用CLA?
1. 有大量的浮点数学运算,CPU在计算之余,还需要去响应各种外设的请求。
由于CLA是与原有的CPU并行进行计算,因此在原有的CPU中只需要设置好交换的数据并使能对应的CLA任务,CPU就可以去运行其它的任务,CLA运行完毕后会自动将规定好的数据传回。就好象对自己的助手说:“嘿,张三,帮我把这个表格按照公司的格式生成统计结果”,张三做完后会把数据送回来,而这段时间里你可以继续做其它的事情。
2. 采用IQMath库的时候,无法同时满足“精度”和“范围”的需求。
在IQMath库中,CPU将浮点运算转换成定点运算,因此有时无法在精度和范围两方面灵活互补,而CLA采用了浮点数,系统会自动对计算的精度和范围进行调整,达到最优的效果。
3. 程序需要对运行速度进行深度优化。
CLA运行的程序只能使用对应的汇编语言进行编程,用户可以在程序执行的流水线等待阶段插入不影响结果的语句,充分利用强大的计算能力,榨干处理器的每一点计算能力。
什么时候不适合使用CLA?
1. 有大量的判断、跳转语句(if…else… for… while…)需要运行。
由于CLA采用8级流水线结构,数据的计算能力非常强大,但是在判断和跳转语句中会造成后续的流水线失败,因此,大量的判断和跳转操作最好放在CPU中进行。
2. 需要访问复杂的外设。
CLA虽然和CPU共用大多数资源,但是前者只能访问PWM和ADC的有限的寄存器,其它的寄存器访问需要间接的向CPU请求,由此也可以看出来,CLA的存在,主要是为了强化基于PWM控制的运算,而CPU可以更轻松的控制丰富的外设。
CLA的有什么不足?
1. 与CPU共用内存资源
CLA没有自己的内存资源,因此必须从CPU中划分出对应的内存区域供CLA的程序和数据使用。
2. 没有只有乘法器和加法器
CLA只有乘法器和加法器,没有硬件除法器,因此除法运算需要的周期还是远大于乘法。
以上是关于选用CLA使用的一些简介。
HH Y:
“什么时候不适合使用CLA?1. 有大量的判断、跳转语句(if…else… for… while…)需要运行。由于CLA采用8级流水线结构,数据的计算能力非常强大,但是在判断和跳转语句中会造成后续的流水线失败,……“
请教一下这段话的原始出处是哪里?“后续的流水线失败” 具体是什么意思? 英文提供的原始资料中我还没有看到说不建议在CLA中大量使用if语句,只有一个说法就是if语句不能嵌套超过7层。我写的一个程序,直接在CLA中控制两个电机运行,各种实时运动控制,还有位置反馈等等,if 语句非常多,嵌套层次也很深。实际运行结果表明,if 语句确实很占用空间和运行时间,实在不适合在CLA中使用,但是产品使用了很久,倒也不见得有什么大问题,不过确实存在一些小问题,只是各种可能原因,不敢说是哪里问题。不知这个“后续的流水线失败”有多大发生概率,发生后有什么后果?