39.简易频率计(基于等精度测量法)(2)

(1)Verilog代码实现:

module freq_meter_calc
(input					clk			,input					reset_n		,input					clk_test		,output	reg [31:0]	freq			
);reg	[26:0]	cnt0;reg   			gata_r;reg				gata_t;reg 	[47:0]	cnt_clk_test;reg 				gata_t_test_reg;reg 	[47:0]	max_x;reg   [47:0]	cnt_clk100M;reg 				gata_t_clk100M_reg;reg	[47:0]	max_y;reg   [63:0]	freq_reg;wire 				clk_100M;wire				gata_t_test_nedge;wire				gata_t_clk100M_nedge;parameter MCNT0	=	27'd74_999_999;
//0.25s = 250_000_000 ns = 20ns * 12_500_000 			24位parameter MCNT1	= 	24'd12_499_999;parameter STAND_MAX = 27'd100_000_000;pll	pll_inst (.areset 		( ~reset_n ),.inclk0 		( clk )		,.c0 			( clk_100M ),.locked		(  )
);//1.5s的一个计数器    1.5s = 1_500_000_000 ns = 20ns * 75_000_000;  需要一个27位的寄存器
always@(posedge clk or negedge reset_n)if(!reset_n)cnt0 <= 27'd0;else if(cnt0 == MCNT0)cnt0 <= 27'd0;else cnt0 <= cnt0 + 27'd1;//软件闸门设计
always@(posedge clk or negedge reset_n)if(!reset_n)gata_r <= 1'd0;else if((cnt0 > MCNT1) && (cnt0 < MCNT0 - MCNT1))gata_r <= 1'd1;else gata_r <= 1'd0;//实际闸门设计
always@(posedge clk_test or negedge reset_n)if(!reset_n)gata_t <= 1'd0;else gata_t <= gata_r;//实际闸门检测时钟计数模块
always@(posedge clk_test or negedge reset_n)if(!reset_n)cnt_clk_test <= 48'd0;else if(gata_t)cnt_clk_test <= cnt_clk_test + 48'd1;else cnt_clk_test <= 48'd0;//实际闸门在检测时钟下的下降沿设计
always@(posedge clk_test)gata_t_test_reg <= gata_t;assign gata_t_test_nedge = ((gata_t_test_reg) && (!gata_t));//检测时钟在实际闸门中的周期数设计
always@(posedge clk_test or negedge reset_n)if(!reset_n)max_x <= 48'd0;else if(gata_t_test_nedge)	max_x <= cnt_clk_test;else max_x <= max_x;//标准时钟在实际闸门的周期数计数模块设计
always@(posedge clk_100M or negedge reset_n)if(!reset_n)cnt_clk100M <= 48'd0;else if(gata_t)cnt_clk100M <= cnt_clk100M + 48'd1;else cnt_clk100M <= 48'd0;//标准时钟在实际闸门下的下降沿设计
always@(posedge clk_100M)gata_t_clk100M_reg <= gata_t;assign gata_t_clk100M_nedge = ((gata_t_clk100M_reg) && (!gata_t))	;//标准时钟在实际闸门中的周期数设计
always@(posedge clk_100M or negedge reset_n)if(!reset_n)max_y <= 48'd0;else if(gata_t_clk100M_nedge)	max_y <= cnt_clk100M;else max_y <= max_y;//频率输出设计		
always@(posedge clk or negedge reset_n)if(!reset_n)freq_reg <= 64'd0;else if(cnt0 == MCNT0)freq_reg <= (max_x * STAND_MAX) / max_y ;else 	freq_reg <= freq_reg;always@(posedge clk)freq <= freq_reg[31:0];endmodule

(2)仿真文件代码(测试时钟为500MHz):

