我们有一个来自一个CPU的Datapath
,如下图所示。如果下一个指令地址在PC Register
,
获取并执行了
clock cycle
指令需要多少word add
?
存储器为10位,每条指令至少为2字。所有寄存器都是10位,并有INC (increment), CLR (clear), LD(load)
条指令。 Addr
表示直接寻址。指令将适用于10位字:
Wadd (src1), (src2), (dst)
我的导师解决它是在15个时钟周期。任何提示或想法,如何计算?
编辑:
我的尝试*但我不确定,我的尝试是对还是错:
答案 0 :(得分:0)
您的解决方案不能正常工作,因为您将PC
移动太多次,这意味着您正在将目标指针作为源2指针加载(在步骤5中,您不应再次增加PC)。我没有注意到你的解决方案中有任何其他错误,但是我能找到一个更快的错误:
[更新:显然有一个IR假定在处理器中;所以我们假设IR可以从DR加载
获取操作代码
第1步:AR <- PC
第2步:DR <- M[AR]; PC++; AR++
第3步:IR <- DR; DR <- M[AR]
第4步:Decode(IR)
获取SRC1
第5步:AR <- DR; PC++
第6步:DR <- M[AR]; AR <- PC
获取SRC2(SRC1至AC
)
第7步:AC <- DR; DR <- M[AR]; PC++
第8步:AR <- DR
第9步:DR <- M[AR]; AR <- PC
添加并获取DEST
第10步:AC <- AC + DR; DR <- M[AR]
在DEST中回答(如果我们想继续下一条指令,则单独的答案)
第11步:AR <- DR; DR <- AC
PC++
第12步:M[AR] <- DR
AR <- PC
[更新2:由于似乎随机要求需要15个周期;这是一个15周期的解决方案......请注意,12周期是理想的,您应该与您的TA /教授讨论]
获取操作代码
第1步:AR <- PC
第2步:DR <- M[AR]; PC++; AR++
第3步:IR <- DR
第4步:DR <- M[AR]
第5步:Decode(IR)
获取SRC1
第6步:AR <- DR; PC++
第7步:DR <- M[AR]
第8步:AR <- PC
获取SRC2(SRC1至AC
)
第9步:AC <- DR
第10步:DR <- M[AR]; PC++
第11步:AR <- DR
第12步:DR <- M[AR]; AR <- PC
添加并获取DEST
第13步:AC <- AC + DR; DR <- M[AR]
在DEST中回答(如果我们想继续下一条指令,则单独的答案)
第14步:AR <- DR; DR <- AC
PC++
第15步:M[AR] <- DR
AR <- PC