`timescale 1ns/1ns

module valid_ready(
	input 				clk 		,   
	input 				rst_n		,
	input		[7:0]	data_in		,
	input				valid_a		,
	input	 			ready_b		,
 
 	output		 		ready_a		,
 	output	reg			valid_b		,
	output  reg [9:0] 	data_out
);
wire ready_a;
 wire [7:0]bu;
 wire [7:0]fubu;
 assign fubu={data_in[7],~data_in[6:0]+1'b1};
 assign bu=data_in[7]?fubu: data_in;
 wire [9:0] kuo;
 assign kuo={bu[7],bu[7],bu[7],bu[7],bu};
 reg [2:0]cnt;
always@(posedge clk or negedge rst_n)begin 
	if(!rst_n)
	cnt<=0;
	else if(valid_b&ready_b)
	 cnt<=1;
	else if(valid_a&ready_a) //输入数据有效且本模块可以接收数据时,计数
	cnt<=cnt+1;
end

always@(posedge clk or negedge rst_n)
begin if(!rst_n)
begin  
      data_out<=0; 
      valid_b<=0;
end
else if(valid_a)
  if(ready_a) 
       if(ready_b&valid_b)
	    begin data_out<=kuo;
		valid_b<=0; end 
   else 
  begin  data_out<=data_out+kuo; 
   if(cnt==3)
	valid_b<=1;
	else valid_b<=0;
  end
  else begin data_out<=data_out;
             valid_b<=1; end
end
assign ready_a=(valid_b&(!ready_b))? 0:1;

endmodule