计组4位乘法器实验报告Word文件下载.docx

上传人:b****5 文档编号:19074481 上传时间:2023-01-03 格式:DOCX 页数:14 大小:266.60KB
下载 相关 举报
计组4位乘法器实验报告Word文件下载.docx_第1页
第1页 / 共14页
计组4位乘法器实验报告Word文件下载.docx_第2页
第2页 / 共14页
计组4位乘法器实验报告Word文件下载.docx_第3页
第3页 / 共14页
计组4位乘法器实验报告Word文件下载.docx_第4页
第4页 / 共14页
计组4位乘法器实验报告Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

计组4位乘法器实验报告Word文件下载.docx

《计组4位乘法器实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《计组4位乘法器实验报告Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

计组4位乘法器实验报告Word文件下载.docx

1.需要设计按钮和相应开关,来增加乘数和被乘数

2.每按一下M13,给一个时钟,数码管的左边两位显示每一步的乘积

3.4步计算出最终结果后,LED灯亮,按RESET重新开始计算

三、主要仪器设备

1.Spartan-III开发板1套

2.装有ISE的PC机1台

四、操作方法与实验步骤

实验步骤:

1.创建新的工程和新的源文件

2.编写verilog代码(top模块、display模块、乘法运算模块、去抖动模块以及UCF引脚)

3.进行编译

4.进行Debug工作,通过编译。

5..生成FPGA代码,下载到实验板上并调试,看是否与实现了预期功能

操作方法:

TOP:

modulealu_top(clk,switch,o_seg,o_sel);

inputwireclk;

inputwire[4:

0]switch;

outputwire[7:

0]o_seg;

//只需七段显示数字,不用小数点

outputwire[3:

0]o_sel;

//4个数码管的位选

wire[15:

0]disp_num;

reg[15:

0]i_r,i_s;

wire[15:

0]disp_code;

wireo_zf;

//zerodetector

initial

begin

i_r<

=16'

h1122;

//0x1122

i_s<

h3344;

//0x3344

end

aluM1(i_r,i_s,switch[4:

2],o_zf,disp_code);

displayM3(clk,disp_num,o_seg,o_sel);

assigndisp_num=switch[0]?

disp_code:

(switch[1]?

i_s:

i_r);

endmodule

ALU:

modulealu(i_r,i_s,switch,o_zf,disp_code);

input[15:

input[2:

outputrego_zf;

//zerodetector

outputreg[15:

always@(switch[2:

0])

begin

case(switch)

3'

b000:

disp_code<

=i_r&

i_s;

b001:

=i_r|i_s;

b010:

=i_r+i_s;

b110:

=i_r-i_s;

b111:

=i_r<

i_s?

1:

0;

endcase

if(disp_code==16'

b0)

o_zf<

=1;

end

DISPLAY:

moduledisplay(clk,disp_num,o_seg,o_sel);

inputwire[15:

//显示的数据

outputreg[7:

//七段,不需要小数点

outputreg[3:

//4个数码管的位选

reg[3:

0]code=4'

b0;

0]count=15'

always@(posedgeclk)

case(count[15:

14])

2'

b00:

begin

o_sel<

=4'

b1110;

code<

=disp_num[3:

0];

end

2'

b01:

begin

o_sel<

b1101;

=disp_num[7:

4];

b10:

o_sel<

b1011;

=disp_num[11:

8];

b11:

b0111;

=disp_num[15:

12];

endcase

case(code)

4'

b0000:

o_seg<

=8'

b11000000;

b0001:

b11111001;

b0010:

b10100100;

b0011:

b10110000;

b0100:

b10011001;

b0101:

b10010010;

b0110:

b10000010;

b0111:

b11111000;

b1000:

b10000000;

b1001:

b10010000;

b1010:

b10001000;

b1011:

b10000011;

b1100:

b11000110;

b1101:

b10100001;

b1110:

b10000110;

b1111:

b10001110;

default:

count<

=count+1;

UCF:

Net“clk”loc=”T9”;

Net“o_seg[0]”loc=”E14”;

Net“o_seg[1]”loc=”G13”;

Net“o_seg[2]”loc=”N15”;

Net“o_seg[3]”loc=”P15”;

Net“o_seg[4]”loc=”R16”;

Net“o_seg[5]”loc=”F13”;

Net“o_seg[6]”loc=”N16”;

Net“o_seg[7]”loc=”P16”;

Net“o_sel[0]”loc=”D14”;

Net“o_sel[1]”loc=”G14”;

Net“o_sel[2]”loc=”F14”;

Net“o_sel[3]”loc=”E13”;

Net“switch[0]”loc=”M10”;

Net“switch[1]”loc=”F3”;

Net“switch[2]”loc=”G4”;

Net“switch[3]”loc=”E3”;

Net“switch[4]”loc=”F4”;

 

2.ALU控制器的实现:

•输入用2+6=8个拨动开关

•ALUop控制模式:

2个拨动开关

•功能域Funct控制模式:

6个拨动开关

•输出用3个LED显示

TOP:

modulealuc_top(clk,switch,o_seg,o_sel);

inputwire[7:

wire[2:

0]alu;

alucM1(switch[7:

2],alu);

aluM2(i_r,i_s,alu,disp_code);

displayM3(clk,disp_num,o_seg,o_sel);

i_r:

i_s);

modulealu(i_r,i_s,alu,disp_code);

case(alu)

ALUC:

modulealuc(inputwire[7:

2]switch,outputreg[2:

0]alu);

always@(switch)

if(switch[2]==0&

&

switch[3]==0)

alu=3’b010;

elseif(switch[2]==0&

switch[3]==1)

alu=3’b110;

elseif(switch[2]==1&

switch[4]==0&

switch[5]==0&

switch[6]==0&

switch[7]==0)

else

if(switch[2]==1&

switch[6]==1&

else

if(switch[2]==1&

switch[5]==1&

switch[6]=0&

alu=3’b000;

switch[7]==1)

alu=3’b001;

switch[4]==1&

switch[6]=1&

alu=3’b111;

end

Net“switch[5]”loc=”G5”;

Net“switch[6]”loc=”E4”;

Net“switch[7]”loc=”H4”;

五、实验结果与分析

程序运行成功后,将代码下载到实验板spartan3上验证。

1.ALU的实现:

1)拨动SWITCH[1:

0]=00,显示操作数A=1122,SWITCH[1:

0]=01,显示操作数B=3344.

2)拨动switch[0]=1,将显示运算结果如下:

六、讨论、心得

这次实验,我做好好久,中间一直出错。

现在反思,关键可能是因为我对乘法器的原理掌握不够和对verilog语言的不熟练。

在以后的学习中,一定要注意课本知识和实验应用的结合。

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

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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1