计算机组成原理实验参考答案(西南交大).docx

上传人:b**** 文档编号:14734783 上传时间:2023-06-26 格式:DOCX 页数:27 大小:439.62KB
下载 相关 举报
计算机组成原理实验参考答案(西南交大).docx_第1页
第1页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第2页
第2页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第3页
第3页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第4页
第4页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第5页
第5页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第6页
第6页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第7页
第7页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第8页
第8页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第9页
第9页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第10页
第10页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第11页
第11页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第12页
第12页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第13页
第13页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第14页
第14页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第15页
第15页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第16页
第16页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第17页
第17页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第18页
第18页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第19页
第19页 / 共27页
计算机组成原理实验参考答案(西南交大).docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机组成原理实验参考答案(西南交大).docx

《计算机组成原理实验参考答案(西南交大).docx》由会员分享,可在线阅读,更多相关《计算机组成原理实验参考答案(西南交大).docx(27页珍藏版)》请在冰点文库上搜索。

计算机组成原理实验参考答案(西南交大).docx

[原创]西南交通大学计算机组成实验参考答案

注1、引脚分配依照EP3C40F780C8芯片

注2、一定要参照实验指导书阅读此文

实验一:

多路数据选择器的设计

f=((~sel)a)+((sel)b)

当sel=0时,f=a,否则f=b。

引脚分配参考:

a[3:

0]AH12AF14AA8AB8

b[3:

0]AF12AG12AA10U8

f[3:

0]E24F22E22F21

sel:

AC5

实验二基于原理图方式的3-8译码电路的设计

 

f0=(~en)+(~a)(~b)(~c)

f1=(~en)+(~a)(~b)c

f2=(~en)+(~a)b(~c)

f3=(~en)+(~a)bc

f4=(~en)+a(~b)(~c)

f5=(~en)+a(~b)c

f6=(~en)+ab(~c)

f7=(~en)+abc

en为使能端,低电平有效,高电平时输出全为1。

引脚分配参考:

a:

AH12,b:

AF14,c:

AA8,en:

AC5

f[7:

0]F24H24H23L23L24M24J22AE8

实验三四位加法器设计

实验思路:

用VerilogHDL语言编写一位全加器,再用原理图方式用四个全加器组合实现四位加法器。

Adder.v

moduleAdder(a,b,cin,cout,sum);

inputa,b,cin;

outputcout,sum;

assign{cout,sum}=a+b+cin;

endmodule

原理图:

{cout,sum}=a+b+cin

cin为进位输入,cout为进位输出。

引脚分配参考:

a[3:

0]AH12AF14AA8AB8

b[3:

0]AF12AG12AA10U8

sum[3:

0]E24F22E22F21

cin:

AC5,cout:

F24

实验四:

七段LED数码管显示译码器设计

本实验使用VerilogHDL实现。

moduleExp4(f,clk,rst,in,out,sel);

   input[15:

0]in;//输入

   inputf,clk,rst;//计数开关,时钟,置零开关

   outputreg[7:

0]out;//数码管输出

   outputreg[2:

0]sel;//数码管3-8译码器输出

    reg[15:

0]counter;

   reg[3:

0]data;

   regclk_alt;

   reg[9:

0]l;

   //changefrequency 变频段

   always@(posedgeclk)

    begin

       if(l>=1023)l=0;

       elsel=l+1;

       clk_alt=l[2];

   end

   //select选择在哪一个数码管显示

   always@(posedgeclk)

   begin

       sel=sel+1;

       if(sel>=4)sel=0;

       case(sel)

        0:

data=counter[3:

0];

       1:

data=counter[7:

4];

        2:

data=counter[11:

8];

        3:

data=counter[15:

12];

       endcase

   end

   //countandreset计数和清零

   always@(posedgeclk_altorposedgerst)

   begin

       if(rst==1)counter=0;

       elseif(f==1)counter=in;

       elsecounter=counter+1;

   end

   //translate译码段,此处可以使用二进制或十六进制,后面的实验同,不再赘述。

    always

       case(data)

       0:

out=63;

       1:

out=6;

       2:

out=91;

       3:

out=79;

       4:

out=102;

       5:

out=109;

       6:

out=125;

       7:

out=7;

       8:

out=127;

       9:

out=111;

       10:

out=119;

       11:

out=124;

       12:

out=57;

       13:

out=94;

       14:

out=121;

       15:

out=113;

    endcase

endmodule

引脚分配参考:

in[15:

0]AH12AF14AA8AB8AF12AG12AA10U8AF5AH6AH7AH8AH14AG7AG8AF9

out[7:

0]M21G12G14G15G18F18G17G16

sel[2:

0]G9D22C22

clk:

A14,f:

AC5,rst:

AD4

实验五:

算数逻辑单元(ALU)设计

moduleExp5(s,cin,d,wt,sel,out,slt,clk);

input[2:

0]s;//功能开关

inputsel,cin,wt,clk;//选择输入开关,进位输入,写入开关,时钟

input[15:

0]d;//输入

outputreg[7:

0]out;//数码管输出

outputreg[2:

0]slt;//数码管3-8译码器输出

reg[15:

0]a;//暂存器a

reg[15:

0]b;//暂存器b

reg[15:

0]result;//计算结果

reg[3:

0]outdata;

regcout;

//选择显示的数码管

always@(posedgeclk)

begin

   slt=slt+1;

   if(slt>=5)slt=0;

   case(slt)

   0:

outdata=cout;

   1:

outdata=result[15:

12];

   2:

outdata=result[11:

8];

   3:

outdata=result[7:

4];

   4:

outdata=result[3:

0];

   endcase

end

//译码

always

   case(outdata)

   0:

out=63;

   1:

out=6;

   2:

out=91;

   3:

out=79;

   4:

out=102;

   5:

out=109;

   6:

out=125;

   7:

out=7;

   8:

out=127;

   9:

out=111;

   10:

out=119;

   11:

out=124;

   12:

out=57;

   13:

out=94;

   14:

out=121;

   15:

out=113;

   endcase

//选择输入到哪一个暂存

always@(selorwt)

begin

   if(wt==0)

   begin

       if(sel==0)a=d;

       elseb=d;

   end

end

//计算功能选择

always

   case(s)

   0:

result=0;//置零

   1:

result=a&b;//逻辑与

   2:

result=a|b;//逻辑或

   3:

result=a^b;//逻辑异或

   4:

{cout,result}=a+b+cin;//算术加

   5:

{cout,result}=a<<1;//a左移一位(含进位)

   6:

result=a>>1;//a右移一位

   7:

;//无功能

   endcase

endmodule

 引脚分配参考:

d[15:

0]AH12AF14AA8AB8AF12AG12AA10U8AF5AH6AH7AH8AH14AG7AG8AF9

out[7:

0]M21G12G14G15G18F18G17G16

slt[2:

0]G9D22C22

s[2:

0]AE4AC5AD4

clk:

A14,cin:

AH11,sel:

AE3,wt:

AH10

实验六CPU寄存器组的设计

moduleExp6(RA,wt,rd,m,rst,clk,d,out,sel);

input[1:

0]RA;//通用寄存器选择

inputrd,wt,rst,clk;//读开关,写开关,置零开关,时钟

input[1:

0]m;//功能选择

input[15:

0]d;//输入

outputreg[7:

0]out;//数码管输出

outputreg[2:

0]sel;//数码管3-8译码器输出

reg[3:

0]data;

reg[15:

0]R0;

reg[15:

0]R1;

reg[15:

0]R2;

reg[15:

0]R3;

reg[15:

0]mid;

reg[15:

0]counter;

regclk_alt;

reg[2:

0]l;

//变频段

always@(negedgeclk)

begin

   if(l>=7)l=0;

   elsel=l+1;

   clk_alt=l[2];

end

//读写

always@(RAorrdorwt)

