「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
相关推荐
九成宫20 小时前
IT项目管理期末复习——Chapter 9 项目人力资源管理
笔记·项目管理·软件工程
2601_9498179220 小时前
大厂Java进阶面试解析笔记文档
java·笔记·面试
John.Lewis21 小时前
C++进阶(12)附加学习:STL之空间配置器(了解)
开发语言·c++·笔记
独小乐21 小时前
019.ADC转换和子中断|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·mcu·arm
xuanwenchao21 小时前
ROS2学习笔记 - 2、类的继承及使用
服务器·笔记·学习
ILYT NCTR21 小时前
爬虫学习案例3
爬虫·python·学习
不灭锦鲤1 天前
网络安全学习第59天
学习·安全·web安全
楼田莉子1 天前
同步/异步日志系统:日志落地模块\日志器模块\异步日志模块
linux·服务器·c++·学习·设计模式
旖-旎1 天前
递归(汉诺塔问题)(1)
c++·学习·算法·leetcode·深度优先·递归
SUNNY_SHUN1 天前
清华团队提出TFA-Net,用模板特征聚合破解工业异常检测中的“捷径学习“难题
人工智能·学习·视觉检测·github