Skip to content

Latest commit

 

History

History
80 lines (58 loc) · 2.11 KB

P5课上测评回忆.md

File metadata and controls

80 lines (58 loc) · 2.11 KB

2020P5课上测评回忆

第一次的测试题目,
可以看这里->2020-P5第一次课上测评回忆-roife的博客

测评题目

cmco

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

上面代码,逻辑正确,不过没清零。

blezalc

if(ltz || eqz):
    PC <- PCBranch
    GRF[31] <- PC + 8
else :
    PC <- PC + 8

关键在else,俺也忘了咋做了。

lrm

此乃阴间指令。

move likely。

  1. 利用GRF[rs]和offset得到MemAddr
  2. Mem[MemAddr]后5位作为GRF的写入地址
  3. 写入数据为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中看,就会一目了然。