当前位置: 首页 > article >正文

「Verilog学习笔记」数据串转并电路

专栏前言

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

关于什么是Valid/Ready握手机制:

深入 AXI4 总线(一)握手机制 - 知乎


时序图含有的信息较多,观察时序图需要注意:

data_b是在已接收到6个数据后下一个时钟产生输出;

本模块与上游采用valid_ready握手机制,当valid_a拉低,表示与上游握手未成功,则此时data_a的数据无效,不存入本模块当中;

本模块与下游采用valid_only握手机制,这是一种单向指示性握手机制,已接收到6个数据后,valid_b拉高一个时钟周期,指示输出数据有效性;


要实现6个单bit输入数据的拼接,要用1个寄存器将先到达的数据缓存。当上游握手成功,将输入数据进寄存器,先收到的数据放在低位;当缓存好6个输入数据,valid_b拉高,输出data_b。

需要计数器来计数接收到的数据数量,计数器在0-5之间循环。计数器初始值是0,每接收一个数据,计数器加1,当计数器再次循环到0时,表示已经接收到6个数据,可以输出拼接结果。

`timescale 1ns/1ns

module s_to_p(
	input 				clk 		,   
	input 				rst_n		,
	input				valid_a		,
	input	 			data_a		,
 
 	output	reg 		ready_a		,
 	output	reg			valid_b		,
	output  reg [5:0] 	data_b
);
	reg [5:0] data_reg ; 
	reg [2:0] data_cnt ; 

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

	always @ (posedge clk or negedge rst_n) begin 
		if (~rst_n) data_cnt <= 1'd0 ; 
		else if (valid_a && ready_a) data_cnt <= (data_cnt == 3'd5) ? 1'd0 : (data_cnt + 1'd1) ;
	end

	always @ (posedge clk or negedge rst_n) begin 
		if (~rst_n) data_reg <= 1'd0 ; 
		else if (valid_a && ready_a) data_reg <= {data_a, data_reg[5:1]} ; 
	end

	always @ (posedge clk or negedge rst_n) begin 
		if (~rst_n) begin 
			valid_b <= 1'd0 ; 
			data_b <= 1'd0 ; 
		end
		else if (data_cnt == 3'd5) begin 
			valid_b <= 1'd1 ; 
			data_b <= {data_a, data_reg[5:1]} ;
		end
		else valid_b <= 1'd0 ; 
	end

endmodule

http://www.kler.cn/a/145308.html

相关文章:

  • 爬虫基础(一)HTTP协议 :请求与响应
  • NoSQL与SQL比较
  • Charles 4.6.7 浏览器网络调试指南:流量过滤与分析(六)
  • 1.27补题 回训练营
  • 【C++】特殊类设计
  • 分享| RL-GPT 框架通过慢agent和快agent结合提高AI解决复杂任务的能力-Arxiv
  • 目录树自动生成器 golang+fyne
  • 力扣-55.跳跃游戏
  • Guacamole简介及centos7下搭建教程
  • 哲学家就餐问题
  • OSG编程指南<十二>:OSG二三维文字创建及文字特效
  • 哈希思想的应用
  • Python与设计模式--责任链模式
  • 【分布式】小白看Ring算法 - 03
  • 【SAS Planet 下载地图瓦片】
  • 【数据结构】树与二叉树(廿六):树删除指定结点及其子树(算法DS)
  • 如何找出excel中两列数据中不同的值(IF函数的用法)
  • 2018年4月26日 Go生态洞察:Go新品牌形象及标识发布
  • Mac | Vmware Fusion | 分辨率自动还原问题解决
  • 【Mybatis】动态sql
  • SpringBoot——配置及原理
  • 十大排序之归并排序(详解)
  • 基于WSL2+Docker+VScode搭建机器学习(深度学习)开发环境
  • 【Linux篇】gdb调试器的使用
  • 扩散模型实战(十二):使用调度器DDIM反转来优化图像编辑
  • C++ Qt QString用法详解与代码演示