Q&A 13
Y86的SEQ分哪几个阶段?各阶段的主要过程是什么?
取指:从指令存储器读取指令
译码:读程序寄存器
执行:计算数值或地址
访存:读或写数据
写回:写程序寄存器
更新PC:更新程序计数器
对Y86的SEQ阶段分析,12条指令的微操作实现的共同点有哪些?
所有的指令有相同的格式,都按照6个阶段顺序执行
每一阶段的微操作,按照顺序有3-8种
每一条指令在各阶段执行时,根据指令类型按顺序执行不同的微操作
Y86的硬件结构包括哪些?
硬件单元(组合、时序逻辑)、控制逻辑、信号连接线
组合逻辑:硬件单元间传播,不用CLK,有延迟
计算逻辑(ALU、PCINC)
读逻辑( PC、CC、RF、imem、dmem)
硬件单元的时序逻辑-状态单元:都在CLK上升沿时更新。控制阻断
时钟寄存器:PC、CC、STAT的更新
随机访问存储器:RF写、dmem写
怎么理解SEQ原则-从不回读?
所谓CPU顺序实现SEQ:一个时钟变化,引发一个经过组合逻辑的流,从而执行整个指令
一条新指令的执行,即一个CLK是把上一条指令计算结果-状态单元更新,然后其值进行组合逻辑(新指令的计算)的传播
要控制CPU中活动的顺序,只需要用CLK控制寄存器和内存
所有6个阶段的所有步骤的状态更新同时发生(逐级延迟)
且只在时钟上升开始下一个周期时。
当前时钟/指令n结束,下一时钟/指令n+1没有到上升沿前,状态单元的数据-状态并不是本指令/时钟n执行的结果,仍然是上一时钟/指令n-1的结果
指令n的执行结果,到下一指令n+1的上升沿才更新到转状态单元
HALT、NOP的微操作?新增C0指令Iraddq V,rB的微操作?
$ $ | halt |
---|---|
取指 | icode:ifun ← \leftarrow ←M1[PC]读指令字节 |
译码 | |
执行 | Stat ← \leftarrow ←HLT |
访存 | |
写回 | |
更新PC |
$ $ | nop |
---|---|
取指 | icode:ifun
←
\leftarrow
←M1[PC]读指令字节 valP ← \leftarrow ←PC+1计算下一个PC |
译码 | |
执行 | |
访存 | |
写回 | |
更新PC | PC ← \leftarrow ←valP |
$ $ | iraddq V,rB |
---|---|
取指 | icode:ifun
←
\leftarrow
←M1[PC]读指令字节 rA:rB ← M 1 \leftarrow M_{1} ←M1[PC+1]读寄存器字节 valC ← M 8 \leftarrow M_{8} ←M8[PC+2]读立即数8个字节 valP ← \leftarrow ←PC+10计算下一个PC |
译码 | valB ← \leftarrow ←R[rB]读操作数B |
执行 | valE
←
\leftarrow
←valB+valC Set CC |
访存 | |
写回 | R[rB] ← \leftarrow ←valE |
更新PC | PC ← \leftarrow ←valP |
注意:execute中的运算是valB OP valA,而不是valA OP valB | |
M1[PC] 表示从PC开始的内存中读取一个字节的数据 | |
V=====valC,指令中V是加数,是ALUA的一个输入 | |
这些微操作都有现成的硬件结构,所以不需要改动状态单元,但控制逻辑需要稍微调整 |
取指逻辑的need_valC的HCL
need_valC:这个指令包括一个常数字吗?
bool need_valC = icode in { IIRMOVQ,IRMMOVQ,IMRMOVQ,IJXX,ICALL };
硬件单元:
运算逻辑: ALU、PCINC、
时钟寄存器:PC、CC、STAT、
随机访问存储器:RF、IMEM、DMEM
读操作-看成组合逻辑-有地址就有输出
随机访问存储器:RF、imem/dmem可以用特殊的时钟电路来模拟
时钟寄存器:PC、CC、STAT、
写操作:需要时钟信号控制,控制阻断
RF、DMEM、PC、CC、STAT
控制逻辑:每一阶段每一步骤的微操作,在硬件上的映射
在不同硬件单元之间传送数据
操作硬件单元,使得对不同指令执行指定的微操作
组合逻辑:不需要任何时序或控制,只要输入变化了,值就通过逻辑门网络传播
时序逻辑:需要时钟信号控制,进行更新-把输入锁存到输出