`timescale 1ns/1nsmodule freq_meter_calc_tb;reg		clk			;
reg		reset_n		;
reg		clk_test		;wire  	[31:0]freq	;initial clk = 1'd1;
always#10 clk = ~clk;initial clk_test	= 1'd1;
always#1 clk_test = ~clk_test;initial begin reset_n <= 1'd0;#15;reset_n <= 1'd1;#2_000_000;$stop;
endfreq_meter_calc freq_meter_calc_inst
(.clk			(clk		)	,.reset_n		(reset_n	)	,.clk_test	(clk_test)	,.freq			(freq)	
);defparam freq_meter_calc_inst.MCNT0 = 27'd74_999;defparam freq_meter_calc_inst.MCNT1 = 27'd12_499;endmodule

(3)仿真波形:

(3)仿真文件代码(测试时钟修改为20KHz):

`timescale 1ns/1nsmodule freq_meter_calc_tb;reg		clk			;
reg		reset_n		;
reg		clk_test		;wire  	[31:0]freq	;initial clk = 1'd1;
always#10 clk = ~clk;initial clk_test	= 1'd1;
always#25000 clk_test = ~clk_test;initial begin reset_n <= 1'd0;#15;reset_n <= 1'd1;#2_000_000;$stop;
endfreq_meter_calc freq_meter_calc_inst
(.clk			(clk		)	,.reset_n		(reset_n	)	,.clk_test	(clk_test)	,.freq			(freq)	
);defparam freq_meter_calc_inst.MCNT0 = 27'd74_999;defparam freq_meter_calc_inst.MCNT1 = 27'd12_499;endmodule

(4)仿真波形:

(5)仿真文件代码(测试时钟修改为7MHz):

