静态随机存储器(SRAM):高速缓存的奥秘
目录
基本的静态存储单元阵列
基本的SRAM逻辑结构
1. 概述
2. SRAM阵列
3. 行选择器(Row Decoder)
4. 列选择器(Column Decoder)
5. 读写电路
6. 控制电路
7. 工作过程
SRAM的读/写时序
SRAM 结构概述
读操作时序
读操作概述
读操作时序步骤
读操作时序图
写操作时序
写操作概述
写操作时序步骤
写操作时序图
读/写控制信号
读/写时序总结
存储器容量的扩充
方法一:增加存储单元数量
方法二:多芯片并联扩展
示例:
方法三:多端口 SRAM
方法四:分区地址空间
示例:
示例:多芯片并联扩展存储容量
接线示例
示例代码(伪代码)
在电子工程和计算机系统设计中,高速缓存(cache)是一个至关重要的组件,它显著提升数据访问速度。而构建高速缓存核心组件时,我们将深入研究SRAM的工作原理、逻辑结构、读写时序,并为此准备扩充存储器容量,帮助了解SRAM在现代计算机系统中的可用性。
基本的静态存储单元阵列
SRAM 就像一个由许多小格子组成的网格,每个小格子就是一个静态存储单元,可以存储一个二进制位(0 或 1)。
1. 六晶体管(6T)存储单元
最常见的 SRAM 存储单元是六晶体管(6T)类型,它就像一个由六个开关组成的电路,这六个开关分别是六个晶体管(transistor)。
- 晶体管: 可以简单理解为一种电子开关,可以控制电流的通断。
- NMOS 晶体管和 PMOS 晶体管: 是两种不同类型的晶体管,它们的工作原理有所不同,但都可以用来构建逻辑电路。
2. 存储节点
在 6T 存储单元中,两个交叉耦合的 CMOS 逆变器(inverter)构成了一个存储节点,用来存储一个二进制位。
- CMOS 逆变器: 可以简单理解为一种逻辑电路,当输入为 0 时,输出为 1;当输入为 1 时,输出为 0。
- 交叉耦合: 指的是两个逆变器的输出分别连接到对方的输入,形成一个稳定的回路,可以保持存储状态。
工作原理:
- 当存储节点存储 0 时,其中一个逆变器的输出为 0,另一个逆变器的输出为 1,保持稳定状态。
- 当存储节点存储 1 时,其中一个逆变器的输出为 1,另一个逆变器的输出为 0,保持稳定状态。
3. 存储单元阵列
多个 6T 存储单元按照行和列排列,就构成了 SRAM 的存储单元阵列。每个存储单元都连接到字线和位线,用于读写数据。
- 字线: 用于选择要访问的存储单元的行。
- 位线: 用于读写选定存储单元的数据。
基本的SRAM逻辑结构
1. 概述
静态随机存取存储器(SRAM)是一种重要的半导体存储器,广泛应用于缓存和高速存储场景。SRAM的基本逻辑结构由存储单元阵列、行选择器、列选择器、读写电路和控制电路组成。
2. SRAM阵列
SRAM阵列由行(row)和列(column)组成,每个交叉点对应于一个存储单元。每个存储单元通常由六个晶体管组成,形成一个双稳态触发器,可以稳定地存储一个比特位的数据(0或1)。
- 行(Row):每行包含多个存储单元。
- 列(Column):每列对应一个数据位线,用于传输数据。
3. 行选择器(Row Decoder)
行选择器用于选择存储阵列中的特定行。行选择器是一个解码器,它根据输入的行地址信号,激活对应的行选择信号(word line)。
- 功能:将输入的行地址解码为一个唯一的行选择信号。
- 实现:利用逻辑门和解码器电路,根据输入地址激活特定的行。
4. 列选择器(Column Decoder)
列选择器用于选择存储阵列中的特定列。列选择器根据输入的列地址信号,激活对应的列选择信号(bit line)。
- 功能:将输入的列地址解码为一个唯一的列选择信号。
- 实现:利用多路复用器(MUX)和解码器电路,根据输入地址激活特定的列。
5. 读写电路
读写电路负责在读操作和写操作中,完成数据的存取和更新。
-
读操作:
- 当处理器发出读请求时,行选择器激活相应的字线,选择对应的行。
- 列选择器激活相应的位线,选择对应的列。
- 存储单元的数据通过位线传输到感应放大器(Sense Amplifier),将存储单元的微弱信号放大后输出给处理器。
-
写操作:
- 当处理器发出写请求时,行选择器激活相应的字线,选择对应的行。
- 列选择器激活相应的位线,选择对应的列。
- 将要写入的数据通过位线传输到对应的存储单元,更新存储单元的数据状态。
6. 控制电路
控制电路负责协调和控制读写操作的时序和逻辑。它接收处理器的控制信号并生成行选择信号、列选择信号以及读写使能信号。
- 读写使能信号(Read/Write Enable):用于控制读写操作的执行。
- 地址信号(Address):用于选择存储单元的行和列。
- 数据信号(Data):用于在读写操作中传输数据。
7. 工作过程
- 地址译码:处理器发出地址信号,行选择器和列选择器分别解码行地址和列地址,选择特定的存储单元。
- 读操作:
- 行选择器激活对应的行。
- 列选择器激活对应的列。
- 存储单元的数据通过位线传输到感应放大器,输出给处理器。
- 写操作:
- 行选择器激活对应的行。
- 列选择器激活对应的列。
- 写入数据通过位线传输到存储单元,更新存储单元的数据状态。
SRAM的读/写时序
静态随机存取存储器(SRAM)的读写操作依赖于精确的时序控制。SRAM在设计上实现了相对简单的访问机制,但仍需要确保正确的信号顺序和时间,以实现可靠的操作。以下是对 SRAM 读/写时序的详细介绍。
SRAM 结构概述
SRAM 由一些基本单元组成,这些单元通过行选择器(行译码器)和列选择器(列译码器)进行访问。每个基本单元通常由六个晶体管组成,能够保持其状态而无需周期性刷新。
读操作时序
读操作概述
- 地址输入:提供要读取的存储单元的地址。
- 地址稳定:地址信号需要在整个读操作期间保持稳定。
- 读使能信号:启用读操作的控制信号(通常为
OE
,输出使能)。 - 数据输出:从指定地址的存储单元读取数据,并将其输出到数据总线。
读操作时序步骤
- 地址设置:将要读取的地址输入到地址总线上。
- 地址稳定时间:等待地址信号稳定。
- 读使能信号激活:启用
OE
信号。 - 数据有效时间:等待数据从存储单元传输到数据总线。
- 数据读取:读取数据总线上的数据。
- 读使能信号失效:禁用
OE
信号,完成读操作。
读操作时序图
地址总线 : ──[ADDR]──────────────────────────────
读使能信号 : ────────────[OE]─────────────
数据总线 : ────────────────[DOUT]──────────────
写操作时序
写操作概述
- 地址输入:提供要写入的存储单元的地址。
- 地址稳定:地址信号需要在整个写操作期间保持稳定。
- 数据输入:将要写入的数据输入到数据总线。
- 写使能信号:启用写操作的控制信号(通常为
WE
,写入使能)。 - 数据存储:将数据从数据总线写入到指定地址的存储单元。
写操作时序步骤
- 地址设置:将要写入的地址输入到地址总线上。
- 地址稳定时间:等待地址信号稳定。
- 数据设置:将要写入的数据输入到数据总线上。
- 数据稳定时间:等待数据信号稳定。
- 写使能信号激活:启用
WE
信号。 - 数据写入时间:等待数据写入到存储单元。
- 写使能信号失效:禁用
WE
信号,完成写操作。
写操作时序图
地址总线 : ──[ADDR]──────────────────────────────
数据总线 : ────[DIN]──────────────────────────────
写使能信号 : ────────────[WE]─────────────
读/写控制信号
SRAM 通常具有以下控制信号:
- 地址总线(ADDR):选择要访问的存储单元地址。
- 数据总线(DATA):进行数据传输的双向总线。
- 读使能(OE, Output Enable):控制读操作的信号。
- 写使能(WE, Write Enable):控制写操作的信号。
- 芯片选择(CS, Chip Select):启用或禁用整个 SRAM 芯片。
读/写时序总结
在实际设计中,读/写操作的时序精确控制至关重要。以下是关键点总结:
- 地址稳定时间(tAS):地址信号需要在特定时间内保持稳定,确保正确访问存储单元。
- 数据稳定时间(tDS):写操作中,数据信号需要在特定时间内保持稳定,确保正确写入数据。
- 读/写使能信号宽度(tOE/tWE):读/写使能信号需要在特定宽度内保持有效,确保数据读取/写入操作完成。
- 数据有效时间(tDOUT):读操作中,数据需要在特定时间内从存储单元传输到数据总线。
存储器容量的扩充
在扩展存储器容量时,尤其是对于静态随机存取存储器(SRAM),有几种常见的方法可以实现更大的存储容量和更高的系统性能。以下是关于扩充 SRAM 容量的详细说明。
方法一:增加存储单元数量
增加单个 SRAM 芯片的容量:
- 通过设计和制造具有更多存储单元的 SRAM 芯片来直接增加容量。这种方法涉及提高芯片的密度,使得每个芯片能够存储更多的数据。这通常需要更先进的半导体工艺和制造技术。
方法二:多芯片并联扩展
使用多个 SRAM 芯片并联:
- 通过将多个 SRAM 芯片并联,可以扩展整体存储容量。每个芯片处理一部分数据,总的存储容量是单个芯片容量的总和。
示例:
假设每个 SRAM 芯片的容量为 1MB,通过并联四个这样的芯片,可以实现 4MB 的总存储容量。
方法三:多端口 SRAM
使用多端口 SRAM:
- 多端口 SRAM 提供多个独立的访问端口,允许同时进行多个读写操作。这种结构有助于提高吞吐量和并行处理能力,特别适用于需要高带宽的应用场景。
方法四:分区地址空间
使用多个地址区域:
- 通过将不同的存储区域映射到不同的地址空间,可以有效地管理和利用更大的存储容量。在这种方法中,系统地址总线的一部分用于选择特定的 SRAM 芯片或存储模块。
示例:
假设系统有两个 1MB 的 SRAM 芯片,可以将地址空间范围 0x000000-0x0FFFFF 分配给第一个芯片,范围 0x100000-0x1FFFFF 分配给第二个芯片,从而实现总共 2MB 的可用存储容量。
示例:多芯片并联扩展存储容量
假设我们有多个 1MB 的 SRAM 芯片,需要扩展到 4MB 的总存储容量。
接线示例
-
地址总线:
- 将地址总线连接到所有 SRAM 芯片。对于 1MB 的 SRAM,需要 20 位地址线(2^20 = 1MB)。
- 使用额外的地址位来选择特定的 SRAM 芯片。例如,2 位额外的地址线可以选择 4 个不同的芯片。
-
数据总线:
- 将数据总线连接到所有 SRAM 芯片。数据总线的宽度取决于每个芯片的数据宽度(如 8 位、16 位等)。
-
芯片选择(CS):
- 使用解码器电路将系统的地址线解码为各个 SRAM 芯片的芯片选择信号。
- 例如,使用 2 位地址线和 4 个芯片的解码器,当地址线为 00 时选择第一个芯片,为 01 时选择第二个芯片,以此类推。
示例代码(伪代码)
以下是一个伪代码示例,展示如何在嵌入式系统中实现多芯片并联扩展的逻辑:
#define SRAM1_BASE_ADDRESS 0x00000000
#define SRAM2_BASE_ADDRESS 0x00100000
#define SRAM3_BASE_ADDRESS 0x00200000
#define SRAM4_BASE_ADDRESS 0x00300000#define TOTAL_SIZE (4 * 1024 * 1024) // 4MBvoid write_to_sram(uint32_t address, uint8_t data) {if (address < 0x00100000) {*((volatile uint8_t *)(SRAM1_BASE_ADDRESS + address)) = data;} else if (address < 0x00200000) {*((volatile uint8_t *)(SRAM2_BASE_ADDRESS + (address - 0x00100000))) = data;} else if (address < 0x00300000) {*((volatile uint8_t *)(SRAM3_BASE_ADDRESS + (address - 0x00200000))) = data;} else if (address < 0x00400000) {*((volatile uint8_t *)(SRAM4_BASE_ADDRESS + (address - 0x00300000))) = data;}
}uint8_t read_from_sram(uint32_t address) {if (address < 0x00100000) {return *((volatile uint8_t *)(SRAM1_BASE_ADDRESS + address));} else if (address < 0x00200000) {return *((volatile uint8_t *)(SRAM2_BASE_ADDRESS + (address - 0x00100000)));} else if (address < 0x00300000) {return *((volatile uint8_t *)(SRAM3_BASE_ADDRESS + (address - 0x00200000)));} else if (address < 0x00400000) {return *((volatile uint8_t *)(SRAM4_BASE_ADDRESS + (address - 0x00300000)));}return 0; // 超出范围
}
在实际应用中,SRAM通常与动态随机存储器(DRAM)结合使用,她一种层次化存储体系结构。SRAM作为高速缓存,提供快速的数据访问,而DRAM则提供更大的存储容量。通过对数据的智能管理和缓存,可以提高系统的性能和效率。
相关文章:
静态随机存储器(SRAM):高速缓存的奥秘
目录 基本的静态存储单元阵列 基本的SRAM逻辑结构 1. 概述 2. SRAM阵列 3. 行选择器(Row Decoder) 4. 列选择器(Column Decoder) 5. 读写电路 6. 控制电路 7. 工作过程 SRAM的读/写时序 SRAM 结构概述 读操作时序 读…...
Linux CentOS 7 服务器集群硬件常用查看命令
(一)查看内核:uname -a [rootcdh1 ~]# uname -a Linux cdh1.macro.com 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux(二)查看系统:cat /etc/redhat-releas…...

