CPU
- I instruction
- A address
- R register
- D data
- C counter
- P program
- S status
- 状态寄存器 PSW
- 操作控制器:建立数据通路,即从哪流向哪,
- 时序逻辑型:硬布线控制器,就是通过设计电路硬做
- 存储逻辑型:微程序控制器,像程序一样读出一个一个的开关的状态进行操作
- 数据通路:寄存器到寄存器,寄存器由时钟控制,而寄存器到寄存器间可能有各种结构,ALU,MEM等等,中间的却不受时间周期影响
- 指令周期:取指令到执行完指令的时间
- CPU周期:即访问一次内存的时间 主频:CPU周期的倒数
- T周期:访问一次寄存器的时间,每一次都可以打开一条数据通路
- 取指令必须要占用一次CPU周期
- 执行指令则另外花费CPU周期,一个CPU周期可能包含多个T周期,个数不确定
- 如mov,add就是1+2T,进dr,然后再进
- lad则需要3个,放地址+取
- jmp 2个,改
- 方框代表cpu周期,菱形:判断,箭头表示方向,虚线表示阶段,每个方框内写内容即T周期内容,最后加上一个波浪线
- 时序产生器,告诉CPU处在哪一个CPU或T周期
- 硬布线控制器:主状态周期(指令周期)—节拍电位(CPU周期)—节拍脉冲(T周期)
- 而微程序控制器只有:节拍电位(CPU周期)—节拍脉冲(T周期)
- 产生很多信号,如T1,T2,T3,T4,分别在其对应时间是高电平,如T1,就在第一个T周期高电平
- 有一个时钟源(晶振),用来产生固定的频率,环形来产生顺序,从0-》2^n/其他数字,译码译成对应的T,RD和WE是针对存储器的,暂时可以忽略,启停控制逻辑控制什么时候真正开始计数
- 控制方式:同步控制(统一的机器周期,不定长(CPU周期不同)机器周期)/异步控制(每个指令爱执行多久执行多久)
- 微程序控制器:微指令存放在控制存储器中,微操作有的是相容的,有的是互斥的,即不能同时打开开关,有的是相容的,可以同时打开,必须各占一位?
- 一般一条微指令分为两部分,操作和顺序控制字段,控制下面一条执行的微指令
- 微命令就是一个开关的10,微操作就是对应这个微命令
- 微指令组合起来就是微程序
- 顺序控制字段中还包括p1,p2这种可能判断要不要跳转的字段
- 微程序控制存储器(μCM),存储微程序,只取里面的操作码,并进行一些地址转移逻辑,并放到微地址寄存器中并传入进行译码,找到这个操作码对应的微程序
在微程序中可能有条件判断,就通过p2来判断,如果满足则跳到后面的地址+1否则+1
- 微命令编码
- 直接编码:直接表示1和0,开和关,速度最快,但长度最长
- 编码表示法:分成若干个小段,每个小段用最短表示法,每个小段里的都是互斥的,最短,但慢
- 混合表示
- 微地址的形成方法
- 入口地址
- 计数器,跳转,但假如说有多条分支,就会很慢
- 多路转移,当且仅当p1为1,直接通过状态位或寄存器来直接更改微地址寄存器的某几位
微指令格式:
- 水平型:一次性打开所有开关,快但长
- 垂直型:非一次性,按顺序,可能在一个T周期中,也可能不在,垂直短但慢
现在的都是动态的微程序,而以前是静态的
CPU流水线:
比如,一条指令分成取指(IF),译指(ID),读取(EX),写回(WB),那么就是一个4级流水线,如果没有冲突的话,那么加速比就是四级。
不分更多级是因为会冲突。
冲突
- 资源冲突
- 数据相关
- 控制相关,比如碰到条件,就不知道取哪一个
CPU
https://lhish.github.io/project/hide/CPU/