题解 | #非整数倍数据位宽转换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]data_cnt;
reg [119:0]data_reg;

always@(posedge clk or negedge rst_n)
    if (rst_n == 1'b0)
	    data_cnt <= 4'b0;
	else if (valid_in == 1'b1)
	    data_cnt <= data_cnt + 1'b1;
	else 
	    data_cnt <= data_cnt;

always@(posedge clk or negedge rst_n)
    if (rst_n == 1'b0)
	    data_reg <= 120'b0;
	else if (valid_in == 1'b1)
	    data_reg <= {data_reg[95:0],data_in};
	else 
	    data_reg <= data_reg;
//输出有效信号赋值
always@(posedge clk or negedge rst_n)
    if (rst_n == 1'b0)
	    valid_out <= 1'b0;
	else if (data_cnt == 4'd5 && valid_in == 1'b1)
	    valid_out <= 1'b1;
	else if (data_cnt == 4'd10 && valid_in == 1'b1)
	    valid_out <= 1'b1;
	else if (data_cnt == 4'd15 && valid_in == 1'b1)
	    valid_out <= 1'b1;
	else 
	    valid_out <= 1'b0;
//输出数据赋值
always@(posedge clk or negedge rst_n)
    if (rst_n == 1'b0)
	    data_out <= 128'b0;
	else if (valid_in == 1'b1 && data_cnt == 4'd5)
	    data_out <= {data_reg,data_in[23:16]};         //注意数据是怎么进行拼接的!!!!!!!!
	else if (valid_in == 1'b1 && data_cnt == 4'd10)
	    data_out <= {data_reg[111:0],data_in[23:8]};
	else if (valid_in == 1'b1 && data_cnt == 4'd15)
	    data_out <= {data_reg[103:0],data_in};
	else 
	    data_out <= data_out;
	    
endmodule

全部评论

相关推荐

咪咪虫:小厂神人多,我昨天早上那个深圳500-1000人的厂,面试官迟到10分钟进来第一句话是:居然是个妹子,然后一直说自己没有准备什么的,全程八股都是支支吾吾的问。下午那个线下的广州280人的厂,二轮技术面一直在问我数据结构、操作系统、计算机网络,还问我高考多少分、为什么不上课、为什么住在学校外面、是什么时候高考的。。。脸上就是质疑和不屑,俩个体验感奇差
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务