如何在 Altera FPGA 中使用字节地址存储器?

how Byte Address memory in Altera FPGA?

我使用宏功能在 fpga.but 中生成 32 位数据内存,当时输出被寻址为 32 位(4 字节),如何进行 1 字节寻址? 我有 Altera Cyclone IV ep4ce6e22c8。

I'm designing a 32bit CPU in fpga ,

如今每个 CPU 地址总线都以字节为单位工作。因此,要访问您的 32 位宽内存,您不应连接 LS 2 地址位。读取时,您可以使用 A[1:0] 地址位 select 内存中的一个字节(或仅使用 A[1] 的半字)。

您仍然需要四个字节的写入启用信号。这允许您写入字、半字或字节。

查看现有的 CPU 总线或现有的连接标准,如 AHB 或 AXI。


Post 编辑:

but reading address 0001 , i get 0x05060708 but the desired value is 0x02030405.

您要做的是从非对齐地址读取一个字。没有现有的 32 位宽内存支持它。我建议您看一下 32 位宽内存的工作原理。

旧的摩托罗拉 68020 架构支持这一点。它需要一个特殊的内存控制器,它首先从地址 0 读取数据,然后从地址 4 读取数据并将数据重新组合成一个新的 32 位字。

随着内存下降和减少 CPU 周期的成本变得越来越重要,现代 CPU 不支持这一点。他们抛出异常:非对齐内存访问。

您有多种选择:

  1. 构建一个支持未对齐访问的特殊内存控制器。

  2. 调整你的预期。

我会选择后者。一般来说,它是基于错误的记忆如何工作的想法。作为巩固:你不是这个网站上第一个认为你是如何从记忆中阅读单词的人。