FPGA第一篇:SRAM工作原理

一、SRAM概述

SRAM主要用于二级高速缓存(Level2 C ache)。它利用晶体管来存储数据。与DRAM相比,SRAM的速度快,但在相同面积中SRAM的容量要比其他类型的内存小。

大部分FPGA器件采用了查找表(Look Up Table,LUT)结构。查找表的原理类似于ROM,其物理结构是静态存储器(SRAM),

N个输入项的逻辑函数可以由一个2^N位容量的SRAM实现

函数值存放在SRAM中,SRAM的地址线起输入线的作用,地址即输入变量值,SRAM的输出为逻辑函数值,由连线开关实现与其他功能块的连接。

二、SRAM基本原理

2.1、SRAM结构图

SRAM结构图

  • corecells array:存储单元阵列
  • decode:行列地址译码器
  • Sense Amplifier:灵敏放大器
  • conntrol circuit:控制电路
  • FFIO:缓冲/驱动电路

  在图中,A0-Am-1为地址输入端,CSB. WEB和OEB为控制端,控制读写操作,为低电平有效,I/O(0)-I/O(N-1)为数据输入输出端。存储阵列中的每个存储单元都与其它单元在行和列上共享电学连接,其中水平方向的连线称为“字线”,而垂直方向的数据流入和流出存储单元的连线称为“位线”。通过输入的地址可选择特定的字线和位线,字线和位线的交叉处就是被选中的存储单元,每一个存储单元都是按这种方法被唯一选中,然后再对其进行读写操作。有的存储器设计成多位数据如4位或8位等同时输入和输出,这样的话,就会同时有4个或8个存储单元按上述方法被选中进行读写操作。

2.2、SRAM六管结构电路图

点此查看电路原理详解

2.3、为什么要将存储单元阵列排成矩阵形式?

  在SRAM 中,排成矩阵形式的存储单元阵列的周围是译码器和与外部信号的接口电路。存储单元阵列通常采用正方形或矩阵的形式,以减少整个芯片面积并有利于数据的存取。以一个存储容量为4K位的SRAM为例,共需12条地址线来保证每一个存储单元都能被选中(212 =-4096)。如果存储单元阵列被排列成只包含一列的长条形,则需要一个12/4K位的译码器,但如果排列成包含64行和64列的正方形,这时则只需一个6/64位的行译码器和一个6/64位的列译码器,行、列译码器可分别排列在存储单元阵列的两边,64行和64列共有4096个交叉点,每一个点就对应一个存储位。因此,将存储单元排列成正方形比排列成一列的长条形要大大地减少整个芯片地面积。存储单元排列成长条形除了形状奇异和面积大以外,还有一个缺点,那就是排在列的上部的存储单元与数据输入/输出端的连线就会变得很长,特别是对于容量比较大得存储器来说,情况就更为严重,而连线的延迟至少是与它的长度成线性关系,连线越长,线上的延迟就越大,所以就会导致读写速度的降低和不同存储单元连线延迟的不一致性,这些都是在设计中需要避免的。

三、SRAM的存储原理

3.1、从RAM的存储原理讲起

RAM主要的作用就是存储代码和数据供CPU在需要的时候调用。但是这些数据并不是像用袋子盛米那么简单,更像是 图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM等存储器来说也是一样的,虽然存储的都是代表0和1的代码,但是不同的组合就是不同的数据。让我们重新回到书和书架上来,如果有一个书架上有10行和10列格子(每行和每列都有0-9的编号),有100本书要存放在里面,那么我们使用一个行的编号+一个列的编号就能确定某一本书的位置。如果已知这本书的编号87,那么我们首先锁定第8行,然后找到第7列就能准确的找到这本书了。在RAM存储器中也是利用了相似的原理。

  现在让我们回到RAM存储器上,对于RAM存储器而言数据总线是用来传入数据或者传出数据的。因为存储器中的存储空间是如果前面提到的存放图书的书架一样通过一定的规则定义的,所以我们可以通过这个规则来把数据存放到存储器上相应的位置,而进行这种定位的工作就要依靠地址总线来实现了。对于CPU来说,RAM就象是一条长长的有很多空格的细线,每个空格都有一个唯一的地址与之相对应。如果CPU想要从RAM中调用数据,它首先需要给地址总线发送地址数据定位要存取的数据,然后等待若干个时钟周期之后,数据总线就会把数据传输给CPU。下面的示意图可以帮助我们很好的理解这个过程。

  上图中的小圆点代表RAM中的存储空间,每一个都有一个唯一的地址线同它相连。当地址解码器接收到地址总线送来的地址数据之后,它会根据这个数据定位CPU想要调用的数据所在的位置,然后数据总线就会把其中的数据传送到CPU。

  上面所列举的例子中CPU在一行数据中每次只是存取一个字节的数据,但是在现实世界中是不同的,通常CPU每次需要调用32bit或者是64bit的数据(这是根据不同计算机系统的数据总线的位宽所决定的)。如果数据总线是64bit的话,CPU就会在一个时间中存取8个字节的数据(想一想,如果每次还是存取1个字节的数据,64bit总线将不会显示出来任何的优势。)

