题解 | #自动贩售机1#

自动贩售机1

https://www.nowcoder.com/practice/dcf59e6c51f6489093495acb1bc34dd8

注意:

1、注意要使用状态机,确认有哪几个状态;

2、注意几个状态相同时next_stata写法;

3、注意输出out1和out2改变的时刻。

4、注意下面的默认状态,既没有d1,d2,d3输入时,next_stata的取值,不能是S0。

S0: next_stata <= d1? S0_5: d2? S1: d3? S2: next_stata;

`timescale 1ns/1ns
module seller1(
	input wire clk  ,
	input wire rst  ,
	input wire d1 ,
	input wire d2 ,
	input wire d3 ,
	
	output reg out1,
	output reg [1:0]out2
);
//*************code***********//
	
	parameter S0=0, S0_5=1, S1=2, S1_5=3, S2=4, S2_5=5, S3=6;
	reg [2:0] cur_stata, next_stata;
	
	always@(posedge clk or negedge rst)begin
		if(~rst)begin
			cur_stata <= S0;
		end
		else 
			cur_stata <= next_stata;
	end
	always@(*)
		case(cur_stata)
			S0: next_stata <= d1? S0_5: d2? S1: d3? S2: next_stata;
			S0_5: next_stata <= d1? S1: d2? S1_5: d3? S2_5: next_stata;
			S1: next_stata <= d1? S1_5: d2? S2: d3? S3: next_stata;
			S1_5,
			S2,
			S2_5,
			S3: next_stata <= S0;
			default: next_stata <= S0;
		endcase
			
	always@(*)begin
		if(~rst)begin
			out1 <= 0;
			out2 <= 0;
		end
		else begin
			case(cur_stata)
				S1_5: begin out1 <= 1; out2 <= 0;end
				S2: begin out1 <= 1; out2 <= 1;end
				S2_5: begin out1 <= 1; out2 <= 2;end
				S3: begin out1 <= 1; out2 <= 3;end
				default: begin out1 <= 0; out2 <= 0;end
			endcase
		end
	end

	
//*************code***********//
endmodule

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务