当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]ARM体系结构允许通过增加协处理器来扩展指令集。最常用的协处理器是用于控制片上功能的系统协处理器。例如控制Cache和存储管理单元的CP15寄存器。此外,还有用于浮点运算的浮点ARM协处理器,各生产商还可以根据需要开发自己的专用协处理器。

9.1协处理器指令

ARM体系结构允许通过增加协处理器来扩展指令集。最常用的协处理器是用于控制片上功能的系统协处理器。例如控制Cache和存储管理单元的CP15寄存器。此外,还有用于浮点运算的浮点ARM协处理器,各生产商还可以根据需要开发自己的专用协处理器。

ARM协处理器具有自己专用的寄存器组,它们的状态由控制ARM状态的指令的镜像指令来控制。

程序的控制流指令由ARM处理器来处理,所有协处理器指令只能同数据处理和数据传送有关。按照RISC的Load/Store体系原则,数据的处理和传送指令是被清楚分开的,所以它们有不同的指令格式。

ARM处理器支持16个协处理器,在程序执行过程中,每个协处理器忽略ARM和其他协处理器指令。当一个协处理器硬件不能执行属于它的协处理器指令时,将产生一个未定义指令异常中断,在该异常中断处理过程中,可以通过软件仿真该硬件操作。如果,一个系统中不包含向量浮点运算器,则可以选择浮点运算软件包来支持向量浮点运算。

ARM协处理器可以部分地执行一条指令,而后产生中断。如除法运算除数为0和溢出,这样可以更好地处理运行时产生(run-time-generated)的异常。但是,指令的部分执行是由协处理器完成的,此过程对ARM来说是透明的。当ARM处理器重新获得执行时,它将从产生异常的指令处开始执行。

对某一个协处理器来说,并不一定用到协处理器指令中的所有的域。具体协处理器如何定义和操作完全由协处理器的制造商自己决定,因此ARM协处理器指令中的协处理器寄存器的标识符以及操作助记符也有各种不同的实现定义。程序员可以通过宏定义这些指令的语法格式。

ARM协处理器指令分以下3类。

·协处理器数据操作。协处理器数据操作完全是协处理器内部操作,它完成协处理器寄存器的状态改变。如浮点加运算,在浮点协处理器中两个寄存器相加,结果放在第3个寄存器中。这类指令包括CDP指令。

·协处理器数据传送指令。这类指令从寄存器读取数据装入协处理器寄存器,或将协处理器寄存器的数据装入存储器。因为协处理器可以支持自己的数据类型,所以每个寄存器传送的字数与协处理器有关。ARM处理器产生存储器地址,但传送的字节由协处理器控制。这类指令包括LDC和STC指令。

·协处理器寄存器传送指令。在某些情况下,需要ARM处理器和协处理器之间传送数据。如一个浮点运算协处理器,FIX指令从协处理器寄存器取得浮点数据,将它转换为整数,并将整数传送到ARM寄存器中。经常需要用浮点比较产生的结果来影响控制流,因此,比较结果必须传送到ARM的CPSR中。这类协处理器寄存器传送指令包括MCR和MRC。

表9.1列出了所有协处理器处理指令。

表9.1 协处理器指令

助记符

操作

CDP

协处理器数据操作

LDC

装载协处理器寄存器

MCR

从ARM寄存器传数据到协处理器寄存器

MRC

从协处理器寄存器传数据到ARM寄存器

STC

存储协处理器寄存器

9.1.1协处理器数据操作指令CDP1.指令编码格式

此指令用于控制数据在协处理器寄存器内部的操作。通常情况下该指令由协处理器完成,如果协处理器不能成功地执行该操作,将产生未定义指令异常。

指令的编码格式如图9.1所示。

图9.1CDP指令编码格式

2.指令的语法格式

CDP{<cond>}<coproc>,<opcode_1>,<CRd>,<CRn>,<CRm>,<opcode_2>

CDP2<coproc>,<opcode_1>,<CRd>,<CRn>,<CRm>,<opcode_2>

①<cond>

为指令编码中的条件域。它指示指令在什么条件下执行。当<cond>忽略时,指令为无条件执行(cond=AL(Alway))。

②CDP2

