历史上的今天
返回首页

历史上的今天

今天是:2024年09月11日(星期三)

正在发生

2020年09月11日 | ARMv8 通过设计简化软件移植详解

2020-09-11 来源:elecfans

Zynq® UltraScale+ ™ MPSoC 的核心 ARM®v8 架构使系统设计人员只需极少量修改就可以快速启用并运行现有的 ARMv7 代码。这种架构兼容性使设计人员可以提高生产力,加速产品上市进程,同时减少开发成本和工程设计投资。


简 介

软件设计人员运用基于新一代 ARMv8 架构的赛灵思 Zynq UltraScale+ MPSoC,不仅可以充分利用其先进性能,同时还能保持现有软件投资。


在美国计算机学会杂志《美国计算机协会通讯全集》的一篇专栏中,Steve Furber 指出,32 位 ARMv7 SoC(例如 Zynq UltraScale+ MPSoC)是最丰富和最受欢迎的 SoC 产品。 另一层隐含的意义是:ARMv7 SoC 的用户群很大,意味着软件—— 从简单的库、工具一直到完整操作系统—— 的用户群更为庞大。最近,随着向 64 位平台的移植持续加速,系统设计人员面临的问题在于:是花大力气将现有软件移植到新架构,还是简单地在新平台上重新开始开发软件。


任何一个具有一定规模的软件项目都需要投入大量的人力和软件架构。损失这些投资无论从短期还是长期看对项目都有毁灭性影响。因此,SoC 平台之间的软件移植会带来很大不确定性。移植不当很容易导致功能和性能不理想。在这个需要缩减设计预算和加速产品上市进程的时代,不允许有太多的不确定性。


赛灵思 Zynq 产品组合的最新成员 Zynq UltraScale+ MPSoC 采用新一代 ARMv8 架构,其精湛的设计可解决上述种种问题。ARMv8 采用设计人员熟悉的 CPU 架构和软件开发流程,使他们能够立即着手进行项目移植,且可将现有软件基础架构投资损失降至最低。


ARMv8 通过设计简化软件移植

Zynq UltraScale+ MPSoC 中的 ARMv8 架构与前代 ARMv7 架构兼容,同时可扩展支持最新特性与功能,因此能够从根本上简化软件移植。这样可创建熟悉的开发环境,让软件开发人员在移植过程伊始就能专注于代码本身。ARMv8 架构通过两种基本方式实现这种深度兼容:


ARMv8 架构支持两种不同执行状态:

AArch32,本机 32 位状态

AArch64,本机 64 位状态

AArch64 状态中的 64 位 ARMv8 指令集是 ARMv7 中指令集的自然延伸;AArch32 状态中的 32 位指令集直接兼容于 ARMv7 中的指令集。


AArch64 执行状态是本机 ARMv8 执行环境。它支持 ARMv8 架构的完整特性集与功能。相反,AArch32 执行状态提供与 ARMv7 环境的本机向后兼容。从软件执行角度来看,该状态为本机 ARMv7 环境。开发人员可选择让代码在编译时间内在哪种执行状态下运行。正常运行时间内,CPU 可在 AArch64 和 AArch32 这两种执行方式之间即时切换,以提供软件所要求的执行环境。这些上下文变化发生在异常边界,无需用户或软件设计人员进行输入;32 位代码和64 位代码高效并行执行。


当在 AArch64 状态下运行时,提供完整的 64 位 ARMv8 指令集。很大程度上,64 位 ARMv8 指令集是ARMv7 中指令集的延伸。只需对指令集在语法和行为上稍加修改,就能支持 32 位指令以及 32 位与 64 位混合寄存器。当在 AArch32 状态下运行时,处理器使用标准 32 位指令以及 32 位寄存器;软件设计人员处理指令集的方式与使用其他 ARMv7 处理器时相同。


使用代码库

低层裸机和 RTOS 代码开发人员是受低层处理器架构差别影响最多的人。当开始移植软件时,最佳方式是启用编译器中所有警告和错误消息,使用 ARMv8 编译器重新简单编译软件,不做修改。对这种方式下生成的警告或错误信息进行分析,这样软件开发团队可以确定哪些错误可以忽略,以及哪些需要在移植过程中加以注意。


