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

Memory 如何在Altera FPGA中使用字节地址存储器?,memory,architecture,fpga,addressing,Memory,Architecture,Fpga,Addressing,我使用megafunctions在fpga中生成32位数据内存。但输出在当时是32位(4字节)寻址的,如何进行1字节寻址? 我有Altera旋风IV ep4ce6e22c8 我正在用fpga设计一个32位CPU 现在,每个CPU地址总线都以字节为单位工作。因此,要访问32位宽内存,不应连接LS 2地址位。读取时,您可以使用A[1:0]地址位从内存中选择一个字节(或仅使用[1]的半个字) 您仍然需要四字节的写启用信号。这允许您写入字、半字或字节 看看现有的CPU总线或现有的连接标准,如AHB或AX

我使用megafunctions在fpga中生成32位数据内存。但输出在当时是32位(4字节)寻址的,如何进行1字节寻址? 我有Altera旋风IV ep4ce6e22c8


我正在用fpga设计一个32位CPU

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

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

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


后期编辑:

但读取地址0001时,我得到0x05060708,但所需的值是0x0203405

你要做的是从一个不对齐的地址读一个单词。现有的32位宽内存不支持此功能。我建议您看看32位宽内存是如何工作的

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

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

您有几个选择:

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

  • 调整你的期望

  • 我会选择后者。一般来说,这是基于错误的记忆工作原理。作为整合:你不是这个网站上第一个认为你是通过记忆阅读单词的人


    我正在用fpga设计一个32位CPU

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

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

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


    后期编辑:

    但读取地址0001时,我得到0x05060708,但所需的值是0x0203405

    你要做的是从一个不对齐的地址读一个单词。现有的32位宽内存不支持此功能。我建议您看看32位宽内存是如何工作的

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

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

    您有几个选择:

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

  • 调整你的期望


  • 我会选择后者。一般来说,这是基于错误的记忆工作原理。整合:您不是本网站上第一个认为这是您从记忆中阅读单词的方式的人。

    要获得好的答案,我们需要更多信息。但很可能:对于读取,您需要选择正确的字节通道;对于写入,您必须生成一个启用字节写入的内存。我正在fpga中设计一个32位CPU,ram是32位地址输入和32位输出数据。我在Quartus 2中使用了mega函数中的lpm_ram_dq作为ram,但问题是它处理的是32位(字节)而不是单个字节。要得到一个好的答案,我们需要更多信息。但很可能:对于读取,您需要选择正确的字节通道;对于写入,您必须生成一个启用字节写入的内存。我正在fpga中设计一个32位CPU,ram是32位地址输入和32位输出数据。我在Quartus 2中使用了mega函数的lpm_ram_dq作为ram,但问题是它处理的是32位(字节)而不是单个字节。