「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
相关推荐
昌sit!1 小时前
Linux系统性基础学习笔记
linux·笔记·学习
学会沉淀。2 小时前
设备如何“开口说话”?
学习
没有钱的钱仔2 小时前
机器学习笔记
人工智能·笔记·机器学习
好望角雾眠2 小时前
第四阶段C#通讯开发-9:网络协议Modbus下的TCP与UDP
网络·笔记·网络协议·tcp/ip·c#·modbus
m0_591338913 小时前
day10数组的学习
学习
仰望—星空3 小时前
MiniEngine学习笔记 : CommandListManager
c++·windows·笔记·学习·cg·direct3d
电子云与长程纠缠4 小时前
Blender入门学习09 - 制作动画
学习·blender
电子云与长程纠缠4 小时前
Blender入门学习10 - 曲线绘制
学习·blender
下午见。4 小时前
C语言结构体入门:定义、访问与传参全解析
c语言·笔记·学习
im_AMBER4 小时前
React 16
前端·笔记·学习·react.js·前端框架