牛客进阶题目10:整数倍数据位宽转换8to16

比非整数倍简单

`timescale 1ns/1ns

module width_8to16(
	input 				   clk 		,   
	input 				   rst_n		,
	input				      valid_in	,
	input	   [7:0]		   data_in	,
 
 	output	reg			valid_out,
	output   reg [15:0]	data_out
);
reg[7:0] data_lock ;
reg		 cyc_cnt	;

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		cyc_cnt <= 1'b0 ;
	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)
		data_lock <= 'd0 ;
	else if(valid_in)
		data_lock <= data_in ;
	else
		data_lock <= data_lock ;
end

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		data_out <= 'd0 ;
	else if(cyc_cnt & valid_in)
		data_out <= {data_lock,data_in} ;
	else 
		data_out <= data_out	;
end

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		valid_out <= 1'b0 ;
	else if(cyc_cnt & valid_in)
		valid_out <= 1'b1 ;
	else
		valid_out <= 1'b0 ;
end


endmodule
posted @   骑猪上树的少年  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
回到顶部
点击右上角即可分享
微信分享提示