2023北航计组p4课上部分

题目

hmo(话说为什么我只记得这个的名字啊)

题目大意

hmo rd,rs,rt
R型指令,若GPR[rs]中1的个数大于GPR[rt]中1的个数,就将rs这个编号存进GPR[rd],否则将rt存进GPR[rd]

做法

区别于正常的R型指令,我是给ALU添加了两个输入,rs和rt编号,然后做操作。其他部分就和别的R型指令一样了。

名字忘啦

题目大意

abcd rs rt label
若GPR[rs]与GPR[rt]相加或相减不会溢出,则跳转并链接。
注意!只有要跳转时才链接!不跳转就不要修改GPR[31]的值!(当然课上是没有这个提示啦)

做法

乍看起来,似乎是branch和jal的结合体。不过因为我jal实现的不算好,所以是直接新增了一个控制信号和ALU的运算,非常粗暴的特判了PCnext和寄存器文件输入数据与输入使能的值,毕竟课上又不需要考虑后续的可扩展性。

名字也忘啦

题目大意

abcd base rt offset
题面非常抽象,我尽量还原

addr= GPR[base]+offset
byte=addr[1:0]
w_addr=addr[31:2]
if(gray(GPR[rt][31:24])==Mem[addr][byte*7+8:byte*7] ||
	gray(GPR[rt][23:16])==Mem[addr][byte*7+8:byte*7]||
	gray(GPR[rt][15:8])==Mem[addr][byte*7+8:byte*7]||
	gray(GPR[rt][7:0])==Mem[addr][byte*7+8:byte*7])//抽象吧?

Mem[addr][byte*8+7:byte*8]=gray(GPR[rt][byte*8+7:byte*8]);

else

Mem[addr][byte*8+7:byte*8]=8'b11111111;
/*
其中,gray代表如下:
将输入的一个字节切成四片,并分别转化为对应的二位格雷码,如:
11101110->10111011(11->10,10->11)
抽象吧?*/

做法

把这个当成sw,然后多加一个模块用于计算这个的值,多加一个控制信号用于选择写入数据存储器的值。
流程上没有难度,难度在于抽象至极的具体实现。这么说吧,考场上我写了一两百行,挂了三次。需要注意的是,GPR[rt][byte8+7:byte8]在verilog中是不行的哦,不允许byte这个变量出现。

总结

跟往年比,难度又一次提升,表现在T3上。如果下一级有看到这篇博客的,祝好。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰雾与红

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值