杭电计组实验8-实现R型指令地CPU设计实验
杭电嵌入式实验报告
![杭电嵌入式实验报告](https://img.taocdn.com/s3/m/47b51c622e60ddccda38376baf1ffc4fff47e277.png)
杭电嵌入式实验报告嵌入式系统实验一 Linux的安装、Shell命令以及X 窗口系统的使用一、实验目的:1.掌握Linux的安装2.熟练使用Linux字符界面的常用命令3.熟练运用Linux的在线求助系统4.练习X 窗口系统中常用的应用工具二、实验内容:1.Linux 的安装2.一般用户命令的使用3.vi编辑器的使用4.man 在线帮助系统三、实验指导与步骤:VMWare虚拟机上安装好Linux登录系统:$login: 用户名password: 不回显的密码退出系统:$logout, exit (注销登录)$halt (关机)$reboot (重新启动)$init 0 (以runlevel 0 启动及重新启动)1. 练习Linux的常用命令主要包括:文件处理命令、文件权限管理命令、文件查找命令、磁盘管理命令、程序管理命令、显示文本文件与字符串查找命令、压缩与解压缩命令等;2. 练习vi编辑器的使用,试试X 窗口系统的Gedit文件编辑器。
GNOME gedit 文本编辑器与Windows 的notepad文本编辑器功能相似,快捷键也大部分相同,又有Windows 的wordpad写字板的风格,比之notepad 和wordpad,gedit 功能更全面,操作更便利。
3.熟练掌握man 在线帮助系统,开发和编程离不开在线帮助系统。
man命令可以号称为“命令杀手”。
任何命令或重要文件都可以使用man来查询使用方法,这也是Linux最可爱之处和最完整的在线查询系统。
当遇到任何疑难杂症时,稍微“man”一下就可轻松解决问题。
Redhat Linux的X窗口系统还有更方便的在线帮助系统,只要打开“开始”菜单就能看到Redhat Linux的在线帮助系统。
Redhat Linux 的在线帮助系统与Microsoft Windows的在线帮助系统一样简单易用,甚至更胜一筹。
4.X 窗口系统下的常见应用工具有文件管理器,磁盘管理器(文件系统挂接工具),设备(硬件)管理器,控制中心,网络配置工具,服务器配置工具,软件包安装卸载工具,还有集成开发环境,DDD调试器等,这些工具都容易上手。
基于龙芯开源CPU的计算机组成原理实验课程改革
![基于龙芯开源CPU的计算机组成原理实验课程改革](https://img.taocdn.com/s3/m/05603cf90342a8956bec0975f46527d3240ca61f.png)
图 3 单周期 CPU 的大致框图
学生的理论知识和实际动手能力有较高要求,且 程序调试较复杂。为此,在教学实践中,笔者将 该实验设置为可选,鼓励学有余力的学生完成。 2.8 静态五级流水 CPU 的实现
最后一个实验要求学生设计一个五级流水 CPU。该 CPU 的主体部分使用 2.7 节完成的多周 期 CPU,但此处要求将指令拓展到 40 条以上, 并 在 此 前 基 础 上 加 入 延 时 槽 技 术。 此 外, 该 实 验在每个模块中加入 allow_in 信号和 over 信号, 以此使该模块不断运作,从而实现流水线效果。 该实验使用了大量的控制信号来维持流水线的 秩序,要求学生对 CPU 功能结构有深入的了解, 并能把各模块联系起来,最后还要通过仿真器分 析设计结果,做出改进。在教学实践中,笔者将 该实验设置为可选,鼓励学有余力的学生完成。
计算机教育
156
Computer Education
2018
一系列教学改革尝试。在实验过程中,通过指导 学生动手实践,从零开始逐步完成一个可真实运 行的 CPU 核心,激发了学生的学习主动性,巩 固了学生的课堂知识,使学生对所学知识融会贯 通,取得了较好的教学成果。基于龙芯开源 CPU 的计算机组成原理实验平台已在南京邮电大学的 2014、2015 级计算机专业本科生中试用,在教 学过程中取得了较好的教学效果。 3.1 教改成效
此外,龙芯具有较好的社会影响力,配套培 训较多,学生学习热情高。例如,2017 年 6 月, 龙芯公司在南京航空航天大学进行了全国大学生 计算机系统能力培养大赛的相关培训 [8],在培训 过程中,龙芯开发人员介绍了龙芯开源 CPU 的 设计流程,对实验箱进行了演示,详细介绍了所 用的 MIPS 指令集,极大地提高了学生对于计算 机整体系统的认识。 3.2 存在的问题和思考
试验五CPU组成与机器指令执行试验
![试验五CPU组成与机器指令执行试验](https://img.taocdn.com/s3/m/593167b9551810a6f5248697.png)
+5V GND μD5 μD4 μD3 μD2 μD1 μD0 T4 T3 T2 T1 W4 W3 W2 W1 SKIP +5V GND
数 据 通 路
实验五 CPU组成与机器指令执行实验
预习情况?
双端口存储器 Rd Rs
问:执行LDA R0, [R2]指令后有何结 果?
[R2]
R0
R2的内容作为地址所指 向的存储器的单元里的 数据.
RF寄存器堆
R1 83H R0 24H R2 60H R3 61H
00H
58H
LDA R0,
01H
5DH
LD[AR2R]1,
TJ
6根线
时序发生器
TJI
接线图 共39根!
IR7 IR6 IR5 IR4 C
数据通路(指令寄存器) IR高4位:操作码
请
微程序控制
同
LDIR LDPC PC_ADD PC_INC M4 LDIAR LDAR1 AR1_INC M3 LDER IAR_BUS# SW_BUS# RS_BUS# ALU_BUS CEL# LRW WRD LDDR1 M1 S2 S1 S0
02H
04H ADD [RR03,] R1 A7H
03H
95H JC +5
C=0
04H
3EH AND R2,R3 60H
05H
1BH SUB R3,R2 01H
06H
4BH
STA R3,
07H
24H MUL [RR02,] R1 15H
杭电计算机组成原理寄存器堆设计实验
![杭电计算机组成原理寄存器堆设计实验](https://img.taocdn.com/s3/m/d8703f5aa31614791711cc7931b765ce05087ac7.png)
杭电计算机组成原理寄存器堆设计实验计算机组成原理是计算机科学与技术的基础课程之一,它涉及到计算机的基本组成部分和原理。
在这门课程中,学生通常需要进行一系列的实验来加深对计算机组成原理的理解和应用。
其中之一是关于寄存器堆的设计实验。
寄存器堆是计算机中重要的组成部分之一,它用于存储、读取和写入数据。
在计算机中,数据通常被存储在寄存器中,然后进行各种操作。
因此,设计一个高效可靠的寄存器堆对于计算机的性能至关重要。
根据实验要求,我们需要设计一个8位的寄存器堆,并实现读取、写入和清零等操作。
以下是针对该实验的设计思路和实施步骤。
首先,我们需要确定寄存器堆的结构。
由于该寄存器堆为8位宽度,我们选择使用一个8x8的存储单元阵列。
每个存储单元都可以存储一个8位的数据。
整个寄存器堆由8个存储单元组成,每个存储单元对应一个地址,即0~7接下来,我们需要设计寄存器堆的读写电路。
对于读操作,我们需要通过地址线来选择要读取的存储单元,并将其输出到数据线。
对于写操作,我们同样需要通过地址线来选择要写入的存储单元,并将数据线上的数据写入该存储单元。
为了实现这些操作,我们需要使用多路选择器和数据解码器。
在设计中,我们还需要考虑到时钟信号的输入,以确保读写操作在时钟的上升沿或下降沿进行。
此外,我们还需要添加清零功能,以便将寄存器堆的值重置为零。
为实现清零功能,我们可以将一个额外的输入线与所有存储单元的清零输入连接。
在实施阶段,我们需要使用Verilog或其他硬件描述语言来实现设计。
在代码中,我们首先声明一个8位宽的存储单元阵列作为寄存器堆的基本组成部分。
然后,我们定义读写电路,包括地址线、数据线、多路选择器和数据解码器。
最后,我们添加时钟信号和清零功能。
在完成设计后,我们可以通过仿真工具进行验证。
通过输入不同的数据和地址,观察输出结果是否符合预期。
如果存在问题,我们可以进行调试并进行必要的修改。
一旦仿真结果正确无误,我们就可以开始进行硬件实验了。
杭电计算机组成原理寄存器堆设计实验-4
![杭电计算机组成原理寄存器堆设计实验-4](https://img.taocdn.com/s3/m/7e630f8d5727a5e9856a61e4.png)
杭州电子科技大学计算机学院实验报告课程名称:计算机组成原理姓实验项目:寄存器堆设计实验班级:指导教师学号:实验位置:日期:2015年5月7日A=0;B=0;LED=O;W_Data=O;if(!Write_Reg)beginif(!C2)beginA=Addr;case(C1)2'b00:LED=R_Data_A[7:0];2'bO1:LED=R_Data_A[15:8];2'b10:LED=R_Data_A[23:16];2'b11:LED=R_Data_A[31:24];endcaseendelsebeginB=Addr;case(C1)2'b00:LED=R_Data_B[7:0];2'bO1:LED=R_Data_B[15:8];2'b10:LED=R_Data_B[23:16];2'b11:LED=R_Data_B[31:24];endcaseendendelsebegincase(C1)2'b00:W_Data=32'h0000_0003;2'b01:W_Data=32'h0000_0607;2'b10:W_Data=32'hFFFF_FFFF;2'b11:W_Data=32'h1111_1234;endcaseendenden dmodule按照实验的要求,一步步的进行操作。
能够正确的进行 Wire_Reg 写操作,进行读操 作时LED 灯的显示,利用选择A, B 操作读出信号,已经Reset 进行清零信号的操作, 都能顺利的进行,本实验多次失败,收获不小。
(接 上) 实验 内容 (算 法、 程 序、 步骤NET "Addr[0]" LOC =M8; NET "Addr[1]" LOC =N8; NET "Addr[2]" LOC =U8;NET "Addr[3]" LOC =V8; NET "Addr[4]" LOC =T5; NET "C1[0]" LOC = T10; NET "C1[1]" LOC = T9; NET "C2" LOC = B8; NET "Clk" LOC = C 9; NET "LED[0]" LOC =U16; NET "LED[1]" LOC =V16; NET "LED[2]" LOC =U15; NET "LED[3]" LOC =V15; NET "LED[4]" LOC =M11;NET "LED[5]" LOC = N11; NET "LED[6]" LOC = R11; NET "LED[7]" LOC = T11; NET "Reset" LOC = D9; NET "Write_Reg" LOC = V9; 数据 记录 和计结论 (结 果)3.管脚配置实验仿真波形:n n <: Q 电卡p r FWT 尹尸科pi 通 T r n ►卢1叫卜靳 "iz。
计算机组成及原理实验3:CPU指令系统
![计算机组成及原理实验3:CPU指令系统](https://img.taocdn.com/s3/m/0a9c1165fab069dc51220194.png)
实验3:CPU 指令系统网工181 :张涛(35号)1、Intel 8086CPU 简介Intel 8086 CPU 是Intel 公司生产的一款16位微处理器,其数据总线和地址总线分别为16位和20位,可直接寻址1MB 容量的内存物理地址空间。
Intel 8086 CPU 的管脚图如下所示。
2、8086 CPU 的总体结构8086 CPU 的内部总体结构如下图所示。
3、 8086 CPU 的寄存器结构8086 CPU 中寄存器总共为 14 个,即 AX ,BX ,CX ,DX ,SP ,BP ,SI ,DI ,IP ,FR ,CS ,DS ,SS ,ES ,所有14 个寄存器均为 16位。
这 14个寄存器按又分为了通用寄存器,控制寄存器和段寄存器。
8086 CPU共有8个通用寄存器,其中AX,BX,CX,DX 称作为数据寄存器:AX (Accumulator):累加寄存器,也称之为累加器;BX (Base):基地址寄存器;CX (Count):计数器寄存器;DX (Data):数据寄存器;8086 CPU中的SP 和 BP 又称作为指针寄存器:SP (Stack Pointer):堆栈指针寄存器;BP (Base Pointer):基指针寄存器;8086 CPU中的SI 和 DI 又称作为变址寄存器:SI (Source Index):源变址寄存器;DI (Destination Index):目的变址寄存器;8086 CPU中的控制寄存器:IP (Instruction Pointer):指令指针寄存器;FLAG:标志寄存器;8086 CPU中的段寄存器:CS、DS、SS、ESCS (Code Segment):代码段寄存器;DS (Data Segment):数据段寄存器;SS (Stack Segment):堆栈段寄存器;ES (Extra Segment):附加段寄存器;8086 CPU的通用寄存器如下图所示。
电子科技大学CPU设计:《单周期CPU的设计与实现》-实验指导书
![电子科技大学CPU设计:《单周期CPU的设计与实现》-实验指导书](https://img.taocdn.com/s3/m/25f734f7af45b307e9719770.png)
电子科技大学计算机科学与工程学院单周期CPU的设计与实现实验指导书[计算机组成原理实验]张建2013-12-13目录前言 (1)1.1 实验内容 (2)1.2实验要求 (2)2. 实验环境 (3)2.1 硬件平台 (3)2.2 软件平台 (3)2.3 实验主要仪器设备连接框图 (4)3. 实验原理 (5)3.1 概述 (5)3.2 单周期CPU的总体电路 (5)3.3 MIPS指令格式 (6)3.4 数据路径设计 (7)3.4.1 下一条指令地址的选择 (7)3.4.2 ALU的输入端 (8)3.4.3寄存器堆的输入端 (8)4. 基本功能部件的设计与实现 (10)4.1 32位2选1选择器的设计与实现 (10)4.2 32位4选1选择器的设计与实现 (18)4.3 5位2选1选择器的设计与实现 (19)4.4 带有异步清零的32位D触发器的设计与实现 (19)4.5 移位器的设计 (20)4.6 32位加/减法器的设计与实现 (20)5.运算器(ALU)的设计与实现 (21)6.寄存器堆(Register File)的设计与实现 (24)7.控制器(Control Unit)的设计与实现 (27)8. CPU的封装 (30)9. 测试 (32)9.1 指令存储器及测试程序 (32)9.2 数据存储器及测试数据 (33)9.3 仿真测试 (33)9.4 下载到开发板验证 (35)附件: (39)BTN_Anti_Jitter模块 (39)Hex7seg_decode模块 (39)前言《计算机组成原理》是计算机科学专业的一门重要专业基础课。
在该课程中的理论学习中系统地阐述了计算机各组成部件的工作原理、逻辑实现和设计方法及将各部件连接成整机的方法,计算机硬件与底层软件的接口,培养了学生对计算机硬件系统的分析、开发与设计的基本技能能力。
本实验开设的目的是让学生通过设计一个单周期的CPU,加深对计算机各组成部件功能的理解和掌握,更好地理解计算机的基本工作原理,培养和锻炼学生掌握计算机硬件设计的基本方法和技能。
计组实验报告(共10篇)
![计组实验报告(共10篇)](https://img.taocdn.com/s3/m/da2e754fbf23482fb4daa58da0116c175e0e1e5a.png)
计组实验报告(共10篇)计组实验报告计算机组成原理实验报告一一、算术逻辑运算器1. 实验目的与要求:目的:①掌握算术逻辑运算器单元ALU(74LS181)的工作原理。
②掌握简单运算器的数据传输通道。
③验算由74LS181等组合逻辑电路组成的运输功能发生器运输功能。
④能够按给定数据,完成实验指定的算术/逻辑运算。
要求:完成实验接线和所有练习题操作。
实验前,要求做好实验预习,掌握运算器的数据传送通道和ALU 的特性,并熟悉本实验中所用的模拟开关的作用和使用方法。
实验过程中,要认真进行实验操作,仔细思考实验有关的内容,把自己想得不太明白的问题通过实验去理解清楚,争取得到最好的实验结果,达到预期的实验教学目的。
实验完成后,要求每个学生写出实验报告。
2. 实验方案:1.两片74LS181(每片4位)以并/串联形式构成字长为8为的运算器。
2.8为运算器的输出经过一个输入双向三态门(74LS245)与数据总线相连,运算器的两个数据输入端分别与两个8位寄存器(74LS273)DR1和DR2的输出端相连,DR1和DR2寄存器是用于保存参加运算的数据和运算的结果。
寄存器的输入端于数据总线相连。
3.8位数据D7~D0(在“INPUT DEVICE”中)用来产生参与运算的数据,并经过一个输出三态门(74LS245)与数据总线相连。
数据显示灯(BUS UNIT)已与数据总线相连,用来显示数据总线上所内容。
4.S3、S2、S1、S0是运算选择控制端,由它们决定运算器执行哪一种运算(16种算术运算或16种逻辑运算)。
5.M是算术/逻辑运算选择,M=0时,执行算术运算,M=1时,执行逻辑运算。
6.Cn是算术运算的进位控制端,Cn=0(低电平),表示有进位,运算时相当于在最低位上加进位1,Cn=1(高电平),表示无进位。
逻辑运算与进位无关。
7.ALU-B是输出三态门的控制端,控制运算器的运算结果是否送到数据总线BUS上。
低电平有效。
【精品】杭电赵伟_华操作系统课程设计指导书
![【精品】杭电赵伟_华操作系统课程设计指导书](https://img.taocdn.com/s3/m/6f3935c94028915f804dc20a.png)
操作系统实验和课程设计总要求1.遵守机房纪律,服从机房调度。
2.实验与课程设计的设计和上机调试要求独立完成,不能拷贝。
3.上机前,努力准备上机内容,并预先作一些情况分析。
4.仔细观察上机时出现的各种现象,记录上机的结果。
5.认真书写实验和课程设计报告。
报告中应包括:实验和课程设计的目的及要求、程序的设计思想及框图、程序的调试中遇到的问题的分析、程序的清单和结果分析以及程序的不足之处及修改方案。
程序要带注释。
1实验一使用动态优先数的进程调度算法的模拟一.目的通过这一实验加深对进程、进程控制块和进程调度的理解,并通过动态优先数算法加深对进程调度算法的理解。
二.要求1.用C语言来实现有N(假设N为5)个进程的进程调度算法。
2.每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程标识数id:整型(0--N-1)。
(2)进程优先数priority:整型(优先数越大的进程,优先权越高)。
(3)进程已占用的CPU时间cputime:整型(初值为0)。
(4)进程还需占用的CPU时间alltime :整型(进程运行完毕时变为0)。
(5)进程的阻塞时间startblock:整型(即当进程再运行startblock个时间片后,进程将进入阻塞状态。
)(6)进程被阻塞的时间blocktime:整型(即已阻塞的进程再等待blocktime个时间片后,将转换成就绪态。
)(7)进程状态state:整型(0--finished;1--running;2--ready ;3--blocked)。
(8)队列指针next:指向PCB结构的指针,用来将PCB排成队列。
3.优先数改变的原则:(1)进程在就绪队列中呆一个时间片,优先数增加1。
(2)进程每运行一个时间片,优先数减3。
4.为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下:RUNNING PROG: iREADY_QUEUE: ->id1->id2BLOCK_QUEUE: ->id3->1d4=============================================ID 0 1 2 3 4PRIORITY P0 P1 P2 P3 P4CPUTIME C0 C1 C2 C3 C4ALLTIME A0 A1 A2 A3 A4STARTBLOCK T0 T1 T2 T3 T4BLOCKTIME B0 B1 B2 B3 B4STATE S0 S1 S2 S3 S42三.初始值ID 0 1 2 3 4PRIORITY 9 38 30 29 0CPUTIME 0 0 0 0 0ALLTIME 3 3 6 3 4STARTBLOCK 2 -1 -1 -1 -1BLOCKTIME 3 0 0 0 0STATE READY READY READY READY READY四.备注以上所有时间都以时间片为单位,并假设N个进程都是在开始调度时同时到达的。
杭电计算机组成原理多功能ALU设计实验
![杭电计算机组成原理多功能ALU设计实验](https://img.taocdn.com/s3/m/07b7257687c24028915fc37a.png)
评议
成绩评定: 指导教师签名:
(7)记录测试结果。
(接上)
实验内容(算法、程序、步骤和方法)
(1)ALU模块代码,利用三八译码器,将我们将要操作的对象,进行分别的处理。
module ALU_TOP(A,B,F,ZF,OF,ALU_OP);
input [31:0] A,B;
input [2:0] ALU_OP;
output ZF,OF;
3'b010:begin CF=A^B; end
3'b011:begin CF=A~^B; end
3'b100:begin CF=A+B; end
3'b101:begin CF=A-B; end
3'b110:begin CF=(A<B); end
3'b111:begin CF=B<<A; end
endcase
end
endmodule
(3)输出数据选择模块代码,根据实验指导书上的对于32位数据的处理方式。
module CLED(F_LED_SW,LED,F,ZF,OF);
input [31:0] F;
input ZF,OF;
input [2:0] F_LED_SW;
output [7:0] LED;
reg [7:0] LED;
output [31:0] F;
reg [31:0] F;
reg ZF,OF;
reg [5:0] i;
reg C;
reg [32:0] CF;
always @ (ALU_OP or A or B)
begin
case(ALU_OP)
电子科大实验报告
![电子科大实验报告](https://img.taocdn.com/s3/m/28d3e46f3868011ca300a6c30c2259010302f311.png)
一、实验名称计算机组成原理实验二、实验目的1. 掌握计算机组成原理的基本概念和组成结构。
2. 理解计算机各部件之间的逻辑关系和功能。
3. 学习计算机指令系统的基本原理和应用。
4. 培养动手实践能力和分析问题的能力。
三、实验内容1. 计算机硬件系统组成实验2. 计算机指令系统实验3. 计算机寻址方式实验4. 计算机中断系统实验四、实验原理1. 计算机硬件系统组成实验:通过搭建计算机硬件系统,了解计算机各个部件的功能和相互关系,包括中央处理器(CPU)、存储器、输入输出设备等。
2. 计算机指令系统实验:学习计算机指令系统的基本原理,包括指令格式、寻址方式、指令执行过程等。
3. 计算机寻址方式实验:了解计算机寻址方式的基本概念,包括直接寻址、间接寻址、寄存器寻址等,并掌握不同寻址方式的应用。
4. 计算机中断系统实验:学习计算机中断系统的原理,包括中断源、中断控制器、中断处理程序等,以及中断处理过程。
五、实验设备及器材1. 计算机组成原理实验箱2. 示波器3. 数字万用表4. 计算机软件:Keil、Proteus等六、实验过程及数据记录1. 计算机硬件系统组成实验(1)搭建计算机硬件系统,包括CPU、存储器、输入输出设备等。
(2)观察各个部件之间的连接和信号传输。
(3)测试计算机硬件系统的基本功能。
2. 计算机指令系统实验(1)编写简单的汇编语言程序,实现加法、减法等运算。
(2)使用Proteus软件模拟程序执行过程,观察CPU的运行状态和寄存器的内容。
3. 计算机寻址方式实验(1)编写汇编语言程序,实现不同寻址方式的操作。
(2)使用Proteus软件模拟程序执行过程,观察不同寻址方式对指令执行的影响。
4. 计算机中断系统实验(1)编写汇编语言程序,实现中断请求和处理。
(2)使用Proteus软件模拟程序执行过程,观察中断处理过程。
七、实验结果分析1. 通过搭建计算机硬件系统,了解了计算机各个部件的功能和相互关系,掌握了计算机硬件系统的基本原理。
实验三 R指令设计实现
![实验三 R指令设计实现](https://img.taocdn.com/s3/m/c33bd6d95022aaea998f0f95.png)
实验三R指令设计实现实验目的通过实现R指令的数据通路,理解R指令的工作原理,为进一步实现核心指令集的数据通路打下基础。
实验设备1.装有ISE10.1的PC机一台2.EDK-3SAISE实验箱一台实验内容1、用verilog描述MIPS通用寄存器组,并进行功能仿真2、用verilog描述MIPS的R指令数据通路,并进行功能仿真3、将R指令数据通路加载到实验箱运行。
要求6位Func码的低4位由拨动开关输入;寄存器号rs的低4位用4位拨动开关输入;寄存器号rt、td的低4位相等,用4位拨动开关输入;reset信息用拨动开关输入。
ALU运算结果的低12位输出到12位led指示灯上显示。
实验报告格式一、实验目的二、实验设备三、实验内容1.模块代码2.功能仿真测试代码3.功能仿真测试时序图四、实验小结参考资料一、MIPS通用寄存器组MIPS通用寄存器组包含32个32位的通用寄存器,其中0号通用寄存器存储常量0。
寄存器组有两个只读端口和一个只写端口,写操作在时钟上升沿触发,且可控制是否写。
寄存器组模型示意图如下:二、R指令数据通路R类型指令主要执行寄存器间的算术逻辑运算,原理图如下。
从指令中取得源寄存器号,在寄存器组中读出相应内容,送到ALU计算,并将结果写回到寄存器中。
ALU的控制通过指令中的功能字段实现。
R指令格式及编码如下:R指令码示例寄存器名与寄存器号的对应关系三、12位LED灯四、12位拨动开关五、独立的1位拨动开关六、时钟源实验箱提供40MHz的时钟信号,从FPGA的P9引脚输入。
必要时,可对时钟信号做分频操作。
将40MHz时钟信号送给计数器计数,则每秒可计数10,0110,0010,0101,1010,0000,0000B次,将计数器的第25位输出做为时钟信号,则可以得到频率约为1秒的时钟。
module ReduceFreq(clkin,clkout);input clkin;output clkout;reg [25:0] counter;always@(posedge clkin)counter=counter+1;assign clkout=counter[25];endmodule。
杭电计组实验10-实现R-I-J型指令的CPU设计实验精编版
![杭电计组实验10-实现R-I-J型指令的CPU设计实验精编版](https://img.taocdn.com/s3/m/6ba62d64be23482fb4da4cb8.png)
4'b0111:LED=M_R_Data[31:24];
4'b1000:begin LED[7:2]=0;LED[1]=OF;LED[0]=ZF;end
4'b1100:LED=PC[7:0];
4'b1101:LED=PC[15:8];
4'b1110:LED=PC[23:16];
.clka(clk),
.addra(PC[7:2]),
.douta(Inst_)
);
assign PC_new=PC+4;
always@(negedge clk or posedge rst)
begin
if(rst)
PC<=32'h00000000;
else
begin
case(PC_s)
2'b00:PC<=PC_new;
wire [31:0] PC;
// Instantiate the Unit Under Test (UUT)
TOP_RIJ_CPU uut (
.rst(rst),
.clk_100MHz(clk_100MHz),
.clk(clk),
.ZF(ZF),
.OF(OF),
.F(F),
.M_R_Data(M_R_Data),
rt_imm_s,Mem_Write,address,w_r_s,wr_data_s,PC_s,ZF);
assign W_Addr=(w_r_s[1])?5'b11111:((w_r_s[0])?rt:rd);
assign imm_data=(imm_s)?{{16{imm[15]}},imm}:{{16{1'b0}},imm};
408计组大纲2024
![408计组大纲2024](https://img.taocdn.com/s3/m/415fbc76effdc8d376eeaeaad1f34693daef10ef.png)
408计组大纲2024408计算机组成原理大纲(2024)一、课程目标计算机组成原理是计算机科学与技术专业的核心课程之一,旨在通过对计算机硬件组成和工作原理的学习,培养学生对计算机系统的整体了解和深入理解。
本课程将通过教授计算机系统硬件、指令系统、中央处理器、存储器、输入输出系统等相关内容,使学生能够掌握计算机系统的基本知识和原理,并能够对计算机硬件进行合理选择和优化。
二、教学内容1.计算机系统基本概念1.1计算机系统组成1.2计算机系统的层次结构1.3计算机系统性能指标2.计算机硬件2.1计算机硬件概述2.2中央处理器(CPU)2.3存储器(内存)2.4输入输出设备3.指令系统3.1指令系统的概念3.2指令格式与寻址方式3.3指令的执行过程4.中央处理器4.1中央处理器的功能与架构4.2数据通路和控制器4.3指令的执行和流水线技术5.存储器5.1存储器的类型与层次结构5.2随机访问存储器(RAM)5.3只读存储器(ROM)5.4高速缓存存储器(Cache)6.输入输出系统6.1输入输出设备的分类和特性6.2输入输出接口与控制6.3外设与总线7.计算机系统性能评价与优化7.1性能指标7.2提升计算机系统性能的方法7.3计算机系统设计的优化技术三、教学方法与要求本课程采用理论教学与实践相结合的教学方法。
理论教学部分主要通过课堂讲授、文献阅读与讨论等方式进行,实践部分将引导学生进行计算机硬件的实际操作和设计。
学生需要在掌握基本理论知识的基础上,参与实验操作,完成相关实践任务。
学生通过实践能够更深入地理解计算机组成原理,并掌握计算机系统的基本分析和设计能力。
四、考核方式与评分标准本课程的考核方式主要包括以下几个方面:1.平时表现:包括课堂参与、实验报告等。
(占总评成绩的30%)2.实验:完成相关的实验操作和设计任务。
(占总评成绩的30%)3.期末考试:对学生对所学内容的理解和应用能力进行考核。
(占总评成绩的40%)评分标准将根据学生的表现和成绩进行评定,具体细则将在教学过程中公布。
杭电计组实验8-实现R型指令的CPU设计实验
![杭电计组实验8-实现R型指令的CPU设计实验](https://img.taocdn.com/s3/m/5bd39756aaea998fcc220e86.png)
杭电计组实验8-实现R型指令的CPU设计实验实验报告2018 年 6 月 1 日成绩:一、实验程序源代码顶层LED测试模块:module Top_LED(clk,rst,SW,LED);input clk,rst;input [2:0]SW;output reg[7:0]LED;wire ZF,OF;wire [31:0]ALU_F;top_R_cpu test_cpu(rst,clk,ZF,OF,ALU_F);always@(*)begincase(SW)3'b000:LED=ALU_F[7:0];3'b001:LED=ALU_F[15:8];3'b010:LED=ALU_F[23:16];3'b011:LED=ALU_F[31:24];3'b100:begin LED[7:2]=0;LED[1]=OF;LED[0]=ZF;enddefault:LED=0;endcaseendendmodule顶层R型CPU模块:module top_R_cpu(input rst,input clk,output ZF,output OF,output [31:0]F); reg write_reg;wire [31:0]Inst_code;wire [31:0]R_Data_A;wire [31:0]R_Data_B;reg [2:0]ALU_OP;pc pc_connect(clk,rst,Inst_code);Register_file R_connect(Inst_code[25:21],Inst_code[20:16],Inst_code[15:11],write_reg,F,~clk,rst,R_Data_A,R_Data_B);ALU ALU_connect(R_Data_A,R_Data_B,F,ALU_OP,ZF,OF);always@(*)beginwrite_reg=0;ALU_OP=0;if(Inst_code[31:26]==0)begincase(Inst_code[5:0])6'b100000:ALU_OP=3'b100;6'b100010:ALU_OP=3'b101;6'b100100:ALU_OP=3'b000;6'b100101:ALU_OP=3'b001;6'b100110:ALU_OP=3'b010;6'b100111:ALU_OP=3'b011;6'b101011:ALU_OP=3'b110;6'b000100:ALU_OP=3'b111;endcasewrite_reg=1;endendendmodulePC取指令模块:module pc(input clk,input rst,output [31:0]Inst_code);reg [31:0]PC;wire[31:0]PC_new;initialPC<=32'h00000000;Inst_ROM Inst_ROM1 (.clka(clk),.addra(PC[7:2]),.douta(Inst_code));assign PC_new={24'h000000,PC_new[7:0]};always@(negedge clk or posedge rst)beginif(rst)PC=32'h00000000;else PC=PC_new;endendmodule寄存器堆模块:moduleRegister_file(R_Addr_A,R_Addr_B,W_Addr,Write_Reg,W_Data,Clk,Reset,R_Data_A,R_Data_B); input [4:0]R_Addr_A;input [4:0]R_Addr_B;input [4:0]W_Addr;input Write_Reg;input [31:0]W_Data;input Clk;input Reset;output [31:0]R_Data_A;output [31:0]R_Data_B;reg [31:0]REG_Files[0:31];reg [5:0]i;initial//仿真过程中的初始化beginfor(i=0;i<=31;i=i+1)REG_Files[i]=0;endassign R_Data_A=REG_Files[R_Addr_A];assign R_Data_B=REG_Files[R_Addr_B];always@(posedge Clk or posedge Reset)beginif(Reset)for(i=0;i<=31;i=i+1)REG_Files[i]=0;elseif(Write_Reg&&W_Addr!=0)REG_Files[W_Addr]=W_Data;endendmoduleALU算术逻辑运算单元模块:module ALU(A,B,F,ALU_OP,ZF,OF);input [31:0]A,B;input [2:0]ALU_OP;output reg ZF,OF;output reg[31:0]F;reg C32;always@(*)beginOF=1'b0;C32=1'b0;case(ALU_OP)3'b000:F=A&B;3'b001:F=A|B;3'b010:F=A^B;3'b011:F=~(A^B);3'b100:begin {C32,F}=A+B;OF=A[31]^B[31]^F[31]^C32;end 3'b101:begin {C32,F}=A-B;OF=A[31]^B[31]^F[31]^C32;end3'b110:if(A<B)F=1;elseF=0;3'b111:F=B<<A;endcaseif(F==0)ZF=1;elseZF=0;endendmodule测试代码:module test;// Inputsreg rst;reg clk;// Outputswire ZF;wire OF;wire [31:0] F;// Instantiate the Unit Under Test (UUT) top_R_cpu uut (.rst(rst),.clk(clk),.ZF(ZF),.OF(OF),.F(F));initial begin// Initialize Inputsrst = 0;clk = 0;// Wait 100 ns for global reset to finish#100;clk=1;// Add stimulus hereforeverbegin#50;clk=~clk;endendendmodule二、仿真波形三、电路图顶层电路模块顶层电路内部结构:四、引脚配置(约束文件)NET "LED[7]" LOC = T11;NET "LED[6]" LOC = R11;NET "LED[5]" LOC = N11;NET "LED[4]" LOC = M11;NET "LED[3]" LOC = V15;NET "LED[2]" LOC = U15;NET "LED[1]" LOC = V16;NET "LED[0]" LOC = U16;NET "SW[2]" LOC = V9;NET "SW[1]" LOC = T9;NET "SW[0]" LOC = T10;NET "clk" LOC = C9;NET "rst" LOC = C4;五、思考与探索(1)R型指令CPU实验结果记录表序号指令执行结果标志结论1 0000827 FFFFFFFF 0 0 正确2 0001102b 0000_0001 0 0 正确3 00421820 0000_0002 0 0 正确4 00622020 0000_0003 0 0 正确5 00832820 0000_0005 0 0 正确6 00a33020 0000_0007 0 0 正确7 00463804 0000_000E 0 0 正确8 00a64820 0000_000C 0 0 正确9 01264004 0000_7000 0 0 正确10 00284826 FFFF_8FFF 0 0 正确11 01215020 FFFF_8FFE 0 0 正确12 01075822 0000_6FF2 0 0 正确13 00e86022 FFFF_900E 0 0 正确14 012c6824 FFFF_800E 0 0 正确15 012c7025 FFFF_9FFF 0 0 正确16 00c77825 0000_FFFF 0 0 正确。
杭电计组实验10-实现R-I-J型指令的CPU设计实验
![杭电计组实验10-实现R-I-J型指令的CPU设计实验](https://img.taocdn.com/s3/m/2f9ca52402d276a201292e50.png)
实验报告2018年6月9 日成绩:、实验程序源代码顶层RI型指令CPU模块测试文件: module test;//In putsreg rst;reg clk_100MH z;reg clk;// Outputs wire ZF; wire OF;wire [31:0] F;wire [31:0] M_R_Data; wire [31:0] PC;// I nsta ntiate the Unit Un der Test (UUT) TOP_RIJ_CPU uut ( .rst(rst), .clk_100F .clk(clk), •ZF(ZF), •OF(OF),.M_R_Data(M_R_Data), .PC(PC));in itial begi n//I nitialize In putsrst = 0;clk_100MHz = 0;clk = 0;// Wait 100 ns for global reset to fin ish #100;// Add stimulus hereforeverbegi n#2;clk=~clk;#10;clk_100MHz=~clk_100MH z;endenden dmodule顶层LED验证模块module TOP_LED(clk_100M Hz, oclk,rst,SW 丄ED); in put clk_100MH z; in put oclk,rst;in put [3:0]SW;output reg[7:0]LED;4'b0001:LED二F[15:8];4'b0010:LED=F[23:16];4'b0011:LED=F[31:24];4'b0100:LED=M_R_Data[7:0];4'b0101:LED=M_R_Data[15:8];4'b0110:LED二M_R_Data[23:16];4'b0111:LED=M_R_Data[31:24];4'b1000:begin LED[7:2]=0;LED[1]=OF;LED[0]=ZF;e nd4'b1100:LED=PC[7:0];4'b1101:LED=PC[15:8];4'b1110:LED=PC[23:16];4'b1111:LED=PC[31:24];default:LED=0;endcaseenden dmodule顶层RIJ型指令CPU验证模块:module TOP RIJ CPU(i nput rst, in put elk 100MHz,i nput clk,output ZF, output OF,output [31:0]F,output [31:0]M_R_Data,output [31:0]PC);wire Write_Reg;wire [31:0]lnst_code;wire [4:0]rs;wire [4:0]rt;wire [4:0]rd;wire [31:0]rs_data;wire [31:0]rt_data;wire [31:0]rd_data;wire [31:0]imm_data;〃被扩展的立即数wire [15:0]imm;//wire rd_rt_s;wire [1:0]w_r_s;wire imm_s;〃判断是否需要扩展wire rt_imm_s;//B 端选择rt或者是扩展后的immwire Mem_Write;//wire alu_mem_s;wire [1:0]wr_data_s;wire [31:0]W_Addr;wire [31:0]W_Data;wire [31:0]R_Data_A;wire [31:0]R_Data_B;wire [31:0]F;wire [31:0]ALU_B;//B 端口数据wire [2:0]ALU_OP;wire [1:0]PC_s;wire [31:0]PC_ new;wire [31:0]PC;wire [25:0]address;pc pc_c onn ect(clk,rst,PC_s,R_Data_A,imm_data,address,l nst_code,PC);OP_YIMA op(I nst_code,ALU_QP;,rt,rd,Write_Reg,imm,imm_s,rt_imm_s,Mem_Write,address,w_r_s,wr_data_s,PC_s,ZF);elsebeg in case(PC_s)2'b00:PC<二PC_ new;2'bO1:PC<二R_Data_A;2'b10:PC<=PC_ new+(imm_data<<2);2'b11:PC<={PC_ new[31:28],address,2'b00};endcaseendenden dmoduleOP指令功能译码模块:module OP_YIMA(i nst,ALU_OPfe,rt,rd,Write_Reg,imm,imm_s,rt_imm_s,Mem_Write,address,w_r_s,wr_data_s,PC_s,ZF) in put [31:0]i nst; output reg[2:0]ALU_OP;output reg[4:0]rs;output reg[4:0]rt;output reg[4:0]rd;output reg Write_Reg;output reg[15:0]imm;//output reg rd_rt_s;output reg imm_s;output reg rt_imm_s;output reg Mem_Write;output reg [25:0]address;output reg[1:0] w_r_s;output reg[1:0] wr_data_s;output reg[1:0] PC_s;in put ZF;always@(*)begi nw_r_s=2'b01;Write_Reg=1; wr_data_s=2'b00;case(i nst[31:26])6'b001000:begin imm_s=1;ALU_OP=3'b100;e nd 6'b001100:begin imm_s=0;ALU_OP=3'b000;e nd 6'b001110:begin imm_s=0;ALU_OP=3'b010;e nd 6'b001011:begin imm_s=0;ALU_OP=3'b110;e nd endcaseend// ------- 处理I型取数/存数指令------if((i nst[31:30]==2'b10)&&(in st[28:26]==3'b011))imm=i nst[15:0];rt=i nst[20:16];//rt 寄存器rs=inst[25:21];//rs 寄存器//rd_rt_s=1;//rt作为目的存储器rt_imm_s=1;//imm 作为源操作数imm_s=1;w_r_s=2'b01;wr_data_s=2'b01;PC_s=2'b00;case(i nst[31:26])6'b100011:begin Mem_Write=O; Write_Reg=1;ALU_OP=3'b100;e nd 6'b101011:begin Mem_Write=1; Write_Reg=0;ALU_OP=3'b100;e nd endcaseend// ---------- 处理I型跳转指令-------if(i nst[31:27]==5'b00010)begi nimm=i nst[15:0];rt=i nst[20:16];//rtrs=i nst[25:21];//rscase(i nst[31:26])for(i=0;iv=31;i二i+1)REG_Files[i]=O;endassign R_Data_A=REG_Files[R_Addr_A]; assign R_Data_B=REG_Files[R_Addr_B]; always@(posedge Clk or posedge Reset) begi nif(Reset)for(i=0;i<=31;i=i+1)REG_Files[i]v=O;elseif(Write_Reg&&W_Addr!=0)REG_Files[W_Addr]<=W_Data; enden dmoduleALU运算模块:module ALU(A,B,F,ALU_QZF,OF); in put [31:0]A,B;in put [2:0]ALU_OP;output reg ZF,OF;output reg[31:0]F;reg C32;always@(*)begi nOF=1'b0;C32=1'b0;case(ALU_OP)3'b000:F=A&B;3'b001:F=A|B;3'b010:F=A A B;3'bO11:F=~(A^B);3'b100:begin {C32,F}=A+B;OF=A[31]A B[31]A F[31]A C32;e nd3'b101:begin {C32,F}二A-B;OF二A[31]AB[31]AF[31FC32;e nd 3'b110: if(A<B)F=1;elseF=0;3'b111:F=B<< A;endcaseif(F==0)ZF=1;elseZF=0;enden dmodule三、电路图J!仿真波形NjmeVtki*曲饶k ■ FIJI*]•电M_R_Dala[11fl]0 1吃网IIIhO Q10000(X1 悴259^353顶层电路内部结构:四、引脚配置(约束文件)NET "LED[7]" LOC = T11; NET "LED[6]" LOC = R11; NET "LED[5]" LOC = N11; NET "LED[4]" LOC = M11; NET "LED[3]" LOC = V15; NET "LED[2]" LOC = U15; NET "LED[1]" LOC = V16; NET "LED[0]" LOC = U16; NET "SW[3]" LOC = M8; NET "SW[1]" LOC = T9; NET "SW[01" LOC = T10;顶层电路模块SW(3:D)TOP LEDLED(7:0)elk 100MH2odknsl■ /TOP_LEDTOP LED.1NET "clk_100MHz" LOC = V10;NET "oclk" LOC = C9;NET "rst" LOC = C4;NET "SW[2]" LOC = V9;五、思考与探索(1) R-l-J型指令CPU实验结果记录表序号指令执行结果标志结论1 00004020 $8=0000_0000 0 0 正确2 00004820 $9=0000_0000 0 0 正确3 200a0014 $10=0000_0014 0 0 正确4 8d2b0010 $11=0000_0010 0 0 正确5 010b4020 $8=0000_2222 0 0 正确6 21290004 $9=0000_0004 0 0 正确7 214affff $10=000_0013 0 0 正确8 11400001 判断:$10不为0 0 0 正确0 0 正确9 08000003 返回去执行地址为0000_0010 的指令,即序号4:8d2b001010 ac0b0030 存储器地址:0000 0030 0 0 正确。
杭电计组实验9-实现R-I型指令地CPU设计实验
![杭电计组实验9-实现R-I型指令地CPU设计实验](https://img.taocdn.com/s3/m/88f5855c0066f5335a8121a5.png)
clk=1;
// Add stimulus here
forever
begin
#50;
clk=~clk;
end
end
endmodule
顶层LED验证模块:
module TOP_LED(clk_100MHz,oclk,rst,SW,LED);
input clk_100MHz;
input oclk,rst;
begin
if(rst)
PC=32'h00000000;
else
PC={24'h000000,PC_new[7:0]};
end
endmodule
OP指令功能译码模块
module OP_YIMA(inst,ALU_OP,rs,rt,rd,Write_Reg,
imm,rd_rt_s,imm_s,rt_imm_s,Mem_Write,alu_mem_s);
wire [31:0]ALU_B;
wire [2:0]ALU_OP;
pc pc_connect(clk,rst,Inst_code);
OP_YIMA op(Inst_code,ALU_OP,rs,rt,rd,Write_Reg,imm,rd_rt_s,imm_s,rt_imm_s,Mem_Write,alu_mem_s);
实验报告
2018年
班级
16052317
专业
计算机科学与技术
课程名称
《计算机组成原理与系统结构试验》
任课老师
张翔老师
指导老师
张翔老师
机位号
无
实验序号
9
实验名称
《实验九实现R-I型指令的CPU设计实验》
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NET "SW[0]" LOC = T10;
NET "clk" LOC = C9;
NET "rst" LOC = C4;
五、思考与探索
(1)R型指令CPU实验结果记录表
序号指令执行结果标志结论
1 0000827 FFFFFFFF 0 0正确
2 0001102b 0000_0001 0 0正确
initial
PC<=32'h00000000;
Inst_ROM Inst_ROM1 (
.clka(clk),
.addra(PC[7:2]),
.douta(Inst_code)
);
assign PC_new={24ays@(negedge clk or posedge rst)
#100;
clk=1;
// Add stimulus here
forever
begin
#50;
clk=~clk;
end
end
endmodule
二、仿真波形
三、电路图
顶层电路模块
顶层电路内部结构:
四、引脚配置(约束文件)
NET "LED[7]" LOC = T11;
NET "LED[6]" LOC = R11;
always@(posedge Clk or posedge Reset)
begin
if(Reset)
for(i=0;i<=31;i=i+1)
REG_Files[i]=0;
else
if(Write_Reg&&W_Addr!=0)
REG_Files[W_Addr]=W_Data;
end
endmodule
default:LED=0;
endcase
end
endmodule
顶层R型CPU模块:
module top_R_cpu(input rst,input clk,output ZF,output OF,output [31:0]F);
reg write_reg;
wire [31:0]Inst_code;
// Instantiate the Unit Under Test (UUT)
top_R_cpu uut (
.rst(rst),
.clk(clk),
.ZF(ZF),
.OF(OF),
.F(F)
);
initial begin
// Initialize Inputs
rst = 0;
clk = 0;
// Wait 100 ns for global reset to finish
6'b000100:ALU_OP=3'b111;
endcase
write_reg=1;
end
end
endmodule
PC取指令模块:
module pc(input clk,input rst,output [31:0]Inst_code);
reg [31:0]PC;
wire[31:0]PC_new;
9 01264004 0000_7000 0 0正确
10 00284826 FFFF_8FFF 0 0正确
11 01215020 FFFF_8FFE 0 0正确
12 01075822 0000_6FF2 0 0正确
13 00e86022 FFFF_900E 0 0正确
14 012c6824 FFFF_800E 0 0正确
NET "LED[5]" LOC = N11;
NET "LED[4]" LOC = M11;
NET "LED[3]" LOC = V15;
NET "LED[2]" LOC = U15;
NET "LED[1]" LOC = V16;
NET "LED[0]" LOC = U16;
NET "SW[2]" LOC = V9;
case(ALU_OP)
3'b000:F=A&B;
3'b001:F=A|B;
3'b010:F=A^B;
3'b011:F=~(A^B);
3'b100:begin {C32,F}=A+B;OF=A[31]^B[31]^F[31]^C32;end
3'b101:begin {C32,F}=A-B;OF=A[31]^B[31]^F[31]^C32;end
wire [31:0]R_Data_A;
wire [31:0]R_Data_B;
reg [2:0]ALU_OP;
pc pc_connect(clk,rst,Inst_code);
Register_file R_connect(Inst_code[25:21],Inst_code[20:16],
Inst_code[15:11],write_reg,F,~clk,rst,
input [4:0]R_Addr_A;
input [4:0]R_Addr_B;
input [4:0]W_Addr;
input Write_Reg;
input [31:0]W_Data;
input Clk;
input Reset;
output [31:0]R_Data_A;
output [31:0]R_Data_B;
6'b100000:ALU_OP=3'b100;
6'b100010:ALU_OP=3'b101;
6'b100100:ALU_OP=3'b000;
6'b100101:ALU_OP=3'b001;
6'b100110:ALU_OP=3'b010;
6'b100111:ALU_OP=3'b011;
6'b101011:ALU_OP=3'b110;
实验报告
2018年6月1日成绩:
姓名
阳光男
学号
16041321
班级
16052317
专业
计算机科学与技术
课程名称
《计算机组成原理与系统结构试验》
任课老师
张翔老师
指导老师
张翔老师
机位号
无
实验序号
8
实验名称
《实验八实现R型指令的CPU设计实验》
实验时间
2018/5/25
实验地点
1教225
实验设备号
个人电脑
3'b110:
if(A<B)
F=1;
else
F=0;
3'b111:F=B<<A;
endcase
if(F==0)
ZF=1;
else
ZF=0;
end
endmodule
测试代码:
module test;
// Inputs
reg rst;
reg clk;
// Outputs
wire ZF;
wire OF;
wire [31:0] F;
reg [31:0]REG_Files[0:31];
reg [5:0]i;
initial//仿真过程中的初始化
begin
for(i=0;i<=31;i=i+1)
REG_Files[i]=0;
end
assign R_Data_A=REG_Files[R_Addr_A];
assign R_Data_B=REG_Files[R_Addr_B];
ALU算术逻辑运算单元模块:
module ALU(A,B,F,ALU_OP,ZF,OF);
input [31:0]A,B;
input [2:0]ALU_OP;
output reg ZF,OF;
output reg[31:0]F;
reg C32;
always@(*)
begin
OF=1'b0;
C32=1'b0;
R_Data_A,R_Data_B);
ALU ALU_connect(R_Data_A,R_Data_B,F,ALU_OP,ZF,OF);
always@(*)
begin
write_reg=0;
ALU_OP=0;
if(Inst_code[31:26]==0)
begin
case(Inst_code[5:0])
15 012c7025 FFFF_9FFF 0 0正确
16 00c77825 0000_FFFF 0 0正确
一、实验程序源代码
顶层LED测试模块:
module Top_LED(clk,rst,SW,LED);
input clk,rst;
input [2:0]SW;
output reg[7:0]LED;
wire ZF,OF;
wire [31:0]ALU_F;
top_R_cpu test_cpu(rst,clk,ZF,OF,ALU_F);
begin
if(rst)
PC=32'h00000000;
else PC=PC_new;
end
endmodule
寄存器堆模块:
module Register_file(R_Addr_A,R_Addr_B,W_Addr,Write_Reg,W_Data,Clk,Reset,R_Data_A,R_Data_B);