片上计算机系统课程设计-CPU模型机设计_第1页
片上计算机系统课程设计-CPU模型机设计_第2页
片上计算机系统课程设计-CPU模型机设计_第3页
片上计算机系统课程设计-CPU模型机设计_第4页
片上计算机系统课程设计-CPU模型机设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.哈尔滨理工大学软件学院课程设计报告课 程 片上计算机系统题 目 CPU模型机设计 班 级 集成14-2班专 业 集成电路设计与集成系统 学 生 宋鸿飞 学 号 1414020210指导教师 崔林海 2016年 07 月 8日索 引:1课程设计的目的及要求32处理器的设计思想和设计内容33设计处理器的结构和实现方法34模型机的指令系统45处理器的状态跳转操作过程46. CPU的Verilog代码77. 模型机在Quartus II环境下的应用168. 仿真波形169. 课程设计的总结18一 课程设计的目: 目的:了解Quartus II软件的应用,学习Quartus II环境下设计CPU的基本过程;掌握CPU设计代码的含义以及CPU的工作原理;了解CPU与内存RAM间的连接数据的传输过程;学习在Quartus II环境下建立模型机的具体过程。融会贯通本课程各章节的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识。学习设计和调试计算机的基本步骤和方法,提高使用软件仿真工具和集成电路的基本技能。培养科学研究的独立工作能力,取得工程设计与组装调试的实践和经验。二 处理器的设计思想和设计内容: 我设计的是16位cpu,5位的操作码,18条指令,其中包含了4种寻址方式。内存容量为2k。这个CPU是参考学姐的程序,在学姐的程序的基础上增加了一些指令得到的。三 设计处理器的结构和实现方法:(指令格式)格式1:寄存器寻址方式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Rx Ry 空白格式2:立即数寻址方式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP I 空白格式3:无操作数寻址方式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP 空白 空白格式4:直接寻址方式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Addr内存(2的11次方)四 模型机的指令系统CPU的指令集:操作码OPIR(15.12)指令格式指 令 的 助 记 符指 令 的 内 容000003Idle无操作 PC=PC+1000012Load DataR0I 立即数操作000101Move Rx RyRx (Ry) PC=PC+1000111Add Rx RyRx (Rx)+(Ry) PC=PC+1001001Sub Rx RyRx (Rx)-(Ry) PC=PC+1001011AND Rx RyRx (Rx) AND(Ry) PC=PC+1001101OR Rx RyRx (Rx) OR (Ry) PC=PC+1001111XOR Rx RyRx (Rx) XOR (Ry) PC=PC+1010001NAND Rx RyRx (Rx)NAND(Ry) PC=PC+1010011NOT Rx Rx NOT (Rx) PC=PC+101010 1SHR Rx Ry逻辑循环右移PC=PC+1010111SHL Rx Ry 逻辑循环左移PC=PC+1 01100 1 SWAP Rx RyA(Ry) Ry(Rx) Rx(A) PC=PC+1 01101 4JMP AddrPCAddr PC=PC+1 01110 4JZ AddrIf (R0)=0 then PCAddr else PC=PC+1 01111 4READR0(Addr) PC=PC+1 10000 4WRITEAddr(R0) PC=PC+1 10001 3STOP无操作 PC保持不变五 处理器的状态跳转操作过程:(1) 、模型机每一状态下的操作及状态跳转当前状态执行操作次态与读下一条指令的有关的操作St_0取指令IR(15.0)M_data_in(15.0)St_1Write-Read0 PC=PC+1St_1IF OP=Load THENR0”000000000000”|IR(10.7)MARPCIF(OP=Stop)THENSt_1ELSE St_2END IFIF OP=Move THEN Rx (Ry)IF OP= Shr THEN Rx (Ry) 逻辑循环右移IF OP= Shl THEN Rx (Ry) 逻辑循环左移IF OP= Add THEN A(Ry)IF OP= Sub THEN A(Ry)IF OP=NAND THEN A(Ry)IF OP=OR THEN A(Ry)IF OP= AND THEN A(Ry)IF OP=NOT THEN A(Ry)IF OP= XOR THEN A(Ry)IF OP= Swap THEN A(Ry)IF OP=Stop THEN NULLIF OP=Idle THEN NULLIF OP=Jmp THEN NULLIF OP=Jz THEN NULLIF OP=Read THEN NULLIF OP=Write THEN NULLSt_2IF OP= Load OR OP=Move OR OP=Shr OR OP=Shl OR OP=Idle THEN NULLSt_0Write-Read0IF OP= Add THEN Rx (Rx)+AIF OP= Sub THEN Rx (Rx)-AIF OP= AND THEN Rx (Rx)ANDAIF OP= NOT THEN Rx (Rx) NOT AIF OP= NAND THEN Rx (Rx)NANDAIF OP= OR THEN Rx (Rx)ORAIF OP= XOR THEN Rx (Rx) XORAIF OP= Swap THEN Ry(Rx)St_3Write-Read0IF (OP= Jmp OR OP=Jz) THENNULLIF( OP=ReadOROP=Write ) THEN NULLSt_3 IF OP= Swap THEN Ry(Rx)St_0Write-Read0IF OPE= Read OR OPE= Write OR OPE=Jump OR OPE=Jz) THEN IRData_in St_4PC:=PC+1;Write-Read0St_4IF OP= Jz THENIF (R0)=0 THEN(PCIR(10.0) MARIR(10.0)ELSE MARPCSt_5Write-Read0IF OP= Jmp THEN(PCIR(10.0) MARIR(10.0)IF OP= Read THEN MARIR(10.0)IF OP= Write THEN MARIR(10.0) MDAR0St_5IF(OPE=Jump)OR(OPE=Jz)St_0;MARPC;Write-Read0IF(OPE=Read)St_6;MARPC;Write-Read0St_6;MARPC;Write-Read0St_6IF OP=ReadTHEN R0=M_data_in;St_0Write-Read16. CPU的代码module cpu(reset, clock, Write_Read, M_address, M_data_in, M_data_out, overflow); input reset; input clock; output Write_Read; output 10:0 M_address; input 15:0 M_data_in; output 15:0 M_data_out; output overflow; reg overflow; reg 15:0 IR; reg 15:0 MDR; reg 10:0 MAR; reg 2:0 status; parameter 4:0 Idle=5d0, load=5d1, move=5d2, addp=5d3, subp=5d4, andp=5d5, orp=5d6, xorp=5d7, nandp=5d8, notp=5d9, shrp=5d10, shlp=5d11, swap=5d12, jmp=5d13, jz=5d14, read=5d15, write=5d16, stop=5d17; always (negedge reset or negedge clock ) begin: status_change if (reset = 1b0) status = 0; else case (status) 0 : status = 1; 1 : if (IR15:11 = stop) status = 1; else status = 2; 2 : case (IR15:11) swap, jmp, jz, read, write,nandp,notp: status = 3; default : status = 0; endcase 3 : if (IR15:11 = swap) status = 0; else status = 4; 4 : status = 5; 5 : case (IR15:11) read, write : status = 6; default : status = 0; endcase 6 : status=0; default : status = 0; endcase end always (negedge reset or negedge clock) begin: seq reg 10:0 PC; reg 15:0 R0; reg 15:0 R1; reg 15:0 R2; reg 15:0 R3; reg 15:0 A; reg 16:0 temp; if (reset = 1b0) begin IR = 161b0; PC = 111b0; R0 = 161b0; R1 = 161b0; R2 = 161b0; R3 = 161b0; A = 161b0; MAR = 111b0; MDR = 161b0; end else begin overflow = 1b0; case (status) 0 : begin IR = M_data_in ; PC = PC + 1b1; end 1 : begin MAR = PC; case (IR15:11) load : R0 = 121b0, IR10:7; move : case (IR10:7) 4b0001 : R0 = R1; 4b0010 : R0 = R2; 4b0011 : R0 = R3; 4b0100 : R1 = R0; 4b0110 : R1 = R2; 4b0111 : R1 = R3; 4b1000 : R2 = R0; 4b1001 : R2 = R1; 4b1011 : R2 = R3; 4b1100 : R3 = R0; 4b1101 : R3 = R1; 4b1110 : R3 = R2; default : ; endcase shrp : case (IR10:9) 2b00 : R0 = 1b0, R015:1; 2b01 : R1 = 1b0, R115:1; 2b10 : R2 = 1b0, R215:1; default : R3 = 1b0, R315:1; endcase shlp : case (IR10:9) 2b00 : R0 = R014:0, 1b0; 2b01 : R1 = R114:0, 1b0; 2b10 : R2 = R214:0, 1b0; default : R3 = R314:0, 1b0; endcase addp, subp, andp, orp, nandp,notp,xorp, swap : case (IR8:7) 2b00 : A = R0; 2b01 : A = R1; 2b10 : A = R2; default : A = R3; endcase default : ; endcase end 2 : case (IR15:11) addp : case (IR10:9) 2b00 : begin temp = (R015, R015:0) + (A15, A15:0); R0 = temp15:0; overflow = temp16 temp15; end 2b01 : begin temp = (R115, R115:0) + (A15, A15:0); R1 = temp15:0; overflow = temp16 temp15; end 2b10 : begin temp = (R215, R215:0) + (A15, A15:0); R2 = temp15:0; overflow = temp16 temp15; end default : begin temp = (R315, R315:0) + (A15, A15:0); R3 = temp15:0; overflow = temp16 temp15; end endcase subp : case (IR10:9) 2b00 : begin temp = (R015, R015:0) + (A15, A15:0) + 1b1; R0 = temp15:0; overflow = temp16 temp15; end 2b01 : begin temp = (R17, R115:0) + (A15, A15:0) + 1b1; R1 = temp15:0; overflow = temp16 temp15; end 2b10 : begin temp = (R215, R215:0) + (A15, A15:0) + 1b1; R2 = temp15:0; overflow = temp16 temp15; end default : begin temp = (R315, R315:0) + (A15, A15:0) + 1b1; R3 = temp15:0; overflow = temp16 temp15; end endcase andp : case (IR10:9) 2b00 : R0 = R0 & A; 2b01 : R1 = R1 & A; 2b10 : R2 = R2 & A; default : R3 = R3 & A; endcase orp : case (IR10:9) 2b00 : R0 = R0 | A; 2b01 : R1 = R1 | A; 2b10 : R2 = R2 | A; default : R3 = R3 | A; endcase xorp : case (IR10:9) 2b00 : R0 = R0 A; 2b01 : R1 = R1 A; 2b10 : R2 = R2 A; default : R3 = R3 A; endcase nandp : case (IR10:9) 2b00 : R0=(R0 & A); 2b01 : R1=(R1 & A); 2b10 : R2=(R2 & A); 2b11 : R3=(R3 & A); endcase notp : case (IR10:9) 2b00 : R0= A; 2b01 : R1= A; 2b10 : R2= A; 2b11 : R3= A; endcase swap : case (IR10:7) 4b0100 : R0 = R1; 4b1000 : R0 = R2; 4b1100 : R0 = R3; 4b0001 : R1 = R0; 4b1001 : R1 = R2; 4b1101 : R1 = R3; 4b0010 : R2 = R0; 4b0110 : R2 = R1; 4b1110 : R2 = R3; 4b0111 : R3 = R1; 4b1011 : R3 = R2; 4b0011 : R3 = R0; default : ; endcase default : ; endcase 3 : case (IR15:11) swap : case (IR10:9) 2b00 : R0 = A; 2b01 : R1 = A; 2b10 : R2 = A; default : R3 = A; endcase default : ; endcase 4 : case (IR15:11) jmp : begin PC = IR10:0; MAR = IR10:0; end jz : if (R0 = 16b0000000000000000) begin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论