3.3 主存储器与CPU的连接
00:00
各位同学大家好,在这一小节中我们要学习主存储器与CPU之间的连接。首先我们会回顾之前小结学习过的内容,我们已经知道了单块存储芯片它对外暴露出来的一些接口,我们首先会探讨单块存储芯片和CPU之间的连接如何实现,接下来会介绍多块存储芯片和CPU之间的连接,分别是位扩展、字扩展和字位同时扩展,这个小节的最后我们还会补充一些关于译码器的知识,补充的内容可能在考题当中遇到,这小节的内容可能会比较多,也比较硬核,特别是对于没有学过数字电路的同学,可能理解起来会比较吃力,建议大家结合我们的课本多看几遍,同时结合我们的课后习题来进行巩固和练习。
00:50
好,首先我们来回顾一下之前小节当中介绍过的单块存储芯片它的一个结构。我们需要对外暴露出这样的一些接口,首间绿色的这些线是用于传送数据的,通常会通过数据总线和CPU进行连接,另外还有红色的这几条线是用于传送这个访问地址的,通常会通过地址总线和CPU进行连接。除此之外还需要暴露出片选线的接口,还有读写控制线的接口,CPU通过控制总线来发送这些控制信号。
01:24
我们给出的这个图示应该是一个8乘以8位的存储芯片,因为我们总共只有8个字,每一个字的字长是8位。好,现在问题来了,我们这儿只使用了单块的存储芯片来存储数据,并且只能存储8个字节的数据。那现在如果我们想要扩展我们主存的字数应该怎么办呢?这就是这个小节要学习的字扩展法要解决的问题,我们可以连接多块存储芯片来扩展主存的字数。
01:58
好,另一个问题,我们这儿给出的这块存储芯片,它的字长只有8位,也就是说CPU一次只能存或者取8个比特的数据。但是现在的CPU大多数可以同时存或者取64个比特,64位的信息数据,也就是说现在的计算机数据总线的宽度通常至少都有64位这么宽。好,之前我们说过,我们应该尽可能的保持数据总线的宽度和主存的这个存储字长一样,只有这样我们才可以尽可能的发挥数据总线它的一个性能,每一次多存或者多取一些数据,可以让数据的读写速度更快。
02:39
好,所以现在问题产生了,我们现在拥有的单块存储芯片,如果它的这个芯片的字长比数据总线的宽度更小,那么怎么办呢?这个小节要学习的位扩展就是要解决这个问题,通过多块存储芯片的合理连接,我们可以让整个主存的存储字长拓展为和数据总线宽度一致。好,所以字扩展和位扩展就是这个小节要解决的两个主要问题。
03:11
这儿还需要补充一点,我们之前在讲这个存储芯片的时候,把MAR和MDR都画在了存储芯片里边,但是现在的计算机,通常MAR、MDR这两个寄存器都是集成在CPU内部的,所以现在的存储器当中,它里边的这些寄存器其实并不是MDR和MAR,只不过是一个普通的寄存器而已。因此现在大家使用的计算机一般来说是这样的一个结构,就是CPU里边集成了MDR和MAR,那MDR里边存储的这个数据,也就是要读或者要写的数据,是通过数据总线和主存进行交换的,而MAR里边存储的地址数据是通过地址总线送给主存,另外CPU还需要通过控制总线向主存发送读这一类的控制信息。
04:02
而现在的主存中一般会包含很多块的存储芯片。这个大家可以去淘宝或者京东上随便搜一下,这是三星的一个8GB的内存条,它里面这一个白色贴纸下面大家注意看一下,总共有四块这个黑黑的存储芯片,那16GB的内存条总共有八块。好,所以多块存储芯片如何与CPU进行连接,这个问题是很有现实意义的,非常值得我们研究和探讨。
04:31
接下来为了描述方便,我们给一块存储芯片的各个输入信号和输出信号进行一个命名。我们有可能需要输入多位的地址,地址我们通常用A来表示,A0、A1、A2,因为地址是address,所以我们用A来表示,A0表示的是地址的低位,A7表示的是地址的高位,当然了地址也有可能有更多位。数据我们通常用D来表示,因为数据是data,所以使用同样的D0表示的是低位,D7表示的是高位。
05:05
另外片选信号我们通常用CS就是chip select来表示。如果CS上面画了一个横线,那么就说明这个片选信号是低电平的时候有效,而如果头上没有横线,那么就说明这个片选信号是高电平的时候有效。那大多数的教材都是把片选信号用CS这样的英文缩写来表示,当然了也有的教材会用CE这样的缩写来表示,考试的时候说不定都可能遇到。
05:34
好,另外读写控制线的这个信号,我们通常用WE或者WR这样的方式来表示,上面画了一条横线的意思是说,当这个信号是低电平信号的时候,我们是在进行写操作,而如果是高电频信号,那我们要进行的是读操作。这两种英文缩写都是很常用的,当然了也有的地方有可能会把读信号和写信号分开,用两个输入端。输写信号用WE表示,读信号用oe表示,都是低电平有效。好,总之这个地方想给大家强调的是存储芯片当中各种输入信号和输出信号常用的一些英文缩写。大家需要注意上面有没有横线,如果有横线说明低电平有效,没有横线说明高电平有效。
06:22
好,接下来我们来看一下,如果此时我们已经买到了1块8K乘以1位的存储芯片,那这个单块的存储芯片应该如何和我们的CPU进行连接呢?首先这块存储芯片总共有8K个存储单元,8K对应二进制应该是二的13次方。所以我们需要用13根地址线来表示这8K的地址。因此这块存储芯片对外暴露出的这个地址线的引脚应该是A0到A12,总共有13条。CPU会把它想要访问的地址通过地址总线给送过来,这样我们就完成了地址线的连接。
07:03
接下来看WE这个信号,这个信号表示的是writing label,就是写使能信号。它的头上没有横杠,那么就说明当这个信号是一个高电平的时候,此时CPU是要往里边写数据。而如果传过来的是一个低电平信号,那么就表示CPU要从中读数据。好,那CPU也会有一个金属引脚来发送这个读写控制信号,那这个信号是通过控制总线传给这个芯片的。好,接下来再看数据的传送。虽然CPU可以通过数据总线同时读或者写8比特的数据,然而由于我们这个存储芯片的限制,我们每一次只能通过数据总线来传送一个比特,也就是说数据总线的传输能力是利用的很不充分的。
07:52
好,不管怎么说,我们也已经完成了单块存储芯片和CPU的连接。好,这个地方还有一个CS也就是片选信号,我们还没有接。由于只有这一块芯片工作,所以我们可以简单粗暴的给它直接接上一个高电平的信号。因为CS的头上没有画横线,意味着片选信号是高电平有效。此时我们整个主存只有一块存储芯片,每一次只能读或者写一倍的数据,所以此时主存的存储字长就是一比特,数据总线并没有被充分的利用。好,为了解决这个问题,我们可以给主存再加上一块相同型号的存储芯片,同样也是8K乘以1位同样的CPU,通过地址总线把它想要访问的这个地址信息传给这块芯片。因为左边和右边这两块芯片它们都有8K的存储单元。所以如果把13位的地址信息同时送给这两块芯片的话,那么这个地址信息可以选中这两块芯片相同位置的存储单元。
09:01
好,读写控制线也是一样的,我们只需要把CPU发出的这些读写控制信号同时送给两块芯片就可以,要么同时读要么同时写。右边这一块芯片,从这儿读出的这一位数据,我们可以作为CPU读入的第一这一位的数据。好,接下来我们只需要给片选信号加一个高电平,这样的话这两块芯片就可以同时工作。进行了这个改造之后,我们整个主存储器总共有两块存储芯片,总体来看存储器的存储字长拓展为了两位,现在我们可以同时读或者同时写两位的信息。
09:41
好,接下来使用同样的方法,我们是不是还可以继续增加同类型的六块芯片,最终我们就可以得到这样的一个连接,每块芯片都有8 cade存储单元,CPU发出的A0到A12这13位的地址信息会同时送给八片存储芯片。由于每一块芯片的存储单元只有一个比特的数据,所以我们会把这八块存储芯片它的这一位数据分别送到数据总线的不同位上。然后接下来数据总线可以同时把这8位的信息送给CPU,这样的话我们就把整个主存的存储字长拓展为了8比特。这种连接方式我们把它称为位扩展的方式,我们把8片8K乘以1位的存储芯片,连接组合成了8K乘以8位的存储器,总容量应该是8KB好,没跟上的同学可以自己再暂停消化一下。
10:44
接下来我们再来看第二种连接方式,叫做字扩展的方式,来看这样的一个场景,假设现在我们买了一片存储芯片,是8K乘以8位的,那CPU的结构是这样的,CPU可以同时读或者写8位的信息。那现在由于我们的存储芯片它的字长已经有8位了,因此这块存储芯片的这个字长,数据的宽度和CPU能够处理的宽度是能够完美匹配上的。对于这个场景,我们不需要像之前那样进行位扩展,数据总线的传输能力已经被使用到极致了。好,同样的由于它有8K的存储单元,因此我们需要有13位的地址信息,接下来再给片选信号加一个高电平,那这块存储芯片就可以正常的工作了。
11:31
好,现在我们会发现CPU还有三个地址位的信息没有被利用到,这个CPU的MAR本来是有16位,也就是说这个CPU它拥有二的16次方这样的一个寻址能力,然而现在我们只利用了13位的地址信息,并没有完全发挥出这个CPU的寻址能力。好,那我们如何解决这个问题呢?同样的我们会买一块同型号的芯片,我们试一试按照之前位扩展的那种连接方法能不能解决问题,也就是说把低位的13根地址线也连到这块新的芯片上,另外这块芯片的8位数据,我们同样通过数据总线传送给CPU,读写控制信号也把它连起来。好,接下来再给这块芯片一个高电平的片选信号。
12:22
那现在问题来了,当CPU给出一个全零的地址之后,这个地址是不是会同时传给左边和右边这两块芯片?而由于此时这两块芯片的片选信号都是一,他们都在工作,因此这两块芯片的零号存储单元的八个比特的信息都会顺着数据总线传给CPU,那两边同时传是不是就会导致数据总线的一个冲突?
12:50
好,那如何解决这个问题呢?关键就在于这个片选信号的使用,我们来改造一下这个电路。现在我们把A13这1位的地址信息连到左边这块芯片,然后A14连到右边这块芯片。由于片选信号是高电平有效,因此当A13和A14分别为1和0的时候,是不是就意味着左边的这块芯片它的片选信号有效,它是被选中的。而右边这块芯片由于传过来的是一个零,因此它不会工作,它没有被选中。那这种情况下,CPU提供的第13位的地址,其实只会读取出左边这块芯片对应存储单元的8比特的数据。
13:37
好,现在换种情况,我们让A13和A14分别为零和1。那这种情况下右边这块芯片会被选中,而左边这块芯片输入信号片选信号是0,它不会工作。此时CPU提供的这个第13位的地址,其实指明的是右边这块芯片的一个存储单元。
13:58
好,现在看起来问题已经解决了,但是事情并没有那么简单。如果此时我们给A13、A14输入的都是两个一的信号,那么这两块芯片是不是都会被选中?那这样的话又出现了之前所说的问题,两边会同时读或者同时写数据再次出现了冲突的情况。好,所以如果我们采用这样的连线方式,那么想要让存储器正常的工作,我们只能允许A14和A13这2位要么为01,要么为10,不可以是一一和00。
14:34
当A14为0,A13为1的时候,此时我们选中的是左边这块芯片。而A14为1,A13为0的时候,我们选中的是右边这块芯片。那我们再结合A0到A12,这更低位的这13位,我们就会发现左边这块芯片它所对应的地址应该是01后面全0,一直到01后面全1,是这样的一个地址范围,总共有8K个地址,而右边这块芯片它所对应的地址就应该是10后面全0一直到10后面全1这样的一个范围,同样也是8K个地址。此时如果把它们看作是一整个存储器的话,我们会发现在这个存储器当中,00开头的地址我们不能用,然后11开头的地址我们也不能用。好,所以这种连线方法是有待改进的,那这种连线方法我们把它称为线选法,就指我们会用一个专门的地址线作为片选信号来选中其中的某一块芯片。如果CPU有N条多余的地址线,采用这种方法我们就只能有N个片选信号。
15:47
好,接下来我们对线选法进行一个优化。我们给A13这儿输出的这个线路,把它分两边接出去,然后上面这一端我们接了一个非门,这也是我们在第二章的第一个小节当中介绍过的一个基本的逻辑元件。非门的核心在于前边这儿要有一个小圆圈,这点我们在第二章里边强调过。
16:14
好,现在来看一下,假设此时CPUA13的输出信号是一,那么一这条信号输出之后,下面这一条线我们应该接收到的是一个一,因为就是一个直接的连接,而上面这条线一这个信号经过非门的处理之后一会变0。因为非门就是一个取反,所以右边这块芯片这儿接收到的信号应该是0这个信号。那由于片选信号是高电平有效,因此这种情况下是左边这块芯片正在工作,右边没有工作。此时CPU通过第13位的地址指明了要读出的是哪一个存储单元,读出的是左边这块芯片的数据。
16:56
好,再换一种。如果此时A13是0,那左边这输入的片选信号就应该是0,右边这儿输入的就是一,因为进行了一个非门的取反,所以此时应该是右边这块芯片工作,左边这块芯片不工作。因此这个时候CPU给出的第13位数据其实指明的是右边这块芯片的某一个存储单元,读出的是右边这块芯片的数据。好,所以我们增加了这样的一个小电路之后,我们左边这块芯片它的合法地址范围就变成了一个1,后面再跟任意的13位地址信息。而右边这块芯片就应该是0开头后面13位任意的地址信息。进行这样的改造之后,我们会发现整个存储器它的地址空间就是从零开头,然后后面全0一直到一开头后面全一,整个主存的地址空间是连续的。
17:55
好,我们这儿设计的这个小电路,我们可以把它看作是一个1-2译码器。什么叫一二呢?就是说我们输入一位的地址信息,那么这一位的地址信息有可能呈现出2的1次方两种不同的状态。这两种不同的状态会被译码器翻译为要么是上面这条线高电平,要么是下面这条线高电平。所以这是一二译码器的意思。
18:21
之前其实我们接触过更复杂的译码器,因此我们可以顺着这个思路往下优化。我们可以使用一个译码器来处理cpu的高位地址部分,这种方法我们把称为译码器片选法。如果CPU能够给出N位的地址信息,那么通过译码器的翻译,我们可以得到2的N次方这么多个片选信号。
18:47
好,来看一下,这是我们之前小节中见过的译码器,它的输入端可以输入三个比特的数据,刚好可以和A13到A15对应上。那么三位的地址信息,我们可以把它对应成2的3次方,也就是8种不同的状态。因此这个译码器的输出端总共有八条线,我们可以给这八条线进行一个编号,分别是零一直到七。所以如果输入端输入的是三个0,那么译码器00号选就会被选通。也就是说最上面这条线会发出一个高电平信号,然后下面这些线都是低电平。
19:29
那和之前的命名规则类似,我们可以把这个译码器把它命名为3-8译码器。因为我们输入了三个信号,然后输出的是八个信号,所以叫38译码器。输入类似的也可以有24译码器,输入两个输出四个。
19:45
好,接下来再看一个例子,如果说输入的是001,那么与这个二进制数对应的就应该是二进制的一。因此此时一译码器的编号为一,这一根选通线会不会选通其他的线,输出的都是低电平。如果说是010,那么对应二进制的2,所以译码器的编号为二,这根选通线会被选通,其他的选通线都保持低电平。对了,我们给译码器的这些输出线的编号也可以是逆过来的,就是下面是0123,就是可以逆过来编号。
20:19
好,现在有了译码器之后,我们再来看一下如何更好的进行字扩展。这儿我们给出了一个2-4译码器,就是输入两个信号,输出四个信号。在这个图示当中我们搞了4块8K乘以8位的存储芯片。每一块芯片我们都会接收CPU发过来的第13位的地址信息。如果这些地址线我们是像刚才那样从上面连过来,如果这么画的话,整个图看起来会比较乱。所以我们改变了画线的方式。但是大家需要知道,并不是说这个地址信息是从左边这块芯片传过来的,不是这个意思,所有的地址信息都是直接来自于地址总线,都是CPU传过来的。
21:02
好,另一点需要注意的是,我们这给出的图示当中,CS这个信号上面已经加了一条横线,就是说要低电平有效。那当我们在表示低电平有效的输入信号的时候,我们通常会在上面画一个小圆。所以大家在看书或者做题的时候,CS还有CS上面一条横线,这两种情况都是有可能遇到的。
21:23
好,既然是低电平有效,那就意味着我们要输入的是零这样的一个信号,所以译码器的输出端,我们也画了一个小圆圈。因为第二章我们说过非门的图示最重要的就是这个小圆圈,这个小圆我们可以把它理解为进行了一个取反。刚才我们不是说译码器的输出就是会输出一个一,然后剩下全部零吗?那现在我们把所有的这些位都取反,那是不是就意味着输出的就是只有一个零,然后剩下的全是一?好,所以这是大家看图的时候会遇到的一些小细节。
21:58
好,现在对于这个2-4译码器,我们输入的是A13、A14这2位。那如果说这两位都是零,这时候是不是零号选通线会不会选通?然后其余的这些片选信号都是无效的,那类似的如果A13为1,A14为0,那么就是一号选通线被选通,只有第二片正在工作,其他的芯片都没有被选中。
22:21
好,所以再结合这第13位的信息,我们不难得出这样的结论。如果说我们要访问的是第一块芯片,那么我们A14、A13这2个高位必须为全0。那么这块芯片它所对应的存储地址的一个范围就应该是00后面全0一直到全一,总共8K的地址。而第二块芯片就应该对应的是01,然后后面再跟上13位的地址。第三块芯片就应该是10,后面跟上13位的地址。第四块芯片就应该是11,后面跟上13位的地址。
22:57
好,所以采用译码片选法之后,我们就可以保证整个主存它合法的地址空间是从全零开始,然后一直到15个全一,是一个连续的地址范围。这是我们实际应用里边可以采取的一种设计的思路,不过在考试的时候,为了考察大家的理解程度,它有可能是这么接的,就是给A13和A15作为译码器的输入信号,这样的话无论A14这1位它到底是取零还是取一,它都影响不到我们选片这个操作。当A15和A13都为零的时候,无论我们的A14取什么值,那此时选中的都是第一块芯片,A15和A13分别为零和1的时候,选中的是第二块,那剩下的都是类似。那我们会发现对于第一块芯片来说,当A14为0的时候,我们有可能取得8K个8K个地址。当A14为1的时候,这儿又有8K个合法的地址。所以本来这样的一块芯片它只有8K的存储单元,然而会有16K这么多个合法的地址会对应到这8K的存储单元。
24:12
那对于其他这几块芯片也是类似的,所以在实际应用当中,这种设计是不可能采用的,只有可能在考试当中遇到。好,回到之前这个正常的设计,我们是不是还有A15这1位没有使用?想要再使用这一位很简单,我们只需要换成一个3-8译码器就可以,然后再增加4片8K乘以8倍的存储芯片就可以,这儿就不再赘述。
24:37
好,我们来快速回顾一下字扩展法可以有线选法和片选法这样的两种。线选法就是用N条多余的地址线把它们作为N个片选信号,这种电路会比较简单,但是缺点就是地址空间不连续。而译码器片选法可以把N位的地址信息映射为2的N次方个片选信号,那么设计电路会更复杂,但是地址空间是连续的,所以实际应用中都是采用片选法。
好,目前为止我们学习了什么叫位扩展,什么是字扩展。位扩展可以使存储器的字长变得更长,从而更好的发挥数据总线的数据传输能力。而字扩展可以增加存储器的存储字数,可以更好的利用CPU的寻址能力。这两种方法可以在不同维度上扩展储存的总容量。
25:30
好,既然有位扩展也有字扩展,那我们是不是还可以把这两种方法进行一个结合?二者的结合就是字位同时扩展法,其实原理都是类似的。
我们这儿图里面总共画出了八块芯片,其中每两块芯片为一组实现了位扩展。因为每一块芯片它是16K乘以4位,而我们的这个CPU可以同时读写8位,所以我们可以让两块芯片为一组,上面这块芯片我们可以把它连接上,比如说D0到D3这4根数据线,而后面这块芯片我们可以把连接上D4一直到D7这四根数据线,就这样画的这个空心箭头,其实它指的是数据总线,数据总线总共有8位,其中低8位可以由上面这块芯片传出,然后高8位由下面这块芯片传出。好,这是位扩展,两块芯片为一组。
26:30
再来看字扩展,每一块芯片它的字数是16K,那16K应该是对应二的14次方,所以芯片内的地址总共需要用14位来表示。我们可以把CPU的A0到A13这14位的地址信息作为片内地址,然后这个CPU还有两个高位地址没有使用,那我们可以给它接上一个2-4译码器,总共有四个片选信号,所以我们可以接上这样的四组。而每一组的存储芯片总共有16K这么多个存储单元,每一个单元可以存8位的数据,总共有四组,所以我们就可以得到一个16K乘以8位的一个存储器。
27:14
好,再来看一下每一组芯片它们所对应的一个合法的地址。第一组芯片显然是00开头,第二组是01开头,第三组是10开头,第四组是11开头。整个主存的地址空间是从全零到全一,并且中间是连续不间断的,同时这个主存的字长也能够完美的匹配CPU对数据的读写能力。好的,这就是字位同时扩展法。
27:41
好的,这个小节当中我们学习了主存与CPU的连接,主要分为位扩展、字扩展,还有字位同时扩展。首先我们需要理解每一块单独的存储芯片,它对外暴露出的这些接口分别有什么用,分别需要多少根,特别是地址线还有数据线。对于片选信号CS,我们在画图的时候也需要注意,就是它到底是高电平有效还是低电平有效。如果是低电平有效,那我们在画图的时候需要在那个芯片的头上画一个小圆圈。考试当中比较容易考察的就是我们画红框的这个部分。
首先是译码器的一个使用,大家需要根据译码器的输入和输出的这个连线来分析每一块存储芯片它的地址空间是多少。对于字位同时扩展法,通常考察的是存储芯片的一个选择,具体的大家会在课后习题里边遇到。
28:37
好,接下来我们还需要补充关于译码器的一些小的知识点。之前我们给出的这个38译码器有三个输入端,然后有八个输出端。给定一个输入信号之后,我们的输出端只有一条线会输出高电平,然后其他都会保持低电平,那这个译码器就可以和高电平有效的这种存储芯片配合着使用,因为它输出的有效信号刚好是高电平,把它接上就可以。
29:06
好,再看译码器的另一种画法,其实我们之前说到过,就是如果这个译码器的右边输出端这儿画了一个小圆,那采用这种示意图表示的是我们输出的有效信号是0,然后其他的无效信号都是一,也就是在左边这个译码器的基础上取了一个反。那这种译码器就比较适合和这种,低电平有效的芯片进行配合着使用,因为输出的有效信号是一个低电平,那我们直接把它接上就可以。所以在画图的时候,这芯片和译码器应该是配套的。本质上还是那个问题,要注意到底是低电平有效还是高电平有效。
29:46
现实中的译码器除了输入的地址,还有输出的选通信号之外,其实还会有这样的一个接口叫做使能端。EN指的是enable,这个地方没有画小圆,意思就是说它是高电平有效。这个使能端就是使译码器能够工作的意思,就有点类似于存储芯片的片选信号。好,那这个使能端有什么作用,我们一会儿再来解释。
30:11
还有一种大家有可能遇到的更复杂的译码器,就是会有多个使能端。注意观察下面这两个输入信号,他这画了小圆,意思就是说下面这两个使能信号必须是低电平,而上面这个使能信号必须是高电平,只有这样这个译码器才可以开始工作。这个译码器就是数字电路那门课里边很喜欢考察的74LS138。大家可以去淘宝搜一下,很便宜的这个译码器,只需要3、5块,大家可以买个回来做成项链什么的。假装自己是一个黑客很厉害。
30:48
好,现在注意观察我们输入的这三个使能信号,刚好可以让译码器开始工作。所以我们输入的这个地址信号101,把它转成十进制的话,应该是对应5对吧?所以译码器的输出端只有Y5这条线输出了一个0,而其他都是无效的1,好,现在我们让这个使能信号变得无效,比如说输入三个0,那么由于最上面这个使能信号无效,所以此时译码器的所有的输出端输出的都是1。那类似的如果使能信号是其他的一些非法的状态,那么我们的译码器输出的也都是全一,那这个特性有什么作用呢?CPU可以使用译码器的使能端来控制片选信号的生效时间。
31:38
好,来看一下什么意思。我们的CPU里边除了这个地址的输出,还有数据的输入输出之外,还会有一个很重要的输出信号叫MREQ,就是memory request,主存储器请求的一个信号。当CPU想要正式的访问主存的时候,就会使这个信号有效。由于它上面画了一横,所以就意味着输出的有效信号是一个低电平信号。
32:06
好,现在我们把刚才的这个译码器,它的G1还有G2A这两个南端都给他们一个合法的值,然后把最下面这个G2B给它接上CPU的这个输出端,当CPU没有发出主存请求信号的时候,这个G2B输入的就是一个1,也就是说这个译码器不工作,所有的这些片选信号都是一,没有任何一个存储芯片被选通。而只有CPU发出这个请求信号之后,G2B接收到0这个信号,译码器才会把这儿输入的这些地址信号,把它映射为其中某一位的选通信号。
32:46
好,所以实际当中CPU和主存是这么配合工作的。CPU首先会通过地址线送出地址信号,包括更低的这13位,还有更高的这三位。地址信息是通过电信号来输出的,所以当CPU刚开始输出这些电信号的时候,电信号有可能不稳定。因此CPU送出这些地址信息之后,它需要等一下,等电流稳定之后再发出这个主存请求信号。也就是让译码器的某一个选通线让它有效。这样的话我们就可以保证当一块存储芯片它被选通的时候,这块存储芯片所接收到的地址信号,这些电信号一定是稳定的。因此这就是译码器使能端的一个作用。
33:35
讲到这儿,大家可以再回去看一下3.3那个小节,其中有一个部分讲的是RAM的读写周期。这个部分其实不太重要,所以我们之前把它给跳了。另一个方面,我们结合刚才分析的这个过程,才可以更好的理解这个时序图的一个含义。
33:52
好,来看一下,上面这一列表示的是CPU送出了地址信息,对吧?从这个时刻开始CPU送出了地址信息,但是刚才我们说CPU会稍微等一段时间,等地址信号稳定之后,才开始发出读或者写的请求。好,所以一直等等到这个时刻,我们的CPU才会发出存储器请求信号。这会导致译码器的某一个输出端输出一个有效的片选信号,使得某一片存储芯片被选通。所以这个地方第二行表示的是片选信号的有效时间。
34:29
在这个时刻地址信号稳定了,同时某一片芯片被选通,那经过一小段时间之后,这个芯片里的某一个存储单元的数据就可以通过数据总线给传出。所以这写的是d out把数据传出的意思。等数据传出了一小段时间之后,CPU就可以撤销这个存储请求信号,也就撤销这个片选信号。好,那刚才输出的这些数据是不是也需要经过一小段时间,就是这段时间才可以传给CPU。CPU确定接收到这些数据之后,它才会撤销刚才发出的这些地址信号。好,所以这是之前跳过的一小部分内容,结合我们刚才的讲解会更好理解。
35:15
对了,这个时序图里面地址信号它是不是会往上也会往下。那意思就是说我们传过去的地址有可能是0,也有可能是一对吧?很多0101,所以它是用这样的图来画。而对于CS这个片选信号,当它无效的时候是高电平,这儿被它涂成了黑色。然后当它有效的时候是低电平,所以这儿有一个斜坡,这一段表示的就是低电平时期。另外对于数据的输出,这个部分是不是也是灰色的,表示没有数据输出。那在中间白色这一阶段,它同样是用了既有往上又有往下这样的画法。这也是说输出的数据有可能为零,也有可能唯一有很多0101,好,所以这就是我们之前没有提到的时序图。
36:00
讲了这个部分,大家可以再回王道书来琢磨一下。好的,这就是我们需要补充的关于译码器相关的知识。不管是数电还是计算机组成原理的,某些学校的期末考试都有可能会考察74LS138这个型号的译码器芯片,当题目当中告诉你74LS138的时候,你需要知道这译码器的结构是什么样的,它有几个输入端,有几个输出端。好的,以上就是这一小节的全部内容。