《Windows API每日一练》5.4 键盘消息和字符集
本节我们将通过实例来说明不同国家的语言、字符集和字体之间的差异,以及Windows系统是如何处理的。 本节必须掌握的知识点: 第31练:显示键盘消息 非英语键盘问题 字符集和字体 第32练:显示默认字体信息 第33练:创建逻…...

【uniapp】uniapp开发微信小程序入门教程
HBuilderx中uniapp开发微信小程序入门教程 一、 环境搭建 1. HBuilderx下载安装 HBuilderx下载安装地址 2. 微信开发者工具下载安装 微信开发者工地址具下载安装 二、创建uniapp项目 选择:文件>新建>项目>uni-app 输入项目名称>选择默认模板>…...

Python爬虫项目集:豆瓣电影排行榜top250
关于整理日常练习的一些爬虫小练习,可用作学习使用。 爬取项目以学习为主,尽可能使用更多的模块进行练习,而不是最优解。 爬虫概要 示例python 库爬取模块request解析模块BeautifulSoup存储类型list(方便存入数据库)…...
34-Openwrt uhttpd与rpcd
uhttpd作为一个简单的web服务器,其代码量并不多,而且组织结构比较清楚。和其它网络服务器差不多,其main函数进行一些初始化(首先parse config-file,然后parse argv),然后进入一个循环࿰…...

