当前位置:文档之家› 计算机组成原理实验报告

计算机组成原理实验报告

计算机组成原理实验报告
计算机组成原理实验报告

《计算机组成原理》

实验报告

实验室名称:S402

任课教师:邹洋

小组成员:王娜任芬

学号:2010212121 2010212119

实验一_HAMMING码 (2)

实验二_乘法器 (7)

实验三_时序部件 (16)

实验四_CPU__算术逻辑单元实验 (24)

实验五_CPU__指令译码器实验 (32)

实验六_CPU_微程序控制器实验1 (43)

实验七_八_CPU实验 (59)

1 编码实验:Hamming码

1.1、实验目的

1、对容错技术有初步了解,理解掌握海明码的原理

2、掌握海明码的编码以及校验方法

1.2、实验原理

海明码是由Richard Hamming于1950年提出的,目前是被广泛采用的很有效的校验编码。它的特点是只要增加少数几个校验位,就能检测出多位出错,并能自动纠错。

Hamming码的实现原理是在数据中加入几个校验位,将数据代码的码距比较均匀的拉大,并把数据的每一个二进制位分配在几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化。这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。

假设校验位的个数为r,则它能表示2r个信息,用其中的一个信息指出“没有错误”,其余的2r-1个信息指出错误发生在哪一位。然而错误也可能发生在校验位,因此只有k=2r-1-r个信息能用于纠正被传送数据的位数,也就是说要满足关系:

2r≥k+r+1

若要能检测与自动校正一位错,并能发现两位错,此时校验位的位数r和数据位的位数k应满足下述关系:2r-1≥k+r

按上述不等式,可计算出数据位k与校验位r的对应关系,如表1.1所示:

表1.1 数据位k与校验位r的对应关系

k值最小的r值

1~3 4

4~10 5

11~25 6

26~56 7

57~119 8

若海明码的最高位号为m,最低位号为1,即H m H m-1…H2H1,则此海明码的编码规律通常是

1)校验位与数据位之和为m,每个校验位P i在海明码中被分在位号为2i-1的位置上,其余各位为数据位,并按从低向高逐位依次排列的关系分配各数据位。

2)海明码的每一位码H i(包括数据位和校验位本身)由多个校验位校验,其关系是被校验的每一位位号等于校验它的各校验位的位号之和。

3)在增大合法码的码距时,所有码的码距应尽量均匀增大,以保证对所有码的检错能力平衡提高。

下面具体看一下对一个字节进行海明编码的实现过程。

只实现一位纠错两位检错,由前面的表可以看出,8位数据位需要5位校验位,可表示为H13H12…H2H1。

五个校验位P5~P1对应的海明码位号分别为H13、H8、H4、H2和H1。P5只能放在H13位

上,因为H13已经是海明码的最高位了,其他四位满足P i的位号等于2i-1的关系,其余位为数据位D i,则有如下排列关系:

P5D8D7D6D5P4D4D3D2P3D1P2P1

按前面讲的,每个海明码的位号要等于参与检验的几个校验位的位号之和的关系,可给出如表1.2所示结果:

表1.2 海明码位号与校验位位号的关系

海明码位号数据位校验位参与校验的

校验位位号

海明码位号

=校验位位号之和

1 1 1 1=1

2 2 2 2=2

3 1 1、2 3=1+2

4 3 4 4=4

5 2 1、4 5=1+4

6 3 2、4 6=2+4

7 4 1、2、4 7=1+2+4

8 4 8 8=8

9 5 1、8 9=1+8

10 6 2、8 10=2+8

11 7 1、2、8 11=1+2+8

12 8 4、8 12=4+8

13 5 13=13

由上述关系可以得出四个校验位各自与哪些数据位有关,进而得出关系表达式:

P1=D1⊕D2⊕D4⊕D5⊕D7

P2=D1⊕D3⊕D4⊕D6⊕D7

P3=D2⊕D3⊕D4⊕D8

P4=D5⊕D6⊕D7⊕D8

各数据位形成P i(i=1到4)值时,不同数据位出现在P i项中的次数是不一样的,使不同数据码的海明码的码距不等,并且有两位出错与一位出错分不清的问题。为此,还要补充一个P5总校验位,使

P5=D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕D8⊕P1⊕P2⊕P3⊕P4

在这种安排中,每一位数据位,都至少出现在三个P i值的形成关系中。当任一位数据码发生变化时,必将引起三个或四个P i跟着变化,即合法海明码的码距都为4。

如按如下关系对所得到的海明码实现偶校验,即:

S1=P1⊕D1⊕D2⊕D4⊕D5⊕D7

S2=P2⊕D1⊕D3⊕D4⊕D6⊕D7

S3=P3⊕D2⊕D3⊕D4⊕D8

S4=P4⊕D5⊕D6⊕D7⊕D8

S5=P5⊕D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕D8⊕P1⊕P2⊕P3⊕P4

则得出的结果值S5~S1能反映13位海明码的出错情况。任何偶数个数出错,S5一定为0。

1)当S5~S1为00000时,表明无错。

2)当S5~S1中仅有一位不为0,表明某一位校验位出错,或三位海明码(包括数据位与校验位)同时出错。由于后一种出错的可能性要比前一种小得多,认为就是一位出错,出

错位是该S i对应的P i位。

3)当S4~S1有不为0且S5=0时,表明两位海明码同时出错,此时只能发现这种错误,而无法确定是哪两位错。

4)当S5~S1中有3位或4位不为0,表明是一位数据位出错,或多个海明码同时出错。由于后一种出错的可能性要比前一种小得多,认为就是一位数据位出错,出错位位号由S4~S1的编码值指明,因此此时不仅能发现一位错,而且能改正一位错,即将出错的数据位变为其反码。

综上2)和4)所述,一位错对应的S5~S1的值如表1.3所示:

表1.3 Hamming码出错情况对照表

检验位P5D8D7D6D5P4D4D3D2P3D1P2P1

位号13 12 11 10 9 8 7 6 5 4 3 2 1

S5 1 1 1 1 1 1 1 1 1 1 1 1 1

S40 1 1 1 1 1 0 0 0 0 0 0 0

S30 1 0 0 0 0 1 1 1 1 0 0 0

S20 0 1 1 0 0 1 1 0 0 1 1 0

S10 0 1 0 1 0 1 0 1 0 1 0 1

由此可得校验后的数据位表达式为:

D1=D1⊕(S1?S2?3S?4S?S5)

D2=D2⊕(S1?2S?S3?4S?S5)

D3=D3⊕(1S?S2?S3?4S?S5)

D4=D4⊕(S1?S2?S3?4S?S5)

D5=D5⊕(S1?2S?3S?S4?S5)

D6=D6⊕(1S?S2?3S?S4?S5)

D7=D7⊕(S1?S2?3S?S4?S5)

D8=D8⊕(1S?2S?S3?S4?S5)

1.3、实验步骤

1、先连接JTAG线和USB线,然后接实验箱电源线,最后才可以打开电源。(切记:不能带电插拔Jtag口,否则会损坏实验设备)

2、安装ByteBlaster:Quartus→tools→>programmer→HardwareSetup(在打开programmer 窗口的左上角或从Edit菜单—> HardwareSetup亦可打开)→选Hardware Settings→点击Add Hardware→ Hardware type →Altera ByteBlaster→ok即可(若已安装,此步可省);Mode选Jtag。

3、打开Quartus→tools→programmer→AddFile,将hamming.sof(在C盘的相应目录下)

下载到FPGA中。注意进行programmer时,应在program/configure下的方框中打勾,然后下载。

4、在实验台上通过模式开关选择FPGA独立调试模式010。

1.4、观察实验现象并记录相应数据

输入输出规则对应如下:

1.输入的8位操作数对应开关SD15(高位)~SD8(低位),编码后的hamming码在灯A12~A0上体现。

2.开关SA0是控制位,(拨1进行校验)待校验的13位数据对应SD7~SD0与SA5~SA1。

3.比较的结果在灯R4~R0上体现。(分别对应S5~S1)

如对8位数据10101100进行hamming编码和校验。

1、先手工计算校验位P5~P1=10111 ,编码后的hamming码为1101001101011

2、拨动开关SD15~SD8输入10101100,观察灯A12~A0=1101001101011 ,看是否与自己手工计算的hamming码相符。

3、输入待校验的13位数据,假设输入1111001101011。拨动开关SA0为1开始校验,(直接在SD7~SA1上输入数)

4、比较编码后的hamming码和校验的hamming码,发现第11 (D7)位数据错误,手工计算S=11011 ,和3中观察到的R4~R0是否相符。

5、可以输入其他位错误的校验数据观察结果值S是否正确。

