diff --git a/Computer-Organization/1-data-representation-and-operation.md b/Computer-Organization/1-data-representation-and-operation.md index d6ad1b1..2cc5e1c 100644 --- a/Computer-Organization/1-data-representation-and-operation.md +++ b/Computer-Organization/1-data-representation-and-operation.md @@ -768,16 +768,21 @@ int与float转换 + 由于$S_i=A_i\oplus B_i\oplus C_{i-1}$,所以计算的重点是计算$C_i$,而$C_i=A_iB_i+(A_i\oplus B_i)C_{i-1}$,通过递归可以不断展开:$C_i=A_iB_i+(A_i\oplus B_i)(A_{i-1}B_{i-1}+(A_{i-1}\oplus B_{i-1})C_{i-2})$一直可以递归到$C_0$,而$A_i$、$B_i$、$C_0$都是一开始可以知道的,所以第$i$位向更高位的进位$C_i$可根据被加数、加数的第1到$i$位,再结合$C_0$即可确定。 + 将$G_i=A_iB_i$,$P_i=A_i\oplus B_i$,所以式子得到化简:$C_i=A_iB_i+(A_i\oplus B_i)C_{i-1}=G_i+P_iC_{i-1}$。 -+ 所以$C_1=G_1+P_1C_0$,$C_2=C_2+P_2C_1=G_2+P_2G_1+P_2P_1C_0$,$C_3=G_3+P_3C_2=G_3+P_3G_2+P_3P_2G_1+P_3P_2P_1C_0$……所以一直到最后面每个$C_i$都可以用对应的$G_i$和$P_i$计算,这时候$C_i$可以不用递归来计算,可以用一开始就知道的$P_i$、$G_i$和$C_0$计算得到,从而这时候每一位的计算都可以一开始就同时进行了而不用依赖前面的计算。 ++ 所以$C_1=G_1+P_1C_0$,$C_2=G_2+P_2C_1=G_2+P_2G_1+P_2P_1C_0$,$C_3=G_3+P_3C_2=G_3+P_3G_2+P_3P_2G_1+P_3P_2P_1C_0$……所以一直到最后面每个$C_i$都可以用对应的$G_i$和$P_i$计算,这时候$C_i$可以不用递归来计算,可以用一开始就知道的$P_i$、$G_i$和$C_0$计算得到,从而这时候每一位的计算都可以一开始就同时进行了而不用依赖前面的计算。 + 各级进位信号同时形成,又称为先行进位、同时进位。 + $G_i$称为进位产生函数,因为$G_i$是通过$A_i$和$B_i$相与,只有同时为1才会产生1。 + $P_i$称为进位传递函数,$P_i$是通过$A_i$和$B_i$异或,实际上$P_i$为1时,只有此时$C_{i-1}$才能为1,否则为0。 -#### 单级先行进位并行加法器 +#### 单级先行进位加法器 + 称为组内并行、组间串行进位方式。 + 由于逻辑表达式越长就代表电路实现越复杂,所以一般会最多用4个FA和一些新的线路、运算逻辑组成一个运算单元进行串联进位计算。 + 组内的信息可以并行同时得到,但是组件信息需要串行进位。这时虽然实现简单,但是效率对比并行进位并行加法器还是下降了。 -+ 为了解决这个问题按照并行进位并行加法器的思路继续对每一组的数据进行计算。 -+ 令$G_1^*=G_4+P_4G_3+P_4P_3G_2+P_4P_3P_2G_1$,$P_1^*=P_4P_3P_2P_1$。 +#### 多级先行进位加法器 + ++ 多级先行进位方式,又称为组内并行、组间并行进位方式。 ++ 为了解决这个问题按照并行进位并行加法器的思路继续对每一组的数据进行计算。 ++ 令$G_1^*=G_4+P_4G_3+P_4P_3G_2+P_4P_3P_2G_1$为组进位产生函数,$P_1^*=P_4P_3P_2P_1$为组进位传递函数。一开始输入就能确定,所以这些都是一开始就能确定的。 ++ 所以$C_4=G_1^*+P_1^*C_0$,$C_8=G_2^*+P_2^*C_4=G_2^*+P_2^*G_1^*+P_2^*P_1^*C_0$,$C_{12}=G_3^*+P_3^*C_8=G_3^*+P_3^*G_2^*+P_3^*P_2^*G_1^*+P_3^*P_2^*P_1^*C_0$…… ++ 所以4位BCLA只要输出$G_i$和$P_i$就可以在计算机中计算得到$C_{4i}$了。 diff --git a/Computer-Organization/2-storage-system.md b/Computer-Organization/2-storage-system.md new file mode 100644 index 0000000..5438b43 --- /dev/null +++ b/Computer-Organization/2-storage-system.md @@ -0,0 +1,191 @@ +# 存储系统 + +## 存储器概念 + +### 存储部件概念 + ++ 存储元:由电路控制的单个存储部件。 ++ 存储单元:由同一个电路控制的一组同时读写的存储部件集合,一般为一行存储元,一行存储元的个数就代表一次存储的字长。 ++ 存储体:由多个存储体构成的,多个电路控制的存储集合。 ++ 存储字:存储单元通电后由电信号表示可以读写的一个存储单元信息集合。存储字的位数就是存储字长,单位是bit。 ++ 译码器: + + 由于同时对多个存储单元进行读写操作时,数据可能发生混乱。所以就需要用对应数据的所在地址来区分不同的数据。 + + 假如使用$n$位地址码,有一种方法是用1代表当前读取的逻辑地址,即00..01就代表1,00..02就代表2,这时候每一位就对应一位,就只能表示$n$个存储单元。 + + 为了提升效率表示更多地址,所以需要译码器将电平信号转换为逻辑信号,将普通的01信号变为逻辑的二进制信号,从而能表示的地址就变成了$2^n$个。 + + 所以总容量=存储单元个数×存储字长。 + +### 主存结构 + ++ 存储矩阵:由大量相同位存储单元阵列。 ++ 译码驱动:将来自地址总线的地址信号翻译成对应存储单元的选通信号,该信号在读写电路的配合下未完成对被选中的单元的读写操作。 + + 译码器:将MAR输入的地址进行译码,选择选中的存储单元地址。 + + 驱动器:根据译码器提供的地址,通过驱动器获取对应存储单元。 ++ 读写电路:包括读出放大器和写入电路,用来完成读写操作。根据控制电路的读或写操作要求,将MDR传入的数据写入存储体中,或将存储体中的数据读出到MDR中。 ++ MAR:地址寄存器,保存从地址总线输入的地址。 ++ MDR:数据寄存器,保存读出或写入的数据。 ++ 地址线:用来输入CPU要访问的主存地址,是单向的,位数与CPU芯片容量相关,一般与MAR位数相等。直接连接MAR。多少个存储单元就多少根地址线 ++ 数据线:用来输入输出数据,是双向的,位数与读入写入数据位数相关。直接连接MDR。存储字长多少位就多少根数据线。 ++ 地址线和数据线位数同时决定的内存大小,假如地址线有$N$根,数据线有$M$根,则芯片容量为$2^N\times M$B。地址线位数代表存储体的行,数据线代表存储体的列。 ++ 片选线:是整个存储芯片的开关,用来确定哪一个存储芯片被选中。 + + 高电平有效:接收到高电平时代表整个电路是工作的,接收到低电平时代表整个电路的关闭的。 + + 低电平有效:接收到低电平时代表整个电路是工作的,接收到高电平时代表整个电路的关闭的。若片选线上有横杠代表低电平有效。 + + $\overline{CS}$:芯片选择信号,低电平有效。 + + $\overline{CE}$:芯片使能信号,低电平有效。 ++ 读写控制线,决定芯片进行读写操作: + + 如果是一根就用$\overline{WE}$表示,低电平写,高电平读。 + + 如果是两根,则$\overline{OE}$低电平表示允许读,$\overline{WE}$低电平表示允许写。 + +### 存储器的分类 + ++ 作用: + + 高速缓冲存储器cache。 + + 主存储器: + + 主存。 + + 内存。 + + 辅助存储器: + + 辅存。 + + 外存。 ++ 存储介质: + + 磁表面存储器: + + 磁盘。 + + 磁带。 + + 磁芯存储器。 + + 光存储器:光盘。 + + 半导体存储器。 ++ 存取方式: + + 随机存取: + + RAM:随机存取存储器: + + DRAM。 + + SRAM。 + + ROM:只读存储器。 + + 串行访问: + + 直接存取:磁盘。 + + 顺序存取:磁带。 ++ 信息可保存性: + + 断电后信息是否消失: + + 易失性:RAM。 + + 非易失性:磁带、ROM。 + + 破坏性,存取是否影响存储内存: + + 破坏性读出:DRAM。 + + 非破坏性读出。 + +### 存储器性能指标 + +1. 存储容量:存储字数×字长(如1M×8位)。 +2. 单位成本:每位价格=总成本/总容量。 +3. 存储速度:数据传输率=数据的宽度/存储周期: + + 存储周期=存取时间+恢复时间。 + + 存取时间(Ta):存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间。 + + 存取周期(Tm):存取周期又称为读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的金部时间,即连续两次独立地访问存储器操作(读或写操作)之间所需的最小时间间隔。 + + 主存带宽(Bm):主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字/秒、字节/秒(B/s)或位/秒(b/s)。 + +### 存储器层次化结构 + ++ CPU。 ++ Cache:为了解决CPU的高速与主存之间的低速速度不匹配的问题,由硬件自动完成。 ++ 主存。 ++ 辅存:为了解决主存容量不足的问题,由硬件和操作系统共同完成。 ++ 虚拟存储系统。 + +## 半导体随机存储器 + +### SRAM和DRAM + +随机存取存储器RAM分为SRAM和DRAM,即静态与动态。 + +#### SRAM和DRAM的区别 + +类型|SRAM|DRAM +:--:|:--:|:--: +存储信息|双稳态触发器,分为0态和1态|电容,充电是1,否则为0 +破坏性读出|非;读只用查看触发器状态;写只用改变触发器状态|是;读需要连接电容,检测电流变化;写需要给电容充放电 +需要刷新|不要,能保持两种稳定的状态|需要,因为电容上的电荷只能维持2ms +送行列地址|同时送,因为地址分为行地址和列地址一同发送|分两次送,行地址和列地址分开,所以地址线可以复用,线路减少一半 +运行速度|快|慢 +集成度|低,6个逻辑元件构成|高,1个或3个逻辑元件构成 +发热量|大|小 +存储成本|高|低 + +#### DRAM的刷新 + ++ 刷新周期:一般为2ms。 ++ 刷新单元数:以行为单元,每次刷新一行存储单元。 + + 如果译码器有$n$位,则可以寻址$2^n$个,也就需要$2^n$与存储单元连接的线路,很难实现。 + + 将地址拆分为行列地址(DRAM行、列地址等长)。 + + 第一种需要$2^n$根线,而第二种需要$2^{\frac{n}{2}+1}$根线。 ++ 刷新方式:硬件支持,读出一行的信息后重新写入,占用一个读写周期。 ++ 刷新时刻:假设DRAM内部结构排列为128×128的形式,读写周期为0.5μs,所以2ms一共4000个周期 + + 分散刷新:每读取完一行数据就刷新一次。在每1μs中前0.5用于读写,后0.5用于刷新该行。 + + 集中刷新:有一段时间专门刷新,但是这时候就无法访问存储器,称为访存死区。因为有128行,所以一共需要专门刷新64μs,则前面正常读写需要3872个周期,读写时间为1936μs。 + + 异步刷新:隔一段时间刷新一次,一共要刷新所有的行,而如果将刷新设置在不需要访存的译码时间可以加大利用效率。因为每隔2ms要刷新128次,所以平均2ms/128=15.6μs一次,每15.6μs中有0.5μs的死时间。 + +#### RAM的读写周期 + ++ 读周期: + + 从给出有效地址开始,到读出所选中单元的内容并在外部数据总线上稳定地出现所需的时间,称为读出时间($t_A$)。从数据稳定到数据有效之间存在一个时间缝隙。 + + 地址片选信号$\overline{CS}$必须保持到数据稳定输出,$t_{CO}$为片选的保持时间,即发出片选信号的从地址有效到地址失效的时间,在读周期中$\overline{WE}$为高电平。 + + 读周期与读出时间是两个不同的概念,读周期时间($t_{RC}$)表示存储芯片进行两次连续读操做时必须间隔的时间,因为里面存在要等待数据稳定才能开始读的等待时间等其他时间,所以必然大于等于读出时间。 ++ 写周期: + + 要实现写操作,要求片选信号$\overline{CS}$和写命令信号$\overline{WE}$必须都为低电平。 + + 为使数据总线上的信息能够可靠地写入存储器,要求$\overline{CS}$信号与$\overline{WE}$信号相“与”的宽度至少为$t_{WC}$。 + + 为了保证在地址变化期间不会发生错误写入而破坏存储器的内容,$\overline{WE}$信号在地址变化期间必须为高电平。 + + 为了保证有效数据的可靠写入,地址有效的时间至少应为$t_{WC}=t_{AW}+t_W+t_{WR}$。其中$t_{AW}$和$t_{WR}$为写入前和写入后必须的间隔时间,$t_W$为写入的时间。 + + 为了保证在$\overline{WE}$和$\overline{CS}$变为无效前能把数据可靠地写入,要求写入的数据必须在$t_DW$以前在数据总线上已经稳定。 + +### ROM + +只读存储器ROM即使断电也能保存数据,主存不能直接与CPU相连,所以一定会出现ROM来完成这个工作。 + +ROM写入速度不如RAM,所以一般还是用来保存信息而不用于大量的写。 + +#### ROM的分类 + ++ 掩膜式只读存储器(MROM):存储内容由半导体制造厂按用户提出的要求在芯片的生产过程中直接写入,无法修改。 ++ 一次可编程只读存储器(PROM):存储内容由用户用专门的设备(编程器)一次性写入,之后无法修改。 ++ 可擦除可编程只读存储器(EPROM):修改次数有限,写入时间长: + + 紫外线擦除(UVEPROM)。 + + 电擦除(EEPROM)。 ++ 闪速存储器(Flash Memory):如U盘,写入速度快。 ++ 固态硬盘(Solid State Drives):控制单元+FLASH芯片。 + +## 主存与CPU连接 + +### 连接原理 + ++ MDR和MAR虽然为寄存器,但是现在一般集成在CPU上。 ++ 数据总线直接连接在MDR上,可以写入也可以读出,是一个双向的。 ++ 地址总线直接连接在MAR上,将CPU的地址要求交给主存,是一个单向的。 ++ 控制总线向主存发送控制类型,如读写要求,是一个单向的。 + +### 主存分配与片选 + ++ 指按照不同的长度切分存储单元。 ++ 若字长为4B,总容量为1KB,则按字节寻址是1K个单元,每个单元1B;按字寻址是256个单元,每个单元4B;按半字寻址是512个单元,每个单元2B;按双字寻址是128个单元,每个单元8B。 ++ 线选法:当某地址线信息为”0’时,就选中与之对应的存储芯片,只能一位有效。优点:不需要地址译码器,线路简单。缺点:地址空间不连续,选片的地址线必须分时为低电平(否则不能工作),不能充分利用系统的存储器空间,造成地址资源的费。 ++ 译码片选法:通过地址译码芯片产生片选信号。如线选法如果三位编码只能选择三个芯片,而译码片选法三位编码可以选择八个芯片,即三位二进制编码。优点:地址空间可连续,可以增加逻辑设计。缺点:电路逻辑复杂。 + +### 主存容量扩展 + +为了获取更多的容量,所以需要对主存容量进行扩展。 + ++ 位扩展法:CPU的数据线数与存储芯片位数不一定相等,用多个存储器件对字长进行扩展。地址总线和片选线都是并联的,数据总线连接在每一块芯片上。 ++ 字扩展法:增加存储器中字的数量,而位数不变,字扩展将芯片的地址线、数据线、读写控制线相应并联,用片选信号区分个芯片地址范围。 ++ 字位同时扩展法:即增加存储字的数量又增加存储字长。各芯片连接地址线的方式相同,但是连接数据线的方式不同,需要通过片选信号$\overline{CS}$或采用译码器设计连接到对应芯片。 + +**例题** 设CPU有16根地址线,8根数据线,并用$\overline{MREQ}$作为访存控制信号(低电平有效),用$\overline{WR}$作为读/写控制信号(高电平为读,低电平为写)。现有下列存储芯片:1K×4位RAM,4K×8位RAM,8K×8位RAM,2K×8位ROM,4K×8位ROM,8K×8位ROM及74LS138译码器和各种门电路。画出CPU与存储器的连接图,要求: + +1)主存地址空间分配:6000H~67FFH为系统程序区;6800H~6BFFH为用户程序区。 + +2)合理选用上述存储芯片,说明各选几片? + +3)详细画出存储芯片的片选逻辑图。 + +系统程序区需要使用ROM,用户程序区需用RAM。 + +第一步根据地址线、数据线,选择存储芯片。 + +对于系统程序区,CPU数据线有八根,所以存储器的位数应该为八位。CPU从6000H到67FFH之间一共有800H个地址,即为2K个地址。所以就应该选择2K×8位的ROM。对于用户程序区,6800H到6BFFH一共有400H,即1K,需要使用1K×8位的RAM,但是这时候没有,为了不造成浪费使用两块1K×4位的RAM进行位扩展。 + +然后是地址分配,2K的ROM的地址线应该是11根地址线,1K的RAM地址线应该是10根地址线。而CPU一共有16根地址线,所以可以分配给RAM和ROM。ROM地址6000H到67FFH是二进制0110 0000 0000 0000到0110 0111 1111 1111,所以选择最低11位进行连接。RAM地址6800H到6BFFH是二进制0110 1000 0000 0000到0110 1011 1111 1111,所以选择最低10位进行连接。 + +然后进行选片信号,即什么时候用RAM什么时候用ROM,其中74LS138译码器是用三位选八位,所以对于ROM和RAM地址,选择从高位开始的能区分ROM和RAM地址的三位,即第三位到第六位的100和101。即地址是100就是ROM,101就是RAM。 \ No newline at end of file