lab3

实验三

郭高旭 ggx21@mails.tsinghua.edu.cn 2021010803

实验报告

  • 仿真截图

    • 设计了验证ALU功能与展示结果的测试,随机测试各种运算操作。主要是通过观察寄存器堆读出的运算数、alu计算后的运算数是否和预期一致。

    • assert(alu_a==rdata_a),assert(alu_b==rdata_b),assert(alu_y==wdata)

    •     //验证ALU功能
          for (int i = 1; i < 32; i = i + 1) begin
            #100;
            rd = i;   // only lower 5 bits
            rs1 = $urandom_range(0, 32);
            rs2 = $urandom_range(0, 32);
            opcode = $urandom_range(1, 11);
            dip_sw = `inst_rtype(rd, rs1, rs2, opcode);
            push_btn = 1;
      
            #100;
            push_btn = 0;
      
            // 展示结果
            #100;
            rd = i;   // only lower 5 bits
            dip_sw = `inst_peek(rd, 0);
            push_btn = 1;
      
            #100;
            push_btn = 0;
      
      
            #1000;
      

    image-20231022000429920

    此外还设计了peek指令验证每个寄存器存储值正确

    image-20231022002957251

  • 在线实验平台

    • POKE imm7 into r1 then PEEK r1,正常显示7

    image-20231022001257034

    • poke 8 into r2 , add r1 r2 to r3 ,then peek r3:正常得到15

      image-20231022002321205

    • not r1 to r3,peek r3结果正确

      image-20231022002505841

    • r1逻辑左移r2位的结果,正确

      image-20231022002630826

    • 循环左移结果

      image-20231022002728947

    • 所有操作在板子上均得到正确结果

思考题

如果读取到乘除法运算,则在decode时根据操作数的位数计算出需要的时钟周期,给CALC过程添加一个自环,每次操作CLK_CNT–,直到得0(所有位数计算完成)退出自环,进入WRITE模式

image-20231022004352614




本文总阅读量