1.CPU的功能和基本结构
1.1.CPU的功能
1.指令控制:取指→分析→执行
2.操作控制:通过操作信号控制各部件
3.时间控制:控制具体操作的时间顺序
4.数据加工:各种运算
5.中断处理:例如I/O操作和异常
1.2.控制器和运算器的功能
1.CPU由控制器和运算器构成
2.运算器:对数据进行处理
3.控制器:协调并且控制各部件执行程序的指令序列
①取指令:自动形成指令地址→PC + ”1“;在指令结束后,自动发出取指令命令
②分析指令:操作码译码→分析该操作码执行具体操作;产生操作数的有效地址→根据寻址方式的不同和指令中的形式地址形成有效地址
③执行地址:每条指令分解成若干个微操作,一个微操作对应一个操作信号,操作信号形成控制序列,通过该控制序列控制相应部件(运算器、存储器、IO等等)进行对应操作
④中断处理:管理总线和输入输出(IO)(针对计算机外部);处理异常(例如除0,针对计算机内部)
1.3.运算器的基本结构
1.算术逻辑单元(ALU):进行算数/逻辑运算(单总线下,需要搭配寄存器)
2.通用寄存器组:存放各种操作数,包括源操作数、目的操作数和中间结果等 用户可见
3.暂存寄存器:暂时存放主存中读入的数据
4.累加寄存器(ACC):暂时存放ALU运算的结果,用于加法操作→用户可见
5.程序状态字寄存器(PSW):保存结果的各种状态信息(OF、ZF、CF、SF等),条件转移指令可以通过这些状态信息判断是否进行转移→用户可见
6.移位器:进行移位运算
7.计数器:控制乘/除操作次数
1.4.控制器的基本结构
1.程序计数器(PC):用于指出下一条指令的存放地址,CPU根据PC的内容进行取值
PC有自增”1“功能:在取指令完成后自动进行,具体加多少根据指令长度/编址方式等决定
PC的内容可能会被转移指令(JMP等)所改变→用户可见
2.指令寄存器(IR):用于保存当前执行的指令
PC取出指令后,将该指令放到IR中,每条指令分为OP/AD两部分
AD:指明地址码,送往总线
OP:指明操作码,送往CU
3.指令译码器:对操作码部分进行译码,向控制器提供特定的操作信号。即分析该操作码的具体操作是什么
4.微操作信号发生器:根据译码器、PSW提供的控制信号生成微操作的序列(控制各种IN/OUT信号)
5.时序系统:控制执行顺序
6.存储器地址寄存器(MAR):存放要访问的主存单元的地址
7.存储器数据寄存器(MDR):存放向主存写入/从主存读出的数据
1.5.用户可见/不可见
可见:PSW、通用寄存器、PC、ACC
不可见:MAR、MDR、IR、暂存寄存器
2.指令执行过程
2.1.指令周期
1.指令周期:CPU从主存中取出并执行指令的全部时间
①由若干个机器周期组成(CPU周期),每个机器周期由若干个时钟周期组成
②不同的指令包含的机器周期可能不同
2.取指令需要进行访存,而对指令译码(分析指令)相比之下所需时间很短,因此可一起划分为取值周期
3.指令周期可以分为取值周期、间址周期(间接寻址)、执行周期、中断周期(中断操作)
可以通过四个触发器判断正处于哪个周期
2.2.指令周期的数据流
1.取址周期:
2.间址周期:
①IR是MDR的副本,因此,既可以是IR的内容给MAR进行寻址,也可以是MDR的内容
②原IR中的内容为操作码+形式地址(间接),仅改变IR形式地址的部分,操作码可以不改变
3.执行周期:不同指令的数据流向不同
4.中断周期:需要保存断点(使用堆栈)
①下一条指令执行的地址始终是根据PC得到的
②在执行中断前需要保存当前PC的内容:
Ⅰ计算机为每个程序的运行开辟堆栈,SP是该堆栈的栈顶元素,在执行中断时,先要进行压栈操作,即SP - 1(也可能是+1),然后将SP中的内容存入MAR中(指明接下来要进行写操作的是哪一个地址,即表明存放PC当前内容的地址)
ⅡCU发出写信号
Ⅲ将PC存入MDR中(此时,PC的内容就写入了MAR对应的地址中)
Ⅳ修改PC的内容,执行中断程序
2.3.指令执行方案
1.单指令周期:所有指令按相同时间执行,即执行周期取决于最长的指令(串行,低效率)
2.多指令周期:不同类型的指令有不同的执行周期(串行,相较于单指令更高效)
3.流水线方案:每个时钟周期启动一条指令(并行,根据不同周期运用不同部件的特性)
3.数据通路的功能和基本结构
3.1.数据通路的基本结构
Ⅰ专用数据通路:两个部件间专用的连接线路。需要添加MUX(多路选择器)或者三态门
①MUX的作用:通过控制信号(R0/R1/R2/R3)选择具体哪条线路输入/输出(控制整体)
②三态门的作用:通过控制信号(IN/OUT = 0/1)控制当前线路是否进行输入/输出(控制个体)
③性能高,不存在数据冲突(每个部件都有专属线路),但结构复杂
ⅡCPU内部单总线:将所有寄存器的输入/输出端都连接到一条公共的通路,同一时间仅能有两个部件进行数据交换
①某个寄存器输入:该寄存器的IN信号有效
②某个寄存器输出:该寄存器的OUT信号有效
③结构简单,但是存在数据冲突现象,因此,需要添加暂存寄存器解决
暂存寄存器:暂时存储从主存中读来的数据。例如:进行加法操作a + b时
(1)将加数a从主存中读入并存放到ALU输入端的暂存寄存器
(2)将b从主存中读出通过ALU的B中输入,将ALU输入端暂存寄存器中的a通过ALU的A中输入
(3)ALU的计算结果先存放到ALU输出端的暂存寄存器中,需要等待两个输入端的信号稳定之后,再将该暂存寄存器中的结果输出到对应的寄存器中(防止总线数据冲突,导致运算出错)
ⅢCPU内部多总线:将所有寄存器的输入/输出端都连接到多条公共的通路,每条总线都可以进行两个部件的数据交换
3.2.CPU单总线方式
1.bus指代总线:→BUS表示数据输入到总线中,BUS→表示总线的数据输出
2.需要注明控制信号是否有效
3.数据流通需要一个部件OUT有效和一个部件IN有效(inE/outE表示外部总线)
4.主存和CPU之间的数据传送:
①MAR存放的是CPU将要对主存中进行读/写的数据的地址
②CU需要通过控制总线向主存发出读/写命令,MAR中的地址通过地址总线送往主存(CU也需通过控制总线给MAR发出控制信号)
③读:主存中的数据通过数据总线输入到MDR中(需要有个控制信号控制该线是否接通——MDRinE,E表示外部总线,需要区别于MDRin,同理MAR读到主存中时,也有MARoutE)
写:MDR中的内容通过数据总线输入到主存的相应地址中(MAR内的地址)
④MDR中的数据通过数据总线送到IR中
5.算数/逻辑运算:例如加法操作,其中一个操作数已存放在ACC中
①取出操作数:IR分为OP和AD两个部分(OP为操作码,AD为地址码)
Ⅰ通过IR的AD部分送往MAR
Ⅱ由于IR和MDR中的数据是一样的(需要MDR没更新过数据),因此,也可以通过MDR的AD送往MAR
②CU发出读命令:主存根据MAR的地址通过数据总线将该地址的数据送往MDR中(一个加数)
③MDR数据送往暂存寄存器Y中:ALU的两端需要同时有效,而该CPU是单总线结构,同时输出到总线上会产生数据冲突,因此,需要不经过总线就能输入到ALU的Y将一个操作数暂存
如果采用双总线结构,就不需要暂存寄存器,两个总线分别输入一个操作数到ALU的一端即可
④ALU进行计算:ACC和Y中的数据分别输入到ALU两端,CU向ALU发出控制信号,ALU进行加法计算,然后将结果输出到Z中
⑤Z通过内部总线将Z中内容输入到ACC中
3.3.CPU专用数据通路方式
哪两个部件进行数据交换,就通过控制信号将连接该部件的导线接通