Coder Social home page Coder Social logo

cpu's Introduction

/**
*文件名: README.pdf
*作者: 李程鹏
*/

1. 基本描述: 
	这是17~18秋季学年期末, 实现的一个以verilog为硬件描述语言, 基于mips指令集, 运行在Xilinx Nexyz4开发板上的单周期cpu.
	主要功能模块包括: 控制器, 运算器, 显示器, 以及总线模块. 实现的mips指令一共有20条, 包括8条R型指令, 8条I型指令, 2条J型指令, 2条自定义指令.  
               用户可以运用这20条mips汇编指令,  实现逻辑,算数,分支,循环以及输入输出等基本程序功能.

2. 使用手册:
	(1) 接口说明: 
		如下图(/pictures/clockMode/0.jpg)所示的N4开发板, 最下面为开关(sw),显示数字的区域为七段数码管,2者之间为	led灯,开关	和led灯从左到右编号为15~0. 开关向上拨为1,在下面时为0.
		我使用sw15作为模式选择开关, sw15为0时,表示调试模式,sw15为1时,表示时钟模式.
	sw14~sw13用于控制显示到数码管的内容, sw14~sw13=00, 表示显示数据存储器的内容, 01表	示显	示寄存器堆的内容, 10表示显示指令存储器的内容, 11表示显示当前的pc值. 我设置的数据	存储器,寄存	器堆,指令存储器的大小都是32, 所以统一用sw4~sw0用于控制显示的位置.
		led15~led0用于显示当前指令的控制信号(判断表见data/0.opAndFunc.txt). N17按	钮用	于调试模式时的单步, C12按钮用于复位操作.

(2) 举例说明:

		比如用户输入一条: add $0,$0,$1 的指令, 初始时$0=10,$s1=3, 我们设置	sw15=0,sw14~sw13=01, 即为调试模式, 并显示寄存器内容. 当我们按下N17, 就执行这条指令, 此时把	sw4~sw0置为0, 就可以看到0号寄存器显示的结果为13, 并且led灯显示当前的控制信号.


3. 文件说明:
	根目录下面2个文件夹: codes,data和pictures.
	(1) 对于codes:
		sources文件夹存放设计文件, sim文件夹里面存放仿真文件, constrs文件夹里面存放限制文件.
	
	(2) 对于data:
		用于存放过程记录文件. 
		(a) 0.opAndFunc.txt: 以类似json文件的格式存放需要实现的20条汇编指令, 及其对应的		operand字段和funct字段. 并判断出每条指令的控制信号, 为方便阅读, 每个字段均以16进制的形式保存.
		(b) 1.codes.txt: 测试这20条指令所设计的mips汇编程序
		(c) 2.results.txt: 对每一条测试指令执行后, 相应的寄存器,数据存储器,pc值的变化
		(d) 3.interface.txt: 接口说明
	
	(3) 对于pictures:
		用于存放结果文件. clockMode和debugMode2个文件夹分别存放时钟模式和调试模式下的结果.


4. 设计流程:

	(1) 查阅mips文档(http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html), 把需要实现的指令按R型,I型,J型和自定义类型归类, 分解出每条指令的Operand(31:26)字段和funct(5:0)字段, 记录在文件data/0.opAndFunc.txt中.

	(2) 设计包含所有实现指令的测试代码,记录到文件data/1.codes.txt中.

	(3) 设计cpu需要的主要模块(文件的组织并不完全按照逻辑模块的形式):
		(a) 指令存储器堆: 存放用户需要指行的指令
		(b) 寄存器堆: 存放0到31号寄存器
		(c) 数据存储器: 存放0到31号数据存储器的内容
		(d) 控制器: 用于根据指令的operand字段, 选择需要进行的操作
		(e) 运算器: 根据输入和控制信号, 执行相应的计算, 根据控制信号, 决定运算结果的返回位置
		(f) 显示器: 对输入的数据, 显示对应内容到7段数码管上.
		(g) 总线: 连接以上各个模块.

	(4) 一条指令的执行流程: 
		我们以add $0,$0,$1为列, 首先, 在时钟上升沿时,根据当前的pc值, 从指令存储器中取出指令, 	通过控制器分解出operand和funct字段, 判断出为add指令, 然后从寄存器堆中取出rs,rt和rd寄存器, 	将rs和rt寄存器放入运算器模块参与运算, 结果写入数据存储器. 在时钟下降沿时, 把结果写回rd寄存器, 	并更新pc值, 开始寻找下一条要执行的指令.

cpu's People

Contributors

2329408386 avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.