EDA365电子论坛网

标题: 数据是如何存入计算机的? [打印本页]

作者: alexwang    时间: 2020-7-8 13:32
标题: 数据是如何存入计算机的?
本帖最后由 alexwang 于 2020-7-8 13:35 编辑
& p0 F& B! v/ K2 R. e6 R
  O) U" h0 Z7 a4 c- e9 s4 ^+ i

数据是如何存入计算机的?

EDA365原创   作者: 巢影字幕组


5 T, G; f3 ~$ y

, Q- Z! p1 ]( M& v" a

对于计算机我们肯定都很熟悉,它的内部有ALU进行算术和逻辑运算,可是他们运算得出的结果怎么办?扔掉吗?那这个计算就没有任何意义了。


1 b( F7 ]  ^# ]' `9 |. f+ o0 J

因此,那些计算出来的结果就需要存起来,于是就有了计算机内存。


" y& P& X2 O! _- `/ c' G

当打游戏或者编辑某个文档且进入尾声的时候,电源被切断的惨痛经历大家应该都经历过,再次打开电脑的时候,上次的数据都没了,这就是随机存取存储器,简称RAM,还有一种就是电源关闭了数据还在,这就是持久存储。

) I# D: C) _) [6 o- W4 O6 `0 {( |

上面的有没有理解不重要,现在我们从简单的只能存1个bit电路开始,来了解一下内存的工作原理吧!

4 G) s  A0 `- z

先看OR门,将输出传回输入,看看发生了什么?

; v1 ^3 m0 J5 n5 v4 Q; r7 R4 x
1 D; T0 f. j9 H) x( A1 U/ N+ ]2 O
6 r' C* A. V& Q' i+ T  [

4 G. M6 W& V' C- r. b

首先,将两个输入A、B均设为0,“0 OR 0”是0,输出0;如果将A变成1“1 OR 0”为1,输出1,输出回到B,B变为1,后面再怎么改变A的值,输出仍然为1,这个电路可以用来记录1。

5 y2 Q0 ]; T: U8 J

再来看看AND门


# R! d0 J* N8 B% B3 B) d6 O3 R% ^( \
5 E. d( q, i6 d

+ o' I# g9 t  S% D4 {
" o7 s$ U6 @' v, d  K

将A和B都设为1,“1 AND 1”的输出是1;如果将A变为0,输出0,输出回到B,B变为0,后面再怎么改变A的值,输出仍然为0,这个电路记录0。


$ s* h/ G, r0 r6 s" Z

现在有了记录1和0的电路,为了做出有用的存储(memory),我们将两个电路合起来,变成了“AND-OR锁存器”

' o# R  N( E; T5 U

. @% {  O( O% T1 ^: Z4 \1 P- O& x( G, v( t, }' t
4 R: ~7 Q* A" D

它有两个输入,"设置"( SET )和"复位" ( RESET ),如果“设置”和“复位”都是0,电路的输出就是最后放入的内容,它存住了1 bit的信息,这就是存储!

6 B* m4 B( A1 H' i. C

注:之所以叫“锁存”,是因为它“锁定”一个特定值并保持状态不变。数据放入叫“写入” ,数据输出叫“读取”。

$ ]7 K. x) c5 Z) j1 W, l9 q

- b0 ~7 v; s5 c7 g' y- l0 i& X
( w* l9 k5 f9 d# A
/ o0 y0 c% I' Q7 y

用两个输入SET和RESET有点麻烦,为了更方便,我们只用一个输入线,将它设为0或1来存储值,再加一根“允许输入线”来“启用”(enable)内存,启用时允许写入,未启用时“锁定”,再与一些额外逻辑门就可以组成一个叫"门锁"(Gated Latch)的电路。

8 Q4 ^/ z6 `3 U: Q2 w

刚刚我们只存了1bit,没什么大用,但如果我们并排放8个锁存器,就可以存8位信息,这个8bit数字组的锁存器叫“寄存器”,寄存器能存多少个Bit叫“位宽”。


+ M' F5 ]! G$ U: v" F( }! b" }

早期电脑用8位寄存器,然后是16位,32位,如今大多计算机都是64位宽的寄存器。

) n  S0 ?/ E, ?/ ^- B

