参考资料:
L-1.6: Common Bus system| How basic computer works - YouTube
准备好内存单元、不同类型的寄存器,内存和寄存器、寄存器和寄存器之间都是通过总线连接(假设是直接把数据总线、控制总线、地址总线变成一条总线)。
使用多路复用器实现的总线,在上个视频是有介绍的,需要重新看一下,做笔记,这里就直接使用了总线,多路复用器的实现总线就省略了 。大概介绍一下,我理解的是通过多路复用器来选择哪个寄存器的开关进行操作。在这个图里面如果多路复用器的输入是001,表示开启地址寄存器(AR)的开关;如果多路复用器的输入是010,表示开启程序寄存器(PC)的开关,等等。
假设从内存中读取一条数据,需要存放到寄存中的,此时就可以通过多路复用器设置111(因为总共有7个寄存器,所以可以使用000~111也指定哪个寄存器开启),指定传送给哪个寄存器,我理解这个地方传送数据给寄存器或者寄存器传出数据到总线都需要通过多路复用器的设置。
首先从程序计数器(PC)获取下一条指令的地址,然后将地址传送给地址寄存器(AR),地址寄存器(AR)是和内存连接的,地址寄存器将告诉内存,从内存中对应的地址获取数据或者指令,并将数据放到总线上,此时可以通过多路复用器的设置开启数据寄存器(DR),那么数据就被送到数据寄存器上了。
此时可以将数据寄存器(DR)的内容传递到加法器(ALU),此时通过与累加寄存器里的数据进行运算以后,将结果传递给累加寄存器,此时可以通过多路复用器的设置,打开累加寄存器的开关,将累加寄存器中的数据传送到总线上,然后再次通过多路复用器的设置,打开输出寄存器的开关,将总线上的数据传递给输出寄存器。
每个寄存器都是有LD、INR、CLR这些控制语句,所以我们需要所有寄存器都连接同一个公共时钟,一旦激活时钟,所有寄存器上的内容都会被清除。(对于这个地方的公共时钟,可能是存在问题的,不过应该在后续会具体的学到)
Load A,从内存中获取地址A的数据,并将数据加载到累加寄存器中。此时在累加寄存器中是内存地址为A的数据。
Add B,从内存中获取地址B的数据,并将数据加载到数据寄存器中。此时m[B]将进入到累加器,与累加寄存器中M[A]的数据进行相加,再将结果保留到累加寄存器中。
Store T,此时激活累加寄存器,将M[A]+M[B]的值送到总线上,此时可以将数据传送到临时寄存器上以备不时之需。