6、1~5做完后,重新输入新的8位数据做实验,并填写表1.1.4。

表1.1.4

第1组数据第2组数据第3组数据8位数据1010 1100 10110110 0110 1011

编码后(手工计算)1101001101011 1101110111000 1011001010100

A12~A0(实验现象) 1101001101011 1101110111000 1011001010100

输入的对比码1(输入1313 11110011010111001110111000 1010001010100

R4~R0(实验现象) 1 11011 11100 11010

输入的校验码2 1101101101001 1001100111000 1011011010101 R4~R0(实验现象)2 01011 00100 11000

1.5、思考题

1、根据8位数据位的hamming编码原理,写出16位数据位的编码原理。

答:我们认为16位数据位的编码原理与8位数据位的hamming编码原理基本相同。即:,在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。

假设为k个数据位设置r个校验位,则校验位能表示2r个状态,可用其中的一个状态指出"没有发生错误",用其余的2 r -1个状态指出有错误发生在某一位,包括k个数据位和r个校验位,因此校验位的位数应满足如下关系:

2r ≥ k + r + 1 (2.7)

如要能检出与自动校正一位错,并能同时发现两位错,此时校验位的位数r和数据位的位数k应满足下述关系:

2r-1 ≥ k + r (2.8)

按上述不等式,可计算出数据位k与校验位r的对应关系K值最小的r值3-4 4 5-10 5 11-25 6 26-56 7 57-119 8

只实现一位纠错两位检错,由前面的表可以看出,8位数据位需要5位校验位,而16位数据位需要6位校验位

2、有能力的同学可以试着自己编写hamming编码和校验的源代码。在老师的帮助下,编译成功,将.sof文件下载到FPGA进行正确性验证。

辅助算法一(C++):

先构造一个标准阵列,然后用所收到的码字在标准阵列里找到对应的码字,达到纠正的目的。#include "iostream.h"

void main()

{

int i,j,z=0,g[4][7]={1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,1},sum=0,b[4],r[7];

int s[8][16][7],n=0;

//标准阵列

//构造第一行的码子

for(b[0]=0;b[0]<2;b[0]++)

for(b[1]=0;b[1]<2;b[1]++)

for(b[2]=0;b[2]<2;b[2]++)

for(b[3]=0;b[3]<2;b[3]++)

{

for(j=0;j<7;j++)

{

for(i=0;i<4;i++)

sum+=b[i]*g[i][j];

s[0][z][j]=sum%2;

}

z++;

}

//构造第一列的码字

int d[128][7],m=1,p=1;

for(i=0;i<128;i++){

z=i;

for(j=6;j>=0;j--)

{

d[i][j]=z%2;

z=z/2;

}

}

for(j=0;j<16;j++)

for(i=0;i<128;i++)

{

for(z=0;z<7;z++)

{

if(s[0][j][z]!=d[i][z])

break;

}

if(z==7)

{

for(m=0;m<7;m++)

d[i][m]=0;

break;

}

}

m=1;

re:for(i=0;i<128;i++)

{

n=0;

for(j=0;j<7;j++)

n+=d[i][j];

if(n==p)

{

for(z=0;z<7;z++)

s[m][0][z]=d[i][z];

m++;

}

if(m==8)

break;

}

if(m!=8)

{

p++;

goto re;

}

//构造标准阵列中其他元素

m=0;

for(i=1;i<8;i++)

for(j=1;j<16;j++)

for(z=6;z>=0;z--)

{

m+=s[i][0][z]+s[0][j][z];

s[i][j][z]=m%2;

if(m>1)

m=1;

else m=0;

}

cout<<"please input the key you reseaved:"<

for(i=0;i<7;i++)

cin>>r[i];

for(i=0;i<8;i++){

for(j=0;j<16;j++){

for(z=0;z<7;z++)

if(r[z]!=s[i][j][z])

break;

if(z==7)

break;

}

if(z==7)

break;

}

cout<<"get_the_true_key"<<'\n';

for(n=0;n<7;n++)

cout<

cout<

}

//

辅助算法二

(海明码的编码与译码)(java)

import java.awt.*;

import java.io.*;

import https://www.doczj.com/doc/0613062140.html,ng.*;

public class Array50{

public static void main(String args[]){

int Sbefore[][][][]=new int[30][3][1][7];

int S[][][] =new int[30][3][1];

int ST[][][] =new int[30][1][3];

int HT[][][] =new int[ 7][1][3];

int nC[] =new int[30];

int counter,check,sign=0,finish;

int i,j,k,r;

int H[][][]={{{0,1,1,1,1,0,0}},

{{1,0,1,1,0,1,0}},

{{1,1,0,1,0,0,1}}};

int C[][][]={{{0,0,0,1,1,1,1}},{{1,0,0,1,1,1,1}},{{1,1,0,1,0,1,1}},

{{1,1,0,1,1,1,0}},{{1,0,0,0,1,0,0}},{{1,1,0,1,0,0,1}},

{{1,0,0,0,1,0,1}},{{1,0,0,1,1,1,1}},{{1,1,0,1,0,1,0}}};

int z[][] ={{1,3,5}};

int nColumn=999;

System.out.println("打印输入二进制代码矩阵H");

for(r=0;r

System.out.print(" C["+r+"]=");

for(j=0;j

for(k=0;k

System.out.print(""+C[r][j][k]);

}

}

System.out.println();

}

for(i=0;i

counter=0;

for(j=0;j

for(k=0;k

HT[k][j][i]=H[i][j][k];

counter++;

// if(counter%3==0) System.out.print(" ");

}

}

// System.out.println("");

}

System.out.println();

System.out.println("打印校验矩阵H");

for(i=0;i

counter=0;

System.out.print("H["+i+"]=");

for(j=0;j

for(k=0;k

HT[i][j][k]=H[k][j][i];

System.out.print(""+HT[i][j][k]);

counter++;

if(counter%3==0) System.out.print(" ");

}

}

System.out.println("");

}

for(r=0;r

for(i=0;i

counter=0;

// System.out.print("Sbefore["+r+"]["+i+"]=");

for(j=0;j

for(k=0;k

Sbefore[r][i][j][k]=H[i][j][k]&C[r][j][k];

// System.out.print(""+Sbefore[r][i][j][k]);

counter++;

// if(counter%7==0) System.out.print(" ");

}

}

// System.out.println("");

}

}

for(r=0;r

for(i=0;i

counter=check=0;

for(j=0;j

for(k=0;k

if(Sbefore[r][i][j][k]==1) check^=1;

}

S[r][i][j]=check;

}

}

}

System.out.println();

System.out.println("打印伴随式H");

for(i=0;i

counter=0;

System.out.print("S["+i+"]=");

for(j=0;j

for(k=0;k

ST[i][j][k]=S[i][k][j];

System.out.print(""+ST[i][j][k]);

counter++;

if(counter%3==0) System.out.print(" ");

}

}

System.out.println("");

}

for(r=0;r

// System.out.print(" S["+r+"]=");

for(i=0;i

counter=0;

for(j=0;j

// System.out.print(" S["+r+"]["+i+"]["+j+"]="+S[r][i][j]);

// System.out.print(""+S[r][i][j]);

counter++;

// if(counter%3==0) System.out.println();

}

}

System.out.println();

}

try{

System.in.read();

}

catch(Exception e){ }

for(r=0;r

finish=0;

for(k=0;k

sign=0; //

for(i=0;i

for(j=0;j

// System.out.println(" S["+r+"]["+i+"]["+j+"]="+S[r][i][j]);

}

}

}

}

try{

System.in.read();

}

catch(Exception e){ }

System.out.println("begin");

for(r=0;r

finish=0;

nColumn=999;

for(i=0;i

// sign=0; //

for(j=0;j

for(k=0;k

System.out.println(" HT["+r+"]["+i+"]["+j+"]["+k+"]="+ST[i][j][k]);

if(HT[i][j][k]!=ST[r][j][k]){

sign=1;

break;

}

else sign=0;

}

if(sign==1){

finish=0;

break;

}

else finish=1;

}

if((finish==1)&&(i

nColumn=i;

break;

}

}

if(nColumn>HT.length)

System.out.println(" No error receive=input");

else{

System.out.println("1 erroer occured in the position "+nColumn);

System.out.println("system has change it");

C[r][0][nColumn]^=1;

}

}

try{

System.in.read();

}

catch(Exception e){ }

}

}

程序输出如下所示

输入二进制代码矩阵

C[0]=0001111

C[1]=1001111

C[2]=1101011

C[3]=1101110

C[4]=1000100

C[5]=1101001

C[6]=1000101

C[7]=1001111

C[8]=1101010

对应伴随式S

S[0]=000

S[1]=011

S[2]=010

S[3]=111

S[4]=111

S[5]=000

S[6]=110

S[7]=011

S[8]=011

出错位置

C[0]=0001111 No error receive=input

C[1]=1001111 1 erroer occured in the position 0 system has change it C[2]=1101011 1 erroer occured in the position 5 system has change it C[3]=1101110 1 erroer occured in the position 3 system has change it C[4]=1000100 1 erroer occured in the position 3 system has change it C[5]=1101001 No error receive=input

C[6]=1000101 1 erroer occured in the position 2 system has change it C[7]=1001111 1 erroer occured in the position 0 system has change it C[8]=1101010 1 erroer occured in the position 0 system has change it

经过纠错后输出代码

C[0]=0001111

C[1]=0001111

C[2]=1101001

C[3]=1100110

C[4]=1001100

C[5]=1101001

C[6]=1010101

C[7]=0001111

C[8]=0101010

1.6、实验心得

本次试验,我们初次接触海明码,实验刚开始有些茫然但通过认真的阅读关于海明码的资料我们逐渐开朗,试验过后我们对容错技术有了一个初步的了解,并且理解掌握海明码的原理以及海明码的编码以及校验,在最后的思考题中可能有不完善的地方,尤其是编写hamming编码和校验的源代码的部分,本次实验需要的是汇编语言的代码,因为是初次涉及,我们并不是很了解汇编,所以就只能借助学过的C++和java语言通过搜索资料等,写出了一些与海明码有关的代码,并进行了相关的调试,加深了对海明码的学习,相信会对进一步的学习有一个帮助吧。

2 运算器部件实验:乘法器

2.1、实验目的

1、掌握乘法器以及booth乘法器的原理

2.2、实验原理

首先我们看一下十进制数的乘法。为了方便起见,我们假定十进制数的各位要么为1要么为0,例如1000×1001:

被乘数 1 0 0 010

乘数× 1 0 0 110

1 0 0 0

0 0 0 0

0 0 0 0

1 0 0 0

积 1 0 0 1 0 0 010

从上面的步骤我们可以看到,

1)从右到左用乘数的每一位乘以被乘数,每一次乘得的中间结果比上一次的结果往左移一位。

2)积的位数比被乘数和乘数的位数要多的多。事实上,如果我们忽略符号位,n位的被乘数和m位的乘数相乘的结果的位数有(n+m)位。因此,乘法必须象加法那样处理溢出问题,如果两个32位的数相乘,积也只有32位的时候,就会出现溢出。

