用verilog编写16位加法器乘法器自动售货机.docx

上传人:b****2 文档编号:2330655 上传时间:2022-10-28 格式:DOCX 页数:9 大小:112.16KB
下载 相关 举报
用verilog编写16位加法器乘法器自动售货机.docx_第1页
第1页 / 共9页
用verilog编写16位加法器乘法器自动售货机.docx_第2页
第2页 / 共9页
用verilog编写16位加法器乘法器自动售货机.docx_第3页
第3页 / 共9页
用verilog编写16位加法器乘法器自动售货机.docx_第4页
第4页 / 共9页
用verilog编写16位加法器乘法器自动售货机.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

用verilog编写16位加法器乘法器自动售货机.docx

《用verilog编写16位加法器乘法器自动售货机.docx》由会员分享,可在线阅读,更多相关《用verilog编写16位加法器乘法器自动售货机.docx(9页珍藏版)》请在冰豆网上搜索。

用verilog编写16位加法器乘法器自动售货机.docx

用verilog编写16位加法器乘法器自动售货机

Verilog课程实验报告

实验1十六位超前进位加法器

系统设计要求

用超前进位加法器实现一个有符号位的16位加法器,并且考虑溢出的情况

详细设计

根据超前进位加法器的原理Co=G|(P&Ci)S=P^Ci设计出4位加法器的子模块,然后通过4个4位加法器的相连来得到十六位的加法器。

原理如下图所示。

溢出用flag=0表示。

程序

"

modulesixteenaddertest;

wire[15:

0]s;

reg[15:

0]a,b;

wireflag;

parametertimes=5;

a=-10743,,b==11372没有溢出,sto=0.通过这个实验验证了s=a+b,实现了带符号位的加法器。

实验二十六位加减法器

系统设计要求

将加法器和减法器结合到一起,实现带符号位的16位加减法运算,并考虑溢出。

详细设计

在16位加法器的基础上,加上一条判断语句,如果出现减的操作,被减数取反加一,这样就实现了减的运算,用add_sub来表示加减运算符,当add_sub=0时候实现的是减运算,add_sub=1的时候实现的是加运算。

程序

"

moduleadder_sub_test;

wire[15:

0]s;

reg[15:

0]a,b;

regadd_sub;

wireflag;

initial当a=-4659b=12817add_sub=0,减操作,输出s=-17476,无溢出,flag=0.

当a=562b=-24223add_sub=1,加操作,输出s=-23661,无溢出,flag=0.

通过以上的结果分析,此程序实现了带符号位的加减法的功能。

实验三十六位的乘法器

11系统设计要求

实现16*16位的无符号位的乘法器

详细设计

乘法器的硬件电路原理如下

定义16个寄存器,用来存储一行乘操作产生的数据,最后的结果为所有16行相加。

程序

";

modulemult_test;

reg[15:

0]a,b_in;

wirerdy;

wire[31:

0]mux_out;

regclk,rst_n,en;

initial

begin

clk=0;

forever#50clk=~clk;

end

initial

begin

rst_n=0;

en=0;

a=16'h1231;

b_in=16'ha231;

#100

begin

rst_n=1;

en=0;

a=16'h2137;

b_in=16'h0142;

end

#100

begin

rst_n=1;

en=1;

a=16'h0234;

b_in=16'h12a7;

end

#100

begin

rst_n=1;

en=1;

a=16'h0012;

b_in=16'ha261;

end

#100

begin

rst_n=0;

en=1;

a=16'h1112;

b_in=16'h0879;

end

#10000$stop;

end

muxmux1(.clk(clk),.rst_n(rst_n),.en(en),.a(a),.b_in(b_in),.rdy(rdy),.mux_out(mux_out));

endmodule

仿真波形

通过仿真产生的波形如下所示:

当rst_n=0处于复位状态输出mux_out=0,当rst=1并且使能端en=1时候,乘法器工作。

当a=564,b=4775,mux_out=2693100,sto=1,实现了乘的操作,验证了电路实现乘法功能。

实验四自动售货机设计

系统设计要求

自动售货机投入的金钱有50元,10元,5元,1元四种货币。

可供选择的商品有7种类型。

投入金钱后选择要买的商品,当投入的钱足够时,显示money_enough。

并显示出要买的商品,并且找零,当投入的钱不够的时候,通过复位成初始态。

具体的要求如下图所示:

详细设计

初始状态下,设投入的money,找零charge,money_enough都为0。

投入的四种货币总共有12种情况,用price_all表示。

设商品goods有7种,其价格为1,5,10,15,20,30,50,用price表示。

Rest为低电平时候,一切初始。

在rest为高电平的时候。

选择商品,并且投币,当price-all小于price时候,也就是投入的金钱不够,显示money_enough为0,回初始状态。

当pirce_all大于price时候,输出选择的商品goods。

并且找零。

其状态转换图如下:

Money[n],sell[n]对应的金钱和价格如下表所示:

Money[n]

1

2

3

4

5

6

7

8

9

10

11

12

Price_all

1

5

10

50

2

20

100

11

51

15

55

60

Sell[n]

1

2

3

4

5

6

7

price

1

5

10

15

20

30

50

程序

"

moduleautosell_test;

regclk,rest;

reg[3:

0]money;

reg[2:

0]sell;

wire[7:

0]charge;

wire[2:

0]goods;

wiremoney_enough;

initial

begin

clk=0;

forever#25clk=~clk;

end

initial

beginlk(clk),.sell(sell),.rest(rest),.money(money),.charge(charge),.goods(goods),.money_enough(money_enough));

endmodule

仿真结果

用进行仿真得到的仿真图形如下:

如图所示,在money类型为9,选择商品类型为6,对应的总投入的面值pirce-all=51,商品6的价格为price=30,显示money_enough为高电平,找零charge为21。

在money为5,商品类型为7时候,Price_all=2,price=50.购买商品投入的钱不够,在经过一个clk的money_enough为低电平,在下一个clk上升沿输入商品goods以及charge都是0。

经过功能验证,所设计的自动售货机实现了所需的要求。

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

当前位置:首页 > 人文社科 > 法律资料

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

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