Microblaze优化选项

本文详细介绍了Microblaze处理器的配置选项,包括预定义配置如实时、应用和频率优化模式,以及实现优化中的性能、面积和频率选项,它们与流水线级数密切相关。此外,讨论了高速缓存、桶形移位器、浮点运算单元等特性对性能的影响,强调了在多任务系统中启用额外MSR指令的性能提升作用。
摘要由CSDN通过智能技术生成

Microblaze提供了一些优化选项,正确理解这些选项的含义以及作用对于开发过程有很多帮助,本文主要总结介绍Microblaze Configuration Wizard中的选项内容

预定义配置

根据具体使用场景的不同,Microblaze提供了一些预定义的配置选项供用户选择

  • Microcontroller Preset

  • Real-time Preset

  • Application Preset

  • Minimum Area

  • Maximum Performance

  • Maximum Frequency

  • Linux with MMU

  • Low-end Linux with MMU

  • Typical

  • Frequency Optimized

这些选项实际上是Microblaze在频率、面积、性能这几个指标不同侧重情况下,对各个配置项的组合。选择Current Settings即为自定义模式

Implementation Optimization

该选项可选以下3种:

  • Performance

  • Area

  • Frequency

这个选项非常重要,它与Microblaze的流水线级数对应

  • 3级流水线:Area

  • 5级流水线:Performance

  • 8级流水线:Frequency

三级流水线

三级流水线对应Area,使用了最小化的硬件花费,只有取址(Fetch)、译码(Decode)和执行(Execute)

 三级流水线没有数据阻塞,只有控制流程阻塞、多指令结构性阻塞和访问较慢的内存、从较慢的内存取址等情况。多周期的指令类别有桶形移位器(barrel shift)、乘法器(multiply)、除法器(divide)和浮点指令

五级流水线

五级流水线对应Performance,最大化性能考量,包括取址(Fetch,IF)、译码(Decode OF)、执行(Execute,EX)、内存访问(Access Memory,MEM)和写回(Writeback,WB)

 

五级流水线存在以下两种数据阻塞的情况

  • OF指令需要EX指令的结果作为源操作数。EX指令类别为加载、存储、桶形移位器、乘法器、触发器和浮点运算。这些会导致1-2周期的阻塞

  • OF指令需要MEM指令的结果作为源操作数。MEM指令类别包括加载、乘法器和浮点运算。这些会导致1个周期的阻塞

多周期指令有除法器和浮点运算

八级流水线

八级流水线对应Frequency,用于最大化频率,包括取址(Fetch,IF)、译码(Decode OF)、执行(Execute,EX)、内存访问0(Access Memory 0,M0)、内存访问1(Access Memory 1,M1)、内存访问2(Access Memory 2,M2)、内存访问3(Access Memory 3,M3)和写回(Writeback,WB)

 

八级流水线存在以下四种数据阻塞的情况

  • OF指令需要EX指令的结果作为源操作数。EX包括加载、存储、桶形移位器、乘法器、除法器和浮点运算,会导致1-5个周期的阻塞

  • OF指令需要M0指令的结果作为源操作数。M0包括加载、乘法器、除法器和浮点运算,会导致1-4周期的阻塞

  • OF指令需要M1或M2指令的结果作为源操作数。M1或M2包括加载、除法器和浮点运算,会导致1-3或1-2周期的阻塞

  • OF指令需要M3指令的结果作为源操作数。M3包括加载和浮点运算,会导致1周期的阻塞

在额外的多周期指令种,存在3种情况的结构性阻塞

  • OF中的指令是流指令,EX中的指令是流、加载、存储、除法或浮点指令,并实现了相应的异常,这导致一个1周期的阻塞

  • OF中的指令是流指令,M0、M1、M2或M3中的指令是装载、存储、除法或浮点指令,并实现了相应的异常,这导致一个1周期的阻塞

  • M0中的指令是加载或存储指令,M1、M2或M3中的指令是加载、存储、除法或浮点指令,并实现了相应的异常,这导致一个1周期的阻塞

多周期指令分为分割指令和浮点指令FDIV, FINT和FSQRT

Use Instruction and Data Caches

使用外部存储器时,激活高速缓存,可以显著提高性能,可以降低外部慢速设备访问的使用量

Enable Barrel Shifter

使能硬件桶形移位器(Barrel Shifter),可以提高程序在移位操作时的性能。当该选项使能时,编译器可以自动的选择使用bsrlbsrabsllbsrlibsraibslli等汇编指令来优化加速移位操作

Enable Floating Point Unit

浮点运算单元能够提升float类型数据进行运算时的效率,Microblaze的FPU遵循了IEEE 754-1985标准,支持加、减、乘、除、比较、转换和平方根运算。编译器会自动根据系统选择的FPU类型使用汇编浮点指令优化浮点运算

Enable Integer Multiplier

使用一个硬件乘法器,可以提升程序在乘法运算时的效率

Enable Integer Divider

使能整型除法器,可以使用idiv和idivu指令,提升除法运算效率

Enable Additional Machine Status Registers Instructions

使能MSR寄存器指令msrsetmsrclr,用于设置和清MSR的位。MSR包含了处理器的控制和状态位,读取该寄存器时bit[29]会被复制到bit[0]作为近进位复制。对MSR进行读写有两种方式,一种是使用MFSMTS指令,另一种是使用msrsetmsrclr。当使用msrsetmsrclr进行写时,进位立即生效,其余位在一个时钟周期后生效。当使用MTS写时,所有位都在一个时钟周期后生效。程序运行会非常频繁的使用MSR,因此使能该选项可以很大程度的提升性能

例如在使用FreeRTOS时,systick或者消息队列中会频繁调用microblaze_enable_interruptsdisable_enable_interrupts函数,这两个函数是汇编函数,例如microblaze_enable_interrupts函数的定义如下

	.text
	.globl	microblaze_enable_interrupts
	.ent	microblaze_enable_interrupts
	.align	2
microblaze_enable_interrupts:
#if XPAR_MICROBLAZE_USE_MSR_INSTR == 1
	rtsd	r15, 8
	msrset  r0, 0x2
#else /*XPAR_MICROBLAZE_USE_MSR_INSTR == 1*/
	#Read the MSR register
	mfs	r12, rmsr
	#Set the interrupt enable bit
	ori	r12, r12, 0x2
	#Save the MSR register
	mts	rmsr, r12
	#Return
	rtsd	r15, 8
	nop
#endif /*XPAR_MICROBLAZE_USE_MSR_INSTR == 1*/
	.end	microblaze_enable_interrupts

可以看到,如果定义了MSR_INSTR,使能中断只有两条指令完成,否则需要5条指令。因此开启额外MSR指令能够在多任务系统任务切换和上下文切换方面提升性能

Enable Pattern Comparator

使能模式比较器,可以使用pcmpbfpcmpeqpcmpne指令,提升程序在进行比较时的性能。编译器自动进行指令转换

Enable Reversed Load/Store and Swap Instructions

启用反向加载/存储和交换指令,可以使用lburlhurlwrsbrshrswrswapbswawph指令。反向加载/存储指令可以以相反的字节顺序读写数据,交换指令可以在寄存器中交换字节和字。这些指令在处理网络字节序(大端)和Microblaze字节序(小端)时可以提升性能

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wei.Studio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值