在上面的例子中,我们把十进制数的各位限制为0或1。因此,每一步的乘法相当简单:1)如果乘数位是1,则简单的复制被乘数到合适的位置(1×被乘数);

2)如果乘数位是0,则在合适的位置置0

因为二进制数的各位是0或1,所以与上面情况类似。

既然已经知道了乘法的基本规律,下一步就是设计高度优化的乘法器硬件。为了让大家更明了乘法器的原理,我们一一列举乘法器的三个版本的改进。我们先假定被乘数和乘数都是正数。

1、第一代乘法器

初始的设计模拟我们刚才提到的乘法流程,硬件结构如图2.1所示。假定乘数在32位乘数寄存器里,64位的积寄存器初始化为0,显然每一步需要把被乘数左移一位。左移32次之后,被乘数的32位会被移到左边,因此我们需要64位的被乘数寄存器,初始状态为低32位是被乘数,高32位是0。这个寄存器每一步左移一位,和中间结果对齐,进行相加,相加的结果存在被乘数寄存器里。同时,乘数寄存器右移以决定是×1还是×0。

被乘数左移

64位

64位ALU

64位写

控制测试

32位

乘数

右移

图2.1 第一代乘法器

图2.2 说明了每一位的三个基本的操作步骤。乘数的最低位决定被乘数是否被加到积寄存器中,第2步的左移操作相当于中间结果左移,第3步的右移操作给出乘数的下一位以决定相应的操作。上述3个步骤重复32次就可以得到乘积的最后结果。

开始

测试乘数第0位是0

是1

把被乘数加到积寄存器的

中间结果上

被乘数寄存器左移1位

乘数寄存器右移1位

32次?

结束

图2.2 第一代乘法器的流程

举例说明上述步骤。为了节省空间,我们假定被乘数和乘数都是4位的,210×310,也就是00102×00112,表2.1说明了每一步每一个寄存器内容的变化。乘数栏中下划线说明了下一步的操作。

表2.1第一代乘法器举例

重复步骤乘数被乘数积

0 初始值0011 0000 0010 0000 0000

1 1:1→积=积+被乘数0011 0000 0010 0000 0010

2:被乘数左移1位0011 0000 0100 0000 0010

3:乘数右移1位0001 0000 0100 0000 0010

2 1:1→积=积+被乘数0001 0000 0100 0000 0110

2:被乘数左移1位0001 0000 1000 0000 0110

3:乘数右移1位0000 0000 1000 0000 0110

3 1:0→无操作0000 0000 1000 0000 0110

2:被乘数左移1位0000 0001 0000 0000 0110

3:乘数右移1位0000 0001 0000 0000 0110

4 1:0→无操作0000 0001 0000 0000 0110

2:被乘数左移1位0000 0010 0000 0000 0110

3:乘数右移1位0000 0010 0000 0000 0110

2、第二代乘法器

经过仔细观察我们可以发现,被乘数寄存器的大部分时间有一半位数是0,也就是说只有一半的位数是有用的。在第一代乘法器中,被乘数左移后的位置添0,因此移位后的被乘数和中间结果积相加,不影响结果,那么我们可以保持被乘数不动,将中间结果积右移,因此,被乘数寄存器只要32位即可。图2.3和图2.4说明了以上改进,图2.3是第二代乘法器的硬件结构,图2.4是在硬件结构基础之上的流程。

被乘数

32位

32位ALU

积64位右移

控制测试

32位

乘数

右移

图2.3 第二代乘法器

结束

开始

测试乘数第0位

是0

是1

把被乘数加到积寄存器的左半部分上

积寄存器右移1位

乘数寄存器右移1位

32次?

图2.4 第二代乘法器的流程

在此,还用4位的被乘数和乘数210×310,也就是00102×00112举个例子,如表2.2所示。

表2.2 第二代乘法器举例

重复 步骤

乘数 被乘数 积 0 初始值

0011 0010 0000 0000 1

1:1→积=积+被乘数 0011 0010 0010 0000 2:中间结果积右移1位 0011 0010 0001 0000 3:乘数右移1位 0001 0010 0001 0000 2

1:1→积=积+被乘数 0001 0010 0011 0000 2:中间结果积右移1位 0001 0010 0001 1000 3:乘数右移1位 0000 0010 0001 1000 3

1:0→无操作

0000 0010 0001 1000 2:中间结果积右移1位 0000 0010 0000 1100 3:乘数右移1位 0000 0010 0000 1100 4

1:0→无操作

0000 0010 0000 1100 2:中间结果积右移1位 0000 0010 0000 0110 3:乘数右移1位

0000

0010

0000 0110

3、第三代乘法器

比较善于节省空间的人们发现,积寄存器浪费的空间正好和乘数寄存器浪费的空间一样,因此,在第三代乘法器中,将积寄存器的右半部分和乘数寄存器结合起来。由图2.5的

计算机组成原理实验

计算机组成原理上机实验指导

一、实验准备和实验注意事项 1.本课程实验使用专门的TDN-CM++计算机组成原理教学实验设备,使用前后均应仔细检查主机板,防止导线、元件等物品落入装置导致线路短路、元件损坏。 2.完成本实验的方法是先找到实验板上相应的丝印字及其对应的引出排针,将排针用电缆线连接起来,连接时要注意电缆线的方向,不能反向连接;如果实验装置中引出排针上已表明两针相连,表明两根引出线部已经连接起来,此时可以只使用一根线连接。 3.为了弄清计算机各部件的工作原理,前面几个实验的控制信号由开关单元“SWITCH UNIT”模拟输入;只有在模型机实验中才真正由控制器对指令译码产生控制信号。在每个实验开始时需将所有的开关置为初始状态“1”。 4.本实验装置的发光二极管的指示灯亮时表示信号为“0”,灯灭时表示信号为“1”。 5.实验接线图中带有圆圈的连线为实验中要接的线。 6.电源关闭后,不能立即重新开启,关闭与重启之间至少应有30秒间隔。 7.电源线应放置在机专用线盒中。 8.保证设备的整洁。

