杭电计组实验8-实现R型指令地CPU设计实验
杭电嵌入式实验报告

杭电嵌入式实验报告嵌入式系统实验一 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的计算机组成原理实验课程改革

图 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组成与机器指令执行试验

+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
杭电计算机组成原理寄存器堆设计实验

杭电计算机组成原理寄存器堆设计实验计算机组成原理是计算机科学与技术的基础课程之一,它涉及到计算机的基本组成部分和原理。
在这门课程中,学生通常需要进行一系列的实验来加深对计算机组成原理的理解和应用。
其中之一是关于寄存器堆的设计实验。
寄存器堆是计算机中重要的组成部分之一,它用于存储、读取和写入数据。
在计算机中,数据通常被存储在寄存器中,然后进行各种操作。
因此,设计一个高效可靠的寄存器堆对于计算机的性能至关重要。
根据实验要求,我们需要设计一个8位的寄存器堆,并实现读取、写入和清零等操作。
以下是针对该实验的设计思路和实施步骤。
首先,我们需要确定寄存器堆的结构。
由于该寄存器堆为8位宽度,我们选择使用一个8x8的存储单元阵列。
每个存储单元都可以存储一个8位的数据。
整个寄存器堆由8个存储单元组成,每个存储单元对应一个地址,即0~7接下来,我们需要设计寄存器堆的读写电路。
对于读操作,我们需要通过地址线来选择要读取的存储单元,并将其输出到数据线。
对于写操作,我们同样需要通过地址线来选择要写入的存储单元,并将数据线上的数据写入该存储单元。
为了实现这些操作,我们需要使用多路选择器和数据解码器。
在设计中,我们还需要考虑到时钟信号的输入,以确保读写操作在时钟的上升沿或下降沿进行。
此外,我们还需要添加清零功能,以便将寄存器堆的值重置为零。
为实现清零功能,我们可以将一个额外的输入线与所有存储单元的清零输入连接。
在实施阶段,我们需要使用Verilog或其他硬件描述语言来实现设计。
在代码中,我们首先声明一个8位宽的存储单元阵列作为寄存器堆的基本组成部分。
然后,我们定义读写电路,包括地址线、数据线、多路选择器和数据解码器。
最后,我们添加时钟信号和清零功能。
在完成设计后,我们可以通过仿真工具进行验证。
通过输入不同的数据和地址,观察输出结果是否符合预期。
如果存在问题,我们可以进行调试并进行必要的修改。
一旦仿真结果正确无误,我们就可以开始进行硬件实验了。
杭电计算机组成原理寄存器堆设计实验-4

杭州电子科技大学计算机学院实验报告课程名称:计算机组成原理姓实验项目:寄存器堆设计实验班级:指导教师学号:实验位置:日期: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 指令系统网工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的设计与实现实验指导书[计算机组成原理实验]张建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篇)计组实验报告计算机组成原理实验报告一一、算术逻辑运算器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上。
低电平有效。
- 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);