uni app 树状结构数据展示
树状数据展示,可以点击item 将点击数据给父组件 ,满足自己需求。不喜勿喷,很简单可以根据自己需求改哈,不要问,点赞收藏就好。其实可以和上一篇文章uni app 自定义 带popup弹窗的input组件-CSDN博客结合使用ÿ…...

KVM在线yum源部署-centos 7
一、虚拟化简介 虚拟化就是操作系统里嵌套操作系统,一台服务器买回来,可能只是用作一个http服务,资源不能充分利用,而虚拟化的诞生有效解决了这个问题,以硬件资源上使用虚拟化,实现单硬件多系统,充分挖掘硬件性能,节能增效。同时通过多年的改进发展,虚拟化进化成云服务…...
TSF的服务发现与Consul有何区别?
TSF(腾讯服务框架)和Consul都是用于服务发现的工具,但它们在设计理念、功能特性、集成方式等方面存在一些区别。 ### 设计理念和目标 **Consul** 是一个开源的工具,用于服务发现、配置和分段。它提供了一种简单的方式来注册和发现服务,以及健康检查和键值存储功能。Consul…...

kotlin集合框架
1、集合框架的接口类型对比 2、不可变和可变List fun main() {// 不可变List - 不能删除或添加元素val intList: List<Int> listOf(1,2,3)intList.forEach{println(it) // 1 2 3}println("")// 可变List - 可以删除或添加元素val mutableList mutableListO…...

服务器(Linux系统的使用)——自学习梳理
root表示用户名 后是机器的名字 ~表示文件夹,刚上来是默认的用户目录 ls -a 可以显示出隐藏的文件 蓝色的表示文件夹 白色的是文件 ll -a 查看详细信息 total表示所占磁盘总大小 一般以KB为单位 d开头表示文件夹 -代表文件 后面得三组rwx分别对应管理员用户-组…...

竞赛选题 python+opencv+深度学习实现二维码识别
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 pythonopencv深度学习实现二维码识别 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:3分 该项目较为新颖&…...
Java读取指定 JAR 包路径中的 git.properties 文件
Java读取指定 JAR 包路径中的 git.properties 文件 在上述代码中,首先打开 JAR 文件,获取 git.properties 文件的 JarEntry 对象,如果存在该条目,就获取其输入流进行后续的读取和处理。具体的读取和处理逻辑需要根据您的实际需求在…...

逻辑回归(Logistic Regression)及其在机器学习中的应用
🚀时空传送门 🔍逻辑回归原理📕Sigmoid函数🎈逻辑回归模型 📕损失函数与优化🎈损失函数🚀优化算法 🔍逻辑回归的应用场景🍀使用逻辑回归预测客户流失使用scikit-learn库实…...

【计算机视觉】人脸算法之图像处理基础知识【七】
直方图均衡化 直方图均衡化是一种常用的图像处理技术,用于改善图像的对比度,特别是在图像的细节被埋没在暗部或亮部区域时。通过重新分配图像的像素强度值,使得图像的整体对比度增强,从而让更多的细节变得可见。 import cv2 imp…...

家政预约小程序14权限配置
目录 1 创建用户2 创建角色3 启用登录4 实现退出总结 我们现在小程序端的功能基本开发好了,小程序开发好之后需要给运营人员提供管理后台,要分配账号、配置权限,我们本篇就介绍一下权限如何分配。 1 创建用户 在微搭中,用户分为内…...

解决 vue 项目一直出现 sockjs-node/info?t=问题
其实如果是在开发环境,应该是开发的时候网络环境变更导致,比如你切换无线网络,导致开发服务器的IP地址换了,这样开发服务器会不知道如何确定访问源。开发环境中关闭npm dev server,然后重新npm run serve重新构建服务环…...

麒麟信安系统关闭core文件操作
在使用麒麟信安系统时,如果应用程序运行过程中崩溃了,此时并不会导致内核崩溃,只会在tmp目录下产生崩溃数据,如下图 不过tmp目录下的分区容量有限,当崩溃的应用core文件过大时将会占用tmp空间,导致tmpfs分区…...

微信小程序轮播图
效果图 详情可见 微信小程序 参照:swiper | uni-app官网 代码: <!--轮播图-- > <swiper interval"2000" autoplay"true" circular"true" style"height: 300px;"><swiper-item style&qu…...

redisson WRONGPASS invalid username-password pair or user is disable
1、技术架构:若依微服务框架 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.1</version></dependency> <dependency><…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...

数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...

从0开始学习R语言--Day17--Cox回归
Cox回归 在用医疗数据作分析时,最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据,往往会有很多的协变量,即使我们通过计算来减少指标对结果的影响,我们的数据中依然会有很多的协变量,且…...
Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)
13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…...