Our second version of CPU
NonExist
张钰晖 2015011372 计55 yuhui-zh15@mails.tsinghua.edu.cn
杨一滨 2015011353 计55 yyb15@mails.tsinghua.edu.cn
周正平 2015011314 计54 zhouzp15@mails.tsinghua.edu.cn
增加了简单双端block memory的IP core,需要在IP catalog选项里新增一个名称为gram,读写数据width=8bit,读写深度=480000的IP core便可以编译。
根目录下包含设计CPU的verilog文件
bitstream目录下包含编译生成的bit文件
docs目录下包含文档文件
functiontest目录下包含功能测例文件
ucore目录下包含ucore操作系统文件
testasm目录下包含单一指令测试文件
tools目录下包含自己实现的Python-MIPS编译器、图片256色转换器、ROM生成器文件
- 算术运算指令(共12(0xC)条)
序号 | 测试程序 | 功能测试点 | 仿真结果 | 25MHz时钟 |
---|---|---|---|---|
1 | ADD | 执行 ADD 指令是否产生正确的运算结果(未测试整型溢出例外的情况) | P | P |
2 | ADDI | 执行 ADDI 指令是否产生正确的运算结果(未测试整型溢出例外的情况) | P | P |
3 | ADDU | 执行 ADDU 指令是否产生正确的运算结果 | P | P |
4 | ADDIU | 执行 ADDIU 指令是否产生正确的运算结果 | P | P |
5 | SUB | 执行 SUB 指令是否产生正确的运算结果(未测试整型溢出例外的情况) | P | P |
6 | SUBU | 执行 SUBU 指令是否产生正确的运算结果 | P | P |
7 | SLT | 执行 SLT 指令是否产生正确的运算结果 | P | P |
8 | SLTI | 执行 SLTI 指令是否产生正确的运算结果 | P | P |
9 | SLTU | 执行 SLTU 指令是否产生正确的运算结果 | P | P |
10 | SLTIU | 执行 SLTIU 指令是否产生正确的运算结果 | P | P |
11 | DIV | 执行 DIV 指令是否产生正确的运算结果 | N | N |
12 | DIVU | 执行 DIVU 指令是否产生正确的运算结果 | N | N |
13 | MULT | 执行 MULT 指令是否产生正确的运算结果 | P | P |
14 | MULTU | 执行 MULTU 指令是否产生正确的运算结果 | P | P |
- 逻辑运算指令(共14(0xE)条)
序号 | 测试程序 | 功能测试点 | 仿真结果 | 25MHz时钟 |
---|---|---|---|---|
15 | AND | 执行 AND 指令是否产生正确的运算结果 | P | P |
16 | ANDI | 执行 ANDI 指令是否产生正确的运算结果 | P | P |
17 | LUI | 执行 LUI 指令是否产生正确的运算结果 | P | P |
18 | NOR | 执行 NOR 指令是否产生正确的运算结果 | P | P |
19 | OR | 执行 OR 指令是否产生正确的运算结果 | P | P |
20 | ORI | 执行 ORI 指令是否产生正确的运算结果 | P | P |
21 | XOR | 执行 XOR 指令是否产生正确的运算结果 | P | P |
22 | XORI | 执行 XORI 指令是否产生正确的运算结果 | P | P |
23 | SLLV | 执行 SLLV 指令是否产生正确的移位结果 | P | P |
24 | SLL | 执行 SLL 指令是否产生正确的移位结果 | P | P |
25 | SRAV | 执行 SRAV 指令是否产生正确的移位结果 | P | P |
26 | SRA | 执行 SRA 指令是否产生正确的移位结果 | P | P |
27 | SRLV | 执行 SRLV 指令是否产生正确的移位结果 | P | P |
28 | SRL | 执行 SRL 指令是否产生正确的移位结果 | P | P |
- 分支跳转指令(共10(0xA)条)
序号 | 测试程序 | 功能测试点 | 仿真结果 | 25MHz时钟 |
---|---|---|---|---|
29 | BEQ | 执行 BEQ 指令是否产生正确的判断和跳转结果(延迟槽指令为nop,未测试延迟槽) | P | P |
30 | BNE | 执行 BNE 指令是否产生正确的判断和跳转结果(延迟槽指令为nop,未测试延迟槽) | P | P |
31 | BGEZ | 执行 BGEZ 指令是否产生正确的判断和跳转结果(延迟槽指令为 nop,未测试延迟槽) | P | P |
32 | BGTZ | 执行 BGTZ 指令是否产生正确的判断和跳转结果(延迟槽指令为 nop,未测试延迟槽) | P | P |
33 | BLEZ | 执行 BLEZ 指令是否产生正确的判断和跳转结果(延迟槽指令为 nop,未测试延迟槽) | P | P |
34 | BLTZ | 执行 BLTZ 指令是否产生正确的判断和跳转结果(延迟槽指令为 nop,未测试延迟槽) | P | P |
35 | BGEZAL | 执行 BGEZAL 指令是否产生正确的判断、跳转和链接结果(延迟槽指令为 nop,未测试延迟槽) | N | N |
36 | BLTZAL | 执行 BLTZAL 指令是否产生正确的判断、跳转和链接结果(延迟槽指令为 nop,未测试延迟槽) | N | N |
37 | J | 执行 J 指令是否产生正确的跳转结果(延迟槽指令为 nop,未测试延迟槽) | P | P |
38 | JAL | 执行 JAL 指令是否产生正确的跳转和链接结果(延迟槽指令为nop,未测试延迟槽) | P | P |
39 | JR | 执行 JR 指令是否产生正确的跳转结果(延迟槽指令为 nop,未测试延迟槽) | P | P |
40 | JALR | 执行 JALR 指令是否产生正确的跳转和链接结果(延迟槽指令为 nop,未测试延迟槽) | P | P |
- HILO寄存器指令(共4(0x4)条)
序号 | 测试程序 | 功能测试点 | 仿真结果 | 25MHz时钟 |
---|---|---|---|---|
41 | MFHI | 执行 MTHI 指令是否正确地将寄存器值写入 HI 寄存器,执行MFHI 指令是否正确地读出 HI 寄存器的值到寄存器 | P | P |
42 | MFLO | 执行 MTLO 指令是否正确地将寄存器值写入 LO 寄存器,执行MFLO 指令是否正确地读出 LO 寄存器的值到寄存器 | P | P |
43 | MTHI | 执行 MTHI 指令是否正确地将寄存器值写入 HI 寄存器,执行MFHI 指令是否正确地读出 HI 寄存器的值到寄存器 | P | P |
44 | MTLO | 执行 MTLO 指令是否正确地将寄存器值写入 HI 寄存器,执行MFLO 指令是否正确地读出 HI 寄存器的值到寄存器 | P | P |
- CP0指令(共4(0x4)条)
序号 | 测试程序 | 功能测试点 | 仿真结果 | 25MHz时钟 |
---|---|---|---|---|
45 | BREAK | 执行 BREAK 指令是否正确地产生断点例外 | N | N |
46 | SYSCALL | 执行 SYSCALL 指令是否正确地产生系统调用例外 | P | P |
55 | ERET | 执行 ERET 指令是否正确地从中断、例外处理程序返回 | P | P |
56 | MFC0 | 执行 MTC0 指令是否正确地将寄存器值写入目的 CP0 寄存器,执行 MFC0 指令是否正确地读出源 CP0 寄存器的值到寄存器 | P | P |
57 | MTC0 | 执行 MTC0 指令是否正确地将寄存器值写入目的 CP0 寄存器,执行 MFC0 指令是否正确地读出源 CP0 寄存器的值到寄存器 | P | P |
- 访存指令(共8(0x8)条)
序号 | 测试程序 | 功能测试点 | 仿真结果 | 25MHz时钟 |
---|---|---|---|---|
47 | LB | 结合 SW 指令,执行 LB 指令是否产生正确的访存结果 | P | P |
48 | LBU | 结合 SW 指令,执行 LBU 指令是否产生正确的访存结果 | P | P |
49 | LH | 结合 SW 指令,执行 LH 指令是否产生正确的访存结果 | P | P |
50 | LHU | 结合 SW 指令,执行 LHU 指令是否产生正确的访存结果 | P | P |
51 | LW | 结合 SW 指令,执行 LW 指令是否产生正确的访存结果 | P | P |
52 | SB | 结合 LW 指令,执行 SB 指令是否产生正确的访存结果 | P | P |
53 | SH | 结合 LW 指令,执行 SH 指令是否产生正确的访存结果 | P | P |
54 | SW | 结合 LW 指令,执行 SW 指令是否产生正确的访存结果 | P | P |
- 异常指令(共13(0xD)条)
序号 | 测试程序 | 功能测试点 | 仿真结果 | 25MHz时钟 |
---|---|---|---|---|
58 | ADD_EX | 测试 ADD 指令整型溢出例外 | P | P |
59 | ADDI_EX | 测试 ADDI 指令整型溢出例外 | P | P |
60 | SUB_EX | 测试 SUB 指令整型溢出例外 | P | P |
61 | LH_EX | 测试 LH 指令访存地址非对齐例外 | N | N |
62 | LHU_EX | 测试 LHU 指令访存地址非对齐例外 | N | N |
63 | LW_EX | 测试 LW 指令访存地址非对齐例外 | N | N |
64 | SH_EX | 测试 SH 指令访存地址非对齐例外 | N | N |
65 | SW_EX | 测试 SW 指令访存地址非对齐例外 | N | N |
66 | ERET_EX | 测试取指地址非对齐例外 | N | N |
67 | RESERVED_INSTRUCTION_EX | 测试保留指令例外 | N | N |
80 | BEQ_EX_DS | 测试延迟槽例外 | P | P |
81 | BNE_EX_DS | 测试延迟槽例外 | P | P |
82 | BGEZ_EX_DS | 测试延迟槽例外 | P | P |
83 | BGTZ_EX_DS | 测试延迟槽例外 | P | P |
84 | BLEZ_EX_DS | 测试延迟槽例外 | P | P |
85 | BLTZ_EX_DS | 测试延迟槽例外 | P | P |
86 | BGEZAL_EX_DS | 测试延迟槽例外 | N | N |
87 | BLTZAL_EX_DS | 测试延迟槽例外 | N | N |
88 | J_EX_DS | 测试延迟槽例外 | P | P |
89 | JAL_EX_DS | 测试延迟槽例外 | P | P |
90 | JR_EX_DS | 测试延迟槽例外 | P | P |
91 | JALR_EX_DS | 测试延迟槽例外 | P | P |
- 延迟槽指令(共10(0xA)条)
序号 | 测试程序 | 功能测试点 | 仿真结果 | 25MHz时钟 |
---|---|---|---|---|
68 | BEQ_DS | 测试延迟槽 | P | P |
69 | BNE_DS | 测试延迟槽 | P | P |
70 | BGEZ_DS | 测试延迟槽 | P | P |
71 | BGTZ_DS | 测试延迟槽 | P | P |
72 | BLEZ_DS | 测试延迟槽 | P | P |
73 | BLTZ_DS | 测试延迟槽 | P | P |
74 | BGEZAL_DS | 测试延迟槽 | N | N |
75 | BLTZAL_DS | 测试延迟槽 | N | N |
76 | J_DS | 测试延迟槽 | P | P |
77 | JAL_DS | 测试延迟槽 | P | P |
78 | JR_DS | 测试延迟槽 | P | P |
79 | JALR_DS | 测试延迟槽 | P | P |