第一次的测试题目,
可以看这里->2020-P5第一次课上测评回忆-roife的博客
rs中连续1最长的个数,还是for循环。
reg[31:0] cnt, temp; // cnt计数正在数的1的个数
initial begin // temp表示已知最长个数
cnt = 0;
temp = 0;
end
integer i;
always@(*) begin
for (i = 0; i < 32; i = i + 1) begin
if (A[i] == 1) begin
cnt = cnt + 1;
if (cnt > temp) begin
temp = cnt;
end
else beign
end
end
else begin
cnt = 0;
end
end
end
上面代码,逻辑正确,不过没清零。
if(ltz || eqz):
PC <- PCBranch
GRF[31] <- PC + 8
else :
PC <- PC + 8
关键在else,俺也忘了咋做了。
此乃阴间指令。
move likely。
- 利用GRF[rs]和offset得到MemAddr
- Mem[MemAddr]后5位作为GRF的写入地址
- 写入数据为GRF[rt],所以说“move”
写入地址不是从DecodeStage解出来,而是在Memory解出来的。
在Mem和Mem/WB上改,我的方法是加Mux。
暂停转发控制
上机时,这条指令比较友好,
后面应该是打了nop或者没有刻意制造数据冲突。
所以,并没有考虑阻塞的我,
GRF行为是对的,所有的点都没有写入错误。
但是,采用Tnew和Tuse,无脑阻塞会超时,
不考虑阻塞,会Run Less Cycles
对于本人采用的架构,要改进Stall逻辑,
加入A3===32'bz的情况,在此情况下,一律阻塞,直到把A3算出来。
如果已经做了前两道题,第三题可以尝试不考虑阻塞,能ac几个点算几个,
好歹有分数,,ԾㅂԾ,,
心态很重要。课上加指令,简单的话,只用改Controller和ALU。
难的话,多开端口还要记得在mips和Stage把线接上,这个最难。
如果在logisim中看,就会一目了然。