协处理器数据操作指令CDP的一种特殊格式。这种格式中指定编码的条件域<cond>为ob1111。这种设计为协处理器的设计者提供了一个灵活的扩展空间。此指令只能无条件执行。

③<coproc>

指定协处理器的编号,标准的协处理器的名字为p0、p1、…、p15。

④<opcode_1>

指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。

⑤<CRd>

作为目标寄存器的协处理器寄存器。

⑥<CRn>

确定包含第一个操作数的协处理器寄存器。

⑦<CRm>

确定包含第二个操作数的协处理器寄存器。

⑧<opcode_2>

指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。通常与<opcode_1>配合使用。

3.指令操作的伪代码

指令操作的伪代码如下面程序段所示。

IfConditionPassed{cond}then

Coprocessor[cp_num]-dependentoperation

注意

CDP指令通常被用来初始化协处理器。比如在作浮点运算操作时,使用CDP指令初始化协处理器寄存器。

4.指令举例

对协处理器P15进行操作。第一操作数opcode_1=2,第二操作数opcode_2=4,目标寄存器为协处理器寄存器c12,源寄存器分别为协处理器寄存器c10和c3。

CDPp15,2,c12,c10,c3,4

5.指令的使用

·CDP指令一般用于初始化协处理器,对ARM寄存器和存储器没有任何影响。

·指令的编码格式中,bits[31∶24]、bits[11∶8]和bit[4]为ARM体系结构定义。其他域由各生产商定义。

·硬件协处理器支持与否完全由生产商定义,某款ARM芯片中,是否支持协处理器或支持哪个协处理器与ARM版本无关。生产商可以选择实现部分协处理器指令或者完全不支持协处理器。

9.1.2协处理器数据读取指令LDC1.指令编码格式

LDC(LoadCoprocessor)指令通过一定的寻址模式从一系列连续的内存单元将数据读取到协处理器的寄存器中。如果协处理器不能成功地执行操作,将产生未定义的指令异常中断。

指令的编码格式如图9.2所示。

图9.2LDC指令编码格式

2.指令的语法格式

LDC{<cond>}{L}<coproc>,<CRd>,<addressing_mode>

LDC2{L}<coproc>,<CRd>,<addressing_mode>

①<cond>

为指令编码中的条件域。它指示指令在什么条件下执行。当<cond>忽略时,指令为无条件执行(cond=AL(Alway))。

②LDC2

协处理器数据读取指令LDC的一种特殊格式。这种格式中指定编码的条件域<cond>为ob1111。这种设计为协处理器的设计者提供了一个灵活的扩展空间。此指令只能无条件执行。

③<coproc>

指定协处理器的编号,标准的协处理器的名字为p0、p1、…、p15。

④L

长读取操作指示域。设置指令编码格式中的Nbit(bit[22]),如果该位设置为1,说明指令是一个长读取指令;该位为0,说明指令为短读取指令。该指令常用于双精度数据传送。

⑤<CRd>

确定协处理器目的寄存器。

⑥<addressing_mode>

确定指令的寻址方式。它将指定指令编码格式中的P、U、Rn、W和8_bit_word_offset域。

3.指令操作的伪代码

指令操作的伪代码如下面程序段所示。

IfConditionPassed{cond}then

Address=start_address

loadMemory[address,4]forCoprocess[cp_num]

while{NotFinished{Conprocess[cp_num]}}

address=address+4

loadMemory[address,4]forCoprocessor[cp_num]

assertaddress==end_address

4.指令举例

(1)将数据从内存传送到协处理器p6寄存器c1中,使用寄存器寻址模式,将内存地址放到ARM寄存器r4中。

LDCp6,CR1,[r4]

(2)将数据从内存传送到协处理器p6寄存器c4中,使用寄存器变址寻址。