二、实验设备的数据通路结构 利用本实验装置构造的模型机的数据通路结构框图如下图。其中各单元部已经连接好,单元之间可能已经连接好,其它一些单元之间的连线需要根据实验目的用排线连接。 图0-2 模型机数据通路结构框图

实验一运算器实验:算术逻辑运算实验 一.实验目的 1.了解运算器的组成结构; 2.掌握运算器的工作原理; 3.掌握简单运算器的数据传送通路。 4.验证运算功能发生器(74LSl81)的组合功能。 二.实验设备 TDN-CM++计算机组成原理教学实验系统一台,排线若干。 三.实验原理 实验中所用的运算器数据通路如图1-l所示。其中两片74LSl81以串行方式构成8位字长的ALU,ALU的输出经过一个三态门(74LS245)和数据总线相连。三态门由ALU-B控制,控制运算器运算的结果能否送往总线,低电平有效。 为实现双操作数的运算,ALU的两个数据输入端分别由二个锁存器DR1、DR2(由74LS273实现)锁存数据。要将数据总线上的数据锁存到DR1、DR2中,锁存器的控制端LDDR1和LDDR2必须为高电平,同时由T4脉冲到来。 数据开关(“INPUT DEVICE”)用来给出参与运算的数据,经过三态门(74LS245)后送入数据总线,三态门由SW-B控制,低电平有效。数据显示灯(“BUS UNIT”)已和数据总线相连,用来显示数据总线上的容。 图中已将用户需要连接的控制信号用圆圈标明(其他实验相同,不再说明),其中除T4为脉冲信号外,其它均为电平信号。由于实验电路中的时序信号均已连至“W/R UNIT”的相应时序信号引出端,因此,在进行实验时,只需将“W/R UNIT”的T4接至“STATE UNIT”的微动开关KK2的输出端,按动微动开关,即可获得实验所需的单脉冲。 ALU运算所需的电平控制信号S3、S2、S1、S0、Cn、M、LDDR1、LDDR2、ALU-B、SW-B均由“SWITCH UNIT”中的二进制数据开关来模拟,其中Cn、ALU-B、SW-B为低电平有效,LDDRl、LDDR2为高电平有效。 对单总线数据通路,需要分时共享总线,每一时刻只能由一组数据送往总线。

计算机组成原理实验七

图16 启停单元布局图 序电路由1片74LS157、2片74LS00、4个LED PLS2、PLS3、PLS4)组成。当LED发光时 图17

图17 时序单元布局图 (二)启停、脉冲单元的原理 1.启停原理:(如图18) 启停电路由1片7474组成,当按下RUN按钮,信号输出RUN=1、STOP=0,表示当前实验机为运行状态。当按下STOP 按钮,信号RUN=0、STOP=1,表示当前实验机为停止状态。当 系统处于停机状态时,微地址、进位寄存器都被清零,并且可 通过监控单元来读写内存和微程序。在停止状态下,当HALT 时有一个高电平,同时HCK有一个上升沿,此时高电平被打入 寄存器中,信号输出RUN=1、STOP=0,使实验机处于运行状态。

图18 启停单元原理图 2.时序电路: 时序电路由监控单元来控制时序输出(PLS1、PLS2、PLS3、PLS4)。实验所用的时序电路(如图19)可产生4个等间隔的时序信号PLS1、PLS2、PLS3、PLS4。为了便于监控程序流程,由监控单元输出PO信号和SIGN脉冲来实现STEP(微单步)、GO (全速)和HALT(暂停)。当实验机处于运行状态,并且是微单步执行,PLS1、PLS2、PLS3、PLS4分别发出一个脉冲,全速执行时PLS1、PLS2、PLS3、PLS4脉冲将周而复始的发送出去。在时序单元中也提供了4个按钮,实验者可手动给出4个独立的脉冲,以便实验者单拍调试模型机。

图19 时序电路图 实验步骤 1.交替按下“运行”和“暂停”,观察运行灯的变化(运行:RUN 亮;暂停:RUN灭)。 2.把HALT信号接入二进制拨动开关,HCK接入脉冲单元的PLS1。按下表接线 接入开关位号 信号定 义 HCK PLS1孔 HALT H13孔 3.按启停单元中的停止按钮,置实验机为停机状态,HALT=1。 4.按脉冲单元中的PLS1脉冲按键,在HCK上产生一个上升

计算机组成原理实验

计算机组成原理 一、8 位算术逻辑运算 8 位算术逻辑运算实验目的 1、掌握简单运算器的数据传送通路组成原理。 2、验证算术逻辑运算功能发生器74LS181的组合功能。 8 位算术逻辑运算实验内容 1、实验原理 实验中所用的运算器数据通路如图3-1所示。其中运算器由两片74LS181以并/串形成8位字长的ALU构成。运算器的输出经过一个三态门74LS245(U33)到ALUO1插座,实验时用8芯排线和内部数据总线BUSD0~D7插座BUS1~6中的任一个相连,内部数据总线通过LZD0~LZD7显示灯显示;运算器的两个数据输入端分别由二个锁存器74LS273(U29、U30)锁存,两个锁存器的输入并联后连至插座ALUBUS,实验时通过8芯排线连至外部数据总线EXD0~D7插座EXJ1~EXJ3中的任一个;参与运算的数据来自于8位数据开并KD0~KD7,并经过一三态门74LS245(U51)直接连至外部数据总线EXD0~EXD7,通过数据开关输入的数据由LD0~LD7显示。 图中算术逻辑运算功能发生器74LS181(U31、U32)的功能控制信号S3、S2、S1、S0、CN、M并行相连后连至SJ2插座,实验时通过6芯排线连至6位功能开关插座UJ2,以手动方式用二进制开关S3、S2、S1、S0、CN、M来模拟74LS181(U31、U32)的功能控制信号S3、S2、S1、S0、CN、M;其它电平控制信号LDDR1、LDDR2、ALUB`、SWB`以手动方式用二进制开关LDDR1、LDDR2、ALUB、SWB来模拟,这几个信号有自动和手动两种方式产生,通过跳线器切换,其中ALUB`、SWB`为低电平有效,LDDR1、LDDR2为高电平有效。 另有信号T4为脉冲信号,在手动方式下进行实验时,只需将跳线器J23上T4与手动脉冲发生开关的输出端SD相连,按动手动脉冲开关,即可获得实验所需的单脉冲。 2、实验接线 本实验用到4个主要模块:⑴低8位运算器模块,⑵数据输入并显示模块,⑶数据总线显示模块,⑷功能开关模块(借用微地址输入模块)。

计算机组成原理实验完整版

河南农业大学 计算机组成原理实验报告 题目简单机模型实验 学院信息与管理科学学院 专业班级计算机科学与技术2010级1班 学生姓名张子坡(1010101029) 指导教师郭玉峰 撰写日期:二○一二年六月五日

一、实验目的: 1.在掌握各部件的功能基础上,组成一个简单的计算机系统模型机; 2.了解微程序控制器是如何控制模型机运行的,掌握整机动态工作过程; 3定义五条机器指令,编写相应微程序并具体上机调试。 二、实验要求: 1.复习计算机组成的基本原理; 2.预习本实验的相关知识和内容 三、实验设备: EL-JY-II型计算机组成原理试验系统一套,排线若干。 四、模型机结构及工作原理: 模型机结构框图见实验书56页图6-1. 输出设备由底板上上的四个LED数码管及其译码、驱动电路构成,当D-G和W/R均为低电平时将数据结构的数据送入数据管显示注:本系统的数据总线为16位,指令、地址和程序计数器均为8位。当数据总线上的数据打入指令寄存器、地址寄存器和程序寄存器时,只有低8位有效。 在本实验我们学习读、写机器指令和运行机器指令的完整过程。在机器指令的执行过程中,CPU从内存中取出一条机器指令到执行结束为一个指令周期,指令由微指令组成的序列来完成,一条机器指令对应一段微程序。另外,读、写机器指令分别由相应的微程序段来完成。

为了向RAM中装入程序和数据,检查写入是否正确,并能启动程序执行,必须设计三个控制操作微程序。 存储器读操作(MRD):拨动清零开关CLR对地址、指令寄存器清零后,指令译码器输入CA1、CA2为“00”时,按“单步”键,可对RAM连续读操作。 存储器写操作(MWE):拨动清零开关CLR对地址、指令寄存器清零后,指令译码器输入CA1、CA2为“10”时,按“单步”键,可对RAM连续写操作。 启动程序(RUN):拨动开关CLR对地址、指令寄存器清零后,指令译码器输入CA1、CA2为“11”时,按“单步”键,即可转入第01号“取指”微指令,启动程序运行。 注:CA1、CA2由控制总线的E4、E5给出。键盘操作方式有监控程序直接对E4、E5赋值,无需接线。开关方式时可将E4、E5接至控制开关CA1、CA2,由开关控制。 五、实验内容、分析及参考代码: 生成的下一条微地址 UA5 UA0 MS5 MS0 微地址

