题解 | #自动贩售机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