9. 假定图6.33多周期数据通路对应的控制逻辑发生错误,使得在任何情况下控制信号PCWr、IRWr、RegWr、BrWr、PCSource、MemWr、MemtoReg、PCWrCond、R-type总是为0,则哪些指令不能正确执行?为什么? 参考答案:
若PCWr=0,则所有指令都不正确,因为无法更新PC
若IRWr=0,则所有指令都不能正确执行,因为IR中不能写入指令
若RegWr=0,则所有需要写结果到寄存器的指令(如:R-Type指令、load指令等)都 不能正确执行,因为寄存器不发生写操作
若BrWr=0,则Branch指令不能正确执行,因为投机计算的分支地址无法送入寄存器 若PCSource=00,则除j之外的其他指令都不能正确得到下条指令地址 若MemWr=0,则Store指令不能正确执行,因为存储器不能写入数据
若MemtoReg=0,则所有Load指令执行错误,因为寄存器写入的是ALU输出
若PCWrCond=0,则Branch指令不能正确执行,因为不能写入转移目标地址到PC 若R-type=0,则所有R-type指令的执行可能出错
10. 假定P.185图6.32多周期数据通路对应的控制逻辑发生错误,使得在任何情况下控制信号PCWr、IRWr、RegWr、BrWr、PCSource、MemWr、MemtoReg、PCWrCond、R-type总是为1,则哪些指令不能正确执行?为什么? 参考答案:
若PCWr=1,则程序执行顺序失控,因为每个时钟都会更新PC
若IRWr=1,则所有指令都可能不能正确执行,因为写入IR的可能不是当前指令
若RegWr=1,则所有不需写结果到寄存器的指令(如:sw、beq等)都不能正确执行
若BrWr=1,则Branch指令不能正确执行,因为运算阶段的ALU输出也会放入寄存器,成为错误的分支转移目标地址。
若PCSource=01,则j和Branch指令不能正确得到下条指令地址 若MemWr=1,则除Store指令外的所有指令都不能正确执行 若MemtoReg=1,则除Load外的所有指令执行错误
若PCWrCond=1,则除Branch外的其他指令可能不能正确执行 若R-type=1,则所有非R-type指令的执行可能出错
12. 假定某计算机字长16位,标志寄存器Flag中的ZF、NF和VF分别是零、负和溢出标志,采用双字节定长指令字。假定Bgt (大于零转移) 指令的第一个字节指明操作码和寻址方式,第二个字节为偏移地址Imm8,其功能是:
若(ZF+(NF⊕VF)=0) 则 PC=PC+2+Imm8 否则 PC=PC+2 (1) 该计算机的编址单位是什么? (2) 画出实现Bgt指令的数据通路。 参考答案:
(1)该计算机的编址单位是字节。
因为PC的增量是2,且每条指令占2个字节,所以编址单位是字节。 (2)实现Bgt指令的数据通路如下
根据“大于”条件判断表达式,可以看出该bgt指令实现的是带符号整数比较。因为无符号数比较时,其判断表达式中没有溢出标志OF。偏移地址Imm8为补码表示,转移目标地址可能在bgt指令之前,也可能在bgt指令之后。计算转移目标地址时,偏移量为Imm8, 范围为-128~127,故转移目标地址的范围是PC+2+(-128)~PC+2+127
如果偏移量为Imm8x2, 转移目标地址的范围是PC+2+(-128×2)~PC+2+127×2,其实意味着相对于bgt指令的前127条指令到后128条指令之间。
IR
OP MOD Imm8 PC +2 ZF NF VF 1 0 Bgt
13. 对于多周期MIPS处理器,假定将访问数据的过程分成两个时钟周期可使时钟频率从4.8GHz提高到
5.6GHz,但会使得lw和sw指令增加时钟周期数。已知基准程序CPUint 2000中各类指令的频率为:Load: 25%,Store: 10%,Branch: 11%,Jump: 2%,ALU: 52%。以基准程序CPUint 2000为标准计算时钟频率提高后处理器的性能提高了多少?若将取指令过程再分成两个时钟周期,则可进一步使时钟频率提高到6.4GHz,此时,时钟频率的提高是否也能带来处理器性能的提高?为什么? 参考答案:
三种频率的机器上,各类指令的百分比和 CPI M1 4.8GHz M2 5.6GHz M3 6.4GHz Load 25% 5 6 7 Store 10% 4 5 6 Branch 11% 3 3 4 Jump 2% 3 3 4 ALU 52% 4 4 5 三种机器的平均CPI和MIPS
CPIofM1=25%x5+10%x4+11%x3+2%x3+52%x4=4.12 CPIofM2=25%x6+10%x5+11%x3+2%x3+52%x4=4.47 CPIofM3=25%x7+10%x6+11%x4+2%x4+52%x5=5.47
MIPSofM1=4.8G / 4.12 =1165 MIPSofM2=5.6G / 4.47 = 1253 MIPSofM3=6.4 G / 5.47 = 1170
由此可见,数据存取改为双周期的做法效果较好。进一步把取指令改为双周期的做法反而使MIPS数变小了,所以不可取。因为数据存取只涉及到load/Store指令,而指令存取涉及到所有指令,使得CPI显著提高。
15. 微程序控制器容量为1024×48位,微程序可在整个控存内实现转移,反映所有指令执行状态转换的有
限状态机中有4个分支点,微指令采用水平格式,微地址由专门的下地址字段确定。请设计微指令的格式,说明各字段有多少位?为什么? 参考答案:
微程序控制器容量为1024×48位,说明微地址占10位,微指令字共48位,其中10位下地址字段用来给
出下条微地址;转移控制字段需要对5种情况进行控制,需3位。例如, 000:取指令微指令首地址
100:根据分支1处的条件选择下条微地址 101:根据分支2处的条件选择下条微地址
110:根据分支3处的条件选择下条微地址 111:根据分支4处的条件选择下条微地址 剩下的48-10-3=35位用来表示微操作码字段。
(如果采用计数器法,则转移控制字段需要对6种情况进行控制,比上述5种情况多一种:即顺序执行下条微指令,此时,也要3位。)
也可以用5位作为转移控制字段, 33位作为微操作码字段 00001,00010,00100,01000,10000
------------------其它
16. 对于多周期CPU的异常和中断处理,回答以下问题:
(1)对于除数为0、溢出、无效指令操作码、无效指令地址、无效数据地址、缺页、访问越权和外部
中断, CPU在哪些指令的哪个时钟周期能分别检测到这些异常或中断?
(2)在检测到某个异常或中断后,CPU通常要完成哪些工作?简要说明CPU如何完成这些工作? (3)TLB缺失和cache缺失各在哪个指令的哪个时钟周期被检测到?如果检测到发生了TLB缺失和
cache缺失,那么,CPU各要完成哪些工作?简要说明CPU如何完成这些工作?(提示:TLB缺失可以有软件和硬件两种处理方式。) 部分参考答案:
a. “除数为0”异常在取数/译码(ID/Reg)周期进行检测 b. “溢出”异常在R-Type指令的执行(Exe)周期进行检测 c. “无效指令”异常在取数/译码(ID/Reg)周期进行检测 d. “无效指令地址”、“缺页”和“访问越权”异常在取指令(IF)周期检测 e. “无效数据地址”、“缺页”和“访问越权”异常在存储器访问(Mem)周期检测
f. “中断”可在每条指令的最后一个周期(WB)的最后进行检测