ARMv8 编译器本机支持标准高级代码,例如 C 和 C++ ;当有合适的 ARMv8 板支持包 (BSP) 时,可编译和运行这类代码。相比之下,汇编代码时则需要特别注意如何使用代码。尽管 ARMv8 中依然存在诸多 ARMv7 汇编指令,但是它们的语法或行为存在微秒的变化。有些编码结构的编译或行为与 ARMv7 不同,其中包括:硬编码存储器位置( 适用任何软件移植项目)、对 ARMv7 协处理器( 例如 CP15) 和寄存器名称的访问,以及数据对齐。由ARM 发布的ARM® Cortex ™ -A 程序员ARMv8-A 使用指南 (DEN0024A) 对移植问题进行了详细的分析。


我们不妨看看容易移植的代码实例以及会产生问题的代码,这样有助于我们从概念上讨论架构之间的区别。


有的指令只需很少的操作就可从 ARMv7 转换为 ARMv8 语法,ADD 指令就是个很好的例子。ARMv7 中的寄存器的命名方案为 Rn,其中 n 是寄存器的个数。这样命名直接了当,因为 ARMv7 中所有寄存器都是 32 位。在 ARMv8 中,寄存器既可以是 32 位也可以是 64 位。32 位寄存器的命名方案为 Wn,而 64 位寄存器的命名方案则为 Xn。这样软件设计人员必须根据正在考虑的操作对象的尺寸,对现有的代码进行评估并适当地修改。见表 1。

移植 ADD 这样的指令不仅需要评估代码的最终用途,还要相应地改变寄存器名称。根据整个代码库的复杂程度,甚至可以自动执行移植。


其他情况下,例如访问 ARMv7 协处理器,可能需要更全面的代码分析。这种分析被认为是最佳方法,因为协处理器控制很多针对整个处理器的系统级属性和功能,而且控制协处理器是针对ARMv7 的常见操作。


当在 AArch64 状态下运行时,无法直接访问 CP15 寄存器,因为它们不在 ARMv8 架构中。当在 AArch32 状态下运行时,则可通过概念协处理器访问它们。这是由 AArch32 执行状态提供的结构,用于为原有的 32 位代码提供一致的执行环境。


例如,假设一个程序需要 Main ID Register —— 协处理器 CP15 中 c0 寄存器的一部分—— 的内容。使用 ARMv7 的专用 MRC 指令和 ARMv8 的 AArch32 执行状态访问这个值:

MRC p15, 0, r1, c0, c0, 0

直接在 AArch32 状态运行的原有代码无需修改;但移植到 AArch64 状态的代码需要根据新架构的要求进行调整。


在本机 AArch64 执行状态下,Main ID Register 值位于名为 MIDR_Eln 的新专用寄存器中。该寄存器可方便地通过系统寄存器访问指令来访问。


MRS:

MRS x1, MIDR_EL1

因此,开发人员应该知道这种专用操作和调用,以便相应地更改汇编指令。同样,这是单行修改,不会影响周围软件代码的整体结构。此外,还要注意源寄存器和目标寄存器都是本机 64 位寄存器,与 64 位架构的其余部分一致。


对基于 Linux 操作系统的软件而言,移植条件通常比 RTOS 或裸机代码更直接。底层的 Linux 操作系统可通过抽象消除很多底层硬件中的差异。大多数情况下,只需使用 64 位 Linux 编译器进行重新编译就可以让代码运行在 64 位 Linux 上。赛灵思 PetaLinux 工具可针对64 位 Linux 环境在本机中整合和重新编译代码,从而自动执行该过程。


其他情况下,开发人员可能需要使代码保持为 32 位二进制数。软件可能需要与只有 32 位形式的外部库链接;或者包含需要花时间转换的 32 位汇编代码。移植这类软件时,可利用很多现代 Linux 版本中都有的 mulTIarch 或 mulTIb 功能实现显著加速。尽管不是完全一样,但这些经常可以互换使用。


MulTIarch 是一种系统和文件系统布局的配置方法,以便运行 32 和 64 位动态链接程序。原来的32 位 ARMv7 Linux 程序无需修改,可直接导入,并与新的 64 位程序共存。该功能可用来快速建立并运行系统,同时移植特定的 32 位应用程序并针对底层 64 位架构进行微调。


