EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 alexwang 于 2020-7-8 13:35 编辑 $ b3 o, ~, P; Q) ]
& v$ M" o% p A- a. ]5 O5 G/ P数据是如何存入计算机的? EDA365原创 作者: 巢影字幕组 ! I3 Q! ~/ n2 z" |& D
2 c2 ~/ W* \& L- q5 c* m
对于计算机我们肯定都很熟悉,它的内部有ALU进行算术和逻辑运算,可是他们运算得出的结果怎么办?扔掉吗?那这个计算就没有任何意义了。
" L7 V% L/ w% T G. K. K因此,那些计算出来的结果就需要存起来,于是就有了计算机内存。 2 G2 C8 ^4 b* K% `& q/ S
当打游戏或者编辑某个文档且进入尾声的时候,电源被切断的惨痛经历大家应该都经历过,再次打开电脑的时候,上次的数据都没了,这就是随机存取存储器,简称RAM,还有一种就是电源关闭了数据还在,这就是持久存储。
3 `- w" S+ B8 `7 Z1 c7 w; L: Y9 d上面的有没有理解不重要,现在我们从简单的只能存1个bit电路开始,来了解一下内存的工作原理吧! - U& s g$ F: V2 `
先看OR门,将输出传回输入,看看发生了什么?
7 L$ c1 _2 j% R m0 m# Q: h3 e$ V" t' _* u j, |5 R
1 s4 S% N5 \6 I5 E2 J
& h7 O( _, U6 T9 D1 y6 c! T/ C
首先,将两个输入A、B均设为0,“0 OR 0”是0,输出0;如果将A变成1“1 OR 0”为1,输出1,输出回到B,B变为1,后面再怎么改变A的值,输出仍然为1,这个电路可以用来记录1。
- O) o! G- H |; | ~再来看看AND门
4 C9 I* c5 `# k3 ~
, h4 Y6 G8 X. V( c5 a" \! r. o/ z k9 ^
" E- l: X" r s) D. J$ z
将A和B都设为1,“1 AND 1”的输出是1;如果将A变为0,输出0,输出回到B,B变为0,后面再怎么改变A的值,输出仍然为0,这个电路记录0。
: v( l+ v9 x# [6 [. B现在有了记录1和0的电路,为了做出有用的存储(memory),我们将两个电路合起来,变成了“AND-OR锁存器” B5 M! Z7 o% u+ E q: Q/ Z4 G
% h3 p( R% I2 c
' H9 A+ e+ @( |6 {- {6 Z; w& ]* A
' E5 F6 n. _0 B+ ?/ x! y; v" J它有两个输入,"设置"( SET )和"复位" ( RESET ),如果“设置”和“复位”都是0,电路的输出就是最后放入的内容,它存住了1 bit的信息,这就是存储! - D# ^$ M; l: p# U
注:之所以叫“锁存”,是因为它“锁定”一个特定值并保持状态不变。数据放入叫“写入” ,数据输出叫“读取”。 . D& f8 t* H: C) \6 e6 H6 F
4 }3 |0 y& Z3 T8 l& n
9 k2 A0 o0 V5 J1 L s6 c% C* N9 h- p0 q
用两个输入SET和RESET有点麻烦,为了更方便,我们只用一个输入线,将它设为0或1来存储值,再加一根“允许输入线”来“启用”(enable)内存,启用时允许写入,未启用时“锁定”,再与一些额外逻辑门就可以组成一个叫"门锁"(Gated Latch)的电路。
4 B" l9 N! q1 R0 F刚刚我们只存了1bit,没什么大用,但如果我们并排放8个锁存器,就可以存8位信息,这个8bit数字组的锁存器叫“寄存器”,寄存器能存多少个Bit叫“位宽”。 0 K+ H3 y2 X5 q: @2 J* M
早期电脑用8位寄存器,然后是16位,32位,如今大多计算机都是64位宽的寄存器。
* h- ]& b9 R( B* p
! F6 ~/ z3 b9 \' k- @' M9 p5 o5 u) v5 B' j! r0 f
0 C- b5 f5 _' R: Z/ Z3 G2 [
在写入寄存器之前,要启用里面所有锁存器,我们可以用一根线连接所有“允许输入线”,并设为1,然后用8条数据线发数据,最后将“允许写入线”设回0,8bit的值就存好了。
: B9 {# e+ B$ `6 u* |" I) h对于bit少的,这样并排摆放锁存器可以,可是对于64位寄存器要64根数据线,64根连到输出端,这怎么办? + l; ^2 a* r$ _! W
幸运的是,只要1根线启用所有锁存器,这样加起来也要129根线;那存256个bit,要513根线,存放的数据越多,需要的线就越多,那有什么好的解决方法吗?
6 d; O3 O* e2 b: h6 W2 o3 @1 N' d, W3 m
- W7 U5 M/ l& Q( p- i+ R- `- _4 P+ g2 m
& _4 D' r' z( p+ s8 Q6 S1 n解决方法就是用矩阵! ( Z- t6 M' d: a9 B# H
在矩阵中,我们将锁存器做成网格,那么存256位只需要16x16的锁存器。
0 v$ U$ V& z( k8 ?7 r+ ~" j让我们看看矩阵锁存器是如何工作的吧?
0 Z+ V3 T( F8 e0 j% J
7 @( A+ v- k L! j3 s J
) _( `3 c9 M {
- b4 A1 X+ L6 P如果想打开某个锁存器,就打开这个锁存器交叉处的“允许写入线”,这种行/列配置方法,需要一根共享的“允许写入线”连接所有锁存器,为了使锁存器变为“允许写入”状态,行线、列线和“允许写入线”都必须为1,而且每次只能有1个锁存器启用并锁存数据,这样就可以用一根“数据线”连接所有锁存器来传数据。
6 T/ X' H* R4 D& A4 h这样256位的存储,只需要35根线——1根“数据线”,1根“允许写入线”,1根“允许读取线”和16行16列的用于选择锁存器的线。
2 D2 a' F4 _+ J为了将地址转成行和列,我们需要一个叫“多路复用器”的部件,它的工作方式是:当输入一个4 bit数字时,它会把那根线连到相应的输出线,如果输入0000,它会选择第一列;如果输入0001,则选择下一列,依此类推。
! h- M/ e3 H7 n1 X4 F! p- C3 d+ ?0 O9 E4 B1 S& b2 F7 o2 `/ i
4 g* d$ Q7 a- E/ O; ^, h! a
0 w6 f3 N- ^) ^+ F6 R. S一个多路复用器处理行(row),另一个多路复用器处理列(column),那么把256位内存当成一个组件来看,它需要一个8bit地址:4bit代表哪一列,4 bit 代表哪一行,还需要“允许写入线”和“允许读取线”,最后,还需要一条数据线,用于读/写数据。
" s. a4 [! t. v! l! X1 U今天,我们用锁存器做了一块SRAM(静态随机存取存储器),还有其他类型的RAM,如DRAM,闪存和NVRAM,它们在功能上与SRAM相似,比如用不同的逻辑门,电容器,电荷陷阱或忆阻器等,但从根本上说,所有这些技术都是用矩阵层层嵌套存储大量信息的,有没有觉得很不可思议呢? ! y% G. n0 Z- u! p+ g
! @" @! Z) d0 S/ W
9 w- D" A E$ T: |/ e; T& _3 E9 `8 j7 B' y2 C" j; S" g* ] Y7 ~/ V t% C' v c7 x6 N0 f8 ^* {: K# N: n! w' e5 `( o" n z" v
注:本文为EDA365电子论坛原创文章,未经允许,不得转载 |