• 说在前面

开发环境:Vivado

语言:Verilog

cpu框架:Mips

控制器:组合逻辑

  • 设计思路

按照预先设计好的数据通路图将各个模块连接起来

`timescale 1ns / 1ps
module cpu(input         clk,input         reset,input  [31:0] inst,input  [31:0] rdata,output [31:0] pc,output [31:0] addr,output [31:0] wdata,output        IM_R,output        DM_CS,output        DM_R,output        DM_W);//--------------------------------//控制信号(除有关存储器)wire PC_CLK;                     //wire PC_ENA;                     //wire M1;                         //wire M2;                         //wire M3;                         //wire M4;                         //wire M5;                         //wire M6;                         //wire M7;                         //wire M8;                         //wire M9;                         //wire M10;                        //wire M11;                        //wire [3:0] ALUC;                 //wire RF_W;                       //wire RF_CLK;                     //wire C_EXT16;                    ////--------------------------------//运算标志位wire zero;                       //wire carry;                      //wire negative;                   //wire overflow;                   //wire add_overflow;               ////--------------------------------// wire [31:0] INS;                 //译码后指令//--------------------------------//数据通路(除有关存储器)wire [31:0] D_ALU;               //wire [31:0] D_PC;                //wire [31:0] D_RF;                //wire [31:0] D_Rs;                //wire [31:0] D_Rt;                //wire [31:0] D_IM;                //wire [31:0] D_DM;                //wire [31:0] D_Mux1;              //wire [31:0] D_Mux2;              //wire [31:0] D_Mux3;              //wire [4:0]  D_Mux4;              //wire [4:0]  D_Mux5;              //wire [31:0] D_Mux6;              //wire [31:0] D_Mux7;              //wire [31:0] D_Mux8;              //wire [31:0] D_Mux9;              //wire [31:0] D_Mux10;             //wire        D_Mux11;             ////wire [31:0] D_EXT1;              //wire [31:0] D_EXT5;              //wire [31:0] D_EXT16;             //wire [31:0] D_EXT18;             //wire [31:0] D_ADD;               //wire [31:0] D_ADD8;              //wire [31:0] D_NPC;               //wire [31:0] D_ii;                //assign PC_ENA = 1;//--------------------------------//外部通路连接assign pc = D_PC;assign addr = D_ALU;assign wdata = D_Rt;//--------------------------------//指令译码instr_dec cpu_ins (inst, INS);operation cpu_opcode (clk,zero,INS,PC_CLK,IM_R,M1,M2,M3,M4,M5,M6,M7,M9,M10,ALUC,RF_W,RF_CLK,DM_W,DM_R,DM_CS,C_EXT16);//--------------------------------//部件pcreg   pc_out      (PC_CLK,     reset,      PC_ENA,      D_Mux1,   D_PC);alu     cpu_alu     (D_Mux9,     D_Mux10,    ALUC[3:0],   D_ALU,    zero,         carry,        negative, overflow);regfile cpu_ref     (RF_CLK,     reset,      RF_W,        overflow, inst[25:21],  inst[20:16],  D_Mux5,   D_Mux6,D_Rs, D_Rt);mux     cpu_mux1    (D_Mux3,     D_Mux2,     M1,          D_Mux1);mux     cpu_mux2    (D_NPC,      D_ADD,      M2,          D_Mux2);mux     cpu_mux3    (D_ii,       D_Rs,       M3,          D_Mux3);mux5    cpu_mux4    (inst[10:6], D_Rs[4:0],  {INS[30],M4},D_Mux4);mux5    cpu_mux5    (inst[15:11],inst[20:16],{INS[30],M5},D_Mux5);mux     cpu_mux6    (D_Mux7,     D_ADD8,     M6,          D_Mux6);mux     cpu_mux7    (D_ALU,     rdata,      M7,          D_Mux7);mux     cpu_mux9    (D_EXT5,     D_Rs,       M9,          D_Mux9);mux     cpu_mux10   (D_Rt,       D_EXT16,    M10,         D_Mux10);extend5 cpu_ext5    (D_Mux4,     D_EXT5);extend16 cpu_ext16  (inst[15:0], C_EXT16,    D_EXT16);extend18 cpu_ext18  (inst[15:0], D_EXT18);add     cpu_add     (D_EXT18,    D_NPC,      D_ADD,       add_overflow);add8    cpu_add8    (D_PC,       D_ADD8);npc     cpu_npc     (D_PC,       reset,      D_NPC);II      cpu_ii      (D_PC[31:28],inst[25:0], D_ii);endmodule

  • 总结

总算把鸽的写完了,我觉得这个系列的重点在前面的设计部分,后面的代码可以自己写,只要掌握了整个流程写起来还是挺简单的,就是工作量很大,如果想要自己写的话就看前面几篇即可,代码部分可以不看了。


31条指令单周期cpu设计(Verilog)-(一)相关软件

31条指令单周期cpu设计(Verilog)-(二)总体设计

31条指令单周期cpu设计(Verilog)-(三)指令分析

31条指令单周期cpu设计(Verilog)-(四)数据输入输出关系表

31条指令单周期cpu设计(Verilog)-(五)整体数据通路图设计

31条指令单周期cpu设计(Verilog)-(六)指令操作时间表设计

31条指令单周期cpu设计(Verilog)-(七)整体代码结构

31条指令单周期cpu设计(Verilog)-(八)上代码→指令译码以及控制器

31条指令单周期cpu设计(Verilog)-(九)上代码→基本模块

31条指令单周期cpu设计(Verilog)-(十)上代码→顶层模块设计总结相关推荐

  1. 31条指令单周期cpu设计(Verilog)-(二)总体设计

    目录 31条指令单周期cpu设计(Verilog)-(一)相关软件 31条指令单周期cpu设计(Verilog)-(二)总体设计 31条指令单周期cpu设计(Verilog)-(三)指令分析      ...

  2. 31条指令单周期cpu设计(Verilog)-(三)指令分析

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 鸽鸽鸽... 指令分析流程 确定一条指令所需要的具体操作 分析该条指令涉及的部件 确定各个部件的输入输出 ...

  3. 31条指令单周期cpu设计(Verilog)-(四)数据输入输出关系表

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 表格作用 这张表用于设计整体的数据通路图 (在第二篇中已经给出来了),而这张总图是用于设计Verilog ...

  4. 31条指令单周期cpu设计(Verilog)-(六)指令操作时间表设计

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 这张表格又是干啥的呢(+_+)? 废话少说,用来设计控制器的 (红色方框) 设计流程  1.  表头为3 ...

  5. 31条指令单周期cpu设计(Verilog)-(八)上代码→指令译码以及控制器

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 指令译码器 我们需要根据一条32位的指令的结构确定是哪一条指令 可以根据操作码(op)以及功能码(fun ...

  6. 31条指令单周期cpu设计(Verilog)-(七)整体代码结构

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 结构 sccpu:顶层模块 cpu_ins:指令译码器 cpu_opcode:控制器 其他均是基本模块( ...

  7. 31条指令单周期cpu设计(Verilog)-(一)相关软件

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 计算机组成原理课程终于结束了,由于以下均为课程学习过程中的内容,所以难免存在各种错误,各位大佬轻喷 相关软件 vivado ...

  8. 31条指令单周期cpu设计(Verilog)-(五)整体数据通路图设计

    说在前面 开发环境:Vivado 语言:Verilog cpu框架:Mips 控制器:组合逻辑 这张图是用来干啥的? 我们在用verilog实现这个cpu的时候,一般是先把各个部件单独写一个modul ...

  9. 31条指令单周期cpu设计(Verilog)-(九)上代码→基本模块

    不再赘述,直接上 mux `timescale 1ns / 1ns module mux(input [31:0] a,input [31:0] b,input choose,output reg [ ...

最新文章

  1. 微信小程序去掉左上角的返回箭头
  2. 针对SAP OData 模型Addresssable属性的不同处理
  3. webstorm前端调用后端接口_软件测试面试题:怎么去判断一个bug是前端问题还是后端问题...
  4. 常用的前端跨域的几种方式
  5. Mr.J-- jQuery学习笔记(二十七)--DOM操作方法(删除获取文本)
  6. switch全部游戏列表_敢把游戏当教材,免费提供给学生!EA今年将推出7款NS作品!...
  7. 【JMX】JMX 远程 连接 The client has been closed
  8. 麓山滨江2021高考成绩查询,长沙2021高考成绩排名榜单,长沙各高中高考成绩喜报...
  9. 测试可变字符序列stringBuilder
  10. 图形学笔记1.直线扫描转换与devC的图形库ege扩展
  11. STM32-雨滴传感器
  12. win10系统怎么删除远程桌面连接记录
  13. 供应商管理系统SRM
  14. 群晖docker签到京豆_在群晖Docker上的部署qBittorrent
  15. 采用circlize包绘制Circos图
  16. 奥迪坚技术革新带动信用卡呼叫中心管理升级
  17. vue的组件通信方式
  18. 正确率、召回率、F值例子
  19. IO流(输入流与输出流)
  20. 大学生应该如何选择服务器

热门文章

  1. 教你低成本甚至免费开通微信小程序商城
  2. 40XXX队技术员交接事项(5):双靶定向井施工小结
  3. 【MATLAB基础】创建一个包含十名学生姓名学号和各学生六个科目成绩的结构体,并对成绩数据进行简单处理,并对十名学生按照成绩排序
  4. slicer安装_3D Slicer中文教程(二)—软件功能界面介绍
  5. 组合数学$2鸽巢原理与容斥原理
  6. 「科聪应用案列」助力汽车制造业进一步“智能化”提升
  7. android textview全角,bug-textview半角,英文展示不全
  8. Android内嵌Unity开发简单的3D动态模型
  9. 基于matlab的图像二维小波分解算法仿真
  10. dropdownList选中