
用verilog编写16位加法器乘法器自动售货机.docx
12页用verilog编写16位加法器乘法器自动售货机Verilog课程实验报告实验1十六位超行进位加法器系统设计要求用超行进位加法器实现一个有符号位的16位加法器,而且考虑溢出的状况详尽设计依据超行进位加法器的原理Co=G|(P&Ci)S=P^Ci设计出4位加法器的子模块,而后经过4个4位加法器的相连来获得十六位的加法器原理以下列图所示溢出用flag=0表示P0G1P0G1P2G2P3G3Ci,0Co,0Co,1Co,2Co,3FAFAFAFAP0G1P0G1P2G2P3G3BP=PoP1P2P3Ci,0Co,0Co,1Co,2FAFAFAFArexCo,3elpitluMIdea:If(P0andP1andP2andP3=1)thenCo3=C0,else“killor”“generate”.程序"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;wireflaginitial;当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;initialbeginclk=0;forever#50clk=~clk;endinitialbeginrst_n=0;en=0;a=16'h1231;b_in=16'ha231;#100beginrst_n=1;en=0;a=16'h2137;b_in=16'h0142;end#100beginrst_n=1;en=1;a=16'h0234;b_in=16'h12a7;end#100beginrst_n=1;en=1;a=16'h0012;b_in=16'ha261;end#100beginrst_n=0;en=1;a=16'h1112;b_in=16'h0879;end#10000$stop;endmuxmux1(.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]123456789101112Price_all1510502201001151155560Sell[n]1234567price151015203050程序"moduleautosell_test;regclk,rest;reg[3:0]money;reg[2:0]sell;wire[7:0]charge;wire[2:0]goods;wiremoney_enough;initialbeginclk=0;forever#25clk=~clk;endinitialbeginlk(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经过功能考证,所设计的自动售货机实现了所需的要求。












