2009年计组数据通路大题

【题目】

某计算机字长为16位,采用16位定长指令字结构,部分数据桐庐结构如下图所示。图中所有控制信号为1时表示有效,为0则无效。如控制信号MDRinE为1表示允许数据从DB打入MDR,MDRin为1表示允许数据从总线打入MDR。假设MAR的输出一直处于使能状态。加法指令“ADD(R1),R0”的功能为(R0)+((R1))->(R1),即将R0中的数据与R1的内容所指主存单元的数据相加,并将结构送入R1的内容所指向主存单元中保存。

2009年计组数据通路大题

 

下表给出了上述指令取指和译码阶段每个节拍(时钟周期)的功能和有效控制信号,请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号。

时钟

功能

有效控制信号

C1

MAR<-(PC)

PCout,MARin

C2

MDR<-M(MAR)

PC<-(PC)+1

MemR,MDRinE,PC+1

C3

IR<-(MDR)

MDRout,IRin

C4

指令译码

【解析】取指令的功能是根据PC的内容所指的主存地址,取出指令代码,经过MDR,最终送到IR。这部分和后面的指令执行阶段的取操作数、存运算结果的方法是相通的。(无论是取还是输出都是要先搞到MDR)

C1:(PC)->MAR

在读写存储器前,必须先将地址(这里为(PC))送至MAR.

C2:M(MAR)->MDR,(PC)+1->PC

读写的数据必须经过MDR,指令取出后PC自增1.

C3:(MDR)->IR

然后将要读到的MDR中的指令代码送至IR进行后续操作.

指令“ADD(R1),R0”的操作数一个在主存中, 一个在寄存器中,运算结果在主存中。根据指令功能,要读出R1的内容所指出的主存单元,必须先将R1的内容送至MAR,即(R1)->MAR.而读出的数据必须经过MDR,即M(MAR)->MDR.

因此,将R1的内容所指的主存单元的数据读出到MDR的节拍安排如下:

C5:(R1)->MAR

C6:M(MAR)->MDR

ALU一端是寄存器A,MDR或R0中必须有一个先写入A中,如MDR.

C7:(MDR)->A

然后执行加法操作,并将结果送入寄存器AC.

C8:(A)+(R0)->AC

之后将加法结果写回到R1的内容所指的主存单元,注意MAR中的内容没有改变(装了(R1),所以能定位一开始内存中一个操作数的位置)

C9:(AC)->MDR

C10:(MDR)->M(MAR)

有效控制信号的安排只需看数据是流入还是流出,如流入寄存器X就是Xin,流出寄存器X就是Xout。还需注意其他特殊控制信号,如PC+1,Add等。

时钟

功能

有效控制信号

C5

MAR<-(R1)

R1out,MARin

C6

MDR<-M(MAR)

MemR,MDRinE

C7

A<-(MDR)

MDRout,Ain

C8

AC<-(A)+(R0)

R0out,Add,ACin

C9

MDR<-(AC)

ACout,MDRin

C10

M(MAR)<-(MDR)

MDRoutE,MemW

若在C6执行M(MAR)->MDR的同时,完成(R0)->A(即选择将(R0)写入A),并不会发生总线冲突,这种方案可以节省1个节拍:

时钟

功能

有效控制信号

C5

MAR<-(R1)

R1out,MARin

C6

MDR<-M(MAR)

A<-(R0)

MemR,MDRinE,

R0out,Ain

C7

AC<-(A)+(MDR)

MDRout,Add,ACin

C8

MDR<-(AC)

ACout,MDRin

C9

M(MAR)<-(MDR)

MDRoutE,MemW

小结

2009年计组数据通路大题