一种解题思路

`timescale 1ns/1ns

module s_to_p(
	input 				clk 		,   
	input 				rst_n		,
	input				valid_a		,
	input	 			data_a		,
 
 	output	reg 		ready_a		,
 	output	reg			valid_b		,
	output  reg [5:0] 	data_b
);
    reg [5:0] data_reg0;
    reg [3:0] count;
    always@(posedge clk or negedge rst_n) begin
        if(!rst_n) begin
            ready_a<=0;
            valid_b<=0;
            count<='d0;
            data_b<='d0;
            data_reg0<='d0;
        end
        else if(valid_a) begin
            ready_a<=1;                              //题干要求准备信号始终拉高
            if(count<5) begin                        //输入数据有效时
                count<=count+1;
                data_reg0<={data_a,data_reg0[5:1]};  //移位寄存器,进来的数放高位,这样保证先进的数据始终在低位
                valid_b<=0;
            end
            else if(count==5) begin
                count<='d0;
                valid_b<=1;                          //根据题干的波形,输出数据有效位只需拉高一个时钟周期
                data_b<={data_a,data_reg0[5:1]};     //最后一次数据不用放入寄存器,直接在下一个计数开始时输出即可
            end 
        end
        else begin                                   //这个分支用于判断输出数据无效时该怎么处理
                ready_a<=1;                          
                data_reg0<=data_reg0;                //根据题干的波形,有效数据不会清零,但无效信号下的输入数据不存入寄存器
        end
    end    
    
endmodule