「Verilog学习笔记」整数倍数据位宽转换8to16

专栏前言

本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

根据时序图,数据是在第二个数据到来之后输出,当仅有一个数据到来时,不产生输出,所以内部需要一个指示信号valid_cnt,用来指示数据缓存状态。当data_lock内已缓存第一个数据时,valid_cnt拉高,当第二个数据到来后valid_cnt拉低

复制代码
`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 valid_cnt ; 

	always @ (posedge clk or negedge rst_n) begin 
		if (~rst_n) valid_cnt <= 'd0 ; 
		else if (valid_in) valid_cnt <= ~valid_cnt ; 
	end

	always @ (posedge clk or negedge rst_n) begin 
		if (~rst_n) data_lock <= 'd0 ; 
		else if (valid_in && !valid_cnt) data_lock <= data_in ; 
	end

	always @ (posedge clk or negedge rst_n) begin 
		if (~rst_n) valid_out <= 'd0 ; 
		else if (valid_in && valid_cnt == 1'd1) valid_out <= 1'd1 ; 
		else valid_out <= 'd0 ; 
	end

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

endmodule
相关推荐
mysla1 小时前
嵌入式学习day44-硬件—ARM体系架构
学习
微露清风1 小时前
系统性学习数据结构-第三讲-栈和队列
java·数据结构·学习
77qqqiqi3 小时前
学习字符串
学习
滴滴滴嘟嘟嘟.3 小时前
Qt动画功能学习
开发语言·qt·学习
淮北4943 小时前
计算机网络学习(七、网络安全)
学习·计算机网络·web安全
萘柰奈4 小时前
Unity学习----【进阶】Input System学习(一)--导入与基础的设备调用API
学习
天天开心a4 小时前
OSPF基础部分知识点
网络·笔记·学习·智能路由器·hcip
淮北4944 小时前
计算机网络学习(六、应用层)
linux·学习·计算机网络
落羽的落羽6 小时前
【C++】简单介绍lambda表达式
c++·学习
charlie1145141916 小时前
前端三件套简单学习:HTML篇1
开发语言·前端·学习·html