组成原理实验报告.docx
《组成原理实验报告.docx》由会员分享,可在线阅读,更多相关《组成原理实验报告.docx(38页珍藏版)》请在冰豆网上搜索。
组成原理实验报告
实
验
报
告
科目:
计算机组成原理
学院:
计算机科学与技术
实验一Hamming码
1.实验步骤
(1)、先连接JTAG线和USB线,然后接实验箱电源线,最后才可以打开电源。
(切记:
不能带电插拔Jtag口,否则会损坏实验设备)
(2)、安装ByteBlaster:
Quartustools>programmerHardwareSetup(在打开programmer窗口的左上角或从Edit菜单—>HardwareSetup亦可打开)选HardwareSettings点击AddHardwareHardwaretypeAlteraByteBlasterok即可(若已安装,此步可省);Mode选Jtag。
(3)、打开QuartustoolsprogrammerAddFile,将hamming.sof(在C盘的相应目录下)下载到FPGA中。
注意进行programmer时,应在program/configure下的方框中打勾,然后下载。
(4)、在实验台上通过模式开关选择FPGA独立调试模式010。
2.观察实验和记录数据
(1).输入的8位操作数对应开关SD15~SD8,编码后的hamming码在灯A0~A12上体现。
(2).开关SA0是控制位,待校验的13位数据对应SD7~SD0与SA5~SA1。
(3).比较的结果在灯R4~R0上体现。
如对8位数据10101100进行hamming编码和校验。
1、先手工计算校验位P5~P1=_10111_,编码后的hamming码为_1101001101011__。
2、拨动开关SD15~SD8输入10101100,观察灯A0~A12=_1101011001011__,看是否与自己手工计算的hamming码相符。
3、输入待校验的13位数据,假设输入1111001101011。
拨动开关SA0为1开始校验,拨动SD7~SD0,SA5~SA1。
观察灯R4~R0=_11011__,也就是校验结果的值。
4、比较编码后的hamming码和校验的hamming码,发现第_D7位数据错误,手工计算S=__00000__,和3中观察到的R4~R0是否相符。
5、可以输入其他位错误的校验数据观察结果值S是否正确。
6、1~5做完后,重新输入新的8位数据做实验,并填写表。
表1.1.4
第1组数据
第2组数据
第3组数据
8位数据
10101100
10011101
01101011
编码后(手工计算)
1101001101011
010*********
1011001010100
A12~A0(实验现象)
1101001101011
010*********
1011001010100
输入的对比码1
1111001101011
0000111101010
0011011110110
R4~R0(实验现象)1
11011
00110
01100
输入的对比码2
1111110000111
1110100111010
1000000111111
R4~R0(实验现象)2
11100
01011
10111
3.实验心得
通过这次实验,我们对海明码和容错技术有了初步的了解,掌握了海明码的编码技术以及海明码的校验方法。
对海明码的实现原理进行了更深的学习及理解,它通过在数据中加入几个校验位,将数据代码的码距比较均匀的拉大,并把数据的每一个二进制位分配在几个奇偶校验组中,当某一位出错后,就会引起有关的几个校验位的值发生变化,使得海明码成为较好的校验方法。
对海明码有了全面的了解。
实验二乘法器
1.实验步骤
(1)如果未安装ByteBlaster,参照实验一的配置文件的安装。
(2)连接JTAG和USB通信线,打开电源。
(3)打开Quartus->tools->programmer,将booth_multiplier.sof下载到FPGA中。
注意进行programmer时,应在program/configure下的方框中打勾,然后下载。
(4)在实验台上通过模式开关选择FPGA独立调试模式010。
(5)将短路子DZ3短接且短路子DZ4断开,使FPGA-CPU所需要的时钟使用正单脉冲时钟。
2.实验现象
本实验实现4位数的Booth乘法(有符号数乘法)。
输入输出规则对应如下:
1、输入的4位被乘数(multiplicand)md3~md0对应开关SD11~SD8。
2、输入的4位乘数(multiplier)mr3~mr0对应开关SD3~SD0。
3、按单脉冲按钮,输入脉冲,也即节拍。
4、乘积product(8位)p7~p0对应灯A8~A1,辅助位A0。
5、当计算结束时,final信号为1,对应灯R7。
一共需要0~8九个小步骤计算出结果。
本实验也是通过九个小步骤实现的,通过按单脉冲按钮输入脉冲,观察积寄存器的变化,掌握booth乘法器的原理。
1、拨动开关SD11~SD8输入4位被乘数(md3~md0)0010,SD3~SD0输入4位乘数(mr3~mr0)1101。
2、按动单脉冲按钮,输入脉冲,对照表2.5观察积寄存器即灯A8~A0的变化情况,当灯R7亮时,说明计算结束,灯A8~A1为最后相乘结果。
进行新的乘法运算时,或者说当上一次运算结束即灯R7亮时,输入新的被乘数、乘数(拨动开关),然后按动单脉冲开关即可观察正确的寄存器结果。
重复
步骤
被乘数(md)
积(p)
被乘数是(-7)10
乘数是(6)10
0
初始值
1001
000001100
1
1:
1001
000001100
2:
1001
000000110
2
1:
1001
011100110
2:
1001
001110011
3
1:
1001
001110011
2:
1001
000111001
4
1:
1001
101011001
2:
1001
110101100
重复
步骤
被乘数(md)
积(p)
被乘数是(-4)10
乘数是(-5)10
0
初始值
1100
000010110
1
1:
1100
010010110
2:
1100
001001011
2
1:
1100
001001011
2:
1100
000100101
3
1:
1100
110100101
2:
1100
111010010
4
1:
1100
001010010
2:
1100
000101001
3.实验心得
在这次实验中,对booth算法进行了更深的学习和理解,并把它用在了实际应用中。
对乘法器和booth乘法器的原理有了全面的学习研究以及实践。
在实验中,因为最初对booth算法的不熟悉和不理解,造成了一些错误,最后在实验指导书的帮助下,成功完成了实验。
总之,通过这次实验,我们学到了很多,对以后的学习很有帮助。
4.思考题
1、试述Booth乘法器的原理,即为什么可以用相邻两位的差来决定加减操作。
答:
以前乘法器的第一步是根据乘数的最低位来决定是否将被乘数加到中间结果积,而Booth算法则是根据乘数的相邻2位来决定操作,第一步根据相邻2位的4种情况来进行加或减操作,第二步仍然是将积寄存器右移。
实验三时序部件实验
1.实验步骤
1、如果未安装(设置好)ByteBlaster,参照实验一的配置文件的安装。
2、连接JTAG,并按下并口转接口的A按钮,打开电源。
3、实验台上通过模式开关选择FPGA独立调试模式010。
2.实验现象
(一)输入输出规则
1、主频
对应A15(当
为1时A15亮(大约1秒),当
为0时A15灭),D触发器的输出对应A14,R-S触发器的输出对应A13;
2、节拍信号T4~T1对应A7~A4,节拍信号T4’~T1’对应A3~A0。
根据维持阻塞的原理可知,在T1~T4的任何期间启动控制逻辑,只有在T1~T4结束后,下一次循环开始时,才开始输出T1’~T4’;同理,停机时,T1’~T4’之间任何期间停机,只有在T1’~T4’本次循环结束时,才停止输出。
通过拨动启动和停机信号体会维持阻塞的作用。
3、CLR上电复位信号对应按实验台上的CPU复位按钮所产生的负脉冲。
启动信号对应开关SD8,开关SD8的初始状态的为1(朝上)。
需要产生负启动脉冲时,首先将开关SD8拨动向下,然后再将开关SD8拨动向上。
停止信号对应开关SD9,开关SD9的初始状态的为1(朝上)。
需要产生负停止脉冲时,首先将开关SD9拨动向下,然后再将开关SD9拨动向上。
(二)实验步骤及现象结果记录
1、将短路子DZ3断开且短路子DZ4短接,在使FPGA-CPU所需要的时钟使用连续时钟。
并且将短路子DZ5短接,同时将DZ6~DZ8中的其他短路子断开,选择8MHz连续时钟作为启停逻辑电路的时钟。
2、打开Quartus->tools->programmer,将circuit.sof下载到FPGA中。
注意进行programmer时,应在program/configure下的方框中打勾,然后下载。
3、启停电路下载完成之后,首先按下CPU复位键,此时实验现象为停机状态;然后进行启动操作,在需要产生负启动脉冲时,使SD8开关执行1-0-1的操作;最后执行停止操作,在需要产生负启动脉冲时,使SD9开关执行1-0-1的操作。
通过拨动启动和停机信号可以体会到维持阻塞的作用。
4、观察现象结果,并把现象及结果值记录到上面表3.1中。
为了方便记录,以表格形式即是:
表3.1启停逻辑电路信息记录表:
信号
I/O
开关/指示灯
CLR复位现象结果值(按cpu复位键)
启动信号输入后现象结果值(SD8执行负脉冲1-0-1)
停止信号输入后的现象结果值(SD9执行负脉冲1-0-1)
CLR复位
I
CPU复位按钮
不填
不填
不填
启动信号
I
SD8
不填
不填
不填
停止信号
I
SD9
不填
不填
不填
主频
O
A15
10
10
10
10
10
10
10
10
10
10
10
10
D触发器
O
A14
1
1
1
1
0
0
0
0
0
0
0
0
R-S触发器
O
A13
1
1
1
1
0
0
0
0
0
0
0
0
T4~T1
O
A7~A4
1000
0001
0010
0100
0000
0000
0000
0000
0000
0000
0000
0000
T4’~T1’
O
A3~A0
1000
0001
0010
0100
0001
0010
0100
1000
0001
0010
0100
1000
3.实验心得
通过这次时序部件实验,我们加深理解了计算机控制器中时序控制部件的基本组成和工作原理,通过我们在实验室中的实习操作,掌握了启停逻辑电路、节拍脉冲发生器的工作原理及设计方法。
对启停逻辑电路、节拍脉冲发生器等电路的结构特点也有了一定的了解。
对实验器材的操作也更加熟练。
实验四CPU算术逻辑单元实验
1.实验步骤和结果现象观察
1)实验台设置成FPGA-CPU独立调试模块;
REGSEL=0,CLKSEL=1,FDSEL=0.使用实验平台上的单脉冲,即STEP_CLK短路子短接,短路子RUN_CLK断开;
(2)将设计在QuartusII下输入,在编译后下载到TEC-CA上的FPGA中;
(3)输入A这个数:
Sel=0(SA4),write=1(SA5),A数(SD15~SD0),按一下单脉冲按钮(单脉冲按钮),使之存入A寄存器;
(4)输入B这个数:
Sel=1(SA4),write=1(SA5),B数(SD15~SD0),按一下单脉冲按钮(单脉冲按钮),使之存入B寄存器;
(5)输入功能码OP[210](SA2~SA0),按一下单脉冲按钮(单脉冲按钮);
(6)观察16位运算结果result(A15~A0)及Z、C指示灯;
(7)重复实验步骤(3)--(6)对以下4组数据进行表4.1的8种运算,把运算结果及标志位填写在表4.2中:
A、对第一组数据进行8种运算,A为0xAAAA,B为0x5555;
B、对第一组数据进行8种运算,A为0xFFFF,B为0x0000;
C、对第一组数据进行8种运算,A为0x0000,B为0xFFFF;
D、对第一组数据进行8种运算,A为0x8950,B为0x9863;
表4.2算术逻辑单元实验
运算数据
运算类型
操作码OP
运算结果result
标志位C
标志位Z
运算前
运算后
运算前
运算后
第1组数据
A=0xAAAA
B=0x5555
resultA+B
000
1111111111111111
00
00
resultA+1
001
1010101010101011
00
00
resultA-B
010
0101010101010101
00
00
resultA-1
011
1010101010101001
00
00
resultAandB
100
0000000000000000
00
01
resultAorB
101
1111111111111111
00
00
resultnotB
110
1010101010101010
00
00
resultB
111
0101010101010101
00
00
第2组数据
A=0xFFFF
B=0x0000
resultA+B
000
1111111111111111
00
00
resultA+1
001
0000000000000000
01
01
resultA-B
010
1111111111111111
00
00
resultA-1
011
1111111111111110
00
00
resultAandB
100
0000000000000000
00
01
resultAorB
101
1111111111111111
00
00
resultnotB
110
1111111111111111
00
00
resultB
111
0000000000000000
00
00
第3组数据
A=0x0000
B=0xFFFF
resultA+B
000
1111111111111111
00
00
resultA+1
001
0000000000000001
00
00
resultA-B
010
0000000000000001
00
00
resultA-1
011
1111111111111111
01
00
resultAandB
100
0000000000000000
00
01
resultAorB
101
1111111111111111
00
00
resultnotB
110
0000000000000000
00
01
resultB
111
1111111111111111
00
00
第4组数据
A=0x8950
B=0x9863
resultA+B
000
0010000110110011
11
00
resultA+1
001
1000100101000001
10
00
resultA-B
010
1111000011101101
11
00
resultA-1
011
1000100101001111
10
00
resultAandB
100
1000100001000000
11
00
resultAorB
101
1001100101110011
11
00
resultnotB
110
0110011110011100
11
00
resultB
111
1001100001100011
11
00
2.节拍发生器实验现象
(一)输入输出规则
实验中的节拍序列发生器是一个8相节拍序列发生器波形图,如图3.8所示。
输出对应A7~A0灯(
8~
1)。
(二)实验步骤及现象
1、将短路子DZ3短接且短路子DZ4断开,使节拍序列发生器所需要的时钟使用正单脉冲时钟。
2、打开Quartus->tools->programmer,将sequence.sof下载到FPGA中。
注意进行programmer时,应在program/configure下的方框中打勾,然后下载。
3、按动单脉冲按钮,记录A7~A0灯的值(
8~
1),并绘制成时序波形图,,
01111111101111111101111111101111
11110111111110111111110111111110
3.实验心得
通过这次CPU算数逻辑单元实验,我们掌握了简单运算器的数据传送通路
的原理,并验证了运算器的组合功能。
其中,算术逻辑部件的主要功能是对二进制数据进行定点算术运算、逻辑运算和各种移位操作。
在实验过程中,对实验原理的不熟悉,让我们的实验困难了许多。
我们由理论知识和指导书中的提示及要求,所以能够较顺利的完成。
实验五CPU指令译码器实验
1.实验步骤及现象
(1)接上JTAG线和电源线,有一分二并口的请保证A按钮按下,打开实验箱电源;
(2)实验台设置成FPGA-CPU独立调试模块;REGSEL=0,CLKSEL=1,FDSEL=0.使用实验平台上的单脉冲,即STEP_CLK短路子短接,短路子RUN_CLK断开;
(3)将设计在QuartusII下输入,在编译后下载到TEC-CA上的FPGA中;
(4)拨动实验台上的开关SD5~SD0,改变IR[15..12]、进位标志C和结果为0标志位Z,观察指示灯R10~R0显示的控制信号,并填写表6-28和表6-29。
2.实验心得
通过这次实验,我们学习理解了指令译码器的原理及其重要性。
指令译码器作为计算机控制器中最重要的部分,其重要性是可想而知的。
这次实验只是对译码器的一个简单的应用。
在实验过程中,我们遇到了一些困难,但在老师和指导书的帮助下,成功完成了实验。
实验六CPU微程序控制实验
1.实验步骤
(1)实验台设置成FPGA-CPU独立调试模式,REGSEL=0、CLKSEL=1、FDSEL=0.使用实验台上的单脉冲,即STEP_CLK短路子短接,短路子RUN_CLK断开;
(2)将设计在QuartusII下输入,编译后下载到TEC-CA上的FPGA中;
(3)按复位键后,拨动实验台上的开关SD5~SD0,改变IR[15…12]、进位标志C和结果为0标志Z,观察指示灯R15~R0、A4~A0、A12~A8、A14和A15显示的信号,追踪每条指令的执行过程并把相应数据填在表6-1中。
(4)观察每条指令的执行过程,每个节拍进行的微操作和微操作控制信号。
表6-1当C=0;Z=0时候各个指令执行的过程及各微指令的执行情况
2.实验心得
这次实验是关于CPU微程序控制的,在此次实验中,我们理解了微程序控制器的控制原理,并进一步掌握指令流程和功能。
了解掌握了微程序控制器的设计思路和方法。
这次实验的完成,对我们以后的学习和实践有很大的帮助。
实验七八CPU实验_无流水无cache
1.实验步骤
(1)Test1(EX1.TXT):
8位×8位乘法运算
第一个测试程序,R0=25,R1=6,结果(150)存放在R3中。
源代码见EX1.txt。
1、将实验台模式开关置为101,为单片机控制FPGA-CPU模式。
2、在Quartus下将实验7.1里面的cpu0.sof下载到FPGA中。
3、打开debugcontroller,执行File─>RuleOpen命令,打开规则文件cpu.txt。
4、在debugcontroller中,执行file—>CodeOpen命令,打开伪汇编文件。
5、在debugcontroller中,执行build—>CompleCode命令,将EX1.txt编译得到目标二进制文件,显示在机器代码窗口中。
6、在debugcontroller中,执行Build—>UploadBIN命令,将目标二进制代码写入实验台上底存储器中。
为了检查是否正确写入,执行Build—>DownloadRAM命令,将存储器中的代码读回,(从0开始,本例中写入18个words,所以从0到17),以做比较。
7、在debugcontroller中,利用Debug菜单中的命令调试程序。
8、观察并记录每执行完一字机器指令后DataBus、AddrBus、Rx各寄存器的数据,并注意观察执行一字机器指令和一条机器指令的周期长短。
表格记录数据:
ADDR
存储器地址线
数据线地址线
寄存器数据
A15—A0
D15—D0
R15—R0
0x000
0000
8100
0000
0x001
0000
8100
0000
0x002
0001
0019
0000
0x003
0002
8110
0019
0x004
0003
0006
0019
0x005
0004
8120
0019
0x006
0005
0000
0019
0x007
0006
9130
0019
0x008
0007
0008
0019
0x009
0008
8140
0019
0x00a
0009
0001
0019
0x00b
000a
0241
0019
0x00c
000b
4601
0019
0x00d
000c
4601
0019
0x00e
000d
0a00
0019
0x00f
000e
0b10
0019
0x010
000f
0830
0032
0x011
0010
47f7
0032
0x012
0011
40ff
1900
截图
T1.txt
;8bitx8bit;
;测试指令:
置立即数,AND,条件跳转,左移,右移;;
MAIN:
MVRD