实验报告课程名称:HDL语言指导老师:成绩:_________________实验名称:实验六实验类型:上机实验同组学生姓名:一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得一、实验目的通过对不同方式实现功能的代码的编写来熟悉hdl语言。二、实验内容和原理模拟实现一个饮料售卖机:每听饮料的售价是2.5元。自动售货机只接收1元或5角的硬币。自动售货机具备找零的功能(消费者最塞入3元,找零5角)。模块框图:modulebeverage(inputclk_i,inputrst_i,inputone_yuan_i,inputfive_jiao_i,outputregbeverage_o,outputregfive_jiao_o);//addimplementationcodehere专业:电仪姓名:学号:日期:地点:周亦卿大楼202装订线endmodule提供输入:clk_i时钟信号,100MHz;rst_i复位信号,高电平复位;one_yuan_i高有效,表示投入一元硬币;five_jiao_i高有效,表示投入五角硬币;要求输出:beverage_o表示饮料输出;five_jiao_o表示找零5角硬币。画出状态跳转图tb_top.vmoduletb_top;endmoduletb_beveragemoduletb_beverage(outputregclk_o,outputregrst_o,outputregone_yuan_o,outputregfive_jiao_o,inputbeverage_i,inputfive_jiao_i);//addstimulationcodehereendmoduletask建议仿真时使用task产生输入信号,不要用延时的方式产生激励,否则结果不准,task参考实验二。三、主要仪器设备计算机,Modelsim软件四、操作方法和实验步骤1.新建工程文件;2.新建.v文件;3.编写代码;4.运行测试结果,对可能出现的结果进行调试;五、实验程序//tb_top.vmoduletb_top;wireclk;wirerst;wireone_yuan;wirefive_jiaoin;wirebeverage;wirefive_jiaoout;tb_beverageinstance_tb_beverage(.clk_o(clk),.rst_o(rst),.one_yuan_o(one_yuan),.five_jiao_o(five_jiaoin),.beverage_i(beverage),.five_jiao_i(five_jiaoout));beverageinstance_beverage(.clk_i(clk),.rst_i(rst),.one_yuan_i(one_yuan),.five_jiao_i(five_jiaoin),.beverage_o(beverage),.five_jiao_o(five_jiaoout));endmodule//tb_beverage.vmoduletb_beverage(outputregclk_o,outputregrst_o,outputregone_yuan_o,outputregfive_jiao_o,inputbeverage_i,inputfive_jiao_i);initialbeginclk_o=1'b0;rst_o=1'b1;one_yuan_o=1'b0;five_jiao_o=1'b0;#100;rst_o=1'b0;putin(1,0);putin(0,1);putin(0,1);putin(0,1);putin(0,1);putin(1,0);putin(1,0);putin(1,0);putin(1,0);putin(1,0);putin(0,1);putin(0,1);putin(1,0);putin(0,1);putin(0,1);putin(0,1);putin(1,0);putin(1,0);putin(1,0);endalways#5clk_o=~clk_o;taskputin(inputa_i,inputb_i);begin@(posedgeclk_o);one_yuan_o=a_i;five_jiao_o=b_i;@(posedgeclk_o);one_yuan_o=0;five_jiao_o=0;endendtask//addstimulationcodehereendmoduleinputrst_i,inputone_yuan_i,inputfive_jiao_i,outputregbeverage_o,outputregfive_jiao_o);reg[4:0]money;always@(posedgeclk_i)beginif(rst_i)beginbeverage_o=0;five_jiao_o=0;money=0;endelseif(one_yuan_i==1)beginmoney=money+10;if(money==25)beginbeverage_o=1;five_jiao_o=0;#9beverage_o=0;money=0;endelseif(money==30)beginbeverage_o=1;five_jiao_o=1;#9beverage_o=0;five_jiao_o=0;money=0;endelsebeginbeverage_o=0;five_jiao_o=0;money=money;endendelseif(five_jiao_i==1)money=money+5;if(money==25)beginbeverage_o=1;five_jiao_o=0;#9beverage_o=0;money=0;endelsebeginbeverage_o=0;five_jiao_o=0;money=money;endend//addimplementationcodehereEndmodule六、实验结果与分析实验结果:第一次输入一个一元三个五毛输出一个beverage;第二次同第一次;第三次输入三个一元输出一个beverage和一个五毛;第四次同第一次;第五次输入两个五毛和两个一元,输出一个beverage和一个五毛。可以由此验证实验结果准确。七、讨论、心得这次试验比较简单,主要是开始的逻辑想想清楚就好了。当然其中也遇到一些问题,开始仿真时得到的波形都是零。后面发现是判断语句出现了错误。后面遇到一个问题是输出的一块和五毛的下降沿和输入的一块和五毛的上升沿重叠导致的判断不准确。我将输出的方波提前置零就解决了。这是HDL语言的最后一次实验,通过这门实验课我们对HDL语言有了更深入的理解,并且助教老师毛博士也很热心。总之是学到了很多知识。