一、设计目标
- 掌握微程序控制器的基本原理
- 设计可以实现实现基本的指令运算指令、数据传输指令、输入输出指令、转移指令;并且具有中断和原码一位乘法功能
- 使用Verilog HDL 在Max Plus2上实现CPU模型的仿真
注:我是在MaxPlus2上实现的,由于MaxPlus2太古老了,推荐大家使用Quartus。
二、指令设计
1、指令格式
单字节指令:
操作码 OP 4位 |
目的寄存器 Rd 2位 |
源寄存器 Rs 2位 |
双字节指令:
操作码 OP 4位 |
目的寄存器 Rd 2位 |
源寄存器 Rs 2位 |
立即数字段 8位 |
2、指令集
本CPU模型有13条指令,其中0-9为单字节指令,10-13为双字节指令。
使用Verilog实现的时候,会在内存之中预先设置好执行的指令,然后模拟仿真,观察结果。
序号 |
指令助记符 |
功能 |
操作码 |
举例 |
机器码 |
0 |
IN Rd |
输入 IN←Rd |
0000 |
IN R2 |
0000 10 00 |
1 |
OUT Rs |
输出 OUT←Rs |
0001 |
OUT R1 |
0001 00 01 |
2 |
MOV Rd, Rs |
寄存器传输 Rd←Rs |
0010 |
MOV R1,R2 |
0010 10 01 |
3 |
ADD Rd, Rs |
加运算 Rd←Rs+Rd 并设置Cy,Zero标志 |
0011 |
ADD R3,R0 |
0011 11 00 |
4 |
AND Rd, Rs |
与运算 Rd←Rs & Rd 并设置Zero标志 |
0100 |
AND R1,R0 |
0100 01 00 |
5 |
MUL |
原码一位乘法运算 {HIGH,LOW}←RD*RS |
0101 |
MUL RD RS |
0101 01 10 |
6 |
STI |
开中断 |
0110 |
STI |
0110xxxx |
7 |
CLI |
关中断 |
0111 |
CLI |
0111xxxx |
8 |
IRET |
中断返回 |
1000 |
IRET |
100 |