内存控制器(以位宽为16的NOR FLASH举例)

article/2025/10/1 7:24:12

CPU 执行的指令:

“ldr r0,[某个地址 A]”,ldr 是装载 4个字节,这是从这个地址里读取某个数据存到 r0 里去。

A 地址的 1 字节数据。
A+1 地址的 1 字节数据。
A+2 地址的 1 字节数据。
A+3 地址的 1 字节数据。
即, ldr 是得到 4 个地址上的数据共4字节。

ldb r0,[某个地址B]”, ldb是装载1个字节。对CPU来说一个地址对应的数据是 1 字节。

B 地址的 1 字节数据。

例1:

Mov R1,#0
Ldr R0,[R1]
从R1把的地方即0地址读到4字节。
相当于:
从0地址取1字节
从1地址取1字节
从2地址取1字节
从3地址取1字节
假设 NOR 是 16 位(有 16 条数据线), CPU 发出“ldr r0,[0]” ,则 0 是对应NORFLASH。这里是想得到 4 个字节的数据。 NORFLASH 是以 16 位来访问的,意思是说访问 NOR 时,一次只能返回一个 16 位的数据。(16 位的 NORFLASH 硬件上只能一次提供 2 字节数据)。

所以,上面的情况是 CPU 一次要读 4 字节,而 16 位的 NOR 一次只能提供 2 字节。这个
问题,就由“内存控制器”来处理。

“内存控制器”要发起 2 次传输:

①,第一次,发出 0 地址,得到 2 字节。(地址 0~1 处的 2 字节)
②,第二次,发出 2 地址,得到 2 字节。(地址 2~3 处的 2 字节)
③,将两次得到的字节数据组合后返回给 CPU。

所以要设置“内存控制器”位宽,CPU 想得到 4 字节数据时,内存控制器就知道要发出 2 次操作。至于如何将数据提交过来,就由内存控制器来确定。

如上 NORFLASH, CPU 的发出的地址 1“ LADDR1”接到了 NORFLASH 的“ A0”地址。

则:“内存控制器”要发起 2 次传输:

NOR:
①,第一次,发出 0 地址,得到 2 字节。 NOR 得到 0 地址,返回第 0 个 2 字节。
②,第二次,发出 2 地址,得到 2 字节。 2 为 000010,而 LADDR0 没有接,而是接的
LADDR1-A0,这时 NOR 看到的是地址 1 。故返回第一个 2 字节。
③,将两次得到的字节数据返回给 CPU

例 2:
Mov R1,#3
Ldb R0,[R1]
CPU想得到地址 3 的一个字节数据。
“内存控制器”要发起 2 次传输: 
①发地址 3(000011)
NOR 得到地址 1(LADDR0 没接,则是从第 2 个 1 接的),返回第0个2字节。
②内存控制器从这2字节里取出高字节那一位,传给CPU。这也说明了为什么地址线错开一位。
取出哪一位是由没有接的那根地址线来决定的,比如这里没有接的LADDR0为1,所以返回两字节中高位(计算机是从0开始计数),

一般的规律是,8位位宽不错位,16位位宽错一位,32位位宽错二位,以此类推。








 


 


http://chatgpt.dhexx.cn/article/c05qwvYM.shtml

相关文章

内存管理单元(MMU)与内存控制器

内存管理单元(Memory Management Unit ) 内存管理单元是在CPU内部 内存管理单元的作用: 虚拟地址到物理地址映射 存储器访问权限控制 高速缓存支持 以下出自:https://blog.csdn.net/yetaibing1990/article/details/88344416 如…

C++ allocator设计内存管理器

文章目录 allocator内存管理器基本属性类的设计关键功能的实现完整的内存管理器 内存管理器的测试:设计自定义的String类。 前情回顾: allocator内存管理类 allocator内存管理器 某些类需要在运行时分配可变大小的内存空间,一般来说我们使用…

Memory Population Guidelines for Intel 3rd Gen Xeon Scalable Processors——内存控制器

Memory Population Guidelines for Intel 3rd Gen Xeon Scalable Processors 英特尔的第三代至强可扩展处理器采用全新的内存控制器架构。本文将深入探讨这些更改,以及如何通过确保正确排序和填充内存模块来最大限度地提高性能。 英特尔的第三代至强可扩展处理器于 …

内存分配器 (Memory Allocator)

对于大多数开发者而言,系统的内存分配就是一个黑盒子,就是几个API的调用。有你就给我,没有我就想别的办法。来UC前,我就是这样认为的。实际深入进去时,才发现这个领域里也是百家争鸣,非常热闹。有操作系统层…

