单周期CPU实验报告
计算机组成原理实验报告 单周期CPU的设计与实现
1个时钟周期 Clock 电子科技大学计算机科学与工程学院标 准 实 验 报 告(实验)课程名称: 计算机组成原理实验 电子科技大学教务处制表电 子 科 技 大 学 实 验 报 告学生姓名: 郫县尼克杨 学 号: 2014 指导教师:陈虹 实验地点: 主楼A2-411 实验时间:12周-15周一、 实验室名称:主楼A2-411二、 实验项目名称:单周期CPU 的设计与实现。
三、 实验学时:8学时四、 实验原理:(一) 概述单周期(Single Cycle )CPU 是指CPU 从取出1条指令到执行完该指令只需1个时钟周期。
一条指令的执行过程包括:取指令→分析指令→取操作数→执行指令→保存结果。
对于单周期CPU 来说,这些执行步骤均在一个时钟周期内完成。
(二) 单周期cpu 总体电路本实验所设计的单周期CPU 的总体电路结构如下。
(三) MIPS 指令格式化MIPS 指令系统结构有MIPS-32和MIPS-64两种。
本实验的MIPS 指令选用MIPS-32。
以下所说的MIPS 指令均指MIPS-32。
MIPS 的指令格式为32位。
下图给出MIPS 指令的3种格式。
本实验只选取了9条典型的MIPS 指令来描述CPU 逻辑电路的设计方法。
下图列出了本实验的所涉及到的9条MIPS 指令。
五、 实验目的1、掌握单周期CPU 的工作原理、实现方法及其组成部件的原理和设计方法,如控制器、运算器等。
?2、认识和掌握指令与CPU 的关系、指令的执行过程。
?3、熟练使用硬件描述语言Verilog 、EDA 工具软件进行软件设计与仿真,以培养学生的分析和设计CPU 的能力。
六、 实验内容(一)拟定本实验的指令系统,指令应包含R 型指令、I 型指令和J 型指令,指令数为9条。
(二)CPU 各功能模块的设计与实现。
(三)对设计的各个模块的仿真测试。
(四)整个CPU 的封装与测试。
七、 实验器材(设备、元器件):(一)安装了Xilinx ISE Design Suite 13.4的PC 机一台(二)FPGA 开发板:Anvyl Spartan6/XC6SLX45(三)计算机与FPGA 开发板通过JTAG (Joint Test Action Group )接口连接,其连接方式如图所示。
单周期CPU实验报告
MIPS-CPU设计实验报告实验名称:32位单周期MIPS-CPU设计姓名学号:刘高斯11072205实验日期:2014年12月19日目录前言MIPS简介------------------------------------------------------------- 3 实验目的------------------------------------------------------------- 3第一部分VERILOG HDL 语言实现部分实验内容------------------------------------------------------------- 4 试验环境------------------------------------------------------------- 4 模块简介------------------------------------------------------------- 4 实验截图------------------------------------------------------------- 5 实验感想------------------------------------------------------------- 5 实验代码------------------------------------------------------------- 6第二部分LOGISIM 语言实现部分实验内容------------------------------------------------------------- 16 实验环境------------------------------------------------------------- 16模块设计------------------------------------------------------------- 16 试验感想------------------------------------------------------------- 23前言一、MIPS简介MIPS是世界上很流行的一种RISC处理器。
MIPS单周期CPU实验报告材料
《计算机组成原理实验》实验报告(实验二)学院名称:专业(班级):学生姓名:学号:时间:2017 年11 月25 日成绩 :实验二:单周期CPU设计与实现一.实验目的(1) 掌握单周期CPU数据通路图的构成、原理及其设计方法;(2) 掌握单周期CPU的实现方法,代码实现方法;(3) 认识和掌握指令与CPU的关系;(4) 掌握测试单周期CPU的方法;(5) 掌握单周期CPU的实现方法。
二.实验内容设计一个单周期的MIPSCPU,使其能实现下列指令:==> 算术运算指令说明:以助记符表示,是汇编指令;以代码表示,是机器指令功能:rd←rs + rt。
reserved为预留部分,即未用,一般填“0”。
符号扩展再参加“加”运算。
(3)sub rd , rs , rt功能:rd←rs - rt==> 逻辑运算指令(4)ori rt , rs ,immediate功能:rt←rs | (zero-extend)immediate;immediate做“0”扩展再参加“或”运算。
(5)and rd , rs , rt功能:rd←rs & rt;逻辑与运算。
功能:rd←rs | rt;逻辑或运算。
==>移位指令==>比较指令功能:if (rs<rt) rd =1 else rd=0, 具体请看表2 ALU运算功能表,带符号==> 存储器读/写指令(9)sw rt ,immediate(rs) 写存储器功能:memory[rs+ (sign-extend)immediate]←rt;immediate符号扩展再相加。
即将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。
(10) lw rt , immediate(rs) 读存储器功能:rt ← memory[rs + (sign-extend)immediate];immediate符号扩展再相加。
单周期CPU设计实验报告
单周期CPU设计实验报告一、引言计算机是现代信息社会必不可少的工具,而CPU作为计算机的核心部件,承担着执行指令、进行运算和控制系统资源的任务。
随着科技的进步和计算能力的需求,CPU的设计也趋于复杂和高效。
本次实验旨在设计一种单周期CPU,探究其设计原理和实现过程,并通过实验验证其正确性和性能。
二、理论基础1.单周期CPU概述单周期CPU即每个时钟周期内只完成一条指令的处理,它包括指令取址阶段(IF)、指令译码阶段(ID)、执行阶段(EX)、访存阶段(MEM)和写回阶段(WB)等多个阶段。
每条指令都顺序地在这些阶段中执行,而不同的指令所需的时钟周期可能不同。
2.控制信号单周期CPU需要根据不同的指令类型产生不同的控制信号来控制各个阶段的工作。
常见的控制信号包括时钟信号(clk)、使能信号(En)、写使能信号(WE)和数据选择信号(MUX)等。
这些信号的产生需要通过译码器、控制逻辑电路和时序逻辑电路等来实现。
三、实验设计本次实验采用的单周期CPU包括以下五个阶段:指令取址阶段、指令译码阶段、执行阶段、访存阶段和写回阶段。
每个阶段的具体操作如下:1.指令取址阶段(IF)在IF阶段,通过计数器实现程序计数器(PC)的自增功能,并从存储器中读取指令存储地址所对应的指令码。
同时,设置PC使能信号,使其可以更新到下一个地址。
2.指令译码阶段(ID)在ID阶段,对从存储器中读取的指令码进行解码,确定指令的操作类型和操作数。
同时,根据操作类型产生相应的控制信号,如使能信号、写使能信号和数据选择信号等。
3.执行阶段(EX)在EX阶段,根据ID阶段产生的控制信号和操作数,进行相应的算术逻辑运算。
这里可以包括加法器、乘法器、逻辑运算器等。
4.访存阶段(MEM)在MEM阶段,根据EX阶段的结果,进行数据存储器的读写操作。
同时,将读取的数据传递给下一个阶段。
5.写回阶段(WB)在WB阶段,根据MEM阶段的结果,将数据传递给寄存器文件,并将其写入指定的寄存器。
计算机组成原理实验报告1-单周期
计算机组成原理实验报告单周期处理器开发Q:10649503642015.05.12文档目录:1、功能设计说明2、模块化和层次化设计说明3、具体模块定义4、测试代码及结果5、实验完成时间安排6、心得体会1、功能设计说明1.完成的指令集:a) add,sub,and,or,slt,lw,sw,beq 和J 指令。
b) 不支持溢出。
2. 处理器为单周期设计。
3. 功能模块统一采用书上201页的图4-24设计,信号控制采用书上的193页图4-12和200页图4-22的真值表进行化简。
2、模块化和层次化设计说明3、具体模块定义数据通路:1)PC模块定义:(1) 基本描述PC 主要功能是完成输出当前指令地址。
复位后,PC指向0x0000_0000,此处为第一条指令的地址。
(2) 模块接口(3)功能定义2)NPC模块定义:(1) 基本描述NPC 主要功能是根据当前指令是否为beq指令,输出下一条指令的地址。
该模块调用了MUX模块。
(2) 模块接口(3)功能定义3)ALU模块定义:(1) 基本描述实现加、减、与、或、小于则赋1五种计算。
(2) 模块接口(3)功能定义4)MUX模块定义:(1) 基本描述实现32位和5位二选一数据选择器(2) 模块接口(3)功能定义5)EXT模块定义:(1) 基本描述将输入的16位地址按符号位扩展为32位。
(2) 模块接口(3)功能定义6)regfile模块定义:(1) 基本描述根据输入的两个寄存器地址,输出相应寄存器的值,根据寄存器写信号和寄存器地址,将输入的数据选择写入寄存器。
(2) 模块接口(3)功能定义7)im_4k模块定义:(1) 基本描述指令内存大小为4K,初始化从code.txt载入指令。
根据输入的指令地址,输出当前位置存储的指令。
(2) 模块接口(3)功能定义8)dm_4k模块定义:(1) 基本描述“数据内存”大小为4K,根据输入的地址读出“数据内存”中的数据,并根据数据写信号,将输入的数据选择写入“数据内存”中。
MIPS单周期CPU实验报告
MIPS单周期CPU实验报告一、实验目的本实验旨在设计一个基于MIPS指令集架构的单周期CPU,具体包括CPU的指令集设计、流水线的划分与控制信号设计等。
通过本实验,可以深入理解计算机组成原理中的CPU设计原理,加深对计算机体系结构的理解。
二、实验原理MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集(RISC)架构的处理器设计,大大简化了指令系统的复杂性,有利于提高执行效率。
MIPS指令集由R、I、J三种格式的指令组成,主要包括算术逻辑运算指令、存储器访问指令、分支跳转指令等。
在单周期CPU设计中,每个指令的执行时间相同,每个时钟周期只执行一个指令。
单周期CPU的主要部件包括指令内存(IM)、数据存储器(DM)、寄存器文件(RF)、运算单元(ALU)、控制器等。
指令执行过程主要分为取指、译码、执行、访存、写回等阶段。
三、实验步骤1.设计CPU指令集:根据MIPS指令集的格式和功能,设计符合需求的指令集,包括算术逻辑运算指令、存储器访问指令、分支跳转指令等。
2.划分CPU流水线:将CPU的执行过程划分为取指、译码、执行、访存、写回等阶段,确定每个阶段的功能和控制信号。
3.设计控制器:根据CPU的流水线划分和指令集设计,设计控制器实现各个阶段的控制信号生成和时序控制。
4.集成测试:进行集成测试,验证CPU的指令执行功能和正确性,调试并优化设计。
5.性能评估:通过性能评估指标,如CPI(平均时钟周期数)、吞吐量等,评估CPU的性能优劣,进一步优化设计。
四、实验结果在实验中,成功设计了一个基于MIPS指令集架构的单周期CPU。
通过集成测试,验证了CPU的指令执行功能和正确性,实现了取指、译码、执行、访存、写回等阶段的正常工作。
同时,通过性能评估指标的测量,得到了CPU的性能参数,如CPI、吞吐量等。
通过性能评估,发现了CPU的性能瓶颈,并进行了相应的优化,提高了CPU的性能表现。
计算机组成原理CPU设计实验报告
计算机组成原理CPU设计实验报告课程设计题目:16位CPU设计学院: 信息学院班级:电子A班学号:1115102015姓名:方茹1目录1 实验方法 ..................................................................... . (4)2 总体说明 ..................................................................... ................................................. 5 2.1指令系统: .................................................................... .......................... 5 2.1.1指令格式分类(按指令字长和操作数不同): ...................................................... 5 2.1.2具体指令汇总表: .................................................................... .......................... 6 2.1.3相关指令流程图: .................................................................... .......................... 6 2.1.4指令数据通路的构建: .................................................................... ................... 8 2.1.5指令的分组及节拍: .................................................................... ..................... 12 2.1.6指令执行状态图:(见下页)..................................................................... ........... 13 2.1.7具体微指令: .................................................................... ............................... 13 2.2 系统整体介绍 ..................................................................... .................. 16 2.2.1系统基本模块划分 ..................................................................... ....................... 16 2.2.2总体结构图:(见下页)..................................................................... (17)3 CPU的控制逻辑与具体数据通道设计 ..................................................................... ......18 3.1取指令逻辑的设计 ..................................................................... .. (19)3.1.1指令地址的保存 ..................................................................... (19)3.1.2指令存储器 ..................................................................... .................................. 20 3.1.3下一条指令地址的计算 ..................................................................... ................ 20 3.2指令译码逻辑的设计...................................................................... ...................... 21 3.3指令执行逻辑的设计...................................................................... ...................... 22 3.4存储器访问逻辑的设计 ..................................................................... ................... 23 3.5结果写回逻辑的设计...................................................................... ...................... 24 3.6单周期CPU的总成...................................................................... (25)4各部分说明 ..................................................................... .............................................26 4.1ALU .................................................................................................................... 26 4.2数据选择器BUS_MUX ................................................................ ........................ 28 4.3器件T1 ..................................................................... .......................................... 30 4.4标志寄存器FLAG_REG ............................................................... ........................ 31 4.5T2: .................................................................... ................................................ 33 4.6程序计数器PC ..................................................................... ............................... 33 4.7地址寄存器AR和指令寄存器IR: .................................................................... .. 34 4.8寄存器、寄存器组和寄存器的选择.......................................................................36 4.9一位控制信号/WR .................................................................... ........................... 37 4.10 节拍发生器 ..................................................................... .................................. 37 4.11控制逻辑 ..................................................................... ...................................... 39 4.12T3...................................................................... ................................................ 42 4.13REG_OUT ......................................................................................................... 43 4.14存储器 ..................................................................... .......................................... 44 4.15总线选择器 ..................................................................... .. (45)24.16REG_TEST ............................................................... .. (46)5附录: .................................................................... .. (47)附录A:组员分工: .................................................................... .. (47)附录B:组员设计总结: .................................................................... . (47)31 实验方法实验要完成的工作主要包括:指令系统的设计,FPGA-CPU的整体结构设计及其细化,逻辑设计的具体实现(VHDL语言程序的编写),软件模拟,以及硬件调试。
中山大学计算机组成原理实验 单周期CPU设计
《计算机组成原理实验》实验报告(实验三)学院名称:数据科学与计算机学院专业(班级):学生姓名:学号:时间:2019 年11 月8 日成绩:实验三:单周期CPU设计与实现一.实验目的(1) 掌握单周期CPU数据通路图的构成、原理及其设计方法;(2) 掌握单周期CPU的实现方法,代码实现方法;(3) 认识和掌握指令与CPU的关系;(4) 掌握测试单周期CPU的方法。
二.实验内容设计一个单周期CPU,该CPU至少能实现以下指令功能操作。
指令与格式如下:==> 算术运算指令加“加”运算。
加“加”运算。
==> 逻辑运算指令加“与”运算。
功能:GPR[rt] ←GPR[rs] or zero_extend(immediate)。
==>移位指令==>比较指令==> 存储器读/写指令==> 分支指令else pc ←pc + 4特别说明:offset是从PC+4地址开始和转移到的指令之间指令条数。
offset符号扩展之后左移2位再相加。
为什么要左移2位?由于跳转到的指令地址肯定是4的倍数(每条指令占4个字节),最低两位是“00”,因此将offset放进指令码中的时候,是右移了2位的,也就是以上说的“指令之间指令条数”。
else pc ←pc + 4(16)bltz rs, offsetelse pc ←pc + 4。
==>跳转指令(17)j addr说明:由于MIPS32的指令代码长度占4个字节,所以指令地址二进制数最低2位均为0,将指令地址放进指令代码中时,可省掉!这样,除了最高6位操作码外,还有26位可用于存放地址,事实上,可存放28位地址,剩下最高4位由pc+4最高4位拼接上。
==> 停机指令功能:停机;不改变PC的值,PC保持不变。
三.实验原理单周期CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期完成。
电平从低到高变化的瞬间称为时钟上升沿,两个相邻时钟上升沿之间的时间间隔称为一个时钟周期。
MIPS单周期CPU实验报告材料
《计算机组成原理实验》实验报告(实验二)学院名称:专业(班级):学生姓名:学号:时间:2017 年11 月25 日成绩:实验二:单周期CPU设计与实现一.实验目的(1) 掌握单周期CPU数据通路图的构成、原理及其设计方法;(2) 掌握单周期CPU的实现方法,代码实现方法;(3) 认识和掌握指令与CPU的关系;(4) 掌握测试单周期CPU的方法;(5) 掌握单周期CPU的实现方法。
二.实验内容设计一个单周期的MIPSCPU,使其能实现下列指令:==> 算术运算指令(1)add rd , rs, rt(说明:以助记符表示,是汇编指令;以代码表示,是机器指令)功能:rd←rs + rt。
reserved为预留部分,即未用,一般填“0”。
(2)addi rt , rs ,immediate功能:rt←rs + (sign-extend)immediate;immediate符号扩展再参加“加”运算。
(3)sub rd , rs , rt功能:rd←rs - rt==> 逻辑运算指令(4)ori rt , rs ,immediate功能:rt←rs | (zero-extend)immediate;immediate做“0”扩展再参加“或”运算。
(5)and rd , rs , rt功能:rd←rs & rt;逻辑与运算。
(6)or rd , rs , rt功能:rd←rs | rt;逻辑或运算。
==>移位指令(7)sll rd, rt,sa功能:rd<-rt<<(zero-extend)sa,左移sa位,(zero-extend)sa==>比较指令(8)slt rd, rs, rt 带符号数功能:if (rs<rt) rd =1 else rd=0, 具体请看表2 ALU运算功能表,带符号==> 存储器读/写指令(9)sw rt ,immediate(rs) 写存储器功能:memory[rs+ (sign-extend)immediate]←rt;immediate符号扩展再相加。
单周期设计实验报告
一、实验目的1. 了解单周期CPU的基本原理和设计方法。
2. 掌握单周期CPU的数据通路结构及其实现过程。
3. 熟悉单周期CPU的指令集和指令格式。
4. 通过实验验证单周期CPU的功能和性能。
二、实验内容1. 单周期CPU的数据通路结构单周期CPU的数据通路主要由以下几个部分组成:(1)指令寄存器(IR):存储从内存中取出的指令。
(2)程序计数器(PC):存储下一条指令的地址。
(3)寄存器文件(RF):用于存储操作数和中间结果。
(4)算术逻辑单元(ALU):执行指令中的算术运算和逻辑运算。
(5)数据内存(DM):存储数据和指令。
(6)控制单元:根据指令操作码生成相应的控制信号。
2. 单周期CPU的指令集和指令格式本实验所采用的指令集包括以下几种:(1)算术运算指令:如加法、减法、乘法、除法等。
(2)逻辑运算指令:如与、或、非等。
(3)数据传输指令:如将寄存器中的数据传送到内存或寄存器中。
(4)跳转指令:改变程序计数器的值,实现程序跳转。
指令格式如下:| 操作码 | 操作数1 | 操作数2 | 目标寄存器 ||--------|--------|--------|------------|| 5位 | 5位 | 5位 | 5位 |3. 单周期CPU的设计与实现(1)硬件设计根据实验要求,设计单周期CPU的硬件结构,包括各个模块的连接和功能实现。
(2)软件设计编写指令译码程序,根据指令操作码生成相应的控制信号,控制各个模块执行指令。
4. 实验验证(1)编译测试程序将测试程序编译成机器码,存入数据内存。
(2)运行测试程序通过程序计数器逐条取出指令,执行指令,观察结果。
(3)分析实验结果根据实验结果,分析单周期CPU的功能和性能。
三、实验结果与分析1. 单周期CPU能够正确执行指令,实现算术运算、逻辑运算、数据传输和跳转等功能。
2. 单周期CPU的数据通路结构简单,指令执行速度快,但资源利用率较低。
3. 实验结果表明,单周期CPU具有较高的性能,但在实际应用中,需要根据具体需求进行优化设计。
MIPS单周期CPU实验报告
MIPS单周期CPU实验报告一、实验目标本次实验的主要目标是设计并实现一个基于MIPS单周期CPU的计算机系统。
具体要求如下:1.能够识别并执行MIPS指令集中的常见指令,包括算术逻辑运算、分支跳转和存取指令等。
2.实现基本的流水线结构,包括指令译码阶段、执行阶段、访存阶段和写回阶段。
3.能够在基本结构的基础上添加异常处理和浮点数运算支持。
二、实验环境三、实验过程1.确定CPU的基本组成部分,包括指令存储器、数据存储器、寄存器、ALU和控制单元等,并进行电路设计。
2.编写MIPS汇编程序,并使用MARS进行仿真调试,验证指令的正确性和计算结果的准确性。
3.将MIPS汇编程序烧录到指令存储器中,并将数据存储器中的初始数据加载进去。
4.运行程序,观察CPU的工作状态,并进行时序仿真,验证CPU设计的正确性。
5.对CPU进行性能测试,包括执行时间、指令吞吐量和时钟周期等指标的测量。
四、实验结果经过实验和测试,我们成功地设计并实现了一个基于MIPS单周期CPU的计算机系统。
该系统能够正确执行MIPS指令集中的常见指令,并支持流水线结构、异常处理和浮点数运算。
1.指令执行的正确性:通过在MARS中进行调试和仿真,我们发现CPU能够正确地执行各种指令,包括算术逻辑运算、分支跳转和存取指令等。
并且,在时序仿真中,CPU的各个组件的信号波形也符合预期。
2.流水线结构的实现:我们根据MIPS指令的特点和处理流程,设计了基本的流水线结构,并在MARS中进行了时序仿真。
仿真结果表明,各个流水线级的操作都能够正确无误地进行,并且能够顺利地在一个时钟周期内完成。
3.异常处理和浮点数运算的支持:通过在MIPS汇编程序中加入异常处理和浮点数运算的指令,我们验证了CPU对这些功能的支持。
在异常处理时,CPU能够正确地转入异常处理程序,并根据异常类型进行相应的处理。
在浮点数运算时,CPU能够正确地进行浮点数的加减乘除等运算,并将结果正确地写回寄存器。
___单周期性CPU设计课设报告
___单周期性CPU设计课设报告引言本报告旨在介绍___单周期性CPU设计课设的背景、目的以及报告所涵盖的内容。
单周期性CPU设计课设是一个重要的任务,通过该任务的完成,我们可以深入了解CPU的架构和设计原理,提升对计算机体系结构的理解和应用能力。
在本次报告中,我们将首先讨论课设背景与目的,以帮助读者了解为什么进行单周期性CPU设计的课程任务,并明确我们的目标和愿望。
随后,我们将概述报告的内容,介绍每个部分的主要内容和重点。
通过阅读本报告,读者将对单周期性CPU设计的过程和相关知识有一个清晰的认识,为未来的研究和应用奠定基础。
请继续阅读以下内容,以了解更多关于___单周期性CPU设计课设报告的相关信息。
CPU(Central Processing Unit)是计算机的核心部件,负责执行指令、进行数据处理和控制计算机的各种操作。
功能CPU具有以下主要功能:数据处理:CPU能够执行各种算术和逻辑操作,包括加减乘除、比较、位逻辑运算等。
指令执行:CPU能够解码和执行指令,根据指令的要求对数据进行操作。
数据存储:CPU能够将数据存储在内部的寄存器中,以便后续的处理和计算。
结构CPU主要包括以下几个部分:数据通路(Data Path):数据通路是CPU中负责执行指令的部分,包括算术逻辑单元(ALU)用于执行算术和逻辑操作,寄存器用于暂存数据,数据选择器用于选择需要处理的数据等。
控制单元(Control Unit):控制单元是CPU中负责控制指令执行的部分,它根据指令中的操作码来决定执行什么操作,以及执行操作的顺序和方式。
寄存器(Registers):寄存器是CPU中的存储单元,用于存储和暂存数据。
CPU通常包括多个寄存器,不同寄存器有不同的功能和用途,例如通用寄存器用于存储中间结果和计算过程中需要的数据,程序计数器(PC)用于存储下一条指令的地址等。
以上是CPU的基本原理,包括其功能和结构,通过数据通路和控制单元的配合以及寄存器的存储,CPU能够实现指令的执行和数据的处理。
中山大学计算机组成原理实验单周期CPU设计
中⼭⼤学计算机组成原理实验单周期CPU设计《计算机组成原理实验》实验报告(实验三)学院名称:数据科学与计算机学院专业(班级):学⽣姓名:学号:时间:2019 年11 ⽉8 ⽇成绩:实验三:单周期CPU设计与实现⼀.实验⽬的(1) 掌握单周期CPU数据通路图的构成、原理及其设计⽅法;(2) 掌握单周期CPU的实现⽅法,代码实现⽅法;(3) 认识和掌握指令与CPU的关系;(4) 掌握测试单周期CPU的⽅法。
⼆.实验内容设计⼀个单周期CPU,该CPU⾄少能实现以下指令功能操作。
指令与格式如下:==> 算术运算指令加“加”运算。
加“加”运算。
==> 逻辑运算指令加“与”运算。
功能:GPR[rt] ←GPR[rs] or zero_extend(immediate)。
==>移位指令==>⽐较指令==> 存储器读/写指令==> 分⽀指令else pc ←pc + 4特别说明:offset是从PC+4地址开始和转移到的指令之间指令条数。
offset符号扩展之后左移2位再相加。
为什么要左移2位?由于跳转到的指令地址肯定是4的倍数(每条指令占4个字节),最低两位是“00”,因此将offset放进指令码中的时候,是右移了2位的,也就是以上说的“指令之间指令条数”。
else pc ←pc + 4(16)bltz rs, offsetelse pc ←pc + 4。
==>跳转指令(17)j addr说明:由于MIPS32的指令代码长度占4个字节,所以指令地址⼆进制数最低2位均为0,将指令地址放进指令代码中时,可省掉!这样,除了最⾼6位操作码外,还有26位可⽤于存放地址,事实上,可存放28位地址,剩下最⾼4位由pc+4最⾼4位拼接上。
==> 停机指令功能:停机;不改变PC的值,PC保持不变。
三.实验原理单周期CPU指的是⼀条指令的执⾏在⼀个时钟周期内完成,然后开始下⼀条指令的执⾏,即⼀条指令⽤⼀个时钟周期完成。
CPU实验——单周期MIPS处理器设计
单周期MIPS处理器设计实验报告完成人:笪腾飞2012011263一、实验目的1、设计一个32位的单周期MIPS处理器,具备定时器、数码管等外设;2、编写一个编译器,可以将mips代码编译为二进制机器码;3、编写一个计算两个整数的最大公约数的汇编程序。
二、设计方案根据理论课所学的单周期MIPS处理器数据通路的知识,结合本次试验的具体要求,最终设计方案如下:1、系统时钟为了综合后能够在开发板上正确运行程序,我们决定采取50MHz的CPU时钟,因此编写了一个时钟分频模块,对开发板提供的100MHz时钟进行二分频,从而得到50MHz时钟。
2、PC产生模块原理图如下:如上图左半部分所示,多路选择器由一个always语句中的if…else if…else语句实现。
其中,将ALU中的加减法部分提取出来实现一个加法器,用于产生PC+4和ConBA两个PC来源。
将I型指令中的16位立即数左移两位后再符号位扩展成32位地址,与PC+4相加得到分支地址ConBA。
将跳转指令中的26位目标地址左移两位后,与当前PC的高四位拼接得到跳转地址JT。
将第一个操作数寄存器中的值取出作为PC的一个输入,这是为了实现jr和jalr指令,从$Xp和$Ra寄存器中读取跳转地址。
ILLOP和XADR分别是发生中断和异常时的跳转地址。
下一指令地址的选择由PCSrc决定,而PCSrc是译码后由控制信号模块根据每条指令的操作码(opcode)和函数码(funct)产生。
3、译码模块原理图如上图右半部分所示,将PC作为ROM模块的地址输入,输出即为PC所对应的指令。
分别取出指令中的某些片段,得到$Rs,$Rt,$Rd,shamt,funct,16位立即数和26位跳转地址。
4、控制模块控制模块即控制信号产生模块,六位操作码OpCode,六位函数码[5:0] Funct,定时器中断信号irq和PC最高位PC31作为输入,输出为以下控制信号:(1) R型指令指示信号IsR,值为1表示当前指令为R型指令,否则非R型指令;(2) PC产生的选择信号[2:0] PCSrc,取值0,1,2,3,4及其它,分别选择下一指令不同的PC;(3) 目的寄存器选择信号[1:0]RegDst,被写入的寄存器有四种选择:$Rd,$Rt,$Ra,$Xp,分别由RegDst不同取值完成选择;(4) 写寄存器使能信号RegWr,值为1表示允许对寄存器进行写操作;(5) ALU第一个操作数选择信号ALUSrc1,值为1表示选择将移位量shamt进行0扩展后作为输入,值为0表示将$Rs寄存器中的值作为输入;(6) ALU第一个操作数选择信号ALUSrc1,值为1表示选择将扩展后的32位立即数作为输入,值为0表示将$Rt寄存器中的值作为输入;(7) ALU运算控制信号[5:0] ALUFunc,作为ALU的输入选择不同的运算操作;(8) 有无符号数指示信号Sign,值为1表示有符号数,值为0表示无符号数;(9) 写存储器使能信号MemWr,值为1表示允许对存储器进行写操作;(10) 读存储器使能信号MemRd,值为1表示允许对存储器进行读操作;(11) 写寄存器值的选择信号[1:0] MemToReg,选择ALU结果,存储器读取结果和PC+4其中之一作为写入目的寄存器的值;(12) 符号位扩展指示信号EXTOp,值为1表示对16位立即数进行符号位扩展,值为0表示0扩展;(13) 立即数高位取指令指示信号LUOp,值为1表示当前指令为lui指令,选择将立即数载入高16位低位填0的32位立即数作为ALU输入,值为0表示将正常扩展后的32位立即数作为ALU输入;控制信号的具体产生过程此处略去,在控制信号说明文件中进行详述。
MIPS单周期CPU实验报告
《计算机组成原理实验》实验报告(实验二)学院名称:专业(班级):学生姓名:学号:时间:2017 年11 月25 日成绩: 实验二:单周期CPU设计与实现一.实验目的(1) 掌握单周期CPU数据通路图的构成、原理及其设计方法;(2) 掌握单周期CPU的实现方法,代码实现方法;(3) 认识和掌握指令与CPU的关系;(4) 掌握测试单周期CPU的方法;(5) 掌握单周期CPU的实现方法。
二.实验内容设计一个单周期的MIPSCPU,使其能实现下列指令:==> 算术运算指令==> 逻辑运算指令功能:rd←rs | rt;逻辑或运算。
==>移位指令==>比较指令==> 存储器读/写指令将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。
即读取rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后保存到rt寄存器中。
==> 分支指令功能:if(rs=rt) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4特别说明:immediate是从PC+4地址开始和转移到的指令之间指令条数。
immediate 符号扩展之后左移2位再相加。
为什么要左移2位?由于跳转到的指令地址肯定是4的倍数(每条指令占4个字节),最低两位是“00”,因此将immediate放进指令码中的时候,是右移了2位的,也就是以上说的“指令之间指令条数”。
12特别说明:与beq不同点是,不等时转移,相等时顺序执行。
功能:if(rs>0) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4==>跳转指令==> 停机指令三.实验原理1.时间周期:单周期CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期完成。
机组实验报告_单周期十条指令CPU
实验二单周期十条指令CPU一、实验目的通过设计并实现支持 10 条指令的 CPU,进一步理解和掌握 CPU 设计的基本原理和过程。
二、实验内容设计和实现一个支持如下十条指令的单周期 CPU。
非访存指令清除累加器指令 CLA累加器取反指令 COM算术右移一位指令 SHR:将累加器 ACC 中的数右移一位,结果放回 ACC循环左移一位指令 CSL:对累加器中的数据进行操作停机指令 STP访存指令加法指令 ADD X:[X] + [ACC] –〉ACC,X 为存储器地址,直接寻址存数指令 STA X,采用直接寻址方式取数指令 LDA X,采用直接寻址三、实验原理图一:cpu 原理图指令四、实验步骤4.1 CPU 各模块Verilog 实现1) PC 模块表 4.1 PC 功能描述Verilog 关键代码:2) 指令存储器模块表 4.2 指令存储器模块功能描述Verilog 关键代码:3) 寄存器堆表 4.3 寄存器堆模块功能描述Verilog 关键代码:4)ALU表 4.4 ALU 模块功能描述Verilog 关键代码:5) 控制单元表 4.5 控制单元模块功能描述Verilog 关键代码:4.2 CPU 顶层文件封装实现通过根据图 2 将以上定义的模块进行连接、封装就得到了目标 CPU,该 CPU 的输入为系统时钟信号 clk 和重置信号 reset,输出 pc 是为了调试方便。
Verilog 关键代码:4.3 CPU 模拟仿真为了仿真验证所实现的 CPU,需要定义测试文件并在测试文件中对指令存储器和寄存器堆中的相应寄存器的值进行初始化,并通过仿真波形图查看是否指令得到了正确执行。
1)TestBench 关键代码指令寄存器以 PC 给出的值为地址给出指令,因此再测试文件中只需要完成 PC 的控制就可以了,clk 和 rst 定义为 1 后再延迟 30ns 是为了对 PC 进行初始化。
2)ModelSim 仿真及分析由于十条测试指令都没有用到寄存器堆,所以均无数据最初的PC 给出的是h00 是为了启动。
计算机组成原理实验文档
计算机组成原理实验报告——实验六 Logisim实现单周期CPU专业:计算机科学与技术(师范)姓名:韩玉佳学号:113100001 6指导老师:王晶完成日期:2015.6.15一、实验目的1、掌握硬布线控制器的设计思想及工作原理2、理解数据通路的搭建过程、控制信号的生成过程3、培养熟练应用相关软件实现系统设计的能力二、实验内容设计一款支持add,addi,and,beq,j,lw,sw,7条指令的基于MIPS的32位CPU:1.寄存器文件包括32个32位的寄存器2.指令存储器空间256X32;数据存储空间256X32三、实验过程Step1确定数据通路控制信号:RegDst: 控制RF写寄存器编号,0:rd 1:rt;RegWrite:控制RF写使能;0:不能写,1:可以写;ALUSrc: 控制ALU的B输入,0:来自RF的rd2 1:来自符号位扩展后的立即数ALU Control:控制ALU功能MemtoReg:控制RF写入数据;0:ALU运算结果;1:数据NPCControl: 控制Npc逻辑 00:PC+4;10:BEQ指令;01:J指令 MemWrite:控制Dm写使能;0:不能写;1:可以写MemWrite:控制DM写使能;0不能写,1可以写Step2确定控制信号及器件设计原扩展元件新扩展元件EP(扩展):可以实现0扩展以及符号扩展。
我是通过多路选择器连接了一个输入端进行选择,解决了原有了扩展不能实现符号的弊端。
通过数据总线将高16位置0。
NPC:通过NPCControl和ALU计算结果的零标志来选择下一条指令的地址。
寄存器,用数据选择器控制用哪个寄存器输出数据DM(数据存储器):上端时钟输入是指令地址,运行哪一条指令。
下端为输入值,由输出端显示结果。
将最上端写使能信号置1便可进行输入,可通过最下端clr清零,clk时钟信号控制指令的运行。
IM(指令存储器):指令连接到分离器,再根据各个输出所需的位数用分离器连接构成各个输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MIPS-CPU设计实验报告实验名称:32位单周期MIPS-CPU设计姓名学号:刘高斯11072205实验日期:2014年12月19日目录前言MIPS简介------------------------------------------------------------- 3 实验目的------------------------------------------------------------- 3第一部分VERILOG HDL 语言实现部分实验内容------------------------------------------------------------- 4 试验环境------------------------------------------------------------- 4 模块简介------------------------------------------------------------- 4 实验截图------------------------------------------------------------- 5 实验感想------------------------------------------------------------- 5 实验代码------------------------------------------------------------- 6第二部分LOGISIM 语言实现部分实验内容------------------------------------------------------------- 16 实验环境------------------------------------------------------------- 16模块设计------------------------------------------------------------- 16 试验感想------------------------------------------------------------- 23前言一、MIPS简介MIPS是世界上很流行的一种RISC处理器。
MIPS的意思“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。
它最早是在80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。
MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。
这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。
MIPS技术公司是美国著名的芯片设计公司,它采用精简指令系统计算结构(RISC)来设计芯片。
和英特尔采用的复杂指令系统计算结构(CISC)相比,RISC具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。
MIPS是出现最早的商业RISC架构芯片之一,新的架构集成了所有原来MIPS指令集,并增加了许多更强大的功能。
MIPS处理器是八十年代中期RISC CPU设计的一大热点。
MIPS是卖的最好的RISC CPU,可以从任何地方,如Sony,Nintendo的游戏机,Cisco的路由器和SGI超级计算机,看见MIPS产品在销售。
目前随着RISC体系结构遭到x86芯片的竞争,MIPS有可能是起初RISC CPU设计中唯一的一个在本世纪盈利的。
和英特尔相比,MIPS的授权费用比较低,也就为除英特尔外的大多数芯片厂商所采用。
MIPS的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系MIPS I、MIPS II、MIPS III、MIPS IV到MIPS V,嵌入式指令体系MIPS16、MIPS32到MIPS64的发展已经十分成熟。
在设计理念上MIPS强调软硬件协同提高性能,同时简化硬件设计。
二、实验目的我们通过VERILOG HDL 语言和LOGISIM 语言分别用语句和图形完成对32位MIPS-CPU的设计,通过前8周的学习我们基本掌握了MIPS的概念和原理,认识到RISC架构的特征和优缺点。
通过过老师的讲解,了解到每一条语句的从设计到硬件实现的全过程。
通过本次实验我们要更加深入的理解硬件组成的结构,语句逻辑实现的原理。
掌握硬件编程语言和硬件图形语言编程的方法。
透彻的理解MIPS的特征和优点。
VERILOG HDL 语言实现部分实验内容利用VERILOG设计一种32位单周期MIPS CPU。
首先设计各个子模块,并将已做好的各个模块进行模块合并,实现单周期CPU的各项指令。
实验环境Window Xp Quartus II各个子模块的简单介绍此程序将数据通路(SingleDataLoad)设定为顶层模块,下面的模块包括:算术逻辑运算单元(ALU)、数据存储器(DataStore)、数据寄存器(Registers)、取指令部件(GetCode)、总控制器(Control),通过顶层模块对各个子模块的调用从而实现了整个单周期CPU。
1)数据通路(SingleDataLoad):进行数据的运算、读取以及存储功能,通过总控制器产生的各个控制信号,进而实现对数据的各项操作。
2)算术逻辑运算单元(ALU):数据通路调用此模块,根据得到的控制信号对输入数据进行处理,处理功能有:addu、add、or、subu、sub、sltu、slt等。
3)数据存储器(DataStore):当WrEn控制信号为1时,此时就将输入数据存储到此存储器中,当WrEn为0时,则根据输入的地址,找到地址对应的单元将单元中的数据输出。
4)数据寄存器(Registers):在此程序中功能和实现基本和数据存储器相同,但在实际CPU当中使用的逻辑器件及获取数据的方式还是有所区别的。
5)取指令部件(GetCode):指根据PC所提供的地址从指令寄存器中取出要执行的指令,再根据各控制信号,得出下一次要执行的指令的地址。
(总控制器(Control):总控制器通过从取指令部件获得的指令,进而产生各个控制信号,并将控制信号返回个数据通路,就此实现各项功能。
程序截图及说明上图为执行下列指令产生的图像:Mem[0]<={6'b000100,5'b00001,5'b00010,5'b00000,5'b00000,6'b000001}; //beq $1,$2,1Mem[4]<={6'b000000,5'b00001,5'b00010,5'b00100,5'b00000,6'b101011}; //sltu $4,$1,$2Mem[8]<={6'b000010,5'b00000,5'b00000,5'b00000,5'b00000,6'b000010}; //j 2 当$1、$2所指的寄存器的值相同时,执行上述指令,得到的图如下:可以看出CPU跳过了第二条指令,直接执行了第三条,而上图执行了第一条指令后接着执行第二条,最后才执行第三条指令,区别就在于第一幅图表示的是$1、$2中的值不相等所执行的情况,第二幅图表示的是$1、$2中的值相等的情况,由此可以得知测试正确。
实验收获及感想VERILOG 语句将二进制元器件的原理整合到类汇编语言上,通过这次实验我从理解上从这语言本身理解到逻辑与函数不分家的道理,每一条连线和与、非、或都是一个个对应的函数。
任一个复杂的CPU 都是从一条条简单的逻辑一条一条实现的。
任何一条语句都是通过不同的函数和赋值分分合合直到被执行完毕。
实验代码:数据通路(SingleDataLoad)moduleSingleDataLoad(clk,RegWr,RegDst,ExtOp,ALUSrc,Branch,Jump,MemtoReg,MemWr,ALUct r);input clk;//input[31:0] Instruction;output RegWr,RegDst,ExtOp,ALUSrc,Branch,Jump,MemtoReg,MemWr;output[2:0] ALUctr;wire RegWr,RegDst,ExtOp,ALUSrc,Branch,Jump,MemtoReg,MemWr;wire[2:0] ALUctr;wire [31:0] Instruction;wire [4:0] Rd,Rt,Rs;wire [5:0] op,func;wire[4:0] Rx;wire P1,P2,Zero,Overflow;wire [31:0] busW,busA,busB,out1,dataout,busB1,busBo;wire [15:0] imm16;Controlcon(Instruction,RegWr,ExtOp,ALUSrc,ALUctr,Branch,Jump,RegDst,MemtoReg,MemWr);assign op=Instruction[31:26];assign func=Instruction[5:0];assign Rs=Instruction[25:21];assign Rt=Instruction[20:16];assign Rd=Instruction[15:11];assign imm16=Instruction[15:0];assign P1=P2&RegWr;MUX2 mux2(RegDst,Rt,Rd,Rx);assign busB1={{16{imm16[15] & ExtOp}},imm16[15:0]};MUX2TO1 mux1(ALUSrc,busB,busB1,busBo);Registers Reg(clk,busW,P1,Rx,Rs,Rt,busA,busB);ALU alu(busA,busBo,ALUctr,out1,Overflow,Zero);assign P2=!Overflow;DataStore datas(clk,busB,out1[4:0],MemWr,dataout);MUX2TO1 mux3(MemtoReg,out1,dataout,busW);GetCode get(Branch,Zero,Jump,clk,Instruction);endmodulemodule MUX2TO1(op,X,Y,Z);input op;input [31:0] X,Y;output[31:0] Z;reg [31:0] Z;always@(op)beginif(op==1)Z=Y;elseZ=X;endendmodulemodule MUX2(op,x,y,z);input op;input [4:0] x,y;output[4:0] z;reg [4:0] z;always@(op)beginif(op==1)z=y;elsez=x;endendmodule算数逻辑运算单元(ALU)module ALU(A,B,ALUctr,Result,Overflow,Zero);parameter n=32;input [n-1:0] A,B;input [2:0] ALUctr;output [n-1:0] Result;output Overflow,Zero;wire Zero,Overflow;wire [n-1:0] Result;wire SUBctr,OVctr,SIGctr;wire [1:0] OPctr;wire [n-1:0] H,M,N,Add_Result;wire K,G,I,Add_Sign,Add_Overflow,Add_carry;assign SUBctr=ALUctr[2];assign OVctr=!ALUctr[1] & ALUctr[0];assign SIGctr=ALUctr[0];assign OPctr[1]=ALUctr[2] & ALUctr[1];assign OPctr[0]=!ALUctr[2] & ALUctr[1] &!ALUctr[0];assign H=B^{n{SUBctr}};assign M=A|B;Adderk nbit_add(SUBctr,A,H,Add_carry,Add_Sign,Add_Result,Zero);//,Add_Overflowassign Add_Overflow= A[n-1] & H[n-1] & !Add_Result[n-1] | !A[n-1] & !H[n-1] & Add_Result[n-1];assign K=SUBctr ^ Add_carry;assign I=Add_Sign ^ Add_Overflow;assign Overflow=OVctr & Add_Overflow;IMUX2to1 YN(K,I,SIGctr,G);IMUX2to1 yn(0,1,G,N);MUX3to1 nbit_Result(Add_Result,M,N,OPctr,Result);endmodulemodule Adderk (Cin, X, Y,Add_carry,Add_sign,Add_result,Zero); //Add_Overflow,parameter k = 32;input [k-1:0] X, Y;input Cin;output [k-1:0] Add_result;output Add_carry,Add_sign,Zero; //,Add_Overflowreg [k-1:0] Add_result;reg Add_carry,Zero,Add_sign; //,Add_Overflowalways@(X or Y or Cin)begin{Add_carry, Add_result} = X + Y + Cin;if(Add_result==0)Zero=1;elseZero=0;if(Add_result[31]==1)Add_sign=1;elseAdd_sign=0;endendmodulemodule MUX3to1 (V,W,U,Selm,F);parameter k = 32;input [k-1:0] V,W,U;input [1:0] Selm;output [k-1:0] F;reg [k-1:0] F;always @(V or W or U or Selm)case(Selm)2'b00: F <= V;2'b01: F <= W;2'b10: F<=U;endcaseendmodulemodule IMUX2to1 (V,W,SIGctr,Less);input[31:0] V,W;input SIGctr;output[31:0] Less;reg[31:0] Less;always @(V or W or SIGctr)if (SIGctr == 0)Less <= V;elseLess <= W;Endmodule数据存储器(DataStore):module DataStore(clk,DataIn,Adr,WrEn,Out);input [31:0] DataIn;input [4:0] Adr;input WrEn,clk;output [31:0] Out;reg [31:0] Out;reg [31:0] Store [31:0];always@(negedge clk)beginif(WrEn==1)Store[Adr]=DataIn;endalways@(Adr or WrEn)if(WrEn==0)Out=Store[Adr];endmodule数据寄存器(Registers):module Registers(clk,busW,wr,Rw,Ra,Rb,busA,busB); input [31:0] busW;input clk,wr;input [4:0] Rw,Ra,Rb;output [31:0] busA,busB;reg [31:0] busA,busB;reg [31:0] Regist [31:0];always@(negedge clk)beginRegist[1]=32'd25;Regist[2]=32'd25;if(wr==0)Regist[Rw]=busW;endalways@(Ra or Rb or wr)beginif(wr==1)beginbusA=Regist[Ra];busB=Regist[Rb];endendendmodule取指令部件(GetCode):module GetCode(Branch,Zero,Jump,clk,Instruction); input Zero,Branch,Jump,clk;output[31:0] Instruction;reg[29:0] PC=25;wire[29:0] M,M2;wire [4:0] addmem;wire K;reg reset=1;assign addmem={PC[2:0],2'b00};wire[29:0] O1,O2,O3,O4;wire[15:0] imm16;instruct InsMem(addmem,Instruction);always@(negedge clk)beginif (reset==1)beginPC <=0;reset<=0;endelsebeginPC <= O4;endendassign imm16=Instruction[15:0];assign M=PC;assign K=Zero & Branch;Adder adder1(M,1,O1);assign M1={{14{imm16[15]}},imm16[15:0]};Adder adder2(O1,M1,O2);MUX2T1 mux1(K,O1,O2,O3);assign M2={M[29:26],Instruction[25:0]};MUX2T1 mux2(Jump,O3,M2,O4);endmodulemodule Adder(M,N,O);input[29:0] M;input[29:0] N;output[29:0] O;wire[29:0] M,N,O;assign O=M+N;endmodulemodule MUX2T1(op,X,Y,Z);input op;input [29:0] X,Y;output[29:0] Z;reg [29:0] Z;always@(op)beginif(op==1)Z=Y;elseZ=X;endendmodulemodule instruct(addr,inst);input [4:0] addr;output [31:0] inst;reg [31:0] inst;// Declare the RAM variablereg [31:0] Mem [31:0];// write instruction: add 3<=(1)+(2),sub 6<=(4)-(5),jump 0always @(*)begin//Mem[0]<={6'b000000,5'b00001,5'b00010,5'b00011,5'b00000,6'b100000}; //add $3,$1,$2// Mem[4]<={6'b000000,5'b00011,5'b00001,5'b00100,5'b00000,6'b100010}; //sub $4,$3,$1// Mem[0]<={6'b000000,5'b00001,5'b00010,5'b00011,5'b00000,6'b101010}; //slt $3,$1,$2// Mem[4]<={6'b000000,5'b00011,5'b00001,5'b00100,5'b00000,6'b100011}; //subu $4,$3,$1// Mem[0]<={6'b000000,5'b00001,5'b00010,5'b00011,5'b00000,6'b101010}; //slt $3,$1,$2// Mem[4]<={6'b000000,5'b00001,5'b00010,5'b00100,5'b00000,6'b101011}; //sltu $4,$1,$2//Mem[0]<={6'b001101,5'b00001,5'b00011,5'b10000,5'b00000,6'b000101}; //ori $3,$1,32773// Mem[4]<={6'b001001,5'b00010,5'b00100,5'b00000,5'b00000,6'b001000}; //addiu $4,$2, 8// Mem[4]<={6'b001001,5'b00010,5'b00100,5'b11111,5'b11111,6'b111000}; //addiu $4,$2, -8// Mem[0]<={6'b101011,5'b00001,5'b00011,5'b00000,5'b00000,6'b000101}; //sw $3,$1,5// Mem[4]<={6'b100011,5'b00001,5'b00100,5'b00000,5'b00000,6'b000101}; //lw $4,$1,5Mem[0]<={6'b000100,5'b00001,5'b00010,5'b00000,5'b00000,6'b000001}; //beq $1,$2,1Mem[4]<={6'b000000,5'b00001,5'b00010,5'b00100,5'b00000,6'b101011}; //sltu $4,$1,$2Mem[8]<={6'b000010,5'b00000,5'b00000,5'b00000,5'b00000,6'b000010}; //j 2 end// readalways @(addr)begininst <= Mem[addr];endendmodule总控制器(Control):moduleControl(Instruction,RegWr,ExtOp,ALUSrc,ALUctr,Branch,Jump,,RegDst,MemtoReg,Mem Wr);output RegWr,RegDst,ExtOp,ALUSrc,Branch,Jump,MemtoReg,MemWr;input[31:0] Instruction;reg RegWr,RegDst,ExtOp,ALUSrc,Branch,Jump,clk,MemtoReg,MemWr;output [2:0] ALUctr;reg [2:0] ALUctr;wire [5:0] op,func;assign op=Instruction[31:26];assign func=Instruction[5:0];parameterS0=6'b100000,S1=6'b100010,S2=6'b100011,S3=6'b101010,S4=6'b101011,S5=6'b001101,S6 =6'b001001,S7=6'b100011,S8=6'b101011,S9=6'b000100,S10=6'b000010;always@(op or func)beginif(op==6'b000000)begincase(func)S0:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;ALUctr=3'b001;MemtoReg=0;RegWr=1;MemWr=0;endS1:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;ALUctr=3'b101;MemtoReg=0;RegWr=1;MemWr=0;endS2:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;ALUctr=3'b100;MemtoReg=0;RegWr=1;MemWr=0;endS3:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;ALUctr=3'b111;MemtoReg=0;RegWr=1;MemWr=0;endS4:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;ALUctr=3'b110;MemtoReg=0;RegWr=1;MemWr=0;endendcaseendelsebegincase(op)S5:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;ALUctr=3'b010;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=0;endS6:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;ALUctr=3'b000;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=1;endS7:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;ALUctr=3'b000;MemtoReg=1;RegWr=1;MemWr=0;ExtOp=1;endS8:beginBranch=0;Jump=0;ALUSrc=1;ALUctr=3'b000;RegWr=0;MemWr=1;ExtOp=1;endS9:beginBranch=1;Jump=0;ALUSrc=0;ALUctr=3'b100;RegWr=0;MemWr=0;endS10:beginBranch=0;Jump=1;RegWr=0;MemWr=0;endendcaseend end endmoduleLOGISIM 实现部分实验内容利用LOGISIM软件,实现通过图形硬件语言完成对32位单周期MIPS-CPUD 设计工作。