`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***********//
reg [3:0] cnt1;
reg [3:0] cnt2;
wire flag1;
wire flag2;
wire [3:0]cnt;
assign cnt=cnt1+cnt2;
assign flag1=(!sel)&(cnt>=3)&(cnt1<5);
assign flag2=sel&(cnt>=5);
always@(posedge clk or negedge rst)begin
if(!rst)
begin cnt1<=0;
cnt2<=0;
end
else if(flag1|flag2)
begin cnt1<=0;
cnt2<=0;
end
else if(d1) cnt1<=cnt1+1;
else if(d2) cnt2<=cnt2+2;
end
always@(posedge clk or negedge rst)begin
if(!rst)
begin out1<=0;
out2<=0;
out3<=0;
end
else if(sel)
begin if(flag2)
begin
out1<=0;
out2<=1;
out3<=cnt1+cnt2-5;
end
else
begin out1<=0;
out2<=0;
out3<=0;
end
end
else if(flag1)
begin
out1<=1;
out2<=0;
out3<=cnt1+cnt2-3;
end
else
begin out1<=0;
out2<=0;
out3<=0;
end
end
//*************code***********//
endmodule