课程设计报告
课 程 片上计算机系统 题 目 CPU模型机设计 班 级 专 业
学 生 学 号 指导教师
2014年 7 月 3 日
目 录:
1.课程设计的目的及要求………………………………………3 2.处理器的设计思想和设计内容………………………………3 3.设计处理器的结构和实现方法………………………………3 4.模型机的指令系统……………………………………………4 5.处理器的状态跳转操作过程…………………………………4 6. CPU的Verilog代码……………………………………………7 7. 模型机在Quartus II环境下的应用…………………………19 8. 仿真波形………………………………………………………19 9. 课程设计的总结………………………………………………21
一. 课程设计的目的及要求:
(一) 目的:
1.掌握RISC CPU与内存数据交换的方法。
2.学会指令格式的设计与用汇编语言编写简易程序。
3.能够使用VHDL硬件描述语言在QuartusⅡ软件环境下完成CPU模型机的
设计。 (二) 要求:
1. 以《计算机组成与设计》书中123页的简化模型为基础更改其指令系统,
形成设计者的CPU,
2. 在Quartus II环境下与主存连接,调试程序,观察指令的执行是否达到设
计构想。
二. 处理器的设计思想和设计内容:
处理器的字长为16b;包括四种指令格式,格式1、格式2、格式3的指令字长度为8b,格式4的指令字长度为16b;处理器内部的状态机包括七个状态。 (一)关于修改后的CPU:
一共设计25条指令,主要包括空操作指令、中断指令、加法指令、减法指令、加法指令、四种逻辑运算指令、比较、算术移位操作指令、逻辑移位操作指令、加减1指令、加减2指令、数据传输指令、转移类指令、读写指令、特权指令等等。
(二)关于RAM:
地址线设置成8bits,主存空间为4096words。
三. 设计处理器的结构和实现方法:
(指令格式)
格式1:寄存器寻址方式
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP OP Rx Ry Ry 空白 空白 格式2:寄存器变址寻址方式 格式3:立即数寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP I 空白 格式4:无操作数寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP 空白 空白 格式5:直接寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Addr 内存(2的12次方) 四. 模型机的指令系统
CPU的指令集: 操作码指令 OP 格式 IR(15..12) 0000 0001 4 3 指 令 的 助 记 符 Idle Load Data 无操作 PC=PC+1 R0I 立即数操作PC=PC+1 指 令 的 内 容 0010 0011 0100 0101 0110 1 1 1 1 2 Move Rx Ry Add Rx Ry Sub Rx Ry Mul Rx Ry IR 00 AND Rx Ry 01 OR Rx Ry 10 XOR Rx Ry 11 NOT Rx COM Rx Ry IR 00 arr Rx Ry 01 arl Rx Ry 10 lgr Rx Ry 11 lgl Rx Ry IR 00 Rx+1 01 Rx-1 10 Rx+2 11 Rx-2 Swap Rx Ry Jmp Addr Jz Addr Read Addr Write Addr Stop Rx (Ry) PC=PC+1 Rx (Rx)+(Ry) PC=PC+1 Rx (Rx)-(Ry) PC=PC+1 Rx (Rx)*(Ry) PC=PC+1 Rx (Rx) AND (Ry) PC=PC+1 Rx (Rx) OR (Ry) PC=PC+1 Rx(Rx)XOR(Ry) PC=PC+1 RxNOT (Rx) PC=PC+1 Rx >Ry Rx< Ry Rx== Ry PC=PC+1 算术右移PC=PC+1 算术左移PC=PC+1 逻辑右移PC=PC+1 逻辑左移PC=PC+1 PC=PC+1 0111 1000 1 2 1001 1 1010 1011 1100 1101 1110 1111 1 5 5 5 5 4 A(Ry) Ry(Rx) Rx(A) PC=PC+1 PCAddr PC=PC+1 If (R0)=0 then PCAddr else PC=PC+1 R0(Addr) PC=PC+1 Addr(R0) PC=PC+1 无操作 PC保持不变 五. 处理器的状态跳转操作过程:
模型机每一状态下的操作及状态跳转 当前状态 执行操作 St_0 St_1 取指令 IR(15..0)M_data_in(15..0) IF OP=Load THEN R0IR(11..8)||”000000000000” IF OP=Move THEN Rx (Ry) IF OP= sh THEN Rx (Rx) 移位运算 IF OP= Add THEN A(Ry) IF OP= Sub THEN A(Ry) IF OP= Mul THEN A(Ry) 次态与读下一条指令的有关的操作 St_1 Write-Read’0’ PC=PC+1 MARPC IF(OP=Stop)THEN St_1 ELSE St_2 END IF St_2 St_3 IF OP=Log THEN A(Ry) AND、OR、NOT、XOR IF OP=Math THEN A(Ry) +1 -1 +2 -2运算 IF OP= Swap THEN A(Ry) IF OP=Stop THEN NULL IF OP=Idle THEN NULL IF OP=Jmp THEN NULL IF OP=Jz THEN NULL IF OP=Read THEN NULL IF OP=Write THEN NULL IF OP= Load OR OP=Move OR OP= sh OR OP=Idle THEN NULL IF OP= Add THEN Rx (Rx)+A IF OP= Sub THEN Rx (Rx)-A IF OP= AND THEN Rx (Rx)ANDA IF OP= NOT THEN Rx (Rx) NOT A IF OP= XOR THEN Rx (Rx) XORA IF OP= NOT THENRx not(Rx) IF OP= math THENRx (Rx)+ IF OP= Swap THEN Ry(Rx) IF OP= Jmp or Jz THEN NULL IF OP= Read or Write THEN MARIR(11..0) IF OP= Swap THEN Rx(A) St_0 Write-Read’0’ St_3 Write-Read’0’ St_4 St_0 Write-Read’0’ IF OP= Read or Write or Jmp or Jz St_4 THEN MARPC IR(7..0)M_data_in Write-Read’0’ IF OP= (Read)THEN St_5 MARIR(11..0) Write-Read’0’ IF OP= (Write) THEN MARIR(11..0) MDR(R0) IF OP= (Jmp) THEN PCIR(11..0) MARIR(11..0) IF OP= (Jz) IF (R0)= 0 THEN PCIR(11..0) MARIR(11..0) St_5 ELSE MAR(PC) IF OP= (Jmp) THEN PCIR(11..0) MARIR(11..0) IF OP= (Jz) IF (R0)= 0 THEN PCIR(11..0) MARIR(11..0) ELSE MAR(PC) IF OP= (Jmp)or OP= (Jz) St_6 St_0 MAR(PC) Write-Read’0’ IF OP=(Read) St_6 MAR(PC) Write-Read’0’ IF OP=(Write) St_6 MAR(PC) Write-Read’1’ IF OP=(Read)THEN R0M_data_in St_0 Write-Read’0’ 六. 六、
CPU的Verilog HDL代码:
module cpu(reset, clock, Write_Read, M_address, M_data_in, M_data_out, overflow); input reset; input clock;
output Write_Read; output [11:0] M_address; input [7:0] M_data_in; output [7:0] M_data_out; output overflow; reg overflow; reg [15:0] IR; reg [7:0] MDR; reg [11:0] MAR; reg [2:0] status; parameter idle =4'b0000, load =4'b0001, move =4'b0010, addp =4'b0011, subp =4'b0100, mulp =4'b0101, logp =4'b0110, comp =4'b0111, sh =4'b1000, meth1 =4'b1001, swap =4'b1010, jmp =4'b1011,