内存分配器

内存分配器(Memory Allocator)负责内存分配与管理。内存分配器是所有容器的基础,它总是隐藏在容器背后工作,因此内存分配器对实现者非常重要,而对应用者几乎可以忽略。内存分配器分为两级,第一级分配器直接…

小笔记——内存控制器

内存控制器 what is memory controller? 内存控制器是一个用于管理与规划从内存到CPU间传输速度的总线电路控制器。 工作方式 内存控制器控制着必要的逻辑读写DRAM,每隔一段时间刷新动态随机存取存储器(DRAM)的内容。进行读取和写入动作时&…

DDR内存控制器

DDRDouble Data Rate双倍速率同步动态随机存储器。严格的说DDR应该叫DDR SDRAM,人们习惯称为DDR,其中,SDRAM 是Synchronous Dynamic Random Access Memory的缩写,即同步动态随机存取存储器。而DDR SDRAM是Double Data Rate SDRAM的…

Linux内存控制器(二)

1. memcg_stock_pcp // 每处理器记账缓存一次从内存控制组批量申请32页, 然后把内存控制组的内存使用量加上32页 #define CHARGE_BATCH 32U // 在内存控制组记账(charge)时, 先查看当前处理器的memcg_stock_pcp // 如果memcg_stock_pcp保存的内存控制组(memcg_stock_pcp->c…

DDR控制器

SCL:Self-Calibration Logic,通过寄存器编程方式实现DDR物理层信号校准的逻辑,这部分逻辑全部由硬件实现,软件需要在物理层自动校准之前对寄存器进行初始化。 SDRAM接口宽度在保持相同速率的前提下,可以采用全宽、半宽…

XLINX系列之Zynq-7000系列DDR内存控制器详解

1DDR内存控制器介绍 DDR内存控制器支持DDR2,DDR3,DDR3L和LPDDR2设备,包括三个主要块:AXI存储器端口接口(DDRI),带有交易调度器(DDRC)的核心控制器和具有数字PHY&#xf…

3. 内存控制器与SDRAM

内存控制器(内存接口设备) 地址处于不同的范围,会发出不同的片选引脚,换句话说,SOC外接的不同内存芯片,会有不同的地址范围。 CPU统一编址包括GPIO,各种协议类接口控制器(UART&…

存储控制器

存储控制器是按照一定的时序规则对存储器的访问进行必要控制的设备,包括地址信号、数据信号以及各种命令信号的控制,使主设备(访问存储器的设备)能够根据自己的要求使用存储器上的存储资源。 存储控制器的作用主要就是进行接口的转换,将主设…

内存控制器

1.内存控制器(Memory Controller) 内存控制器(Memory Controller)是计算机系统内部控制内存并且通过内存控制器使内存与CPU之间交换数据的重要组成部分。内存控制器决定了计算机系统所能使用的最大内存容量、内存BANK数、内存类型…

Java并发包中常用类小结(一)

Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来简单看一下相关的一些常见类的使用情况。 1、ConcurrentHashMap ConcurrentHashMap其实就是线程安全版本的has…

java并发包源码分析

java并发包之AbstractQueuedSynchronizer源码分析 分析并发包首先要了解AbstractQueuedSynchronizer(AQS),因为AQS是并发包的基础工具类。本文从ReentrantLock的公平锁出发,分析AbstractQueuedSynchronizer的工作过程。 lock与u…

【Java进阶】Java并发包提供了哪些并发工具类?

通过前面的学习,我们一起回顾了线程、锁等各种并发编程的基本元素,也逐步涉及了 Java 并发包中的部分内容,相信经过前面的热身,我们能够更快地理解 Java 并发包。 今天我要问你的问题是,Java 并发包提供了哪些并发工具…

java---JUC并发包详解

目录 前言 一、atomic包 AtomicInteger类 AtomicReference类 AtomicStampedReference类 二、locks包 接口 Condition Lock ReadWriteLock 实现类 ReentrantLock类 ReentrantReadWriteLock类 三、CountDownLatch 四、Semaphore(信号量) 总结 前言 JUC是java.u…

Java多线程并发编程--Java并发包(JUC)

Java多线程并发–Java并发包(JUC) 前言 前一篇文章中,笔者已经介绍了Java多线程的一些基础知识,但是想要成为一名中高级Java程序员还必须懂得Java并发包(JUC)的知识点,而且JUC现在也是面试中必…