第一阶段:120bit+8bit
第二阶段:16bit+96bit+16bit
第三阶段:8bit+120bit
所以相当于发送了16个24bit数据,作为一个循环。第6、第11两个数据被拆开使用。
根据上述分析可知,缓存采用120bit即可够用。然后建立一个0-15计数器进行计数,对输出条件进行精确判断。
`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[119:0] seq_temp ;
reg[3:0] cyc_cnt ;
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
cyc_cnt <= 'd0 ;
else if(valid_in)
cyc_cnt <= cyc_cnt + 1 ;
else
cyc_cnt <= cyc_cnt ;
end
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
seq_temp <='d0 ;
else if(((cyc_cnt <= 4) | (5 <cyc_cnt<= 9) | (cyc_cnt >= 11)) & valid_in )
seq_temp <= {seq_temp[95:0],data_in} ;
else if(cyc_cnt == 5 & valid_in)
seq_temp <= {104'b0,data_in[15:0]} ;
else if(cyc_cnt == 10 % valid_in)
seq_temp <= {112'b0,data_in[7:0]} ;
else if (cyc_cnt == 15 & valid_in)
seq_temp <= {96'b0,data_in} ;
else
seq_temp <= seq_temp ;
end
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
valid_out <= 1'b0 ;
else if((cyc_cnt==5||cyc_cnt==10||cyc_cnt==15)&valid_in)
valid_out <= 1'b1 ;
else
valid_out <= 1'b0 ;
end
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
data_out <= 'd0 ;
else if(cyc_cnt == 5 )
data_out <= {seq_temp,data_in[23:16]};
else if(cyc_cnt == 10 )
data_out <= {seq_temp[111:0],data_in[23:8]};
else if (cyc_cnt == 15)
data_out <= {seq_temp[103:0],data_in};
else
data_out <= data_out ;
end
endmodule
标签:进阶,24to128,valid,数据位,rst,input,120bit,reg
From: https://www.cnblogs.com/icwangpu/p/17033563.html