题解 | #自动贩售机1#

自动贩售机1

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

`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***********//

	// 状态是已经投入的钱,激励信号显示一次只会投0.5/1/1.5中的一个

	parameter [2:0] EMPTY = 0;
	parameter [2:0] M0_5  = 1;
	parameter [2:0] M1_0  = 2;
	parameter [2:0] M1_5  = 3;
	parameter [2:0] M2_0  = 4;
	parameter [2:0] M2_5  = 5;
	parameter [2:0] M3_0  = 6;

	reg [2:0] curr_state, next_state;

	// state transfer
	always @(negedge clk, negedge rst) begin
		if(!rst) begin
			curr_state <= EMPTY;
		end
		else begin
			curr_state <= next_state;
		end
	end

	// state switch
	always @(*) begin
		case(curr_state)
			EMPTY: next_state = (d1 & ~d2 & ~d3)? M0_5 :
								(~d1 & d2 & ~d3)? M1_0 :
								(~d1 & ~d2 & d3)? M2_0 : EMPTY;

			M0_5 : next_state = (d1 & ~d2 & ~d3)? M1_0 :
								(~d1 & d2 & ~d3)? M1_5 :
								(~d1 & ~d2 & d3)? M2_5 : 
								(~d1 & ~d2 & ~d3)?M0_5 : EMPTY;

			M1_0 : next_state = (d1 & ~d2 & ~d3)? M1_5 :
								(~d1 & d2 & ~d3)? M2_0 :
								(~d1 & ~d2 & d3)? M3_0 : 
								(~d1 & ~d2 & ~d3)?M1_0 : EMPTY;

			M1_5 : next_state = (d1 & ~d2 & ~d3)? M0_5 :
								(~d1 & d2 & ~d3)? M1_0 :
								(~d1 & ~d2 & d3)? M2_0 : EMPTY;

			M2_0 : next_state = (d1 & ~d2 & ~d3)? M0_5 :
								(~d1 & d2 & ~d3)? M1_0 :
								(~d1 & ~d2 & d3)? M2_0 : EMPTY;

			M2_5 : next_state = (d1 & ~d2 & ~d3)? M0_5 :
								(~d1 & d2 & ~d3)? M1_0 :
								(~d1 & ~d2 & d3)? M2_0 : EMPTY;

			M3_0 : next_state = (d1 & ~d2 & ~d3)? M0_5 :
								(~d1 & d2 & ~d3)? M1_0 :
								(~d1 & ~d2 & d3)? M2_0 : EMPTY;		

		endcase
	end

	// output logic
	always @(posedge clk, negedge rst) begin
		if(!rst) begin
			out1 <= 0;
			out2 <= 0;
		end
		else begin
			if(curr_state == M1_5) begin
				out1 <= 1;
				out2 <= 0;
			end
			else if(curr_state == M2_0) begin
				out1 <= 1;
				out2 <= 2'b01;
			end
			else if(curr_state == M2_5) begin
				out1 <= 1;
				out2 <= 2'b10;
			end
			else if(curr_state == M3_0) begin
				out1 <= 1;
				out2 <= 2'b11;
			end
			else begin
				out1 <= 0;
				out2 <= 0;
			end
		end
	end

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

全部评论

相关推荐

11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务