begin

   case(RA)

   0:

begin

       if(rd==1&&wt==0)R0=d;

       elseif(rd==0&&wt==1)mid=R0;

   end

   1:

begin

       if(rd==1&&wt==0)R1=d;

       elseif(rd==0&&wt==1)mid=R1;

   end

   2:

begin

       if(rd==1&&wt==0)R2=d;

       elseif(rd==0&&wt==1)mid=R2;

    end

   3:

begin

       if(rd==1&&wt==0)R3=d;

       elseif(rd==0&&wt==1)mid=R3;

   end

   endcase

end

//PC寄存器

always@(negedgeclk_alt)

begin

   if(rst==0)counter=0;

   elsecase(m)

   0:

;//无功能

   1:

counter=counter-1;//减一计数

   2:

counter=counter+1;//加一计数

   3:

counter=mid;//置数

   endcase

end

//输出

always@(negedgeclk)

begin

   sel=sel+1;

   if(sel>=8)sel=0;

   case(sel)

   0:

data=counter[15:

12];

   1:

data=counter[11:

8];

   2:

data=counter[7:

4];

   3:

data=counter[3:

0];//前四位显示PC寄存器数值

   4:

data=mid[15:

12];

   5:

data=mid[11:

8];

   6:

data=mid[7:

4];

   7:

data=mid[3:

0];//后四位显示通用寄存器数值

   endcase

end

//译码

always

   case(data)

   0:

out=63;

   1:

out=6;

   2:

out=91;

   3:

out=79;

   4:

out=102;

   5:

out=109;

   6:

out=125;

   7:

out=7;

   8:

out=127;

   9:

out=111;

   10:

out=119;

   11:

out=124;

   12:

out=57;

   13:

out=94;

   14:

out=121;

   15:

out=113;

   endcase

endmodule

引脚分配参考:

RA[1:

0]AG10AG11,m[1:

0]AE4AC5

d[15:

0]AH12AF14AA8AB8AF12AG12AA10U8AF5AH6AH7AH8AH14AG7AG8AF9

out[7:

0]M21G12G14G15G18F18G17G16

sel[2:

0]G9D22C22

clk:

A14,rst:

AH11,rd:

AE3,wt:

AD4

实验七运算器设计

此实验用VerilogHDL和原理图实现

ALU.v    ALU部分(功能参照实验五)

moduleALU(s,cin,wt,sel,in,cout,out);

input[2:

0]s;

inputsel,cin,wt;

input[15:

0]in;

outputreg[15:

0]out;

outputregcout;

reg[15:

0]a;

reg[15:

0]b;

always@(selorwt)

begin

   if(wt==0)

   begin

       if(sel==0)a=in;

       elseb=in;

   end

end

always

   case(s)

   0:

out=0;

   1:

out=a&b;

   2:

out=a|b;

   3:

out=a^b;

   4:

{cout,out}=a+b+cin;

   5:

{cout,out}=a<<2;

   6:

out=a>>2;

   7:

;

   endcase

endmodule

REG.v    CPU寄存器组部分(功能参照实验六)

moduleREG(in,out,slt,d,RA,wr,m,rst,clk,sel,mid);

input[15:

0]in;

input[15:

0]d;

input[1:

0]RA;

inputwr,rst,clk,sel;//sel为选择开关,选择从ALU的输出出入或者外部输入

input[1:

0]m;

outputreg[7:

0]out;

outputreg[2:

0]slt;

reg[3:

0]data;

reg[15:

0]R0;

reg[15:

0]R1;

reg[15:

0]R2;

reg[15:

0]R3;

outputreg[15:

0]mid;

reg[15:

0]counter;

regclk_alt,wt,rd;

reg[2:

0]l;

always@(negedgeclk)

begin

   if(l>=7)l=0;

   elsel=l+1;

   clk_alt=l[2];

end

//ReadandWrite

always

begin

   case(RA)

   0:

begin

       if(wr==0)

           if(sel==1)R0=d;elseR0=in;//sel高电平从外部输入,否则从ALU输入,下同

           elsemid=R0;

   end

   1:

begin

       if(wr==0)

           if(sel==1)R1=d;elseR1=in;

           elsemid=R1;

   end

   2:

begin

       if(wr==0)

           if(sel==1)R2=d;elseR2=in;

           elsemid=R2;

   end

   3:

begin

      if(wr==0)

           if(sel==1)R3=d;elseR3=in;

           elsemid=R3;

      end

   endcase

end

//PC

always@(negedgeclk_alt)

begin

   if(rst==0)counter=0;

   elsecase(m)

   0:

;

   1:

counter=counter-1;

   2:

counter=counter+1;

   3:

counter=d;

   endcase

end

//output

always@(negedgeclk)

begin

   slt=slt+1;

   if(slt>=8)slt=0;

   case(slt)

   0:

data=counter[15:

12];

   1:

data=counter[11:

8];

   2:

data=counter[7:

4];

   3:

data=counter[3:

0];

   4:

data=mid[15:

12];

   5:

data=mid[11:

8];

   6:

data=mid[7:

4];

   7:

data=mid[3:

0];

   endcase

end

//translate

always

   case(data)

   0:

out=63;

   1:

out=6;

   2:

out=91;

   3:

out=79;

   4:

out=102;

   5:

out=109;

   6:

out=125;

   7:

out=7;

   8:

out=127;

   9:

out=111;

   10:

out=119;

   11:

out=124;

   12:

out=57;

   13:

out=94;

   14:

out=121;

   15:

out=113;

   endcase

endmodule

两个文件写完之后分别生成symbol文件,并绘制原理图

由于实验箱只有28个开关输入,因此为节省引脚,将cin接地或接+5V,并将实验六的读写开关合二为一。

引脚分配参考:

d[15:

0]AH12AF14AF12AG12AF5AH6AH7AH8AG10AG11AH14AG7AG8AF9AH10AH11

out[7:

0]M21G12G14G15G18F18G17G16

slt[2:

0]G9D22C22,s[2:

0]AA8AB8AE4,m[1:

0]AE3AD4,RA[1:

0]AA10U8

clk:

A14,cout:

AE8,rst:

J27,sel_alu:

AC5,sel_reg:

J28,wr:

Y28,wt_alu:

Y27

实验八指令存储器与取指令部件的设计

此实验用VerilogHDL和原理图实现

PC.v 取地址部分

modulePC(pc_in,load,rst,clk_pc,add,out);

inputrst,clk_pc,add,load;//置零开关、时钟、加1控制输入、置数开关

input[7:

0]pc_in;

outputreg[7:

0]out;

always@(posedgeclk_pc)

begin

   if(rst==0)out=0;

   elseif(load==0)out=pc_in;

   elseif(add==1)out=out+1;//当加1控制有效时,地址加1

end

endmodule

FRQ.v 分频部分

moduleFRQ(clk_in,clk_out);

inputclk_in;

outputregclk_out;

reg[2:

0]l;

always@(posedgeclk_in)

begin

   l=l+1;

   clk_out=l[2];//8分频

end

endmodule

IR.v 取指令部分

moduleIR(in,add,wr,clk_ir,clk_scn,out,sel);

input[15:

0]in;//地址输入

inputwr,clk_ir,clk_scn;//显示开关,显示频率,刷新频率

outputregadd;//加1控制(与PC相连)

outputreg[7:

0]out;//数码管输出

outputreg[2:

0]sel;//数码管3-8译码器输出

reg[3:

0]data;

always@(posedgeclk_scn)

begin

   sel=sel+1;

   if(sel>=4)sel=0;

   case(sel)

   0:

data=in[15:

12];

   1:

data=in[11:

8];

   2:

data=in[7:

4];

   3:

data=in[3:

0];

   endcase

end

always@(posedgeclk_ir)

begin

   if(wr==0)add=1;//每当显示1次,地址加1

   elseadd=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2