文章 ID: 000081052 内容类型: 故障排除 上次审核日期: 2021 年 08 月 28 日

在将软件从 Nios II Classic (Gen1) 升级到Nios II Gen2 处理器时,我需要做些什么/注意?

环境

  • 英特尔® Quartus® II 订阅版
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    说明

    Nios® II Classic 和 Nios II Gen2 处理器是二进制兼容的,但是HAL和高速缓存功能发生了一些细微变化,建议使用最新版本 (v14.0) 中的工具/库重新构建 BSP 和软件,如果处理器配置包含数据高速缓存,则建议查看所有用户软件中未缓存内存事务的使用。

    解决方法

    未缓存内存区域
    当处理器出现数据高速缓存问题、读取且数据不在高速缓存中时,高速缓存通常会加载一小块或者来自内存的"一行"数据进入高速缓存。当处理器发出写入时,新值通常存储在数据高速缓存中;使用回写数据高速缓存(例如在Nios II处理器中),新的数据值仅在高速缓存刷新或从高速缓存中提取数据时才会被写回真正的物理位置。这种操作对于内存区域是不能接受的,在这种情况下数据必须立即写入硬件才能实现所需的功能/操作(例如共享内存或写入外设/硬件控制寄存器)。这意味着开发人员需要立即刷新高速缓存,或使用绕过高速缓存并直接/立即进入硬件(首选)的内存操作。有时,开发人员不希望数据缓存还有其他原因(例如,如果不想重新读回数据和/或者由于性能或其他原因,从高速缓存中输入其他数据是没有必要的)。

    借助 Nios II Classic 处理器的高速缓存旁路,可以使用特殊的 I/O 读/写指令(例如 ldwio/stwio),通过在读/写地址的内存地址设置 bit-31,或实施 MMU/MPU 并妥善设置来实现。(注意:MMU 和 bit-31 选项彼此排斥)

    Nios II Gen2 内核在高速缓存旁路方面提供了相同的机制,但实施略有不同,可能是 Nios II Classic Nios II Gen2 软件迁移的潜在问题。

    如果 Nios II Classic 处理器执行未缓存的写入,并且数据高速缓存中存在内存位置(因而关联的高速缓存行),则新的数据值也会写入高速缓存(尽管这是一个未缓存的写入)。这意味着高速缓存中的数据始终是最新的,如果软件设计导致未缓存内存区域加载到高速缓存中,则不会丢失数据一致性。因此,Nios II Classic 处理器还可以支持任何大小的未缓存区域和任何地址对齐(因为它允许在同一高速缓存行中混合缓存和未缓存的内存区域)。对于Nios II Gen2 内核来说,情况并非如此。

    在Nios II Gen2 处理器内核中,未缓存的交易真正绕过数据高速缓存,而高速缓存的内容未更新(大多数处理器的标准实践)。如果一个未缓存区域与缓存区域共享高速缓存线,则该未缓存区域将被映射到高速缓存中,并在高速缓存刷新时用旧垃圾数据更新。开发人员必须确保未缓存和缓存的内存区域已清晰分离,并且在映射到高速缓存中时不要共享相同的高速缓存行。这将通过确保未缓存内存区域与数据高速缓存行 (32 字节) 的大小保持一致,并且大小与一个或多个数据高速缓存线(32 字节的倍数)相一致。这可以防止在同一高速缓存行上混合可缓存和非高速缓存数据,并因此会回写陈旧/无效的数据。良好的设计实践建议外围寄存器集的基本地址与数据高速缓存行边界保持一致,并且该驱动程序使用高速缓存旁路 I/O 读写说明 - 因此不太可能需要对驱动程序进行修改。应仔细检查使用高速缓存旁路/未缓存内存区域的其他软件,以确保高速缓存线不会映射到包含缓存和未缓存数据的区域。

    注:如果选定了Nios II Gen2 32 位地址范围选项、高速缓存旁路 I/O 指令或外围内存区域,使用该位-31 高速缓存旁路功能的软件将不再工作。

    新特性
    如果硬件配置被更改,开发人员应该考虑使用新的 32 位地址范围和外围内存区域选项的潜在影响。应该修改软件以支持这些功能或检测它们并发布错误消息。
    如果选定了 Gen2 32 位地址范围选项、缓存旁路 I/O 指令或外围内存区域,使用该位-31 高速缓存旁路功能的软件将不再工作。

    如果原始软件支持 Nios II Classic ECC 选项,则需要扩展以包括Nios II Gen2 处理器支持的额外内存。

    相关产品

    本文适用于 1 产品

    英特尔® 可编程设备

    本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。