实验三
郭高旭 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;
此外还设计了peek指令验证每个寄存器存储值正确
-
-
在线实验平台
- POKE imm7 into r1 then PEEK r1,正常显示7
-
poke 8 into r2 , add r1 r2 to r3 ,then peek r3:正常得到15
-
not r1 to r3,peek r3结果正确
-
r1逻辑左移r2位的结果,正确
-
循环左移结果
-
所有操作在板子上均得到正确结果
思考题
如果读取到乘除法运算,则在decode时根据操作数的位数计算出需要的时钟周期,给CALC过程添加一个自环,每次操作CLK_CNT–,直到得0(所有位数计算完成)退出自环,进入WRITE模式