计算机组成原理 实验4

实验四模型机设计 1 实验目的 (1) 掌握一个简单CPU的组成原理。 (2) 在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机。 (3) 为其定义五条机器指令,编写相应的微程序,并上机调试掌握整机概念。 2 实验设备 PC机一台,TD-CMA实验系统一套。 3 实验原理 本实验要实现一个简单的CPU,并且在此CPU的基础上,继续构建一个简单的模型计算机。CPU由运算器(ALU)、微程序控制器(MC)、通用寄存器(R0),指令寄存器(IR)、程序计数器(PC)和地址寄存器(AR)组成,如图4-1所示。这个CPU在写入相应的微指令后,就具备了执行机器指令的功能,但是机器指令一般存放在主存当中,CPU必须和主存挂接后,才有实际的意义,所以还需要在该CPU的基础上增加一个主存和基本的输入输出部件,以构成一个简单的模型计算机。 图4-1 基本CPU构成原理图 除了程序计数器(PC),其余部件在前面的实验中都已用到,在此不再讨论。系统的程序计数器(PC)和地址寄存器(AR)集成在一片CPLD芯片中。CLR连接至CON单元的总清端CLR,按下CLR按钮,将使PC清零,LDPC和T3相与后作为计数器的计数时钟,当LOAD为低时,计数时钟到来后将CPU内总线上的数据打入PC。

T3 CLR 图4-2 程序计数器(PC)原理图 本模型机和前面微程序控制器实验相比,新增加一条跳转指令JMP,共有五条指令:IN(输入)、ADD(二进制加法)、OUT(输出)、JMP(无条件转移),HLT(停机),其指令格式如下(高4位为操作码): 助记符机器指令码说明 IN0010 0000IN R0 ADD0000 0000R0 + R0 R0 OUT0011 0000R0 OUT JMP addr1110 0000 ********addr PC HLT0101 0000停机 其中JMP为双字节指令,其余均为单字节指令,********为addr对应的二进制地址码。微程序控制器实验的指令是通过手动给出的,现在要求CPU自动从存储器读取指令并执行。根据以上要求,设计数据通路图,如图4-3所示。 本实验在前一个实验的基础上增加了三个部件,一是PC(程序计数器),另一个是AR(地址寄存器),还有就是MEM(主存)。因而在微指令中应增加相应的控制位,其微指令格式如表4-1所示。

计算机组成原理实验

实验一基础汇编语言程序设计 一、实验目的: 1、学习和了解TEC-XP16教学实验系统监控命令的用法。 2、学习和了解TEC-XP16教学实验系统的指令系统。 3、学习简单的TEC-XP16教学实验系统汇编程序设计。 二、预习要求: 1、学习TEC-XP16机监控命令的用法。 2、学习TEC-XP16机的指令系统、汇编程序设计及监控程序中子程序调用。 3、学习TEC-XP16机的使用,包括开关、指示灯、按键等。 4、了解实验内容、实验步骤和要求。 三、实验步骤: 在教学计算机硬件系统上建立与调试汇编程序有几种操作办法。 第一种办法,是使用监控程序的A命令,逐行输入并直接汇编单条的汇编语句,之后使用G命令运行这个程序。缺点是不支持汇编伪指令,修改已有程序源代码相对麻烦一些,适用于建立与运行短小的汇编程序。 第二种办法,是使用增强型的监控程序中的W命令建立完整的汇编程序,然后用M命令对建立起来的汇编程序执行汇编操作,接下来用G命令运行这个程序。适用于比较短小的程序。此时可以支持汇编伪指令,修改已经在内存中的汇编程序源代码的操作更方便一些。 第三种办法,是使用交叉汇编程序ASEC,首先在PC机上,用PC机的编辑程序建立完整的汇编程序,然后用ASEC对建立起来的汇编程序执行汇编操作,接下来把汇编操作产生的二进制的机器指令代码文件内容传送到教学机的内存中,就可以运行这个程序了。适用于规模任意大小的程序。

在这里我们只采用第一种方法。 在TEC-XP16机终端上调试汇编程序要经过以下几步: 1、使教学计算机处于正常运行状态(具体步骤见附录联机通讯指南)。 2、使用监控命令输入程序并调试。 ⑴用监控命令A输入汇编程序 >A 或>A 主存地址 如:在命令行提示符状态下输入: A 2000↙;表示该程序从2000H(内存RAM区的起始地址)地址开始 屏幕将显示: 2000: 输入如下形式的程序: 2000: MVRD R0,AAAA ;MVRD 与R0 之间有且只有一个空格,其他指令相同 2002: MVRD R1,5555 2004: ADD R0,R1 2005: AND R0,R1 2006: RET ;程序的最后一个语句,必须为RET 指令 2007:(直接敲回车键,结束A 命令输入程序的操作过程) 若输入有误,系统会给出提示并显示出错地址,用户只需在该地址重新输入正确的指令即可。 ⑵用监控命令U调出输入过的程序并显示在屏幕上 >U 或>U 主存地址

计算机组成原理--实验七--脱机方式下微代码装入与执行实验

实验七脱机方式下微代码装入与执行实 验 一、实验目的 (1)通过微程序的编制、装入、执行,验证微程序控制的工作方法。 (2)观察微程序的运行过程,未进行简单模型计算机实验作准备。 二、实验原理 (1)时序信号 (2)指令与微指令周期 (3)机器指令与机器指令周期 (4)微程序控制器逻辑结构 (5)微程令流程分析 (6)微程令译码分析 三、实验过程 (1)连线 ①把时钟单元(CLOCK UNIT)的T1-T4接到微程序控制单元(MAIN CONTROL UNIT)的T1-T4。用另一根线把时钟单元(CLOCK UNIT)的T4接到微程序控制单元(MAIN CONTRO UNIR)的T4。 ②把手动控制开关单元(MANUAL UNIT)的MA6-MA0接到微程序 控制单元(MAIN CONTROL UNIT)的MA6-MA0。 (2)写入伪代码操作过程

①拨动一下开关,即实现“1—0—1”,产生一个清除脉冲,使微 程序控制单元(MAIN CONTROL UNIT)初始化。 ②把微程序控制单元(MAIN CONTROL UNIT)右上角的编程开关置 于“READ”状态 ③把时钟单元(CLOCK UNIT)的RUN/STEP开关置于“STEP”状态。 ④在手动控制单元(MANUAL UNIT)的MA6-MA0开关上拨入微控 制存储器地址开关MA6—MA0,按表2-15从00H开始。 ⑤在微程序控制单元(MAIN CONTROL UNIT)的微指令代码开关 MK23-MK0上按表2-15的内容拨入24位的微指令,微指令代码显示灯上显示拨入的微指令代码。 ⑥按动时钟单元(CLOCK UNIT)的“START”按键,产生一组时序信 号(T1—T4),作用是把微指令代码开关MK23-MK0上的24位的微指令代码希尔与MA6—MA0指定的微程序控制存储器(2816)单元中,并显示MA6—MA0微程序控制存储器地址。 ⑦把MA6—MA0开关上微控至存储器地址加1,变成01H, 02H,………,重复上面第(5)、第(6)两步直接把表2-15中微指令代码全部写入微程序控制储存器(2816)中。 (3)校验微代码操作过程 ①拨动一下开关,即实现“1—0—1”,产生一个清除脉冲,使微 程序控制单元(MAIN CONTROL UNIT)初始化。 ②把微程序控制单元(MAIN CONTROL UNIT)右上角的编程开关置 于“READ”状态,确保RUN/STEP开关置于“STEP”状态。

计算机组成原理实验十

