`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 [3:0] cnt;
always @ (posedge clk or negedge rst_n)
begin
if( ~rst_n ) begin
cnt <= 4'd0;
end
else begin
if( valid_in ) begin
cnt <= cnt + 4'd1;
end
end
end
reg [15:0] data_reg;
reg [127:0] data_out_r;
always @ (posedge clk or negedge rst_n)
begin
if( ~rst_n ) begin
data_out <= 128'b0;
valid_out <= 1'b0;
data_out_r <= 128'b0;
end
else begin
if(valid_in) begin
case(cnt)
4'd0 : begin
data_out_r[127:104] <= data_in;
valid_out <= 1'b0;
end
4'd1 : begin
data_out_r[103:80] <= data_in;
valid_out <= 1'b0;
end
4'd2 : begin
data_out_r[79:56] <= data_in;
valid_out <= 1'b0;
end
4'd3 : begin
data_out_r[55:32] <= data_in;
valid_out <= 1'b0;
end
4'd4 : begin
data_out_r[31:8] <= data_in;
valid_out <= 1'b0;
end
4'd5 : begin
data_out <= {data_out_r[127:8], data_in[23:16]}; //这段是什么意思
data_out_r[127:112] <= data_in[15:0];
valid_out <= 1'b1;
end
4'd6 : begin
data_out_r[111:88] <= data_in[23:0];
valid_out <= 1'b0;
end
4'd7 : begin
data_out_r[87:64] <= data_in[23:0];
valid_out <= 1'b0;
end
4'd8 : begin
data_out_r[63:40] <= data_in[23:0];
valid_out <= 1'b0;
end
4'd9 : begin
data_out_r[39:16] <= data_in[23:0];
valid_out <= 1'b0;
end
4'd10 : begin
data_out <= {data_out_r[127:16], data_in[23:8]};
data_out_r[127:120] <= data_in[7:0];
valid_out <= 1'b1;
end
4'd11 : begin
data_out_r[119:96] <= data_in[23:0];
valid_out <= 1'b0;
end
4'd12 : begin
data_out_r[95:72] <= data_in[23:0];
valid_out <= 1'b0;
end
4'd13 : begin
data_out_r[71:48] <= data_in[23:0];
valid_out <= 1'b0;
end
4'd14 : begin
data_out_r[47:24] <= data_in[23:0];
valid_out <= 1'b0;
end
4'd15 : begin
data_out_r[23:0] <= data_in[23:0];
data_out <= {data_out_r[127:24], data_in[23:0]};
valid_out <= 1'b1;
end
endcase
end
else begin
valid_out <= 1'b0;
end
end
end
endmodule