题解 | #非整数倍数据位宽转换24to128#
非整数倍数据位宽转换24to128
https://www.nowcoder.com/practice/6312169e30a645bba5d832c7313c64cc
`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]count_0_5;
reg [127:0] data_out1;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
count_0_5<=0;
else begin if(count_0_5==15&&valid_in==1)
count_0_5<=0;
if(valid_in==1)
count_0_5<=count_0_5+1;
end
//******************************
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
valid_out<=0;
else if(count_0_5==5||count_0_5==10||count_0_5==15)
valid_out<=1;
else
valid_out<=0;
end
reg [127:0]data_out2;
always@(posedge clk or negedge rst_n)
if(!rst_n)begin
data_out1<=0;
data_out<=0;
data_out2<=0;
end
else begin if(count_0_5==5&&valid_in==1)begin
data_out<={data_out2[119:0],data_in[23:16]};
data_out1<={data_out2[103:0],data_in};end else
if(count_0_5==10&&valid_in==1)begin
data_out<={data_out2[111:0],data_in[23:8]};
data_out1<={data_out2[103:0],data_in};end else
if(count_0_5==15&&valid_in==1)begin
data_out<={data_out2[103:0],data_in};end else
if(count_0_5==6&&valid_in==1)begin
data_out2<={data_out2[87:0],data_out1[15:0],data_in}; end else
if(count_0_5==11&&valid_in==1)begin
data_out2<={data_out2[95:0],data_out1[7:0],data_in};end else
if(valid_in==1)begin
data_out2<={data_out2[103:0],data_in};end
end
endmodule

查看9道真题和解析