计组课设:单周期31条MIPS指令CPU设计(含代码)
多周期54条CPU:计组课设:多周期54条MIPS指令CPU设计(含代码)_孔艺菲的博客-CSDN博客
单周期CPU源码:while-TuRe/Single-cycle-CPU31 (github.com)
单周期CPU指的是一个周期就能得出结果的CPU。
如何做到一个周期得出结果呢?
答案是巧妙地利用时钟上升沿和下降沿,将同步控制和异步控制相结合。
异步控制 PC~instruction~RsRt~reg.XY~alu.Res:instruction是根据PC异步变化的,即PC改变后立即取出新指令。解析instruction中的Rs、Rt、Rd是通过assign实现与instruction同时变化。从寄存器中读取数据这一操作是随地址异步变化的,得到RsRt后立即在通用寄存器中进行读取。ALU也是逻辑电路,在得到操作数后立即得到结果。
同步控制:fileout,RF_W:输出结果是在testbench模块中时钟上升沿发生的,PC是在CPU的Controller时钟上升沿增加的。
那么,我们如何建立模型实现单周期CPU呢?
首先,什么是MIPS指令?我们在用MIPS编程时,写的是汇编语言。但是计算机不能识别汇编语言,只能识别机器语言。MIPS编译器Mars就可以将汇编语言编译成机器语言。编译的依据就是下面的指令格式表。我们要做的就是根据这样一个32位的二进制序列做为指令完成它所描述的一系列操作。
所以,需要弄懂要实现的指令的结构。MIPS有R型指令(只在寄存器中操作的指令),I型指令(含有立即数immediate的指令)和J型指令(jump跳转指令)。每种指令有不同的格式,每条指令有不同的op和func码以区分。
指令执行流程:
指令ID解析
为提高可读性,需要将每条指令不同的op和func码和指令对应起来。
方法一:可设置31个变量,如wire add_,sub_等,代表是不是这条指令。优点是可读性高,缺点是不易在模块间传输。
方法二:可设置1个31位变量区分不同指令,如000000000000000000000000000001代表add,000000000000000000000000000010代表sub等。优点是便于传参,缺点是可读性较低,且增加指令不易。
可选择将CPU模块调用和controller写在一起避免模块传输(不过计算机真正设计是分开的),更好的方法是用方法二改进方法一,在模块传输是写一个31位变量接口funcID,并且使其每位分别代表一个指令。
地址解析
为在一个时钟周期得到结果,采用组合逻辑设计,故这些变量都要采用assign赋值。对于不同种类的指令需调整如何赋值,根据指令ID通过?:实现。
指令格式
模块设计
计算机的基本组成:
- 存储器: 实现记忆功能的部件用来存放计算程序及参与运算的各种数据
- 运算器: 负责数据的算术运算和逻辑运算即数据的加工处理
- 控制器: 负责对程序规定的控制信息进行分析,控制并协调输入,输出操作或内存访问
- 输入设备: 实现计算程序和原始数据的输入
- 输出设备: 实现计算结果输出
我们主要需要实现的是前三项。
存储器有数据存储器和指令存储器,分别构建module DMEM IMEM 。
CPU内有运算器和控制器,控制器的功能在于控制运算器和其他模块(乘法器除法器中断处理器等),传入正确数据。(本例将CPU和Controller写在了一起,实际分开更好)
如何载入指令进行测试?
IMEM模块用于根据pc读取instruction。在其中添加ROM IP核,设置为16进制1024*32,载入要执行的coe文件。
如何获取coe文件? 下载MARS(MIPS汇编程序和运行时模拟器),写入程序导出为16进制文件,再在该16进制文件前添加
memory_initialization_radix = 16;
memory_initialization_vector =
如何调试程序?
首先,先静态纠错。将每条指令过一遍,检查模块的接口及数据位数。
然后再指令memory的IP核中载入待测试的coe文件,进行仿真,将每次指令变化后的pc、instruction、寄存器结果输出,与Mars的结果比对。
如果发现某条指令错误,将相关的变量在testbench中显示调用,在仿真的波形图中就可以看到了。显示调用方式如下:
计组课设:单周期31条MIPS指令CPU设计(含代码)相关推荐
- 单周期31条指令CPU设计---bug总结
单周期31条指令CPU设计bug-总结 vivado 2016.2 verilog modelsim Mars标准 -声明:该篇总结的bug是在编写代码,并进行测试过程中遇到问题,并及时记录.并不具有 ...
- 2022山东大学软件学院计算机组成与课程设计(计组课设)分享防踩坑
目录 课程主要内容 课程时间: 学分: 小Tips: 经验分享: 关于地址写入的简单介绍 关于脉冲速度调节 关于清零端的问题 踩坑注意事项: 一些具体实验器件的介绍: 总图的介绍: 选择器: IR指令 ...
- 【Computer Organization笔记10】单周期CPU设计:基于7条MIPS指令的数据通路
本次笔记内容: P19 计算机组成原理(19) P20 计算机组成原理(20) 本节课对应幻灯片: 组成原理24 singlecycle.pptx 基于上节课的7条MIPS指令的数据通路,分别针对7条 ...
- 北京工业大学计算机组成,GitHub - WuSiYu/mips-proj5: 5级流水线MIPS-lite微系统(北工大计组课设)...
北工大-计算机组成原理课设 2020年7月,北京工业大学,大二下计算机组成原理,99/100分课设存档 5级流水线MIPS-lite微系统,转发式流水线,当且仅当load-use冒险或控制冒险时插入一 ...
- 篮球计分板课设,模块化LCD1602,数码管,矩阵按键,方便移植,使得主函数简洁明了
适合普中的51开发板,也可以用与自己的课设,工程链接失效了记得1185956143@qq.com 代码,原理图PCB链接 http://链接:https://pan.baidu.com/s/1wlO ...
- 北航计算机学院 高小鹏,高小鹏的计组课怎么那么坑!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 有人是北航2013届6系计算机的吗?大家觉得高小鹏怎么样?可能以前的学长学姐不知道.但是最近他改革了计组课实在太变态了.难度高不说,还一点儿都不公平.我认 ...
- 【计算机组成原理】CPU:单周期数据通路(MIPS)
寄存器传送语言RTL 1)R(r)表示寄存器r的内容 2)M(address)表示主存储器地址address的内容 3)传输方向"←"表示,从右向左传输 4)程序计数器PC的内容直 ...
- 地大c语言课程设计题目,中国地质大学数据结构课设-全国铁路运输网最佳经由问题课程设计报告精选.doc...
中国地质大学数据结构课设-全国铁路运输网最佳经由问题课程设计报告精选 数据结构 上机实习报告 实验题目:全国铁路运输网最佳经由问题 班级: 姓名: 学号: 完成日期:2017年4月25日 目录 课程设 ...
- 操作系统课设之简单 shell 命令行解释器的设计与实现
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
最新文章
- Docker镜像大小
- ListView 条目加载上滑下滑首尾缩放动画实现
- Java开发框架——Struts框架
- Linux Service管理
- netcat,nmap常用例子
- java正则表达式 用户名_java之正则表达式
- 太极图正确画法_太极图唯一正确的画法
- ffmpeg合并多个MP4视频
- 迅雷和BT有什么区别?迅雷是不是不毁硬盘?速度快吗?
- python 零代码快速开发平台_企业如何选择开源的零代码开发平台
- 『TensorFlow』模型载入方法汇总
- word中图片为嵌入式格式时显示不全_word嵌入图片显示不全,教您word插入图片显示不全怎么办...
- 高通项目端口每次跳出要求安装驱动解决方法
- EEEPC专用XP系统中如何安装FN快捷键驱动?
- “只要3分钟,我就能扒光你的隐私!” | 互联网时代,14亿中国人都在裸奔
- 观察者模式——应聘者和应聘公司的关系
- [转载]Matlab生成Word报告
- 2017 阿里巴巴矢量图标库 导入所选图标到jsp页面步骤
- Office2016卡顿的原因及解决方法
- 2022年全球程序员收入报告出炉:字节跳动成国内唯一上榜公司
热门文章
- 1465 B. Fair Numbers
- 4G Cat1 全网通免驱模块在树莓派上的操作演示
- 用kruskal算法求最小生成树各边的权值之和
- 程序出现异常尝试读取或写入受保护的内存这通常指示其他内存已损坏
- Python开发第一步:如何制作一个简单的桌面应用
- git pr/mr 提交规范
- 太阳能电池基本特性实验报告_上海交通大学物理实验报告(大二上)硅光电池特性的研究.docx...
- 巧用希捷软件识别3T硬盘
- windows安装mysql5.7简单详细教程(带百度云)
- 最全科目一扣分、罚款、驾照、标志技巧总结归纳