「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
相关推荐
研猛男21 分钟前
0、FreeRTOS编码和命名规则
笔记·stm32·freertos
2301_790994991 小时前
仿神秘海域/美末环境交互的程序化动画学习
学习·microsoft·交互
能不能别报错1 小时前
K8s学习笔记(十六) 探针(Probe)
笔记·学习·kubernetes
初圣魔门首席弟子1 小时前
C++ STL 向量(vector)学习笔记:从基础到实战
c++·笔记·学习
qiangshang9901262 小时前
WPF+MVVM入门学习
学习·wpf
iconball2 小时前
个人用云计算学习笔记 --20 (Nginx 服务器)
linux·运维·笔记·学习·云计算
生物小卡拉2 小时前
R脚本--表达矩阵与特征矩阵相关性分析
笔记·学习·机器学习
liliangcsdn3 小时前
从LLM角度学习和了解MoE架构
人工智能·学习·transformer
能不能别报错3 小时前
K8s学习笔记(十四) DaemonSet
笔记·学习·kubernetes
报错小能手3 小时前
linux学习笔记(19)进程间通讯——消息队列
linux·笔记·学习