`timescale 1ns/1ns module width_24to128( input clk , input rst_n , input valid_in , input [23:0] data_in , output reg valid_out , output reg [127:0] data_out ); reg [4:0]cnt; always@(posedge clk or negedge rst_n) begin if(!rst_n) cnt<=0; else if(valid_in) begin if(cnt==15) begin cnt<=0; end else begin cnt<=cnt+1; end end end reg [127:0] buff; always@(posedge clk or negedge rst_n) begin if(!rst_n) begin buff<=0; data_out<=0; end else if(valid_in)begin if(cnt==5) begin buff[127:112]<=data_in[15:0]; data_out<={buff[127:8],data_in[23:16]}; end if(cnt==10) begin buff[127:120]<=data_in[7:0]; data_out<={buff[127:16],data_in[23:8]}; end if(cnt==15) begin data_out<={buff[127:24],data_in}; end if(cnt==0) buff[127:104]<=data_in; if(cnt==1) buff[103:80]<=data_in; if(cnt==2) buff[79:56]<=data_in; if(cnt==3) buff[55:32]<=data_in; if(cnt==4) buff[31:8]<=data_in; if(cnt==6) buff[111:88]<=data_in; if(cnt==7) buff[87:64]<=data_in; if(cnt==8) buff[63:40]<=data_in; if(cnt==9) buff[39:16]<=data_in; if(cnt==11) buff[119:96]<=data_in; if(cnt==12) buff[95:72]<=data_in; if(cnt==13) buff[71:48]<=data_in; if(cnt==14) buff[47:24]<=data_in; end end always@(posedge clk or negedge rst_n) begin if(!rst_n) valid_out<=0; else if(valid_in&((cnt==5)|(cnt==10)|(cnt==15))) valid_out<=1; else valid_out<=0; end endmodule