上海大学计算机学院 《计算机组成原理二实验》报告十 姓名:林琦学号:xxxxxxxx 教师:王雪娟 时间:周一5-6 地点:计算机大楼609 机位:33 实验名称:十中断机制和应用(综合实验) 一、实验目的 1. 学习实验箱感知中断的硬件结构和工作原理。 2. 学习使用中断系统。 3. 学习使用扩展外设。 二、实验原理 程序中断:因“随机性”原因,使一个程序暂停执行,转而执行另一个程序,以处理随机事件,然后再返回原程序继续执行的过程成为“中断”。中断同子程序调用有共同点:执行另一个程序,然后返回。所以在调用另一个程序(中断服务子程序)时必须保存断点。中断与子程序调用有一个根本区别:中断发生的时间是随机的(不可预知,但发生后应该如何处理是安排好的),而子程序调用时间是安排好的,由程序员写下的调用指令决定。中断发生的“随机性”决定了“必须用硬件感知中断请求”、“不仅要保存断点,还必须保存现场”。中断发生时间与正在运行的程序的无关性,使得整个系统在运行一个程序的同时,还能感知其它事件的发生!这是实时监控的技术基础、是多用户、多任务、多线程技术的关键点,因此是操作系统工作的前提,是计算机系统的“点睛”之笔!深刻理解中断系统是计算机专业人员用好计算机的必备知识! 只有“中断返回”指令和复位操作使EINT为低电平,这个低电平作用到IREQ 的SD端,使上面这个D触发器的Q端为1,作用到IACK的CD端使下面这个D触发器的Q端输出0。 CK驱动下,IREQ的Q端输出D端的INT状态。当有中断请求时INT为0,则一个CK后Q端输出0,但这个0能否被CPU感知却要看①号“或门”是否允许它通过。而“非取指”微指令有IREN=1,则②号“或门”输出1,于是IREQ 的Q端无论输出0或1,①号“或门”总输出1,即不允许中断请求通过。同时这个1又送入IACK的SD端;于是下触发器的SD和CD端的输入都是无效状态,这个触发器保持稳定。

《计算机组成原理》实验七、综合实验

实验七综合设计 一.实验目的: 1、掌握程序的结构。 2、掌握程序的设计、调试方法。 二.实验内容: 假设有一组数据:5,-4,0,3,100,-51,请编一程序,判断:每个数大于0,等于0,还是小于0;并输出其判断结果。 即: 1 当x>0 y= 0 当x=0 -1 当x<0 DA TA SEGMENT X DB -25 Y DB ? DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START:MOV AX,DA TA MOV DS,AX ;初始化 MOV AL,X ;X取到AL中 CMP AL,0 ;AL中的内容和0比较 JGE BIG ;大于等于0,转BIG MOV BL,-1 ;否则为负数,-1送BL JMP EXIT ;转到结束位置 BIG: JE EE ;AL中的内容是否为0,为0转EE MOV BL,1 ;否则为在于0,1送BL JMP EXIT ;转到结束位置 EE: MOV BL,0 ;0送BL中 EXIT: MOV Y,BL ;BL中内容送入Y单元 MOV AH,4CH INT 21H ;程序结束 CODE ENDS END START ;汇编结束

三.实验要求: 实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。 四.编程提示: 1、首先将原始数据装入起始地址为XX的字节存储单元中。 2、将判断结果以字符串的形式存放在数据区中,以便在显示输出时调用。 3、其中判断部分可采用CMP指令,得到一个分支结构,分别输出“y=0”, “y=1”, “y=-1”。 4、程序中存在一个循环结构,循环6次,调用6次分支结构后结束。 五.思考题: 程序中的原始数据是以怎样的形式存放在数据区中的?请用DEBUG调试程序观察并分析。 六.实验报告: 1、程序说明。说明程序的功能、结构。 2、调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。 3、画出程序框图。 4、写出源程序清单和执行结果。 5、回答思考题。

计算机组成原理_实验报告四(含答案)

湖南科技学院 电子与信息工程学院 实验报告 课程名称: 姓名: 学号: 专业: 班级: 指导老师:

实验四微程序控制组成实验 一、实验目的及要求 1.将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机。 2.用微程序控制器控制模型计算机的数据通路。 3.执行给定的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概念。 二、实验电路 本次实验将前面几个实验中的所模块,包括运算器、存储器、通用寄存器堆等同微程序控制器组合在一起,构成一台简单的模型机。这是最复杂的一个实验,也将是最有收获的一个实验。 在前面的实验中,实验者本身作为“控制器”,完成了对数据通路的控制。而在本次实验中,数据通路的控制将交由微程序控制器来完成。实验机器从内存中取出一条机器指令到执行指令结束的一个指令周期,是由微程序完成的,即一条机器指令对应一个微程序序列。 实验电路大致如下面框图所示。其中控制器是控制部件,数据通路是执行部件,时序发生器是时序部件。需使用导线将各个部件控制信号与控制器相连。 三、实验主要仪器设备 1.TEC-5计算机组成实验系统1台 2.逻辑测试笔一支(在TEC-5实验台上) 四、实验任务 1.对机器指令组成的简单程序进行译码。将下表的程序按机器指令格式手工汇编成二进制机器代码, 此项任务请在预习时完成。 2. 3.使用控制台命令将寄存器内容初始化为:R0=11H,R1=22H,R2=0AAH。

4.使用控制台命令将任务1中的程序代码存入内存中(注意起始地址为30H),以及将内存地址为 11H的单元内容设置为0AAH。 5.用单拍(DP)方式执行一遍程序,执行时注意观察各个指示灯的显示并做好记录(完成实验表格), 从而跟踪程序执行的详细过程(可观察到每一条微指令的执行过程)。 6.用连续方式再次执行程序。这种情况相当于计算机正常的工作。程序执行到STP指令后自动停机。 读出寄存器中的运算结果,与理论值比较。 五、实验步骤和实验结果记录 1.程序译码。 2.实验接线(本实验接线比较多,需仔细) 只要把上表种同列的信号用线连接即可,一共接线33条。 接好线后,将编程开关拨到“正常位置”。合上电源,按CLR#按钮,使TEC-5实验实验系统处于初始状态。 3.实验任务3:使用控制台命令将寄存器内容初始化为:R0=11H,R1=22H,R2=0AAH的操作步骤及结果记录。 (1)掌握写寄存器WRF的原理和步骤(详见实验参考资料)。 (2)操作过程如下:

计算机组成原理实验6

第六节 CPU组成与机器指令执行实验 一、实验目的 (1)将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机; (2)用微程序控制器控制模型机数据通路; (3)通过CPU运行九条机器指令(排除中断指令)组成的简单程序,掌握机器指令与微指令的关系,牢固建立计算机的整机概念。 二、实验电路 本次实验用到前面四个实验中的所有电路,包括运算器、存储器、通用寄存器堆、程序计数器、指令寄存器、微程序控制器等,将几个模块组合成为一台简单计算机。因此,在基本实验中,这是最复杂的一个实验,也是最能得到收获的一个实验。 在前面的实验中,实验者本身作为“控制器”,完成数据通路的控制。而在本次实验中,数据通路的控制将由微程序控制器来完成。CPU从内存取出一条机器指令到执行指令结束的一个机器指令周期,是由微指令组成的序列来完成的,即一条机器指令对应一个微程序。 三、实验设备 (1)TEC-9计算机组成原理实验系统一台 (2)双踪示波器一台 (3)直流万用表一只 (4)逻辑测试笔一支 四、实验任务 (1)对机器指令系统组成的简单程序进行译码。 (2)按照下面框图,参考前面实验的电路图完成连线,控制器是控制部件,数据通路(包括上面各模块)是执行部件,时序产生器是时序部件。连线包括控制台、时序部分、数据通路和微程序控制器之间的连接。其中,为把操作数传送给通用寄存器组RF,数据通路上的RS1、RS0、RD1、RD0应分别与IR3至IR0连接,WR1、WR0也应接到IR1、IR0上。 开关控制 控制台时序发生器 时序信号 开关控制指示灯信号控制信号时序信号 控制信号 微程序控制器数据通路 指令代码、条件信号

计算机组成原理实验实验报告

计算机组成原理实验报告 学院信息与管理科学学院 专业班级计算机科学与技术2010级2班学生姓名毛世均 1010101046 指导教师郭玉峰 撰写日期:二○一二年六月四日

SA4=1 1.根据上边的逻辑表达式,分析58页图6-2的P1测试和P4测试两条指令的微地址转移方向。 P1测试:进行P1测试时,P1为0,其他的都为1, 因此SA4=1, SA3=I7,SA2=I6,SA1=,SA0=I4 微地址011001,下址字段为001000下址字段001000译码后,高两位不变,仍然为00,低四位受到机器指令的高四位I7-I4的影响。 机器指令的高四位为0000时,下一条微指令地址为001000,转到IN 操作。机器指令高四位0010时,下一条微指令地址为001010,转到MOV 操作。机器指令高四位为0001时,下一条微指令地址为001001,转到ADD 操作。机器指令高四位为0011时,下一条微指令地址为001011,转到OUT 操作。机器指令高四位为0100时,下一条微指令地址001100,转到JMP 操作 P4测试:进行P4测试时,P4为0,其他的都为1. 因此SA4=SA3=SA2=1,SA1=CA2,SA0=CA1 微地址000000,下址字段为010000. 010000被译码之后,高四位不变,0100低两位由CA2和CA1控制。CA2和CA1的值是由单片机的键盘填入控制的。 当实验选择CtL2=1时,CA2和CA1被填入0和1,这时低两位被译码电路翻译成01,所以下一条微地址就是010001,然后进入写机器指令的状态。当实验选择CtL2=2时,CA2和CA1被填入1和0,这时低两位被译码电路翻译成10,所以下一条微地址就是010010,然后进入读机器指令的状态。当实验选择CtL2=2时,CA2和CA1被填入1和1,这时低两位被译码电路翻译成 11,所以下一条微地址就是010011,然后进入运行机器指令的状态。 2.分析实验六中五条机器指令的执行过程。

