时钟周期检测标志信号

news2024/12/27 10:05:15

在某些情况下需要对系统时钟分频后的时钟进行周期检测,引出周期标志信号以便在后续其他情况的使用。虽然在大多数情况下我们能够知道分频后的时钟是系统时钟的几倍分频,但为增强在分频时钟改变情况下周期标志信号的复用性或对未知时钟的周期检测,可以考虑以下方法或思想,以延申到类似情况下使用。

文章目录

  • 检测方法
    • 方法一:上升沿判断
    • 方法二:时钟移位判断
  • 实现与仿真
    • Verilog实现
    • 仿真测试

检测方法

方法一:上升沿判断

将时钟打一拍后取clk&(~clk_reg),上升沿时该值会拉高一个时钟周期。

也可以用下降沿进行判断方法类似。

方法二:时钟移位判断

对时钟左移判断移位后的值,移位后dived_clk_buf==2'd1即为上升沿到来,dived_clk_buf==2'd2即为下降沿到来。

reg  [1:0]      dived_clk_buf    ;

always  @(posedge  clk or negedge rst_n)
begin
    if(rst_n == 1'b0)
        dived_clk_buf <= 2'd3;
    else 
        dived_clk_buf <= {dived_clk_buf[0],dived_clk};//移位时钟以判断周期
end

always  @(posedge  clk or negedge rst_n)
begin
    if(rst_n == 1'b0)
        XX;
    else if(dived_clk_buf==2'd1)
        XXX;
    else 
         XXXX;
end

实现与仿真

Verilog实现

由两部分组成:产生分频时钟模块+周期检测标志模块;改变分频时钟模块的分频周期可在仿真测试文件中例化时进行参数修改。

产生分频时钟模块:

//========================================================================
// 	Author			:YprgDay
//========================================================================
module dived_clk
#(
	parameter 				DIV_FREQUENCY		=	4				,//分频数(只允许偶分频),dived_clk周期为DIV_FREQUENCY*clk的周期
	parameter 				PERIOD_WIDTH_MAX	=	2				,//(DIV_FREQUENCY-1)对应的二进制位宽
	parameter 				CNT_PERIOD_MAX		=	DIV_FREQUENCY-1	,
	parameter 				CNT_HALF_PERIOD_MAX	=	CNT_PERIOD_MAX >> 1//计数分频中值
)
(
	input 	wire rst_n 	,
	input 	wire clk 	,
	
	output  reg  dived_clk
);

	reg [PERIOD_WIDTH_MAX-1:0] 		cnt_period			;//时钟分频计数
	//分频时钟
	always @(posedge clk or negedge rst_n)begin
		if(rst_n == 1'b0)begin
			dived_clk <= 0;
		end
		else if(cnt_period == CNT_PERIOD_MAX)begin
            dived_clk <= 0;
		end
		else if(cnt_period == CNT_HALF_PERIOD_MAX)begin
			dived_clk <= 1;
		end
		else begin
			dived_clk <= dived_clk;
		end
	end
	//分频计数器
	always @(posedge clk or negedge rst_n)begin
		if(rst_n == 1'b0)begin
			cnt_period <= 0;
		end
		else if(cnt_period == CNT_PERIOD_MAX)begin
			cnt_period <= 0;
		end
		else begin
			cnt_period <= cnt_period + 1'b1;
		end
	end	
endmodule

周期检测标志模块:

//========================================================================
// 	Author			:YprgDay
//========================================================================
module clk_period(
	input 	wire 	rst_n 		,
	input 	wire 	clk 		,
	input 	wire 	dived_clk	,
	output 	wire 	clk_flag1	,
	output 	wire 	clk_flag2
);

	reg 		dived_clk_reg		;
	reg  [1:0]  dived_clk_buf  		;
	//==========================< 方法一 >============================
	always @(posedge clk or negedge rst_n)begin
			if(rst_n == 1'b0)begin
				dived_clk_reg <= 0;
			end
			else begin
				dived_clk_reg <= dived_clk;
			end
		end	
	assign clk_flag1 = dived_clk&(~dived_clk_reg);
	//==========================< 方法二 >============================
	always  @(posedge  clk or negedge rst_n)
		begin
			if(rst_n == 1'b0)
				dived_clk_buf <= 2'd3;
			else 
				dived_clk_buf <= {dived_clk_buf[0],dived_clk};//左移
		end
	assign clk_flag2 = (dived_clk_buf==2'd1);
endmodule

仿真测试

仿真产生系统时钟与复位信号。

//========================================================================
// 	Author			:YprgDay
//========================================================================
`timescale 1ns/1ns
module tb_clk_period();
	
	parameter 				CLK_PERIOD		=	10		    ;//设置时钟信号周期
	parameter 				HALF_CLK_PERIOD	=	CLK_PERIOD/2;//生成时钟信号半周期
	
	reg                     i_rst_n							;
	reg                     i_clk							;
	
	wire					dived_clk						;
	wire					clk_flag1						;
	wire					clk_flag2                       ;
	//==========================< Clock block >============================
	always 	  	#HALF_CLK_PERIOD		i_clk = ~i_clk;
	
	//==========================< i_rst_n block >============================
	 initial begin
		i_clk 	  = 	1'b1	;
		i_rst_n  <= 	1'b0	;

		#40
		i_rst_n  <= 	1'b1	;
	end
	dived_clk 
		#(
			.DIV_FREQUENCY	  (8),//分频数(只允许偶分频),dived_clk周期为DIV_FREQUENCY*clk的周期
			.PERIOD_WIDTH_MAX (3)//(DIV_FREQUENCY-1)对应的二进制位宽
		)
	u_dived_clk
		(
			.rst_n		(i_rst_n	),
			.clk 		(i_clk		),
					
			.dived_clk  (dived_clk	)
		);
	clk_period u_clk_period(
			.rst_n 		(i_rst_n 	),
			.clk 		(i_clk 		),
			.dived_clk	(dived_clk  ),
			.clk_flag1	(clk_flag1	),
			.clk_flag2  (clk_flag2	)
);
endmodule

仿真效果如下:

可以看出方法一的时钟标志信号在时钟上升沿后拉高;方法二的时钟标志信号在时钟上升沿后下一拍拉高。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1590025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第六季:RTSP协议详解与实时流视频预览

目录 前言1 环境准备2 H.264编码原理和基本概念2.1 图像冗余信息2.2 h.264编码相关的一些概念2.3 h264视频流总体分析2.4 H264的NAL单元详解22.4.1 相关概念 2.5 NALU详解2.6 sps和pps详解2.7 H264的profile和level2.8 序列sequence 前言 本篇文章用于记录实验过程 1 环境准备…

【YUNBEE云贝-进阶课】MySQL8.0性能优化实战培训

众多已经学习过MySQL 8.0 OCP认证专家的课程的同学们对 MySQL 8.0 的安装部署、体系结构、配置监控、用户管理、主从复制、系统运维、MGR等基础操作和动手实验有了一定的学习基础.很多学员反馈希望更进一步提升技术能力、解决工作中碰到的性能问题。 针对MySQL8.0的数据库性能优…

设计模式代码实战-建造者模式

1、问题描述 小明家新开了一家自行车工厂&#xff0c;用于使用自行车配件&#xff08;车架 frame 和车轮 tires &#xff09;进行组装定制不同的自行车&#xff0c;包括山地车和公路车。 山地车使用的是Aluminum Frame&#xff08;铝制车架&#xff09;和 Knobby Tires&#x…

softmax回归:多分类问题的解码器

随着人工智能技术的不断发展&#xff0c;分类问题在机器学习领域中的地位日益凸显。在众多分类算法中&#xff0c;softmax回归以其独特的优势和广泛的应用场景&#xff0c;成为了处理多分类问题的有力工具。本文将深入探讨softmax回归的原理、应用及其优缺点&#xff0c;以期为…

实现智能水控 | 基于ACM32 MCU的分体式水控方案

分体式水控概述 分体式水控是一种常见的水控系统&#xff0c;它的工作原理是通过水的流动来控制水的供应和排放&#xff0c;该系统一般由两部分组成&#xff1a;控制器和水阀。控制器负责监测水的流量和压力&#xff0c;根据设定的参数来控制水阀的开和关&#xff0c;从而实现水…

上位机图像处理和嵌入式模块部署(qmacvisual缺失的光源控制)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 有些场景下面&#xff0c;是不需要光源和光源控制的&#xff0c;比如说利用摄像头识别对应区域的库位&#xff0c;这部分直接利用红外光采集对应的…

找出mongodb的jumbo块并进行分裂

https://www.cnblogs.com/abclife/p/15968628.html 根据这篇文档中的脚本&#xff0c;在我们自己的环境中跑了下&#xff0c;第一次跑的结果如下&#xff1a; 运行完上面跑出的split脚本后&#xff0c;还是存在jumbo块&#xff0c;第二次跑出的结果&#xff1a; 从上面结果可以…

3、JVM对象的创建于内存分配原理

对象的创建 对象创建的主要流程: 1.类加载检查 虚拟机遇到一条new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有&#xff0c;那必须先执行相应的类加…

【hive】远程remote debug hive的方法,用于hive监听器/钩子编写

背景 写hive监听器时候需要拿到hive对象但hive是在集群linux主机上运行的。通过jdbc提交的sql具体执行过程不会再idea中运行。所以如果需要拿到hive对象有可能存在两个思路&#xff1a; &#xff08;1&#xff09;想办法写个钩子或者监听器&#xff0c;将需要的内容写成json字…

【微信小程序】canvas开发笔记

【微信小程序】canvasToTempFilePath:fail fail canvas is empty 看说明书 最好是先看一下官方文档点此前往 如果是canvas 2d 写canvas: this.canvas,&#xff0c;如果是旧版写canvasId: ***, 解决问题 修改对应的代码&#xff0c;如下所示&#xff0c;然后再试试运行&#x…

请求分发场景下的鉴权问题

说明&#xff1a;记录一次对请求分发&#xff0c;无法登录系统的问题。 场景 如下&#xff0c;在此结构下&#xff0c;如何判断该用户是已登录的用户&#xff1b; 常规操作&#xff0c;用户登录后给用户发Token&#xff0c;同时将发放的Token存入到Redis中。要求用户后续请求…

鸿蒙OS开发实例:【Native C++】

介绍 本篇Codelab主要介绍如何使用DevEco Studio创建一个Native C应用。应用采用Native C模板&#xff0c;实现使用NAPI调用C标准库的功能。使用C标准库hypot接口计算两个给定数平方和的平方根。在输入框中输入两个数字&#xff0c;点击计算结果按钮显示计算后的数值。 相关概…

【论文研读】Geometric Deep Learning on Molecular Representations

Geometric Deep Learning on Molecular Representationshttps://arxiv.org/pdf/2107.12375.pdf 一、Background 随着网络时代的发展&#xff0c;生活中产生的数据量越来越多&#xff0c;但数据大体分为两类&#xff1a;欧氏数据、非欧氏数据。如图为两类常见的数据&#xff0c…

物联网全栈智能应用实训系统

物联网全栈智能应用实训系统是一款集硬件、软件、网络、数据分析与应用开发于一体的综合性实训平台。它旨在帮助学习者全面掌握物联网技术的各个环节&#xff0c;从硬件设备选型、通信协议理解、软件开发、数据分析到应用部署&#xff0c;都能得到充分的实践锻炼。 一、产品构…

Harmony鸿蒙南向驱动开发-SDIO接口使用

功能简介 SDIO是安全数字输入输出接口&#xff08;Secure Digital Input and Output&#xff09;的缩写&#xff0c;是从SD内存卡接口的基础上演化出来的一种外设接口。SDIO接口兼容以前的SD卡&#xff0c;并且可以连接支持SDIO接口的其他设备。 SDIO接口定义了操作SDIO的通用…

【InternLM 实战营第二期-笔记1】书生浦语大模型开源体系详细介绍InternLM2技术报告解读(附相关论文)

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,很高兴能参与本次第二期训练营&#xff0c;我也将会通过笔记博客的方式记录学习的过程与遇到的问题&#xff0c;并为代码添加注释&#xff0c;希望可以帮助到你们。 记得点赞哟(๑ゝω╹๑) 书生浦语大模型开源体系…

Linux 删除文件或文件夹命令(新手)

一、删除文件夹 rm -rf 路径/目录名 1 强制删除文件夹及其子文件。 二、删除文件/文件夹&#xff1a;rm 命令 rm 删除命令&#xff0c;它可以永久删除文件系统中指定的文件或目录。 rm [选项] 文件或目录 选项&#xff1a; -f&#xff1a;强制删除&#xff08;force&am…

QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid

文章目录 场景描述问题排查根据提示查看原因查看封装的 message 个人简介 场景描述 QQ 邮箱使用 SMTP 发送邮件报错&#xff1a;550 The From header is missing or invalid&#xff1a; 失败原因&#xff1a;(550, bThe "From" header is missing or invalid. Ple…

【Kafka】Zookeeper集群 + Kafka集群

Zookeeper 概述 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制★★★ Zookeeper从设计模式角度来理解&#xff1a; 1&#xff09;是一个基于观察者模式设计的分布式服务管理框架&#xff1b; 它负责存储和管理大家都关…

【LeetCode】二叉树类题目详解

二叉树 二叉树的理论基础 二叉树是结点的度数之和不超过2的树&#xff0c;二叉树总共有五种基本形态 二叉树的种类主要有&#xff1a; 满二叉树完全二叉树 二叉树的存储方式 顺序存储链式存储 二叉树的遍历方式 先序遍历&#xff08;深度优先搜索&#xff09;中序遍历&…