从“线”到“矩阵”

  如果RAM对于CPU来说仅仅是一条“线”的话,还不能体现实际的运行情况。因为如果实际情况真的是这样的话,在实际制造芯片的时候,会有很多实际的困难,特别是在需要设计大容量的RAM的时候。所以,一种更好的能够降低成本的方法是让存储信息的“空格”排列为很多行--每个“空格”对应一个bit存储的位置。这样,如果要存储1024bits(2^10)数据,那么你只要使用32x32(2^5*2^5=2^10)的矩阵就能够达到这个目的了。很明显,一个32x32的矩阵比一个1024bit的行设备更紧凑,实现起来也更加容易。请看下图:

  知道了RAM的基本结构是什么样子的,我们就下面谈谈当存储字节的过程是怎样的:上面的示意图显示的也仅仅是最简单状态下的情况,也就是当内存条上仅仅只有一个RAM芯片的情况。对于X86处理器,它通过地址总线发出一个具有22位二进制数字的地址编码--其中11位是行地址,另外11位是列地址,这是通过RAM地址接口进行分离的。行地址解码器(row decoder)将会首先确定行地址,然后列地址解码器(column decoder)将会确定列地址,这样就能确定唯一的存储数据的位置,然后该数据就会通过RAM数据接口将数据传到数据总线。另外,需要注意的是,RAM内部存储信息的矩阵并不是一个正方形的,也就是行和列的数目不是相同的--行的数目比列的数目少(DRAM)。

3.2、SRAM的存储原理

下面的示意图粗略的概括了一个基本的SRAM芯片是如何工作的。SRAM是“static RAM(静态随机存储器)”的简称,之所以这样命名是因为当数据被存入其中后不会消失(同DRAM动态随机存储器是不同,DRAM必须在一定的时间内不停的刷新才能保持其中存储的数据)。

一个SRAM单元通常由4-6只晶体管组成,当这个SRAM单元被赋予0或者1的状态之后,它会保持这个状态直到下次被赋予新的状态或者断电之后才会更改或者消失。SRAM的速度相对比较快,而且比较省电,但是存储1bit的信息需要4-6只晶体管制造成本太高了(DRAM只要1只晶体管就可以实现)。

一个SRAM单元——4-6只晶体管——存储1bit的信息

3.3、RAM芯片和SRAM芯片

  RAM芯片:

  前面的介绍都相对比较简单、抽象。下面我们会结合实际的RAM芯片进行介绍。在谈到这个问题的时候,我们会涉及到一个比较重要的技术:封装。你应该听说过诸如30线SIMMS、72线SIMMS和168线DIMMS或者RIMMs其中的一个或者几个术语吧。如果要解释这些术语之间的不同,就应该了解RAM的封装技术。

  SRAM芯片:

  早期的SRAM芯片采用了20线双列直插(DIP:Dual Inline Package)封装技术,它们之所以具有这么多的针脚,是因为它们必须:每个地址信号都需要一根信号线;一根数据输入线和一根数据输出线,部分控制线(Write Enable, Chip Select)。下面的是一个16K x 1-bit SRAM芯片的针脚功能示意图:

  Input:A0-A13是地址输入信号引脚,CS是芯片选择引脚。在一个实际的系统中,一定具有很多片SRAM芯片,所以需要选择究竟从那一片SRAM芯片中写入或者读取数据。WE是写入启用引脚(如上表,在CS、WE上面的线我没有写入,表示低电平有效或者是逻辑0时有效):当SRAM得到一个地址之后,它需要知道进行什么操作,究竟是写入还是读取,WE就是告诉SRAM要写入数据。Vcc是供电引脚。Din是数据输入引脚。Dout是数据输出引脚。GND是接地引脚

  Output:Dout引脚

  Enable(OE):有的SRAM芯片中也有这个引脚,但是上面的图中并没有。这个引脚同WE引脚的功能是相对的,它是让SRAM知道要进行读取操作而不是写入操作。

3.4、SRAM的读取与存储操作流程

从Dout引脚读取1bit数据需要以下的步骤:

1)通过地址总线把要读取的bit的地址传送到相应的读取地址引脚(这个时候/WE引脚应该没有激活,所以SRAM知道它不应该执行写入操作)。

2)激活/CS选择该SRAM芯片。

3)激活/OE引脚让SRAM知道是读取操作。

第三步之后,要读取的数据就会从DOut引脚传输到数据总线。怎么过程非常的简单吧?同样,写入1bit数据的过程也是非常的简单的。

从Dout引脚存储1bit数据需要以下的步骤:

1)通过地址总线确定要写入信息的位置(确定/OE引脚没有被激活)。

2)通过数据总线将要写入的数据传输到Dout引脚。

3)激活/CS引脚选择SRAM芯片。

4)激活/WE引脚通知SRAM知道要进行写入操作。

经过上面的四个步骤之后,需要写入的数据就已经放在了需要写入的地方。

----------------------------------------------我是骄傲的昏割线-----------------------------------------------------

经过刚才从栋哥那里的确认,我现在的岗位是纯研发岗,纯的哦,纯的,啊哈哈哈哈哈哈

