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=3'd0,s1=3'd1,s2=3'd2,s3=3'd3,s4=3'd4,s5=3'd5,s6=3'd6;
parameter m1=3'b001,m2=3'b010,m3=3'b100;
reg [1:0] remain;
wire [2:0]temp;
reg [2:0] current_state,next_state;
reg out;
assign temp={d3,d2,d1};
always @(*)
begin
case(current_state)
s0 :begin out=1'b0; remain=2'd0;
case (temp)
m1 : next_state =s1;
m2: next_state =s2;
m3: next_state =s4;
default: next_state=next_state;
endcase
end
s1 :begin out=1'b0; remain=2'd0;
case (temp)
m1 : next_state =s2;
m2: next_state =s3;
m3: next_state =s5;
default: next_state=next_state;
endcase
end
s2 :begin out=1'b0; remain=2'd0;
case (temp)
m1 : next_state =s3;
m2: next_state =s4;
m3: next_state =s6;
default: next_state=next_state;
endcase
end
s3 :begin out=1'b1; remain=2'd0;
case (temp)
m1 : next_state =s1;
m2: next_state =s2;
m3: next_state =s4;
default: next_state=s0;
endcase
end
s4 :begin out=1'b1; remain=2'd1;
case (temp)
m1 : next_state =s1;
m2: next_state =s2;
m3: next_state =s4;
default: next_state=s0;
endcase
end
s5 :begin out=1'b1; remain=2'd2;
case (temp)
m1 : next_state =s1;
m2: next_state =s2;
m3: next_state =s4;
default: next_state=s0;
endcase
end
s6 :begin out=1'b1; remain=2'd3;
case (temp)
m1 : next_state =s1;
m2: next_state =s2;
m3: next_state =s4;
default: next_state=s0;
endcase
end
default: next_state=s0;
endcase
end
always @(posedge clk or negedge rst)
begin
if(!rst)
begin
current_state<=s0;
end
else
begin
current_state<=next_state;
end
end
always @(*)
begin
if(!rst)
begin
out1=1'b0;
out2=2'd0;
end
else
begin
out2=remain;
out1=out;
end
end
//*************code***********//
endmodule
`timescale 1ns/1ns module textbench(); reg clk ,rst,d1,d2,d3; wire out1; wire [1:0] out2; seller1 u0( .clk(clk) , .rst(rst), .d1(d1), .d2(d2) , .d3(d3), .out1(out1), .out2(out2) ); always #5 clk=~clk; initial begin clk=1;rst=0;d1=0;d2=0;d3=0; #5 rst=1; #5 d1=1; #5 d1=0; #15 d2=1; #5 d2=0; #15 d1=1; #5 d1=0; #15 d1=1; #5 d1=0; #5 d3=1; #5 d3=0; #25 d3=1; #5 d3=0; #25 $finish; end endmodule
仿真图像如下:

京公网安备 11010502036488号