- [& z& h) o) N. w" y' E  M; y3 R) i4 ~: |; r
4 h' W$ G3 u$ }8 x! V

在写入寄存器之前,要启用里面所有锁存器,我们可以用一根线连接所有“允许输入线”,并设为1,然后用8条数据线发数据,最后将“允许写入线”设回0,8bit的值就存好了。


+ l# }* L* Y0 G. j4 Q5 X

对于bit少的,这样并排摆放锁存器可以,可是对于64位寄存器要64根数据线,64根连到输出端,这怎么办?

' U& l( a: q0 Z- p' D

幸运的是,只要1根线启用所有锁存器,这样加起来也要129根线;那存256个bit,要513根线,存放的数据越多,需要的线就越多,那有什么好的解决方法吗?

8 }* O9 |% z5 c; V+ X% y1 ~

0 D7 M2 t/ y: g* k9 @: [, y& [
# p" Z" @" p8 g& t& @' T$ c$ u) J( i# N9 B- l7 U' J/ I

解决方法就是用矩阵!


7 o1 J+ ^% L+ d

在矩阵中,我们将锁存器做成网格,那么存256位只需要16x16的锁存器。


7 Y* U7 J+ w0 M/ i! Q8 P

让我们看看矩阵锁存器是如何工作的吧?


7 b, V# J! c' s" U# i/ H
# d5 `+ H4 D" p) `3 u
9 z  E, r7 s7 J2 n" g0 Q
9 a8 E. W( @8 |5 v7 u) K! y- W

如果想打开某个锁存器,就打开这个锁存器交叉处的“允许写入线”,这种行/列配置方法,需要一根共享的“允许写入线”连接所有锁存器,为了使锁存器变为“允许写入”状态,行线、列线和“允许写入线”都必须为1,而且每次只能有1个锁存器启用并锁存数据,这样就可以用一根“数据线”连接所有锁存器来传数据。

3 ?  Y8 c7 `) {0 H

这样256位的存储,只需要35根线——1根“数据线”,1根“允许写入线”,1根“允许读取线”和16行16列的用于选择锁存器的线。

; A. C+ J0 F0 x' Q$ I

为了将地址转成行和列,我们需要一个叫“多路复用器”的部件,它的工作方式是:当输入一个4 bit数字时,它会把那根线连到相应的输出线,如果输入0000,它会选择第一列;如果输入0001,则选择下一列,依此类推。

1 B% d) b/ ^( w1 l5 ~2 m) ]# |

5 d! I. r5 k; l1 j; j) S. S
% a* p# z% U) S* y9 f! Z7 S: ]4 y4 Y4 y* ]+ O

一个多路复用器处理行(row),另一个多路复用器处理列(column),那么把256位内存当成一个组件来看,它需要一个8bit地址:4bit代表哪一列,4 bit 代表哪一行,还需要“允许写入线”和“允许读取线”,最后,还需要一条数据线,用于读/写数据。

/ S" o' f; C7 F2 S

今天,我们用锁存器做了一块SRAM(静态随机存取存储器),还有其他类型的RAM,如DRAM,闪存和NVRAM,它们在功能上与SRAM相似,比如用不同的逻辑门,电容器,电荷陷阱或忆阻器等,但从根本上说,所有这些技术都是用矩阵层层嵌套存储大量信息的,有没有觉得很不可思议呢?


* k& f8 \! f# Q; @% I- k% W; I

1 [9 M9 F; X# y, H# r

出品丨EDA365
作者丨巢影字幕组
排版编辑 | momo
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' e
# Y! G+ j  p  _" N; Q
注:本文为EDA365电子论坛原创文章,未经允许,不得转载

作者: CCxiaom    时间: 2020-7-8 15:42

作者: Demyar    时间: 2020-8-4 10:01
生动形象的教学,清晰明了的阐述,帮!
作者: xm1010485746    时间: 2020-10-11 20:12
介绍得很详细
作者: feiban    时间: 2020-10-11 22:05
牛逼,讲的很好
作者: 罗斯    时间: 2021-8-17 17:33
讲的好啊




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2