《计算机组成原理》实验报告四

《计算机组成原理》 实 验 报 告 学院:数学与计算机学院 专业:软件工程 班级学号: 学生姓名: 实验日期: 2014-11-8 指导老师: 成绩评定: 西华大学数学与计算机学院计算机组成原理实验 室 实验四存储器和总线实验 一、实验目的 熟悉存储器和总线的硬件电路

二、实验要求 按照实验步骤完成实验项目,熟悉存储器的读、写操作,理解在总线上数据传输的方法。 三、实验说明 (一)存储器和总线的构成 1.总线由一片74LS245、一片74LS244组成,把整个系统分为内部总线和外部总线。二片74LS374锁存当前的数 据、地址总线上的数据以供LED显示。(如图8)

图8 总线布局图 2.存储器采用静态RAM(1片6264) 3.存储器的控制电路由一片74LS32和74LS08组成。如图9

图9 存储器控制电路布局图(二)存储器和总线的原理

1.总线的原理:由于本系统内使用8根地址线、8根数据线,所以使用一片74LS245作为数据总线,另一片 74LS244作为地址总线(如图10)。总线把整个系统分为内部数据、地址总线和外部数据、地址总线,由于数据总线需要进行内外部数据的交换,所以由BUS信号来控制数据的流向,当BUS=1时数据由内到外,当 BUS=0时数据由外到内。 图10 总线单元 2.由于本系统内使用8根地址线、8根数据线,所以6264的A8~A12接地,其实际容量为256个字节(如图11)。 6264的数据、地址总线已经接在总线单元的外部总线 上。存储器有3个控制信号:地址总线设置存储器地 址,RM=0时,把存储器中的数据读出到总线上;当 WM=0,并且EMCK有一个上升沿时,把外部总线上的数据写入存储器中。为了更方便地编辑内存中的数 据,在实验机处于停机状态时,可由监控来编辑其中的数据。

计算机组成原理实验报告

实验一8位程序计数器PC[7:0]的设计 实验要求: 1.分别用图形方式和V erilog HDL语言设计8位程序计数器,计数器带有复位,计数,转移功能。 2.具体要求参见1_部件实验内容.doc说明文件。 实验实现: 1.用图形方式设计实现8位程序计数器,用到了两个74LS161四位十六进制计数器,主要步骤是两个四位十六进制计数器的串联,低四位计数器的进位端RCO连到高四位计数器的进位使能端ENT,然后连上reset、clk、ir[7:0]、t[1:0]、pc[7:0]、rco等输入输出信号,最后加上转移控制逻辑即可。注意两个十六进制计数器是同步的,具体参见PC_8bit.gdf文件。 2.编译通过,建立波形仿真文件,设置输入信号参数。注意在一张图中同时实现复位(reset低位有效)、计数、转移功能,最后加上一些文字注释即可,具体参见PC_8bit.scf文件。 3.用V erilog HDL语言设计实现8位程序计数器。在已经实现.gdf文件的基础上使用库函数形式是很容易编写出.v文件的,不过学生选择了行为描述方式实现,因为后者更具有通用性,依次实现8位程序计数器的复位、计数、转移功能即可,具体参见PC_8bit.v文件。 4.编译仿真类似上述步骤2。 实验小结: 1.这是计算机组成原理的第一个实验,比较简单,按照实验要求即可完成实验。通果这次实验,我对Max+Plus软件的使用方法和V erilog HDL语言编程复习了一遍,为后面的实验打好基础。 实验二CPU运行时序逻辑的设计 实验要求: 1.用V erilog HDL 语言设计三周期时序逻辑电路,要求带复位功能,t[2:0]在非法错误状态下能自动恢复。(比如说110恢复到001)。 2.具体要求参见1_部件实验内容.doc说明文件。 实验实现: 1.用V erilog HDL 语言设计实现带复位和纠错功能的三周期时序逻辑电路。输入clk外部时钟信号和reset复位信号(低位有效),输出ck内部时钟信号和三周期信号t[2:0]。利用两级3位移位式分频逻辑实现,具体参见cycle_3.v文件。 2.编译通过,建立波形仿真文件,设置clk外部时钟信号和reset复位信号,Simulate 即可输出实验要求中显示的波形。 实验小结: 1.刚做这个实验的时候不知道CPU运行时序逻辑设计的真实用途,在进一步学习了计算机组成原理的理论知识,做cpu4实验后才知道是用来由外部时钟信号clk产生内部时钟信号ck以及三周期信号t[2:0]的。刚完成本次实验的时候未添加三周期信号t[2:0]的自动功能,后来完成cpu4后补上了。 实验三静态存储器的设计与读写验证 实验要求: 1.设计一个SRAM存储器,地址和数据都是8位,存储容量是256个字节。 2.采用异步的时序逻辑设计方式,数据是双向的,输入输出不寄存,存储器的地址也不寄存。 3.具体要求参见1_部件实验内容.doc说明文件。 实验实现:

计算机组成原理实验说明分解

实验一运算器组成实验 一、实验目的 1.熟悉双端口通用寄存器堆(组)的读写操作。 2.熟悉简单运算器的数据传送通路。 3.验证运算器74LS181的算术逻辑功能。 4.按给定数据,完成指定的算术、逻辑运算。 二、实验原理 上图是本实验所用的运算器数据通路图。参与运算的数据首先通过实验台操作板上的八个二进制数据开关SW7-SW0来设置,然后输入到双端口通用寄存器堆RF中。

RF由一个ispLSI1016实现,功能上相当于四个8位通用寄存器,用于保存参与运算的数据,运算后的结果也要送到RF中保存。双端口寄存器堆模块的控制信号中,RS1、RS0用于选择从B端口(右端口)读出的通用寄存器,RD1、RD0用于选取从A端口(左端口)读出的通用寄存器。而WR1、WR0用于选择写入的通用寄存器。LDRi是写入控制信号,当LDRi=1时,数据总线DBUS上的数据在T3写入由WR1、WR0指定的通用寄存器。RF的A、B端口分别与操作数暂存器DR1、DR2相连:另外,RF的B端口通过一个三态门连接到数据总线DBUS上,因而RF 中的数据可以直接通过B端口送到DBUS上。 DR1和DR2各由1片74LS273构成,用于暂存参与运算的数据。DR1接ALU 的A输入端口,DR2接ALU的B端口。ALU由两片74LS181构成,ALU的输出通过一个三态门(74LS244)发送到数据总线DBUS上。 图中尾巴上带粗短线标记的信号都是控制信号,其中S3,S2,Sl,S0,M,Cn#,LDDR2,LDDRl, ALU-BUS#,SW-BUS#、LDRi、RS1、RS0、RD1、RD0、WR1、WR0等是电位信号,用电平开关K0—Kl5来模拟。T2、T3是脉冲信号,印制板上已连接到实验台的时序电路上。#为低电平有效。K0—K15是一组用于模拟各控制电平信号的开关,开关向上时为1,开关向下时为0,每个开关无固定用途,可根据实验具体情况选用。 实验中进行单拍操作,每次只产生一组Tl,T2,T3,T4脉冲,需将实验台上的DP,DB开关进行正确设置。将DP开关置l,将DB开关置0,每按一次QD 按钮,则顺序产生Tl、T2、T3、T4各一个单脉冲。 三、实验任务 1.按图要求,将运算器模块与实验台操作板上的线路进行连接。 置DP=1,DB=0,编程开关拨到正常位置. 2.用开关SW7-SW0向通用寄存器堆RF内的R0-R3寄存器置数34H、21H、52H、65H。然后读出R0-R3的内容,在数据总线DBUS上显示出来。 3.令DR1=55H、DR2=0AAH、Cn#=1,验证ALU的正逻辑算术、逻辑运算功能。 四、实验要求 1.做好实验预习。掌握运算器的数据传送通路和ALU的功能特性,并熟悉本实验中所用的控制台开关的作用和使用方法。

计算机组成原理实验1.