LDCp6,CR4,[r2,#4]

5.指令的使用

·指令的编码格式中,bits[31∶23]、bits[21∶16]和bits[11∶0]为ARM体系结构定义。其他域由各生产商定义。

·协处理器数据读取指令忽略地址后两位。如果系统中定义了系统控制协处理器,而且地址对齐检测使能打开,当地址bits[1∶0]!=0b00时,产生地址对齐异常。

·硬件协处理器支持与否完全由生产商定义,某款ARM芯片中,是否支持协处理器或支持哪个协处理器与ARM版本无关。生产商可以选择实现部分协处理器指令或者完全不支持协处理器。

·指令中字的传送数目由协处理器控制。ARM将连续产生后续地址,直到协处理器指示传送应该结束。在数据传送过程中,ARM将不影响中断请求,所以协处理器设计者应该注意不应因为传送非常长的数据而损坏系统的中断响应时间。

9.1.3协处理器数据写入指令STC1.指令编码格式

STC(StoreCoprocessor)指令通过一定的寻址模式将协处理器寄存器中的数据存储到一系列连续的内存单元中。如果协处理器不能成功地执行操作,将产生未定义的指令异常中断。

指令的编码格式如图9.3所示。

图9.3STC指令编码格式

2.指令的语法格式

STC{<cond>}{L}<coproc>,<CRd>,<addressing_mode>

STC2{L}<coproc>,<CRd>,<addressing_mode>

①<cond>

为指令编码中的条件域。它指示指令在什么条件下执行。当<cond>忽略时,指令为无条件执行(cond=AL(Alway))。

②STC2

协处理器数据写入指令STC的一种特殊格式。这种格式中指定编码的条件域<cond>为ob1111。这种设计为协处理器的设计者提供了一个灵活的扩展空间。此指令只能无条件执行。

③<coproc>

指定协处理器的编号,标准的协处理器的名字为p0、p1、…、p15。

④L

长写入操作指示域。设置指令编码格式中的Nbit(bit[22]),如果该位设置为1,说明指令是一个长写入指令;该位为0,说明指令为短写入指令。该指令常用于双精度数据传送。

⑤<CRd>

确定协处理器目的寄存器。

⑥<addressing_mode>

确定指令的寻址方式。它将指定指令编码格式中的P、U、Rn、W和8_bit_word_offset域。

3.指令操作的伪代码

指令操作的伪代码如下面程序段所示。

IfConditionPassed{cond}then

Address=start_address

Memory[address,4]=valuefromCoprocess[cp_num]

while{NotFinished{Conprocess[cp_num]}}

address=address+4

Memory[address,4]=valuefromCoprocessor[cp_num]

assertaddress==end_address

4.指令举例

(1)将协处理器p8和寄存器c8的数据写入存储器中。寻址模式采用后寄存器寻址变址模式,内存基地址放入ARM寄存器r2中。

STCp8,CR8,[r2,#4]!

(2)将协处理器p8和寄存器c9的数据写入存储器中。

STCp8,CR9,[r2],#-16

5.指令的使用

详见LDC指令。

9.1.4ARM寄存器到协处理器寄存器的数据传送指令MCR1.指令编码格式

ARM寄存器到协处理器寄存器的数据传送指令MCR(MovetoCoprocessorfromARMRegister)将ARM寄存器<Rd>的值传送到协处理器寄存器cp_num中。如果没有协处理器执行指定操作,将产生未定义指令异常。

指令的编码格式如图9.4所示。

图9.4MCR指令编码格式

2.指令的语法格式

MCR{<cond>}<coproc>,<opcode_1>,<Rd>,<CRn>,<CRm>{,<opcode_2>}

MCR2<coproc>,<opcode_1>,<Rd>,<CRn>,<CRm>{,<opcode_2>}

①<cond>

为指令编码中的条件域。它指示指令在什么条件下执行。当<cond>忽略时,指令为无条件执行(cond=AL(Alway))。

②MCR2

MCR2指令的一种特殊格式。这种格式中指定编码的条件域<cond>为ob1111。这种设计为协处理器的设计者提供了一个灵活的扩展空间。此指令只能无条件执行。

③<coproc>

指定协处理器的编号,标准的协处理器的名字为p0、p1、…、p15。

④<opcode_1>

指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。

⑤<Rd>

确定哪一个ARM寄存器的数值将被传送。如果程序计数器PC的值被传送,指令的执行结果不可预知。

⑥<CRn>

确定包含第一个操作数的协处理器寄存器。

⑦<CRm>

确定包含第二个操作数的协处理器寄存器。

⑧<opcode_2>

指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。通常与<opcode_1>配合使用。

3.指令操作的伪代码

指令操作的伪代码如下面程序段所示。

IfConditionPassed{cond}then

SendRdvaluetocoprocessor[cp_num]

4.指令举例

将ARM寄存器r7中的值传送到协处理器p14的寄存器c7中,第一操作数opcode_1=1,第二操作数opcode_2=6。

MCRp14,1,r7,c7,c12,6

5.指令的使用

·指令的编码格式中,bits[31∶24]、bit[20]、bits[15∶8]和bit[4]为ARM体系结构定义。其他域由各生产商定义。

·硬件协处理器支持与否完全由生产商定义,某款ARM芯片中,是否支持协处理器或支持哪个协处理器与ARM版本无关。生产商可以选择实现部分协处理器指令或者完全不支持协处理器。

9.1.5协处理器寄存器到ARM寄存器的数据传送指令MRC1.指令编码格式

协处理器寄存器到ARM寄存器的数据传送指令MRC(MovetoARMregisterfromCoprocessor)将协处理器cp_num的寄存器的值传送到ARM寄存器中。如果没有协处理器执行指定操作,将产生未定义指令异常。

指令的编码格式如图9.5所示。

图9.5MRC指令编码格式

2.指令的语法格式

MRC{<cond>}<coproc>,<opcode_1>,<Rd>,<CRn>,<CRm>{,<opcode_2>}

MRC2<coproc>,<opcode_1>,<Rd>,<CRn>,<CRm>{,<opcode_2>}

①<cond>

为指令编码中的条件域。它指示指令在什么条件下执行。当<cond>忽略时,指令为无条件执行(cond=AL(Alway))。

②MRC2

MRC2指令的一种特殊格式。这种格式中指定编码的条件域<cond>为ob1111。这种设计为协处理器的设计者提供了一个灵活的扩展空间。此指令只能无条件执行。

③<coproc>

指定协处理器的编号,标准的协处理器的名字为p0、p1、…、p15。

④<opcode_1>

指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。

⑤<Rd>

确定哪一个ARM寄存器接受协处理器传送的数值。如果程序计数器PC被用作目的寄存器,指令的执行结果不可预知。

⑥<CRn>

确定包含第一个操作数的协处理器寄存器。

⑦<CRm>

确定包含第二个操作数的协处理器寄存器。

⑧<opcode_2>

指定协处理器执行的操作码,确定哪一个协处理器指令将被执行。通常与<opcode_1>配合使用。

3.指令操作的伪代码

指令操作的伪代码如下面程序段所示。

IfConditionPassed{cond}then

Data=valuefromcoprocessor[cp_num]

IfRdisR15then

Nflag=data[31]

Zflag=data[30]

Cflag=data[29]

Vflag=data[28]

Else/*Rd≠R15*/

Rd=data

4.指令举例

协处理器源寄存器为c0和c2,目的寄存器为ARM寄存器r4,第一操作数opcode_1=5,第二操作数opcode_2=3。

MRCp15,5,r4,c0,c2,3

5.指令的使用

·如果目的寄存器为程序计数器r15,则程序状态字条件标准位根据传送数据的前4bit确定,后28bit被忽略。

·指令的编码格式中,bits[31∶24]、bit[20]、bits[15∶8]和bit[4]为ARM体系结构定义。其他域由各生产商定义。

·硬件协处理器支持与否完全由生产商定义,某款ARM芯片中,是否支持协处理器或支持哪个协处理器与ARM版本无关。生产商可以选择实现部分协处理器指令或者完全不支持协处理器。

·如果协处理器必须完成一些内部工作来准备一个32位数据向ARM传送(例如,浮点FIX操作必须将浮点值转换为等效的定点值),那么这些工作必须在协处理器提交传送前进行。因此,在准备数据时经常需要协处理器握手信号处于“忙-等待”状态。ARM可以在忙-等待时间内产生中断。如果它确实得以中断,那么它将暂停握手以服务中断。当它从中断服务程序返回时,将可能重试协处理器指令,但也可能不重试。例如,中断可能导致任务切换。无论哪种情况,协处理器必须给出一致结果,因此,在握手提交阶段之前的准备工作不允许改变处理器的可见状态。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