支持MulTIarch 的版本将 32 位和64 位库纳入相同 Linux 文件系统中,以实现这种兼容性。当执行 64 位应用时,使用本机 64 位库;32 位应用则使用 32 位库。

创建和维护 multiarch 操作系统需要投入不少时间。幸好,开源项目,例如 Yocto Project、Canonical 和 Linaro,提供易于集成的内容。Yocto Project 提供完整的端对端构建系统;Canonical 和 Linaro 提供现成可用的参考文件系统,使开发人员快速取得进展。赛灵思答复66636 详细介绍了如何在 ZCU102 评估平台上集成 Ubuntu Core 14.04 文件系统。


默认情况下,这些 multiarch 文件系统只使用 64 位应用程序。由于它们基于 dpkg 管理工具,因此只需简单的命令行接口即可添加更多架构:

# dpkg -add-architecture armhf

配置 dpkg 工具以支持 32 位架构( 例如 armhf),然后,使用更高级的封装管理工具,例如 apt-get,就像在 Linux 的 Intel x86 兼容版本上一样。


对于有些系统来说,通过 multiarch 在 64 位主机上运行现有的 32 位应用程序就足够了,无需其他工作。对于其他系统,multiarch 可起到节省时间的作用,同时还要对软件协议栈的其他部分进行微调,并针对底层 64 位架构和操作系统来优化它们。


总 结

ARMv8 为软件开发人员提供很多性能、安全和架构方面的新功能,但是,如果软件开发人员因担心丢掉现有的软件架构而不愿意使用它,那么这些新功能也就无用武之地。ARMv8 可从硬件和软件接口实现处理器架构的自然演进,从而消除这种顾虑。将开发人员熟悉的指令集实现自然演进,以此简化低级代码的移植。此外,还可以回退到 AArch32 状态,这样开发人员就能够快速运行现有的32 位代码,以最少的时间和精力在新硬件上评估代码。最后,multiarch Linux 允许将一些代码不经任何修改直接运行,这样就可以显著减少整体系统集成。ARMv8 处理器,例如 Zynq UltraScale+ MPSoC 允许开发人员利用新一代功能并保持原有软件投资。

推荐阅读

史海拾趣

Entegris公司的发展小趣事

2019年1月底,Entegris与Versum Materials宣布合并。合并后的公司由Entegris占据五席董事,而Versum占四席。Versum是一家主要生产半导体的化学、气体及输送系统的公司,两家公司的前三大客户均为台积电、英特尔、三星电子。合并后,新公司在半导体材料市场的影响力显著增强,同时也面临着来自德国默克等竞争对手的挑战。

Filtran Ltd公司的发展小趣事

Filtran Ltd成立于2000年代初,初期专注于滤波器技术的研发。在无线通信领域,滤波器是确保信号纯净度的关键组件。公司研发团队经过数年不懈努力,成功研发出一种新型高性能陶瓷滤波器,该滤波器不仅体积更小,而且能在更宽的频率范围内保持优异的性能。这一创新技术迅速吸引了手机制造商的注意,Filtran Ltd迅速成为多家国际手机品牌的核心供应商,市场份额显著提升。

ASC Capacitors公司的发展小趣事

ASC Capacitors始终坚持品质至上的原则。公司从原材料采购到生产工艺,再到产品出厂,每一个环节都严格把控,确保产品质量无可挑剔。此外,ASC Capacitors还建立了完善的质量检测体系,对每一批产品进行严格测试,确保产品性能达到最佳状态。正是这种对品质的执着追求,使得ASC Capacitors赢得了客户的广泛赞誉和信任。

Defense Supply Center Columbus公司的发展小趣事

随着国防事业的不断发展,军事电子产品的市场需求也在不断增加。Defense Supply Center Columbus公司敏锐地捕捉到了这一市场机遇,积极拓展国内外市场。公司通过与国内外知名企业和机构建立合作关系,共同开发新产品、新技术,不断拓展市场份额。同时,公司还积极参加各类国际展览和论坛,展示公司的技术实力和产品优势,吸引了众多潜在客户的关注。这些市场拓展的努力,为公司的发展注入了新的动力。