计算机组成原理实验1 运算器(脱机)实验 通过开关、按键控制教学机的运算器执行指定的运算功能,并通过指示灯观察运算结果。实验原理: 为了控制Am2901运算器能够按照我们的意图完成预期的操作功能,就必须向其提供相应的控制信号和数据。 控制信号包括 1、选择送入ALU的两路操作数据R和S的组合关系(实际来源)。 2、选择ALU的八种运算功能中我们所要求的一种。这可通过提供三位功能选择码I5、 I4、I3实现。 3、选择运算结果或有关数据以什么方式送往何处的处理方案,这主要通过通用寄存器 组合和Q寄存器执不执行接收操作或位移操作,以及向芯片输出信息Y提供的是 什么内容。这是通过I8、I7、I6三位结果选择码来控制三组选择门电路实现的。 外部数据包括 1、通过D接收外部送来的数据 2、应正确给出芯片的最低位进位输入信号C n 3、关于左右移位操作过程中的RAM3、RAM0、Q3和Q0的处理。 4、当执行通用寄存器组的读操作时,由外部送入的A地址选中的通用寄存器的内容送 往A端口,由B地址选中的通用寄存器的内容送往B端口,B地址还用作通用寄 存器的写汝控制。 对于芯片的具体线路,需说明如下几点: 1、芯片结果输出信号的有无还受一个/OE(片选)信号的控制。 2、标志位F=0000为集电极开路输出,容易实现“线与”逻辑,此管脚需经过一个电阻 接到+5V。 3、RAM3、RAM0、Q3和Q0均为双向三态逻辑,一定要与外部电路正确连接。 4、通用寄存器组通过A端口、B端口读出内容的输出处均有锁存器线路支持。 5、该芯片还有两个用于芯片间完成高速进位的输出信号/G和/P。 6、Am2901芯片要用一个CLK(CP)时钟信号作为芯片内通用寄存器、锁存器和Q寄 存器的打入信号。 实验步骤如下: (1)选择运算器要完成的一项运算功能,包括数据来源,运算功能,结果保存等;(2)需要时,通过数据开关向运算器提供原始数据; (3)通过24位的微型开关向运算器提供为完成指定运算功能所需要的控制信号; (4)通过查看指示灯或用电表量测,观察运算器的运行结果(包括计算结果和特征标志)。实验准备 12为微型开关的具体控制功能分配如下: A口和B口地址:送给Am2901器件用于选择源与目的操作数的寄存器编号; I8~I0:选择操作数来源、运算操作功能、选择操作数处理结果和运算器输出内容的3组3位控制码; Sci,SSH和SST:用于确定运算器最低位的进位输入、移位信号的入/出和怎样处理Am2901产生的状态标志位的结果。

计算机组成原理实验报告4

上海大学计算机学院 实验名称:指令系统实验 一、实验目的 1. 读出系统已有的指令,并理解其含义。 2. 设计并实现一条新指令。 二、实验原理 微程序和机器指令,实验箱的机器指令系统,实验箱机器指令系统的布线,实验箱机器指令系统的工作原理,实验箱PC的打入原理,程序存储器模式下的操作。 三、实验内容 1. 考察机器指令64的各微指令信号,确定该指令的功能。 (假设R0=77, A=11, 77单元存放56H数据,64指令的下一条指令为E8) 2. 修改机器指令E8,使其完成“输出A+W的结果左移一位后的值到OUT”操作。 3*. 修改机器指令F0,使其完成“A+R2的结果右移一位的值到OUT”的操作 四、实验步骤 实验任务一:

考察机器指令64的各微指令信号,确定该指令的功能。 实验步骤: 1.初始化系统(Reset),进入μEM,在Adr字段送入64,按NX键,可查看其对应的微指令: 64: FF 77 FF 65: D7 BF EF 66:FF FE 92 67:CB FF FF 2.分析其二进制代码,分析其控制功能 64: 1111 1111 0111 0111 1111 1111 从寄存器R?中取出地址打入地址寄存器MAR。 65: 1110 0111 1011 1111 1110 1111 把地址寄存器MAR的存储器值EM打入寄存器W。 66:1111 1111 1111 1110 1001 0010 把寄存器A和寄存器W中的数据进行或运算后打入寄存器A和标志位C,Z。 67:1100 1011 1111 1111 1111 1111 读出下一条指令并立即执行。 四条指令功能:把寄存器A和寄存器R?中地址内存的数据进行或运算,结果保存在寄存器A中,然后执行下一条指令。 实验任务二: 1.分解任务:修改机器指令E8,使其完成“输出A+W的结果左移一位后的值到OUT”操作的操作。第一步完成A+W;并把“左移一位的值送OUT”;第二步完成取指令。 2.编制微指令:由“控制总线功能对应表”,可确定这四步基本操作的微指令码为:

计算机组成原理实验

计算机组成原理 实验报告 学院(系):软件学院 专业:软件设计 班级:软件设计一班 学号:1415925365 姓名:沈烨 2016年11月24日

实验1 Cache模拟器的实现 一.实验目的 (1)加深对Cache的基本概念、基本组织结构以及基本工作原理的理解。 (2)掌握Cache容量、相联度、块大小对Cache性能的影响。 (3)掌握降低Cache不命中率的各种方法以及这些方法对提高Cache性能的好处。 (4)理解LRU与随机法的基本思想以及它们对Cache性能的影响。 二、实验内容和步骤 1、启动CacheSim。 2、根据课本上的相关知识,进一步熟悉Cache的概念和工作机制。 3、依次输入以下参数:Cache容量、块容量、映射方式、替换策略和写策略。 4、读取cache-traces.zip中的trace文件。 5、运行程序,观察cache的访问次数、读/写次数、平均命中率、读/写命中率。思考:1、Cache的命中率与其容量大小有何关系? Cache 的容量与块长是影响cache效率的重要因素; Cache 容量越大,其CPU命中率就越高,当然容量过大,增加成本,而且cache 容量达到一定值时,命中率已不因容量的增加而又明显的提高; 2、Cache块大小对不命中率有何影响? Cache 当块由小到大,在已被访问字的附近,近期也可能访问,增大块长,可将更多有用字存入缓存,提高命中率;但是继续增大块长,命中率可能下降,因为所装入缓存的有用数据反而少于被替换掉的有用数据,由于块长增大,块数减少,装入新的块要覆盖旧块,很可能出现少数块刚装入就被覆盖,故命中率可能下降; 3、替换算法和相联度大小对不命中率有何影响? 替换算法中:LRU算法的平均命中率比FIFO的高 LRU算法比较好地利用访存局部性原理,替换出近期用得最少的字块,它需要随时记录cache 各个字块使用情况。FIFO不需要记录各个字块的使用情况,比较容易实现开销小,但是没有根据访存的局部性原理,最早调入的信息可能以后还要用到,或经常用到例如循环程序; Cache 容量一定时,随着相联度的不断增加,不命中率渐渐减小,但是当相连度增加到一定程度时,不命中率保持不变;

计算机组成原理实验

成绩:计算机原理实验室实验报告 课程:计算机组成原理 姓名:姜香玉 专业:网络工程 学号:132055215 日期:2015年12月 太原工业学院 计算机工程系

实验一:运算器实验 实验环境PC机+Win 2003+emu8086+proteus仿真器实验日期2015年.10 一.实验内容 1.熟悉proteus仿真系统 2.设计并验证4位算数逻辑单元的功能 3.实现输入输出锁存 4.实现8位算数逻辑单元 二.理论分析或算法分析 实验原理: 算术逻辑运算单元的核心是由74LS181 构成,它可以进行二进制数的算术逻辑运算,74LS181 的各种工作方式可通过设置其控制信号来实现。当正确设置74LS181的各个控制信号,74LS181 会运算数据锁存器内的数据。由于数据锁存器已经把数据锁存,只要74LS181的控制信号不变,那么74LS181 的输出数据也不会发生改变。输出缓冲器采用74LS245,当控制信号为低电平时,74LS245导通,把74LS181 的运算结果输出到数据总线,高电平时,74LS245 的输出为高阻。 实验中所用的运算器数据通路如图所示。 其中运算器由两片74LS181以并/串形式构成8位字长的ALU。 运算器的输出经过一个三态门(74LS245)以8芯扁平线方式和数据总线相连,运算器的2个数据输入端分别由二个锁存器(74LS273)锁存,锁存器的输入亦以8芯扁平线方式与数据总线相连,数据开关(INPUT DEVICE)用来给出参与运算的数据,经一三态门(74LS245)以8芯扁平线方式和数据总线相连,数据显示灯(BUS UNIT)已和数据总线相连,用来显示数据总线内容。

相关主题
文本预览
相关文档 最新文档