要不要这么开森(捂脸跑)

时间: 2024-10-09 15:59:54

FPGA第一篇:SRAM工作原理的相关文章

找工作-第一篇找工作杂谈

1.找工作前的准备工作 1>要对自己的一个长远的规划. 比如我现在的状态是什么样子,工作多久之后我又要变成什么样子,技术要提升到什么程度,技术最新发展方向是什么样子的,几年之后,现在我不关心的技术会不会成为我到时候找工作的绊脚石. 2>决定找工作了,要做足准备.起嘛你要回想起你上一份工作做了什么实在的内容,有哪些实在的干货可以拿出来晾晒. 还有就是了解自己将要投递哪些公司.哪些职位.一般公司为了让人投递简历,除了基本的要求写在了招聘信息上之外,往往还需要应聘者去了解它可能还需要哪些技能知识储备

JAVA知识积累 JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】

JSP全名为Java Server Pages,java服务器页面.JSP是一种基于文本的程序,其特点就是HTML和Java代码共同存在! 为什么需要JSP JSP是为了简化Servlet的工作出现的替代品,Servlet输出HTML非常困难,JSP就是替代Servlet输出HTML的. 简单使用一下JSP 在idea下生成一个JSP,我们来看一下JSP长什么样子 <%@ page contentType="text/html;charset=UTF-8" language=&q

SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 &lt;第一篇&gt;

一.存储结构 在SQL Server中,有许多不同的可用排列规则选项. 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D").因为所有内容都表示为数字,所以处理起来速度最快,遗憾的是,它并不总是如人们所想象,在WHERE子句中进行比较时,使用该选项会造成严重的混乱. 字典顺序:这种排序方式与在字典中看到的排序方式一样,但是少有不同,可以设置大量不同的额外选项来决定是否区分大小写.音调和字符集. 1.平衡树(B-树) 平衡树或B-树仅是提供了一种以

JavaScript动画工作原理之(完结篇)

原作者:Steven Riche 发布时间:2014年2月18日 原文链接:http://code.tutsplus.com/tutorials/javascript-animation-that-works-part-4-of-4--net-35263 翻译:子毅 --------- 将JavaScript进行到底 碎碎两句 折腾了一个多月,杂七杂八的事情加在一起,简直糟透了.博客停了大概有一个月了,从今天起一切都是新的,做好自己就OK了 ---------------------------

CoreCLR源码探索(七) JIT的h5牛牛源码出售工作原理(入门篇)

很多C#的初学h5牛牛源码出售Q1446595067官网:h5.haozibbs.com者都会有这么一个疑问, .Net程序代码是如何被机器加载执行的? 最简单的解答是, C#会通过编译器(CodeDom, Roslyn)编译成IL代码, 然后CLR(.Net Framework, .Net Core, Mono)会把这些IL代码编译成目标机器的机器代码并执行. 相信大多数的C#的书籍都是这样一笔带过的. 这篇和下篇文章会深入讲解JIT的具体工作流程, 和前面的GC篇一样, 实现中的很多细节都是

web工作原理及http协议(基础篇)

web工作原理及http协议(基础篇)1.常见的应用架构(1)C/S?全称client/sever,即客户端/服务器C/S架构软件(即客户机/服务器模式)分为客户机和服务器两层:第一层是在客户机系统上结合了表示与业务逻辑,用户表示层,需要程序员自己写客户端:第二层是通过网络结合了数据库服务器,数据库层.(2)B/S?全称Browser/Server,即浏览器/服务器只要有浏览器就可以打开2.WEB工作原理HTTP处理流程:建立连接-->客户端浏览器发送请求信息--->web服务器解析请求并找到

深入理解javascript作用域系列第一篇——内部原理

× 目录 [1]编译 [2]执行 [3]查询[4]嵌套[5]异常[6]原理 前面的话 javascript拥有一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量,这套规则被称为作用域.作用域貌似简单,实则复杂,由于作用域与this机制非常容易混淆,使得理解作用域的原理更为重要.本文是深入理解javascript作用域系列的第一篇——内部原理 内部原理分成编译.执行.查询.嵌套和异常五个部分进行介绍,最后以一个实例过程对原理进行完整说明 编译 以var a = 2;为例,说明javasc

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 图3 将.s文件中的链接语句删除,获得最后的汇编代码 二.分析堆栈变化情况 三.总结 阐明对“计算机是如何工作的”的理解. ①计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作. ②从硬件的角度看,是通过总线连接C

第82课:Spark Streaming第一课:案例动手实战并在电光石火间理解其工作原理

本期内容: 1.Spark Streaming 动手实战演示 2.闪电般理解Spark Streaming原理 案例动手实战并在电光石火间理解其工作原理 流(Streaming),在大数据时代为数据流处理,就像水流一样,是数据流:既然是数据流处理,就会想到数据的流入.数据的加工.数据的流出. 日常工作.生活中数据来源很多不同的地方.例如:工业时代的汽车制造.监控设备.工业设备会产生很多源数据:信息时代的电商网站.日志服务器.社交网络.金融交易系统.黑客攻击.垃圾邮件.交通监控等:通信时代的手机.