level 1
:有限状态机应用题:设计一个儿童玩具售卖机,每个玩具5角钱,可以接受1角,2角,5角的硬币,画出儿童玩具售卖机的状态转移图,写出VERILOG HDL语言代码,采用适当的EDA软件仿真验证。
2016年12月13日 04点12分
1
level 2
代码部分:module sh_2(b,wh,q20,q10,q5,q1,
bp
,zl,clk,rstn,sq);
input[4:0] b;
input[4:0] wh ;
input clk,rstn,q20,q10,q5,q1,zl,bp;
output sq;
wire[4:0] wh ;
wire clk,rstn,q20,q10,q5,q1,zl,bp;
reg sq;
wire[4:0] b;
reg[1:0] pss; reg[3:0] cnt; reg[5:0] sum;reg buy; //zhongjianbianliang
wire to;
always@(posedge clk or negedge rstn)
if(~rstn) buy<=0;
else if(b==wh) buy<=0;
else
case(b)
5'b00001: buy=1'd1;
5'b00010: buy=1'd3;
5'b00100: buy=1'd5;
5'b01000: buy=1'd7;
5'b10000: buy=1'd9;
endcase
always@(posedge clk or negedge rstn)
if(~rstn) pss<=0;
else if (buy)
case (pss)
2'b00: pss<=2'b01;
2'b01: if(sum>=buy) pss<=2'b11;else if(zl)pss<=2'b10;
2'b10: if(sum==0) pss<=2'b00; else pss<=2'b10;
2'b11: if(bp) pss<=2'b10; else if(zl) pss<=2'b10;
endcase
always@(posedge clk or negedge rstn)
if(~rstn)
sum<=0;
else
case(pss)
2'b10:if(to|zl)
if(sum>=1'd5)
sum<=sum-1'd5;
else if(sum<=5&sum>0)
sum<=sum-1'd1;
2'b11:if(bp)
sum<=sum-buy;
2'b01:if(q20)
sum<=sum+2'd20;
else if(q10)
sum<=sum+2'd10;
else if(q5)
sum<=sum+1'd5;
else if(q1)
sum<=sum+1'd1;
2'b00:sum<=0;
endcase
always@(posedge clk or negedge rstn)
if(~rstn)
cnt<=0;
else if (cnt>=7)
cnt<=0;
else cnt<=cnt+1'b1;
assign to=(cnt==7);
always@(posedge clk or negedge rstn)
if(~rstn) sq<=0;
else case(pss)
2'b11: if(bp)
sq<=1;
default sq<=0;
endcase
endmodule
仿真激励:
`timescale 1ns/1ns
module sh_2_tb();
reg[4:0]b;
reg[4:0]wh;
reg clk,rstn,q20,q10,q5,q1,zl,bp;
wire sq;
initial begin clk=0;rstn=0;
#20 rstn=1;
end
always #20 clk=~clk;
initial begin b=5'b00000;
#30 b=5'b10000;#
220 b=5'b01000;
#160 b=5'b00100; #
160 b=5'b00010; #160 b=5'b00001;
end//maihuo
initial begin wh=5'b00000; #30 wh=5'b00000;
end//wuhuo
initial begin q20=0;
#130 q20=1;#
20 q20=0;
end//toubi20
initial begin q10=0;
#290 q10=1;#
20 q10=0;
end//toubi10
initial begin q5=0;
#450 q5=1;#
20 q5=0;
#160 q5=1;#
20 q5=0;
end//toubi5
initial begin q1=0;#
2017年01月11日 07点01分
3