题解 | #自动贩售机2#

自动贩售机2

https://www.nowcoder.com/practice/298dec1c3dce45c881f3e53e02558828

`timescale 1ns/1ns

module seller2(
	input wire clk  ,
	input wire rst  ,
	input wire d1 ,
	input wire d2 ,
	input wire sel ,
	
	output reg out1,
	output reg out2,
	output reg out3
);
//*************code***********//
parameter S0 = 3'd0;
parameter S0_5 = 3'd1;
parameter S1 = 3'd2;
parameter S1_5 = 3'd3;
parameter S2 = 3'd4;
parameter S2_5 = 3'd5;
parameter S3 = 3'd6;


reg [2:0] c_state;
reg [2:0] n_state;
always @(posedge clk or negedge rst) begin
	if(!rst) begin
		c_state <= 0;
	end
	else begin
		c_state <= n_state;
	end
end

always@(*) begin
	if(!rst) begin
		n_state <= 0;
	end
	else begin
		 case(c_state)
            S0     : n_state = d1? S0_5:
                              d2? S1:
                              n_state;
            S0_5   : n_state = d1? S1:
                              d2? S1_5:
                              n_state;
            S1     : n_state = d1? S1_5:
                              d2? S2:
                              n_state;
            S1_5   : n_state = ~sel? S0:
                              d1? S2:
                              d2? S2_5:
                              n_state;
            S2     : n_state = ~sel? S0:
                              d1? S2_5:
                              d2? S3:
                              n_state;
            default: n_state = S0;
        endcase
	end
end

always@(*) begin
	if(~rst) begin
		{out1, out2, out3} = 3'b000;
	end
	else begin
		case(c_state)
			S0, S0_5, S1: {out1, out2, out3} = 0;
			S1_5        : {out1, out2, out3} = ~sel? 3'b100: 3'b000;
			S2          : {out1, out2, out3} = ~sel? 3'b101: 3'b000;
			S2_5        : {out1, out2, out3} = ~sel? 3'b101: 3'b010;
			S3          : {out1, out2, out3} = ~sel? 3'b101: 3'b011;
			default     : {out1, out2, out3} = 3'b000;
		endcase
	end
end





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

全部评论

相关推荐

吴offer选手:我卡在笔试才是最好笑的,甚至没给我发过笔试链接
投递哔哩哔哩等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务