BUAA-CO-p4-课上

BUAA-CO-p4-课上

本人第一次P4挂了,非常遗憾,没有借口,就是纯菜…以下题目均为第二次P4的考试题目

SWMM

110100 base rt offset

vAddrGPR[base]+sign_ext(offset)vAddr \leftarrow GPR[base] + sign\_ext(offset)

if(GPR[rt]0=0): Mem[vAddr31...202]GPR[rt]if(GPR[rt]_0 = 0): \space Mem[vAddr_{31...2} ||0^2] \leftarrow GPR[rt]

else: Mem[vAddr29...002]GPR[rt]else: \space Mem[vAddr_{29...0}||0^2] \leftarrow GPR[rt]

我的DM模块设计的比较复杂,有3个控制信号:MemWr, DMRDOp, DMWDOp,分别代表使能、读模式、写模式,因此我只需要加一个写模式即可,if-else判断全部在DM模块中完成

ES

101100 rs rt offset

temp(GPR[rs]31GPR[rs])(GPR[rt]31GPR[rt])temp \leftarrow (GPR[rs]_{31} || GPR[rs])-(GPR[rt]_{31}||GPR[rt])

if(temp32temp31): PCPC+4+sign_ext(offset02)if(temp_{32} \neq temp_{31}): \space PC \leftarrow PC+4+sign\_ext(offset||0^2)

else: GPR[rt]temp31...0else: \space GPR[rt] \leftarrow temp_{31...0}

四不像指令,好吧其实和Branch挺像的。关键在于如何区分分支和写入操作。由于我的所有Branch指令都在ALU中进行比较,并将比较结果通过Branch端口进行输出,于是对于本条指令,我通过ALU对减法溢出进行判断,并将是否溢出通过Branch信号传给CTRL和IFU,CTRL中给GPR写使能赋值时增加(~overflow && es),IFU中正常对是否Branch进行判断。

IBS

000000 rs rt rd 00000 101001

if(sym(GPR[rt])): GPR[rd]bitwise(GPR[rs])if(sym(GPR[rt])): \space GPR[rd] \leftarrow bitwise(GPR[rs])

else: GPR[rt]GPR[rs]else: \space GPR[rt] \leftarrow GPR[rs]

写入的时候选择一下写入地址就好辣

作者

OWPETER

发布于

2024-11-12

更新于

2024-12-02

许可协议

评论