「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
相关推荐
limengshi1383921 小时前
通信工程学习:什么是RIP路由信息协议
网络·网络协议·学习·智能路由器·信息与通信
xiaobuding_QAQ2 小时前
自用Proteus(8.15)常用元器件图示和功能介绍(持续更新...)
单片机·嵌入式硬件·学习·proteus
Starry_hello world2 小时前
二叉树实现
数据结构·笔记·有问必答
wei_shuo2 小时前
偏标记学习+图像分类(论文复现)
学习·分类·数据挖掘
Miqiuha3 小时前
lock_guard和unique_lock学习总结
java·数据库·学习
一 乐4 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
加油,旭杏5 小时前
【中间件学习】fastCG介绍和使用
学习·nginx·fastcgi
limengshi1383925 小时前
通信工程学习:什么是TFTP简单文件传输协议
网络·网络协议·学习·信息与通信
GFCGUO5 小时前
ubuntu18.04运行OpenPCDet出现的问题
linux·python·学习·ubuntu·conda·pip
丝丝不是土豆丝7 小时前
学习 CSS 新的属性 conic-gradient 实现环形进度条
学习