Ferranti Electric Inc公司的发展小趣事

随着技术的不断发展和创新,Ferranti Electric Inc公司在电气领域取得了显著的成就。特别是在设计和制造用于恶劣气候或关键安全领域的复杂、高可靠性电气产品方面,公司展示了其卓越的技术实力。这些产品不仅广泛应用于军用领域,同时也为民用领域提供了大量电气产品解决方案。公司的全球影响力逐渐扩大,产品远销世界各地。

ASI [ASI Semiconductor, Inc]公司的发展小趣事

为了进一步提升产品质量和客户满意度,ASI积极寻求ISO 9001认证。经过严格的审核和准备,ASI最终成功获得了这一国际公认的质量管理体系认证。这一认证不仅证明了ASI在质量管理方面的卓越表现,还为其在全球商用和军用通信领域占据领先地位提供了有力保障。

问答坊 | AI 解惑

公告

电子工程交流群已满,如想加入者请进以下两个群:电子工程世界1   号码:37059369电子工程世界交流群2   号码:37061424欢迎各位精英参与讨论!…

查看全部问答>

考考你的单片机知识---单片机基础知识测试题

一、填空题(15分,每空1分) 1.MCS—51单片机的P0—P4口均是并行I/O口,其中的P0口和P2口除了可以进行数据的输入、输出外,通常还用来构建系统的和,在P0—P4口中,为真正的双向口,为准双向口。         2.MCS—5 ...…

查看全部问答>

labview error 50103

最近编labview程序遇到一个错误,在此于大家分享一下。 NI-DAQmx运行出错,代码为50103,错误原因是指定的资源被预留了 主要软件: Driver Software>>NI-DAQmx 主要软件版本: 7.0 主要软件修正版本: 次要软件: N/A 问题: 为什么在运行过程中 ...…

查看全部问答>

SetSystemPowerState困惑

想用SetSystemPowerState(NULL,POWER_STATE_IDLE,POWER_FORCE)让电话接通3秒后锁屏,不过发现锁屏后不能让屏幕亮起来而且电话仍不挂断就不行了,这时候再按键盘一点用都没有,当然除非按挂机键…… 问问大侠们怎么解决这个问题。就是如何在锁屏后 ...…

查看全部问答>

BMC Power Aegis新一代智能防火墙

BMC  Power Aegis新一代智能防火墙 -----国内唯一与等级对应的安全网关 在Power Aegis一体化安全网关上可以集成TMA(流量控制)、AMS(应用管理)等多个安全模块,每一个模块也可以作为单独产品形态,也可以任意进行组合,在综合安全平台上 ...…

查看全部问答>

带异步预置功能的D发器的verilog描述,求助

这种D触发器应该是很常见,功能也很简单的一种单元,但最近用verilog描述的时候却遇到了不少麻烦。 因为我对VHDL比较熟悉,所以用VHDL描述起来很简单,但我应用的地方必须用verilog写,对它又不太熟,所以请大家帮个忙。 vhdl代码如下: librar ...…

查看全部问答>

STM32E系列的,最大能支持多大的NANDFLASH?

                                  …

查看全部问答>

提个中断的问题

建议ST将各个中断向量的中断源写清楚:例如: TIM1有好多个中断源,但分配的中断向量确只有4个!  但没有任何一份文档里列出这些中断是如何分配到4个中断向量的.也许有人会说,中断向里不是写明白了那个中断向量是分配到何种性的么. ...…

查看全部问答>

瑞萨杯--2011全国大学生电子设计竞赛新闻发布会

   昨天下午(6月7日)“瑞萨杯2011全国大学生电子设计竞赛”新闻发布会在竞赛秘书处单位北京理工大学举行,从而拉开了本届大赛的序幕。教育部高等教育司、工业和信息化部电子信息司相关领导,全国大学生电子设计竞赛组委会主任、两院院 ...…

查看全部问答>

IAR 下载方法及其注册机

本帖来自中国电子开发网,为大家共享!   打开IAR官方网站www.iar.com,点击“Dowmloads”,找到STM8的30天试用版的链接并点击,然后会出来一个注册的界面, 注册其实很简单,只要邮箱你填个正确的就行了,其他的随便填,选择的项也是 ...…

查看全部问答>