Cortex M7 异常取指令行为

问题描述 投票:0回答:1

我是一名MCU数字IC设计师。在我们的 MCU 设计中,我们使用 Cortex-M7 来控制我们的系统。我的模拟过程中出现随机问题。

LD文件定义了RAM/CODE区域(0x2801000~0x28030000),但M7有时从0x2800_fxxx取指令。 0x2800_0000 到 0x2800_ffff 的内存是保留的,因此在仿真开始时不会初始化。一旦M7从0x2800_fxxx取指令,R通道将得到64'hXXXX_XXXX,那么M7的行为是不可预测的。

我们已经检查了我们的c代码,没有从0x2800_0000加载到0x2800_ffff区域的操作。所以我想知道为什么M7可以从0x2800_fxxx发起取指令事务。

arm cross-compiling cortex-m
1个回答
0
投票

我也遇到同样的问题。我跟踪了M7的Verilog代码并检查了波形。发现M7中BTAC模块给出的地址偏移量为负,导致分支预测地址出现错误。我收到了错误的地址预取指令。我发现每当BTAC记录超过4K的地址偏移时就会出现这种情况。禁用BTAC功能后,代码运行正常。不知道这是否与软件编译有关。我提出了一个案例并询问了ARM,但他们还没有回复

© www.soinside.com 2019 - 2024. All rights reserved.