我正在研究关于 AHB 协议的项目。
我正在做的是使用 AHB 系统制作 IP 块并使用 SDK(Vitis)写入/读取数据。
基地址分配给 0x43C0_0000。
如果我用 Xil_Out 在基地址上写入数据,它就可以工作。
但是,当我给 Xil_Out 0x43C0_0000 +1 时,它不起作用。
通过反复试验,我发现只有 0x43C0_0000 + 4*n 上的地址有效。
为什么写入不在该范围内的数据不起作用?
大多数计算机寻址方案都声明 +1 地址偏移量意味着访问一个字节的信息。如果在您的设计中,AHB 总线是 32 位写入访问,地址偏移量为 1,则应将数据放入 D[15:8] 位,假设 AHB 总线的小端模式。在赛灵思采用的 AMBA 世界中,这种访问称为窄访问,即 8 位小于完整的 32 位。因此,写入一个字节应该使该内存位置中剩余的 24 位保持不变。这通常是通过字节选择 AHB 总线没有而其表亲 AXI 确实有: https ://developer.arm.com/documentation/ddi0243/c/AHB-Components/Bus-matrix/Signal-descriptions
Xilinx 设计很可能不支持窄 AHB 访问,而您仍然可以在地址偏移 4*n 处写入整个 32 位,正如您通过实验发现的那样。然而,我宁愿不做实验,只同意一种类型的计算机总线,但我们人类很少同意。看看我们在 COVID-19 大流行期间对口罩做什么或不做什么。