
cpu中控制器的功能是什么
控制器是整个CPU的指挥控制中心,由指令寄存器IR(InstructionRegister)、程序计数器PC(ProgramCounter)和 *** 作控制器0C(OperationController)三个部件组成,对协调整个电脑有序工作极为重要。下面是我给大家整理的一些有关介绍,希望对大家有帮助!
cpu中控制器的功能简单介绍
(一) 运算器
1、 算术逻辑运算单元ALU(Arithmetic and Logic Unit)
ALU主要完成对二进制数据的定点算术运算(加减乘除)、逻辑运算(与或非异或)以及移位 *** 作。在某些CPU中还有专门用于处理移位 *** 作的移位器。
通常ALU由两个输入端和一个输出端。整数单元有时也称为IEU(Integer Execution Unit)。我们通常所说的“CPU是XX位的”就是指ALU所能处理的数据的位数。
2、 浮点运算单元FPU(Floating Point Unit)
FPU主要负责浮点运算和高精度整数运算。有些FPU还具有向量运算的功能,另外一些则有专门的向量处理单元。
3、通用寄存器组
通用寄存器组是一组最快的存储器,用来保存参加运算的 *** 作数和中间结果。
在通用寄存器的设计上,RISC与CISC有着很大的不同。CISC的寄存器通常很少,主要是受了当时硬件成本所限。比如x86指令集只有8个通用寄存器。所以,CISC的CPU执行是大多数时间是在访问存储器中的数据,而不是寄存器中的。这就拖慢了整个系统的速度。而RISC系统往往具有非常多的通用寄存器,并采用了重叠寄存器窗口和寄存器堆等技术使寄存器资源得到充分的利用。
对于x86指令集只支持8个通用寄存器的缺点,Intel和AMD的`最新CPU都采用了一种叫做“寄存器重命名”的技术,这种技术使x86CPU的寄存器可以突破8个的限制,达到32个甚至更多。不过,相对于RISC来说,这种技术的寄存器 *** 作要多出一个时钟周期,用来对寄存器进行重命名。
4、 专用寄存器
专用寄存器通常是一些状态寄存器,不能通过程序改变,由CPU自己控制,表明某种状态。
(二)控制器
运算器只能完成运算,而控制器用于控制着整个CPU的工作。
1、 指令控制器
指令控制器是控制器中相当重要的部分,它要完成取指令、分析指令等 *** 作,然后交给执行单元(ALU或FPU)来执行,同时还要形成下一条指令的地址。
2、 时序控制器
时序控制器的作用是为每条指令按时间顺序提供控制信号。时序控制器包括时钟发生器和倍频定义单元,其中时钟发生器由石英晶体振荡器发出非常稳定的脉冲信号,就是CPU的主频;而倍频定义单元则定义了CPU主频是存储器频率(总线频率)的几倍。
3、 总线控制器
总线控制器主要用于控制CPU的内外部总线,包括地址总线、数据总线、控制总线等等。
4、中断控制器
中断控制器用于控制各种各样的中断请求,并根据优先级的高低对中断请求进行排队,逐个交给CPU处理。
;CPU又叫中央处理器,是英文单词Central Processing Unit的缩写,负责对信息和数据进行运算和处理,并实现本身运行过程的自动化。在早期的计算机当中,CPU被分成了运算器和控 制器两个部分,后来由于电路集成度的提高,在微处理器问世时,就将它们都集成在一个芯片中了。需要智能控制、大量信息处理的地方就会 用到CPU。
CPU有通用CPU和嵌入式CPU,通用和嵌入式的分别,主要是根据应用模式的不同而划分的。通用CPU芯片的功能一般比较强,能运 行复杂的 *** 作系统和大型应用软件。嵌入式CPU在功能和性能上有很大的变化范围。随着集成度的提高,在嵌入式应用中,人们倾向于把CPU、 存储器和一些外围电路集成到一个芯片上,构成所谓的系统芯片(简称为SOC),而把SOC上的那个CPU成为CPU芯核。
现在,指令系统的优化设计有两个截然相反的方向。一个是增强指令的功能,设置一些功能复杂的指令,把一些原来有软件实现的常用功能 改用硬件的指令系统来实现,这种计算机成为复杂指令系统计算机。早期Intel的X86指令体系就是一种CISC指令结构。
RISC是Reduced Instruction Set Computer的缩写中文翻译成精简指令系统计算机,是八十年代发展起来的,尽量简化指令功能,只保留那些功能简单,能在 一个节拍内执行完成的指令,较复杂的功能用一段子程序来实现,这种计算机系统成为精简指令系统计算机。目前采用RISC体系结构的处理器 的芯片厂商有SUN、SGI、IBM的Power PC系列、DEC公司的Alpha系列、Motorola公司的龙珠和Power PC等等。
介绍一下 MIPS体系。
MIPS是世界上很流行的一种RISC处理器。MIPS的意思是"无内部互锁流水级的微处理器"(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。他最早是在80年代初期由斯坦福(Stanford)大学 Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品以为很多打计算机 公司采用构成各种工作站和计算机系统。
指令系统
要讲CPU,就必须先讲一下指令系统。 指令系统指的是一个CPU所能够处理的全部指
令的集合,是一个CPU的根本属性。比如我们现在所用的CPU都是采用x86指令集的,他们都是 同一类型的CPU,不管是PIII、Athlon或Joshua。我们也知道,世界上还有比PIII和Athlon快得多的CPU,比如Alpha,但它们不是用x86指令集 ,不能使用数量庞大的基于x86指令集的程序,如Windows98。之所以说指令系统是一个CPU的根本属性,是因为指令系统决定了一个CPU能够运 行什么样的程序。
所有采用高级语言编出的程序,都需要翻译(编译或解释)成为机器语言后才能运行,这些机器语言中 所包含的就是一条条的指令。
1、 指令的格式
一条指令一般包括两个部分: *** 作码和地址码。 *** 作码其实就是指令序列号,用来告诉CPU需要执行的是那一条指令。地址码则复杂一些,主要包括源 *** 作数地址、目的地址和下一条指令的地址 。在某些指令中,地址码可以部分或全部省略,比如一条空指令就只有 *** 作码而没有地址码。
举个例子吧,某个指令系统 的指令长度为32位, *** 作码长度为8位,地址长度也为8位,且第一条指令是加,第二条指令是减。当它收到一个 “00000010000001000000000100000110”的指令时,先取出它的前8位 *** 作码,即00000010,分析得出这是一个减法 *** 作,有3个地址,分别是 两个源 *** 作数地址和一个目的地址。于是,CPU就到内存地址00000100处取出被减数,到00000001处取出减数,送到ALU中进行减法运算,然后 把结果送到00000110处。
这只是一个相当简单化的例子,实际情况要复杂的多
2、 指令的分类与寻址 方式
一般说来,现在的指令系统有以下几种类型的指令:
(1)算术逻辑运算指令
算术逻辑运算 指令包括加减乘除等算术运算指令,以及与或非异或等逻辑运算指令。现在的指令系统还加入了一些十进制运算指令以及字符串运算指令等。
(2)浮点运算指令
用于对浮点数进行运算。浮点运算要大大复杂于整数运算,所以CPU中一般还会有专门负责浮点运 算的浮点运算单元。现在的浮点指令中一般还加入了向量指令,用于直接对矩阵进行运算,对于现在的多媒体和3D处理很有用。
(3)位 *** 作指令
学过C的人应该都知道C语言中有一组位 *** 作语句,相对应的,指令系统中也有一组位 *** 作指令,如左移一位右移 一位等。对于计算机内部以二进制不码表示的数据来说,这种 *** 作是非常简单快捷的。
(4)其他指令
上面三种都是 运算型指令,除此之外还有许多非运算的其他指令。这些指令包括:数据传送指令、堆栈 *** 作指令、转移类指令、输入输出指令和一些比较特 殊的指令,如特权指令、多处理器控制指令和等待、停机、空 *** 作等指令。
对于指令中的地址码,也会有许多不同的寻址 (编址)方式,主要有直接寻址,间接寻址,寄存器寻址,基址寻址,变址寻址等,某些复杂的指令系统会有几十种甚至更多的寻址方式。
3、 CISC与RISC
CISC,Complex Instruction Set Computer,复杂指令系统计算机。RISC,Reduced Instruction Set Computer,精简指令系统计算机。虽然这两个名词是针对计算机的,但下文我们仍然只对指令集进行研究。
(1)CISC 的产生、发展和现状
一开始,计算机的指令系统只有很少一些基本指令,而其他的复杂指令全靠软件编译时通过简单指令 的组合来实现。举个最简单的例子,一个a乘以b的 *** 作就可以转换为a个b相加来做,这样就用不着乘法指令了。当然,最早的指令系统就已经 有乘法指令了,这是为什么呢?因为用硬件实现乘法比加法组合来得快得多。
由于那时的计算机部件相当昂贵,而且速度 很慢,为了提高速度,越来越多的复杂指令被加入了指令系统中。但是,很快又有一个问题:一个指令系统的指令数是受指令 *** 作码的位数所 限制的,如果 *** 作码为8位,那么指令数最多为256条(2的8次方)。
那么怎么办呢?指令的宽度是很难增加的,聪明的设计师们又想出了 一种方案: *** 作码扩展。前面说过, *** 作码的后面跟的是地址码,而有些指令是用不着地址码或只用少量的地址码的。那么,就可以把 *** 作码 扩展到这些位置。
举个简单的例子,如果一个指令系统的 *** 作码为2位,那么可以有00、01、10、11四条不同的指令。现在 把11作为保留,把 *** 作码扩展到4位,那么就可以有00、01、10、1100、1101、1110、1111七条指令。其中1100、1101、1110、1111这四条指令 的地址码必须少两位。
然后,为了达到 *** 作码扩展的先决条件:减少地址码,设计师们又动足了脑筋,发明了各种各样的寻址方式,如基 址寻址、相对寻址等,用以最大限度的压缩地址码长度,为 *** 作码留出空间。
就这样,慢慢地,CISC指令系统就形成了, 大量的复杂指令、可变的指令长度、多种的寻址方式是CISC的特点,也是CISC的缺点:因为这些都大大增加了解码的难度,而在现在的高速硬 件发展下,复杂指令所带来的速度提升早已不及在解码上浪费点的时间。除了个人PC市场还在用x86指令集外,服务器以及更大的系统都早已不 用CISC了。x86仍然存在的唯一理由就是为了兼容大量的x86平台上的软件。
]:(2)RISC的产生、发展和现状
1975年,IBM的设计师John Cocke研究了当时的IBM370CISC系统,发现其中占总指令数仅20%的简单指令却在程序调用中占了80% ,而占指令数80%的复杂指令却只有20%的机会用到。由此,他提出了RISC的概念。
事实证明,RISC是成功的。80年代末,各公司的RISC CPU如雨后春笋般大量出现,占据了大量的市场。到了90年代,x86的CPU如pentium和k5也开始使用先进的RISC核心。
RISC 的最大特点是指令长度固定,指令格式种类少,寻址方式种类少,大多数是简单指令且都能在一个时钟周期内完成,易于设计超标量与流水线 ,寄存器数量多,大量 *** 作在寄存器之间进行。由于下文所讲的CPU核心大部分是讲RISC核心,所以这里就不多介绍了,对于RISC核心的设计下 面会详细谈到。
RISC目前正如日中天,Intel的Itanium也将最终抛弃x86而转向RISC结构。
二、CPU内核结构
好吧 ,下面来看看CPU。CPU内核主要分为两部分:运算器和控制器。
(一) 运算器
1、 算术逻辑运算单元ALU(Arithmetic and Logic Unit)
ALU主要完成对二进制数据的定点算术运算(加减乘除)、逻辑运算(与或非异或)以及移位 *** 作。在某些CPU中还 有专门用于处理移位 *** 作的移位器。
通常ALU由两个输入端和一个输出端。整数单元有时也称为IEU(Integer Execution Unit)。我们通常所说的“CPU是XX位的”就是指ALU所能处理的数据的位数。
2、 浮点运算单元FPU(Floating Point Unit)
FPU主要负责浮点运算和高精度整数运算。有些FPU还具有向量运算的功能,另外一些则有专门的向量处理单元。
3、通用寄存器组
通用寄存器组是一组最快的存储器,用来保存参加运算的 *** 作数和中间结果。
在通用寄存器的设计上,RISC与CISC有 着很大的不同。CISC的寄存器通常很少,主要是受了当时硬件成本所限。比如x86指令集只有8个通用寄存器。所以,CISC的CPU执行是大多数时 间是在访问存储器中的数据,而不是寄存器中的。这就拖慢了整个系统的速度。而RISC系统往往具有非常多的通用寄存器,并采用了重叠寄存 器窗口和寄存器堆等技术使寄存器资源得到充分的利用。
对于x86指令集只支持8个通用寄存器的缺点,Intel和AMD的最新 CPU都采用了一种叫做“寄存器重命名”的技术,这种技术使x86CPU的寄存器可以突破8个的限制,达到32个甚至更多。不过,相对于RISC来说 ,这种技术的寄存器 *** 作要多出一个时钟周期,用来对寄存器进行重命名。
4、 专用寄存器
专用寄存器通常是一些状 态寄存器,不能通过程序改变,由CPU自己控制,表明某种状态。
(二) 控制器
运算器只能完成运算,而控 制器用于控制着整个CPU的工作。
1、 指令控制器
指令控制器是控制器中相当重要的部分,它要完成取指令、分析指令等 *** 作,然 后交给执行单元(ALU或FPU)来执行,同时还要形成下一条指令的地址。
2、 时序控制器
时序控制器的作用是为每条 指令按时间顺序提供控制信号。时序控制器包括时钟发生器和倍频定义单元,其中时钟发生器由石英晶体振荡器发出非常稳定的脉冲信号,就 是CPU的主频;而倍频定义单元则定义了CPU主频是存储器频率(总线频率)的几倍。
3、 总线控制器
总线控制器主要用于控制CPU 的内外部总线,包括地址总线、数据总线、控制总线等等。
4、中断控制器
中断控制器用于控制各种各样的中断请求,并根据优先 级的高低对中断请求进行排队,逐个交给CPU处理。
(三) CPU核心的设计
CPU的性能是由什么决定的呢?单纯的一个ALU速度在一个CPU中并不起决定性作用,因为ALU的速度都差不多。而一个CPU的性能表现的决 定性因素就在于CPU内核的设计。
1、超标量(Superscalar)
既然无法大幅提高ALU的速度,有什么替代的方法呢?并行处理的方 法又一次产生了强大的作用。所谓的超标量CPU,就是只集成了多个ALU、多个FPU、多个译码器和多条流水线的CPU,以并行处理的方式来提高 性能。
超标量技术应该是很容易理解的,不过有一点需要注意,就是不要去管“超标量”之前的那个数字,比如“9路超标量”,不同 的厂商对于这个数字有着不同的定义,更多的这只是一种商业上的宣传手段。
2、流水线(Pipeline)
流水线是现代RISC核心的一 个重要设计,它极大地提高了性能。
对于一条具体的指令执行过程,通常可以分为五个部分:取指令,指令译码,取 *** 作数,运算 (ALU),写结果。其中前三步一般由指令控制器完成,后两步则由运算器完成。按照传统的方式,所有指令顺序执行,那么先是指令控制器工 作,完成第一条指令的前三步,然后运算器工作,完成后两步,在指令控制器工作,完成第二条指令的前三步,在是运算器,完成第二条指令 的后两部……很明显,当指令控制器工作是运算器基本上在休息,而当运算器在工作时指令控制器却在休息,造成了相当大的资源浪费。解决 方法很容易想到,当指令控制器完成了第一条指令的前三步后,直接开始第二条指令的 *** 作,运算单元也是。这样就形成了流水线系统,这是 一条2级流水线。
如果是一个超标量系统,假设有三个指令控制单元和两个运算单元,那么就可以在完成了第一条指令的取址工作后直 接开始第二条指令的取址,这时第一条指令在进行译码,然后第三条指令取址,第二条指令译码,第一条指令取 *** 作数……这样就是一个5级流 水线。很显然,5级流水线的平均理论速度是不用流水线的4倍。
流水线系统最大限度地利用了CPU资源,使每个部件在每个时钟周期都 工作,大大提高了效率。但是,流水线有两个非常大的问题:相关和转移。
在一个流水线系统中,如果第二条指令需要用到第一条指 令的结果,这种情况叫做相关。以上面哪个5级流水线为例,当第二条指令需要取 *** 作数时,第一条指令的运算还没有完成,如果这时第二条指 令就去取 *** 作数,就会得到错误的结果。所以,这时整条流水线不得不停顿下来,等待第一条指令的完成。这是很讨厌的问题,特别是对于比 较长的流水线,比如20级,这种停顿通常要损失十几个时钟周期。目前解决这个问题的方法是乱序执行。乱序执行的原理是在两条相关指令中 插入不相关的指令,使整条流水线顺畅。比如上面的例子中,开始执行第一条指令后直接开始执行第三条指令(假设第三条指令不相关),然 后才开始执行第二条指令,这样当第二条指令需要取 *** 作数时第一条指令刚好完成,而且第三条指令也快要完成了,整条流水线不会停顿。当 然,流水线的阻塞现象还是不能完全避免的,尤其是当相关指令非常多的时候。
另一个大问题是条件转移。在上面的例子中,如果第 一条指令是一个条件转移指令,那么系统就会不清楚下面应该执行那一条指令?这时就必须等第一条指令的判断结果出来才能执行第二条指令 。条件转移所造成的流水线停顿甚至比相关还要严重的多。所以,现在采用分支预测技术来处理转移问题。虽然我们的程序中充满着分支,而 且哪一条分支都是有可能的,但大多数情况下总是选择某一分支。比如一个循环的末尾是一个分支,除了最后一次我们需要跳出循环外,其他 的时候我们总是选择继续循环这条分支。根据这些原理,分支预测技术可以在没有得到结果之前预测下一条指令是什么,并执行它。现在的分 支预测技术能够达到90%以上的正确率,但是,一旦预测错误,CPU仍然不得不清理整条流水线并回到分支点。这将损失大量的时钟周期。所以 ,进一步提高分支预测的准确率也是正在研究的一个课题。
越是长的流水线,相关和转移两大问题也越严重,所以,流水线并不是越 长越好,超标量也不是越多越好,找到一个速度与效率的平衡点才是最重要的。
1、解码器(Decode Unit)
这是x86CPU才有的东西,它的作用是把长度不定的x86指令转换为长度固定的类似于RISC的指令,并交给RISC内核。解码分为硬件解码和微解码 ,对于简单的x86指令只要硬件解码即可,速度较快,而遇到复杂的x86指令则需要进行微解码,并把它分成若干条简单指令,速度较慢且很复 杂。好在这些复杂指令很少会用到。
Athlon也好,PIII也好,老式的CISC的x86指令集严重制约了他们的性能表现。
2、一级缓存 和二级缓存(Cache)
以及缓存和二级缓存是为了缓解较快的CPU与较慢的存储器之间的矛盾而产生的,以及缓存通常集成在CPU内核, 而二级缓存则是以OnDie或OnBoard的方式以较快于存储器的速度运行。对于一些大数据交换量的工作,CPU的Cache显得尤为重要。
Concerto是德州仪器(TI)推出的新型微控制器内核,其内部集成了TMC320C28x和ARM Cortex-M3双核心,在单一芯片内提供了独立的实时控制(real-time control)单元和通信(communication)单元。F28M35x是第一个基于Concerto内核的微处理器。
Concerto的通信单元基于工业标准的ARM Cortex-M3内核,集成了多种通信外围设备,如Earthnet 1588、USB OTG、CAN、UART、SSI、IIC和外部并行接口等。实时控制单元基于TI业界领先的32位C28x内核,集成了高精度的控制外设,包括具有异常保护、编码和捕获功能的 ePWM。C28-CPU还增加了VCU(Veterbi、Complex Math、CRC Unit)和FPU(Floating-Point Unit),显著提高了Veterbi、Complex、FFT和CRC算法的效率。
Concerto还集成了TMC320C28x内核和ARM Cortex-M3内核共享的高速模拟单元、RAM、片内电压调节器和时钟单元。
F28M35x(Concerto)微控制器特点:
1、 主单元(ARM Cortex-M3)
高达100MHz的时钟频率
多达512KB Flash(ECC),32KB RAM(ECC/Parity),64KB Shared RAM,2KB IPC Message RAM
5个通用非同步串行接口(UART),4个同步串行接口(SSI),2个IIC接口,USB-OTG + PHY,10/100 Earthnet 1588 MII,2 CAN接口,32通道DMA,外部并行接口(EPI)
CRC模块
4个通用定时,2个Watchdog 定时器
2个安全Zones(每个Zone 128位密码)
存储器小端终结(Little-Endian)
2、实时控制单元
高达150MHz时钟频率
多达512KB Flash(ECC),36KB RAM(ECC/Parity),64KB Shared RAM,2KB IPC Message RAM
IEEE 754浮点单元(FPU),Veterbi、Complex Math、CRC Unit(VCU)
串行通信接口(SCI),串行外设接口(SPI),IIC接口,6通道DMA
9个增强的PWM调制器模块(ePWM),18路输出(16路高分辨率输出)
6个增强的32位捕获模块(eCAP),3个增强的32位正交编码模块(eQEP)
多通道缓冲串口(McBSP)
1个128位密码安全Zone
3个32位定时器
存储器小端终结(Little-Endian)
3、时钟单元
支持内部/外部时钟
支持动态改变PLL
4、电源
12V数字电源,18V模拟电源,33V接口电源
5、内部处理器通信(IPC)
32个Handshaking 通道
4个通用IPC中断
可以通过IPC Message RAM 并列传输数据
6、多达72个可编程GPIO
7、模拟单元
2个12位ADC,多达20通道、288MSPS
4个采样保持器
多达6个带有10位D/A的比较器
片上温度传感器
PS2游戏机工作原理在整个PS2结构中我们如此关注于Emotion Engine是因为,与标准PC的CPU相比,Emotion Engine并不是通用处理器。PC的CPU是为了完成SPEC测试而设计的……当然,这么说刻薄了一点,是让应用程序代码的执行速度越快越好。不可避免地,由于应用程序代码的形式与功能五花八门,CPU必须有足够的兼容性以执行一个程序员所能写出来的各种稀奇古怪的东西。在一个PC系统中,通用性的CPU必须依赖于所添加的特殊硬件才能完成诸如图形加速,网络通信,音频处理等任务。 PS2则又有不同,它生来就是为了让一种程序的运行效果好到极致:3D游戏。虽然PS2也可以上网,收发email,或其它一些软件,但这些都排在第二位。PS2就是专为运行3D游戏而存在的,它所做的就是尽其所能地产生各种真的视听效果来营造一个虚拟的世界。几乎所有PS2的硬件都是为此而设计的。 那PS2如何生成3D图像和音响效果呢?下面我们来看PS2的主要部件构成: 由图可见,PS2主要分为4大部分。I/O Processor(简称IOP)控制所有的U,FireWire和手柄接口。当你在PS2上玩游戏的时候,IOP将手柄输入送给Emotion Engine(简称EE),从而由Emotion Engine去更新游戏场景。可以说,Emotion Engine是PS2的核心,是真正使PS2独一无二的关键部件。Emotion Engine主要控制以下两类运算: 几何运算(Geometry calculations):几何变形,几何变换等。 行为/世界模拟(Behavior/World simulation):敌方AI,两个物体间的磨擦,模拟生成海浪的高度等。 其他功能(Misc functions): 程序控制,管理等。 总而言之,Emotion Engine的任务就是产生display lists(一系列显示命令的序列)送给Graphics Synthesizer(PS2的图形加速卡,简称GS)。GS负责执行所有的标准视频加速函数,它的作用是将EE传来的display lists显示出来。最后,Sound Processor(即PS2的声卡)以AC-3和DTS输出3D数字音频信号 Emotion Engine基本构架 正如上文所提到的,Emotion Engine的主要输出是display list。生成这些display list需要进行大量的几何运算。比如说,你正在运行赛车游戏,在拐弯进入下一场景前得首先算出轮胎与地面之间的虚拟摩擦。又如第一视角射击游戏,必须执行敌方AI的路径查找代码,这样才能知道如何将其放入每一帧。在每一帧画面的背后都有如此多的要素影响到屏幕上的输出。所有这些几何运算,物理运算,AI及数据传输都由下列单元来执行: MIPS III CPU core Vector Unit (向量处理单元,共有两个,VU0 and VU1) Floating-point coprocessor (浮点协处理器,FPU) Image Processing Unit (一个增强型的MPEG2解码器,IPU) 10-channel DMA controller (十道DMA控制器) Graphics Interface unit (图形接口单元,GIF) RDRAM interface and I/O interface (连接RDRAM和IOP) 所有上述单元(除FPU之外)都与128位共享式内部总线相连。 可以看出,VU进一步分为两个独立的128-bit SIMD/VLIW向量处理单元,VU0,VU1。两者虽然在微结构上是相同的,但运行时各自扮演不同角色。Emotion Engine的设计者Toshiba公司并不认为使用三个通用硬件(CPU和两个VU)以满足所有需求是明智的。相反,Toshiba提升了设备应完成的功能,根据所需功能定制设备,最后将设备组织为逻辑单元。形象地说,这些逻辑单元就像是由各具天赋的成员合理搭配以发挥最大才华而组成的工作小组。我们接着就来看看这些小组和小组成员吧: CPU + FPU: 基本程序控制与管理等。 CPU + FPU + VU0: 行为与感情演绎,物理运算等。 VU1: 几何运算以产生display lists 通过GIF送Graphics Synth。 IPU: 图像解压。 CPU/FPU/VU0工作组 FPU和VU0是MIPS III CPU core的协处理器。这就是说,虽然三者整体上构成一个逻辑功能块,但CPU是主要控制设备,而FPU和VU0只是增强了它的功能。CPU/FPU/VU0工作组有共同的目标:感情演绎,物理运算,行为模仿等。 在PS2中有两个部件使这个工作组捆绑在一起且工作时关系密切。第一,它们运行时要相互通信:专用的128位协处理器总线将VU0和FPU与CPU直接相连,而不需要使用共享总线,这就极大的提升了处理速度。专用128位总线使CPU能直接访问VU0的寄存器,从而使VU0能完美地扮演MIPS III 协处理器的角色。 另一个重要部件是将CPU核心和VU0连在一起的Scratch Pad RAM。SPRAM是集成在CPU上的一块高速RAM,但CPU和VU0都可在此存数据。同时SPRAM也作为数据送128位总线前的临时存储区域。SPRAM就像是一块共享工作区,CPU和VU0就在这里生成数据,然后再发送到指定设备。 VU1/Graphics Synth工作组 另一个重要的工作组由VU1和Graphics Synthesizer(通过GIF通信)。正如VU0由专用总线与CPU核心相连,VU1也有自己的专用128位总线与GIF相连。但VU1和Graphics Synth并不像CPU/FPU/VU0工作组结合得那么紧。与CPU控制VU0相比,VU1和GS更像是平等的合作者。 CPU/FPU/VU0与VU1/GS的协同工作方式 即使是PS2的设计者们限定了各部件的功能,其整体设计还是富有d性的。你可以自由地在工作组之间分配程序的运行。比如说,CPU/FPU/VU0工作组正在生成display list,同时VU1在与之并行地进行图形几何处理,两者可同时将display list送入GIF。 或者,换一种方式,将CPU/FPU/VU0工作组作为VU1的前端处理器。CPU和VU0执行程序代码并从主存中读取数据,生成的虚拟世界信息交与VU1,并由VU1转化为display list。 这种d性为游戏开发者提供了最大的便利,使之能够从容地设计3D场景的生成与渲染过程,以产生各种各样的特殊程序效果。 Summary&conclusions 我想上述介绍已经基本上说明了PS2的工作原理。如果你需要了解进一步信息,请访问 >
点击 Create New Project 创建一个新项目。选择项目保存的路径,选择 Existing interpreter 加载本地的Python环境,不使用虚拟环境。点击Create即可完成项目的创建。
勘智K210是小编去年买的一块AIRV R3开发套件时接触的一款芯片。
具有双核64位处理器,并自带独立FPU;有一块KPU用于神经网络加速单元;还有一块APU用于语音数据处理。
这个跟C语言没什么关系,如果你特别想计算,可以用rdtsc算一下,不过没办法得到很精确的结果。
1、arctan计算的时间太短,对于80x87,就是几个周期的事情。
2、时间是不确定的,和你输入的数有少许关系。
3、时间是不确定的,和CPU缓存是否命中有关。
4、时间没办法准确测量,FPU(80x86)和CPU可以并行执行,你计算arctan是FPU计算计时是CPU,没办法很准确。
如何使用STM32F4的DSP库
我们平常所使用的CPU为定点CPU,意思是进行整点数值运算的CPU。当遇到形如11+11的浮点数运算时,定点CPU就遇到大难题了。对于32位单片机,利用Q化处理能发挥他本身的性能,但是精度和速度仍然不会提高很多。
现在设计出了一个新的CPU,叫做FPU,这个芯片专门处理浮点数的运算,这样处理器就将整点数和浮点数分开来处理,整点数交由定点CPU处理而浮点数交由FPU处理。我们见到过TI的DSP,还有STM32F4系列的带有DSP功能的微控制器。前者笔者没有用过,不作评论,而后者如果需要用到FPU的浮点运算功能,必须要进行一些必要的设置。
首先,由于浮点运算在FPU中进行,所以首先应该使能FPU运行。在system_init()中,定义__FPU_PRESENT和__FPU_USED
/
FPU
settings------------------------------------------------------------/
#if
(__FPU_PRESENT
==
1)&&
(__FPU_USED
==
1)
SCB->CPACR
|=
((3UL<<
102)|(3UL
<<
112));
/set
CP10
and
CP11
Full
Access
/
#endif
这样就使能了FPU。
对于上述改变,当程序中出现这种简单的加减乘除运算FPU就起作用了。但是对于复杂的如三角运算、开方运算等,我们就需要加入mathh头文件。但是如果单纯的加入他,那么Keil会自动调用内部的mathh,该头文件是针对ARM处理器的,专门用于定点CPU和标准算法(IEEE-754)。对于使用了FPU的STM32F4是没有任何作用的。所以,需要将mathh换成ST的库,即arm_mathh。在该头文件中,涉及到另一个文件core_cmxh(x=0、3、4),当然了,如同STM32F1系列一样,在工程中加入core_cm4h即可。
到这里,算是全部设置完毕,之差最后一步,调用!但是别小看了这一步,因为如果调用的不正确,全面的设置就白费了。在使用三角函数如sin()、cos()时不要直接写如上形式,因为他们函数的名字来自于mathh,所以你调用的仍旧是Keil库中的标准mathh。要使用arm_mathh中的arm_sin_f32()函数(见Line5780,原函数见DSP_Lib\Source\FastMathFunctions),可以看到他利用的是三次样条插值法快速求值(见Line263
/
Cubic
interpolation
process
/)。
注意一下例外函数,sqrt(),在arm_mathh中为arm_sqrt_f32()。使用他的时候需要同时开启#if(__FPU_USED
==
1)
&&
defined
(
__CC_ARM
)才行,切记!还可以发现开方函数还有q15和q31之分,我想他们的区别就是精度的问题,但是他们没有应用FPU来计算,说白了就是利用0x5f3759df这个数进行快速开方
以上就是关于cpu中控制器的功能是什么全部的内容,包括:cpu中控制器的功能是什么、请教一CPU有关的知识、基于F28M35芯片cortex-m3内核uart 通信,怎么编写程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)