`timescale 1ns/1nsmodule freq_meter_calc_tb;reg		clk			;
reg		reset_n		;
reg		clk_test		;wire  	[31:0]freq	;initial clk = 1'd1;
always#10 clk = ~clk;initial clk_test	= 1'd1;
always#71 clk_test = ~clk_test;initial begin reset_n <= 1'd0;#15;reset_n <= 1'd1;#2_000_000;$stop;
endfreq_meter_calc freq_meter_calc_inst
(.clk			(clk		)	,.reset_n		(reset_n	)	,.clk_test	(clk_test)	,.freq			(freq)	
);defparam freq_meter_calc_inst.MCNT0 = 27'd74_999;defparam freq_meter_calc_inst.MCNT1 = 27'd12_499;endmodule

(6)仿真波形:

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

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

相关文章

20240718 每日AI必读资讯

大模型集体失智&#xff01;9.11和9.9哪个大&#xff0c;几乎全翻车了 - AI处理常识性问题能力受限&#xff0c;9.11&#xff1e;9.8数学难题暴露了AI短板。 - 训练数据偏差、浮点精度问题和上下文理解不足是AI在数值比较任务上可能遇到的困难。 - 改进AI需优化训练数据、Pr…

实验07 接口测试postman

目录 知识点 1 接口测试概念 1.1为什么要做接口测试 1.2接口测试的优点 1.3接口测试概念 1.4接口测试原理和目的 2 接口测试内容 2.1测什么 2.1.1单一接口 2.1.2组合接口 2.1.3结构检查 2.1.4调用方式 2.1.5参数格式校验 2.1.6返回结果 2.2四大块 2.2.1功能逻辑…

C++ Qt 登录界面 Login

效果: 核心代码: #include "simpleapp.h" #include "ui_simpleapp.h" #include <QMessageBox>SimpleApp::SimpleApp(QWidget *parent): QMainWindow(parent), ui(new Ui::SimpleApp) {ui->setupUi(this); }SimpleApp::~SimpleApp() {delete ui; …

jquery中pdf在页面的显示和导出

jquery中pdf在页面的显示和导出 01 显示pdf01 .pdf结尾在线接口显示到页面 &#xff08;pdf.js库怎么安装及使用&#xff09;&#xff1a;只显示一页02 如何用PDF.JS显示整个PDF (而不仅仅是一页)&#xff1f;03 jQuery实现在线预览PDF文件(通过a标签链接跳转)&#xff1a; 02 …

Docker构建LNMP环境并运行Wordpress平台

1.准备Nginx 上传文件 Dockerfile FROM centos:7 as firstADD nginx-1.24.0.tar.gz /opt/ COPY CentOS-Base.repo /etc/yum.repos.d/RUN yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c make && \useradd -M -s /sbin/nologin nginx && \cd /o…

RK3588读取不到显示器edid

问题描述 3588HDMIout接老的显示器或者HDMI转DVI接DVI显示器显示不了或者显示内容是彩色条纹,但是这种显示器测试过如果接笔记本或者主机是可以直接显示的。这一类问题是HDMI下的i2c与显示器通讯没成功,读取不到设备的edid。问题包括全志的H3 、AML的S905都有遇到 测试环境…

科普文:详解23种设计模式

概叙 设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结&#xff0c;其中最出名的当属 Gang of Four&#xff08;GoF&#xff09;的分类了&#xff0c;他们将设计模式分类为 23 种经典的模式&#xff0c;根据用途我们又可以分为三大类&#xff0c;分别为创建型模式…

【C++11】(lambda)

C11中的lambda与线程。 目录 Lambda&#xff1a;仿函数的缺点&#xff1a;Lambda语法&#xff1a;Lambda使用示例&#xff1a;两数相加&#xff1a;两数交换&#xff1a;解决Goods排序问题&#xff1a; Lambda原理&#xff1a; Lambda&#xff1a; 假设我们有一个商品类&…

住宅IP解析:动态住宅IP和静态住宅IP区别详解

在互联网连接的世界中&#xff0c;IP地址是我们识别和访问网络资源的关键。住宅IP地址&#xff0c;特别是动态住宅IP和静态住宅IP&#xff0c;是两种不同类型的IP分配方式&#xff0c;它们在使用和功能上存在显著差异。 1. IP地址的稳定性 动态住宅IP&#xff1a;这种IP地址是…

小程序图片下载保存方法,图片源文件保存!

引言 现在很多时候我们在观看到小程序中的图片的时候&#xff0c;想保存图片的原文件格式的话&#xff0c;很多小程序是禁止保存的&#xff0c;即使是让保存的话&#xff0c;很多小程序也会限制不让保存原文件&#xff0c;只让保存一些分辨率很低的&#xff0c;非常模糊的图片…

LabVIEW 与 PLC 通讯方式

在工业自动化中&#xff0c;LabVIEW 与 PLC&#xff08;可编程逻辑控制器&#xff09;的通信至关重要&#xff0c;常见的通信方式包括 OPC、Modbus、EtherNet/IP、Profibus/Profinet 和 Serial&#xff08;RS232/RS485&#xff09;。这些通信协议各有特点和应用场景&#xff0c…

Flink源码学习资料

Flink系列文档脑图 由于源码分析系列文档较多&#xff0c;本人绘制了Flink文档脑图。和下面的文档目录对应。各位读者可以选择自己感兴趣的模块阅读并参与讨论。 此脑图不定期更新中…… 文章目录 以下是本人Flink 源码分析系列文档目录&#xff0c;欢迎大家查阅和参与讨论。…

Apache POI 使用Java处理Excel数据 进阶

1.POI入门教程链接 http://t.csdnimg.cn/Axn4Phttp://t.csdnimg.cn/Axn4P建议&#xff1a;从入门看起会更好理解POI对Excel数据的使用和处理 记得引入依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactI…

MongoDB教程(十):Python集成mongoDB

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、环境准…

golang单元测试性能测试常见用法

关于go test的一些说明 golang安装后可以使用go test工具进行单元测试 代码片段对比的性能测试,使用起来还是比较方便,下面是一些应用场景 平时自己想做一些简单函数的单元测试&#xff0c;不用每次都新建一个main.go 然后go run main.go相对某个功能做下性能测试 看下cpu/内存…

WEB前端05-JavaScrip基本对象

JavaScript对象 1.Function对象 函数的创建 //方法一&#xff1a;自定义函数 function 函数名([参数]) {函数体[return 表达式] }//方法二&#xff1a;匿名函数 (function([参数]) {函数体[return 表达式] }); **使用场景一&#xff1a;定义后直接调用使用(只使用一次) (fun…

RISC-V在线反汇编工具

RISC-V在线反汇编工具&#xff1a; https://luplab.gitlab.io/rvcodecjs/#q34179073&abifalse&isaAUTO 不过&#xff0c;似乎&#xff0c;只支持RV32I、RV64I、RV128I指令集&#xff1a;

Linux·基本指令(下)

1. mv 指令 (move) 语法&#xff1a;mv[选项] 源文件或目录 目标文件或目录 功能&#xff1a;将源文件或目录剪贴到一个新位置&#xff0c;或给源文件或目录改名但不会改变其内容 常用选项&#xff1a; -f &#xff1a;force 强制&#xff0c;如果目标文件已经存在&#xff0c;…

力扣622.设计循环队列

力扣622.设计循环队列 通过数组索引构建一个虚拟的首尾相连的环当front rear时 队列为空当front rear 1时 队列为满 (最后一位不存) class MyCircularQueue {int front;int rear;int capacity;vector<int> elements;public:MyCircularQueue(int k) {//最后一位不存…

vscode+SSH连接Ubuntu

目录 问题引入 基本思路 Permission denied, please try again 修改用户名与密码 新建用户 最终成功方案 问题引入 ssh 用户名ip地址。用户名是远端服务器的用户名&#xff0c;ip地址也是远端服务器的地址。linux虚拟机的ip地址与windous主体不一样&#xff0c;所以还需要…