文档介绍:西北工业大学《SOC设计实践》实验报告学院:软件与微电子学院学号:姓名:专业:时间:实验地点:实验一、编写一个自动售货机VerilogHDL模型一、 题目描述编写一个自动售货机VerilogHDL模型,(1)售货机出售15分的饮料。(2)投币器只接受5分和1角硬币。(3)必须提供适当数目的零钱,投币器不找钱。二、 实验内容定义状态,并画岀状态转换图,解释设计思路;答:我在设计本题所要求的售货机时使用了4个状态,分别为start(OO),stl(Ol),st2(10),st3(11)其中在第三个状态是输出out为1,其他的三个状态输出为0。状态转换图如下所示:其中状态机在跳到st3时,由st3直接跳的start状态这使得out只在投币后的一个时钟周期处于高电平而不会长期处于高电平的状态,这与现实的只输出一瓶饮料的结果不相符。使用Verilog语言完成设计;解:自动售货机的verilog代码如下所示:moduleAUTOSEL(five’ten,clkjst,out);inputtenJive;inputelk;inputrst;outputout;wireout;reg[l:0]state;parameterst0=2,b00,stl=2*b01?st2二2'blO,st3=2*bll;always@(posedgeelkornegedgerst)beginif(rst==O)beginstate<=stO;endelsebegincase(state)stO:beginif(five==l)beginstate<=stl;endelsebeginif(ten==l)beginstate<=st2;endelsebeginstate<=stO;endendendstl:beginif(five==l)beginstate<=st2;endelsebeginif(ten==l)beginstate<=st3;endelsebeginstate<=stl;endendendst2:beginif(five==l)beginstate<=st3;endelsebeginif(ten==l)beginstate<=st3;endelsebeginstate<=st2;endendendst3:beginstate<=stO;enddefault:beginstate<=stO;endendcaseendendassignout=(state==st3)?l:0;endmodule编写testbench,并使用SynopsysVCS进行仿真;答:testbench测试代码如下:moduletestbench;regclk,rst_n;regfive_cents,ten_cents;wiresodaout;always#1clk=~clk;initialbeginclk=O;five_cents二0;ten_cents=O;rstn=l;#10rstn=0;#10rstn=l;//I三个五分的#10five_cents=l;#2fivecents=O;#10five_cents=l;#2fivecents=0;#10fivecents=l;#2five_cents=0;//2—个五分,一个十分#20fivecents=l;#2five_cents二0;#10ten_cents=l;#2tencents=0;IB两个十分#20ten_cents=l;#2tencents=0;#10ten_cents=l;#2tencents=0;/理一个十分,一个五分#20ten_cents=l;#2tencents=0;#10five_cents=l;#2fivecents=0;//5两个五分,一个十分#20five_cents=l;#2five_cents二0;#10five_cents=l;#2fivecents=0;#10tencents=l;#2tencents=0;#10$stop;endAUTOSELAUTOSEL(five_cents,ten_cents,clk』st_6Soda_out);Endmodule测试波形图如下所示:(MOUpAutosel-vcs仿真波形最下边一行代表的是投5分,倒数第二行代表的是复位信号,第三行是时钟信号,第二行是投10分,由图可知,在投3个5分,1个5分、1个10分,两个10分,1个10分、1个5分,2个5分、1个10分都可使输出信号为1,满足题意要求。4)使用SynopsysDC进行综合。答::##################Constrain#######################reset_designcreate_clock・[get_