等精度频率计的设计

目录

主控电路设计

频率测量与计算电路设计

顶层电路设计

功能扩展及应用


频率测量的三种方法

   等精度频率计通过控制闸门信号与被测信号同步,消除了直接测频法中的计数误差,因而在被测信号频率范围内测量精度基本上是恒定的。

   本节以设计能够测量信号频率为1Hz~100MHz、测量误差的绝对值不大于0.01%的等精度频率计为目标,说明IP在数字系统设计中的应用。

   等精度测频的总体设计方案如图所示,其中主控电路、标准频率信号产生电路、频率测量和计算电路以及数值转换与译码电路都可以在FPGA中实现。

主控电路设计

  主控电路与直接测频法中主控电路的功能完全相同,用于周性性产生计数器的复位信号CLR'、闸门信号CNTEN和锁存器时钟LE,可以直接应用Verilog HDL描述。

 module fp_ctrl ( input clk,   // 时钟,8Hzoutput reg clr_n,          // 计数器清零信号output reg cnt_en,        // 闸门信号,作用时间为1秒output reg le              // 锁存器en,高电平有效);// 计数变量定义  reg [3:0] q;  // 描述10进制计数逻辑always @( posedge clk )  if ( q >= 4'd9 )        q <= 4'b0000;                     elseq <= q + 1'b1;// 控制信号生成过程always @( q )     case ( q ) 4'b0000 : begin clr_n = 0; cnt_en = 0; le = 0; end 4'b0001 : begin clr_n = 1; cnt_en = 1; le = 0; end4'b0010 : begin clr_n = 1; cnt_en = 1; le = 0; end4'b0011 : begin clr_n = 1; cnt_en = 1; le = 0; end           4'b0100 : begin clr_n = 1; cnt_en = 1; le = 0; end4'b0101 : begin clr_n = 1; cnt_en = 1; le = 0; end4'b0110 : begin clr_n = 1; cnt_en = 1; le = 0; end4'b0111 : begin clr_n = 1; cnt_en = 1; le = 0; end4'b1000 : begin clr_n = 1; cnt_en = 1; le = 0; end4'b1001 : begin clr_n = 1; cnt_en = 0; le = 1; enddefault : begin clr_n = 1; cnt_en = 0; le = 0; endendcaseendmodule

 新建工程,将模块编译综合后封装成原理图符号以便在顶层设计电路中调用。

频率测量与计算电路设计

   等精度频率测量和计算电路的实现电路的框图如图所示。

  频率测量与计算电路中的D触发器既可以在顶层设计模块中调用原理图库primitives中的D触发器实现。

  module DFF_mk(G,Fx,SG);input G,Fx;output reg SG;always @(posedge Fx)SG <= G; endmodule

   当闸门时间取1秒、采用96MHz标准信号时,若要测量100MHz的信号,则标准计数器和测频计数器至少需要采用27位二进制计器实现(因为226<96MHz<227,226<100MHz<227),同时需要为计数器添加异步复位端CLR'和计数允许控制端ENA,以便与主控电路连接。

28位标准计数器的代码参考如下:

module FScnt(FSCLK,CLR_n,ENA,FSQ); input FSCLK,CLR_n,ENA;output reg {27:0] FSQ;always @(posedge FSCLK or negedge CLR_n)if ( !CLR_n ) FSQ <= 28'b0;else if (ENA) FSQ <= FSQ+1'b1; 
endmodule

28位测频计数器的代码参考如下:

module FXcnt(FXCLK,CLR_n,ENA,FXQ);input FXCLK,CLR_n,ENA;output reg {27:0] FXQ;always @(posedge FXCLK or negedge CLR_n)if ( !CLR_n )FXQ <= 28'b0; else if (ENA) FXQ <= FXQ+1'b1; 
endmodule

   频率计算电路中所需要的乘法器和除法器通过定制参数化宏功能模块LPM_MULT和LPM_DIVIDE实现,其中乘法器的输入定制为28位无符号二进制数、乘法结果定制为56位无符号二进制数,除法器的被除数定制为56位无符号二进制数、除数定制为28位无符号二进制数,整除结果和余数定制为56位和28位无符号二进制数,分别用56位和28位锁存器锁存。另外,锁存器需要添加一个锁存允许端口EN,以便与测频控制电路连接。

  56位和28位锁存器用Verilog代码描述如下:

module latch84  ( en,din56, din28,dout28a,dout28b);input en;input [55:0] din56;input [27:0] din28;output reg [27:0] dout28a;output reg [27:0] dout28b;// 锁存输出过程always @(en,din56,din28)if ( en ) begindout28a <= din56[27:0];dout28b <= din28;endendmodule

  新建工程,将模块latch84编译综合后封装成原理图符号以便在顶层设计电路中调用。    数值转换与译码电路用于将计算得到的二进制频率值转换为8位BCD码,以驱动数码管显示测频结果。

  根据上述显示格式定义,调用上述BinarytoBCD模块,实现代码转换与译码显示的Verilog代码参考如下:

module HEX7_8 ( input wire [27:0] iBIN28a,iBIN28b,               // 除法商和余数输入output wire [6:0] oSEG7,oSEG6,oSEG5,oSEG4,   // 数码管驱动信号oSEG3,oSEG2,oSEG1,oSEG0, output reg  [2:0]  DPoints,                          // 小数点驱动信号output reg          OV_LED   );                    // 超量程指示指示信号// 内部线网和变量定义wire [31:0] BCD32a,BCD32b;                       // 商数BCD码,余数BCD码reg  [31:0] DispBCD;                                // 显示BCD码// 数值转换BIN28toBCD x1(iBIN28a,BCD32a);                // 二进制商数转换为BCD码BIN28toBCD x2(iBIN28b,BCD32b);                // 二进制余数转换为BCD码        // 根据频率值自动切换显示格式always @( iBIN28a ) beginif ( iBIN28a >= 100_000_000 )                   // 如果频率≥100MHzOV_LED  = 1'b1;                              // 超量程指示指示信号亮else  OV_LED  = 1'b0;                           // 超量程指示指示信号亮if ( iBIN28a >= 10000 ) begin                     // 如果频率≥10kHzDispBCD = BCD32a[31:0];                     // 显示8位商数DPoint  = 3'b000;                              // 不显示小数点endelse if ( iBIN28a >= 1000 ) begin                  // 如果频率≥1kHzDispBCD = {BCD32a[15:0],BCD32b[31:16]}; // 显示4位商数和4位余数DPoints = 3'b001;                              // 显示低位小数点endelse if ( iBIN28a >= 100 ) begin                    // 如果频率≥100HzDispBCD = {BCD32a[11:0],BCD32b[31:12]};  // 显示3位商数和5位余数DPoints = 3'b010;                              // 显示中位小数点end     else begin                                             // 否则,频率小于100HzDispBCD = {BCD32a[7:0],BCD32b[31:8]};      // 显示2位商数和6位余数DPoints = 3'b100;                                // 显示高位小数点endend// 例化显示译码模块CD4511s U7 ( .le(1'b0), .bcd(DispBCD[31:28]), .seg7(oSEG7));CD4511s U6 ( .le(1'b0), .bcd(DispBCD[27:24]), .seg7(oSEG6));CD4511s U5 ( .le(1'b0), .bcd(DispBCD[23:20]), .seg7(oSEG5));CD4511s U4 ( .le(1'b0), .bcd(DispBCD[19:16]), .seg7(oSEG4));CD4511s U3 ( .le(1'b0), .bcd(DispBCD[15:12]), .seg7(oSEG3));CD4511s U2 ( .le(1'b0), .bcd(DispBCD[11:8]),  .seg7(oSEG2));CD4511s U1 ( .le(1'b0), .bcd(DispBCD[7:4]),   .seg7(oSEG1));CD4511s U0 ( .le(1'b0), .bcd(DispBCD[3:0]),   .seg7(oSEG0));endmodule

顶层电路设计

  等精度频率计的顶层设计电路如图所示。其中锁相环输出96MHz(c0)和2kHz(c1)的信号,分别作为计数器标准频率信号FSCLK和8Hz分频基准信号。当待测信号FX1Hz_100MHz的频率超过100MHz时,OV_LED为1,驱动发光二极管闪烁指示被测信号的频率超量程。

   图中分频模块fp2kHz_8Hz用于将锁相环产生的2kHz信号分频为8Hz,为主控电路(fp_ctrl模块)提供时钟。

功能扩展及应用

   等精度频率计以其频率测量精度高而获得广泛的应用。如果在频率计顶层设计电路中再扩展部分功能电路,还可以实现脉冲占空比测量和序列相差检测。

脉冲占空比测量

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

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

相关文章

Matlab使用深度网络设计器为迁移学习准备网络

迁移学习通过对预训练网络进行微调&#xff0c;使深度学习模型能在少量数据下快速适应新任务&#xff0c;类似于“举一反三”&#xff0c;而不需要从头训练。本文使用matlab自带的深度网络设计器&#xff0c;可以便捷地修改预训练网络进行迁移学习&#xff0c;通过对预训练网络…

基于yolov8、yolov5的电塔缺陷检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;电塔缺陷检测在电力设备巡检、运行维护和故障预防中起着至关重要的作用&#xff0c;不仅能帮助相关部门实时监测电塔运行状态&#xff0c;还为智能化检测系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的电塔缺陷检测模型&#xf…

代理商培训新策略:内部知识库的高效运用

在竞争激烈的市场环境中&#xff0c;代理商作为企业与终端消费者之间的关键纽带&#xff0c;其专业能力和服务质量直接影响着企业的市场表现和品牌形象。因此&#xff0c;如何对代理商进行高效、系统的培训&#xff0c;以提升其业务能力和服务水平&#xff0c;成为企业亟需解决…

uniapp 相关的swiper的一些注意事项

先推荐一个一个对标pc端swiper的uniapp版本 zebra-swiper 缺点是自定义分页器不是很好处理 不知道怎么弄 优点:可以进行高度自适应 &#xff08;这个uniapp原生swiper没有 只能动态修改 采用js 或者只有几种固定高度时采用变量修改&#xff09; <swiperref"lifeMiddle…

ARM中ZI-data段和RW-data段

ARM中ZI-data段和RW-data段 1、只定义全局变量&#xff0c;不使用&#xff0c;不占用内存空间2、 定义并初始化全局变量为0 占用ZI-Data区域3、定义并初始化全局变量非0 占用RW-Data区域4、增加的是一个int8的数据为什么&#xff0c;size增加不是15、定义的全局变量为0&#xf…

jmeter--CSV数据文件设置--请求体设置变量

目录 一、示例 1、准备组织列表的TXT文件&#xff0c;如下&#xff1a; 2、添加 CSV数据文件设置 &#xff0c;如下&#xff1a; 3、接口请求体设置变量&#xff0c;如下&#xff1a; 二、CSV数据文件设置 1、CSV Data Set Config 配置选项说明 2、示例 CSV 文件内容 3、…

golang实现TCP服务器与客户端的断线自动重连功能

1.服务端 2.客户端 生成服务端口程序: 生成客户端程序: 测试断线重连: 初始连接成功

ssm148基于Spring MVC框架的在线电影评价系统设计与实现+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;在线电影评价系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本在线电影评价系…

DAY1 网络编程(TCP客户端服务器)

作业&#xff1a; TCP客户端服务器。 server服务器代码&#xff1a; #include <myhead.h> #define IP "192.168.110.52" #define PORT 8886 #define BACKLOG 20 int main(int argc, const char *argv[]) {int oldfdsocket(AF_INET,SOCK_STREAM,0);//IPV4通信…

基于arduino 用ESP8266获取实时MAX30102 血氧数据动态曲线显示在网页上

基于arduino 用ESP8266获取实时MAX30102 血氧数据动态曲线显示在网页上 原理&#xff1a; ESP8266获取MAX30102 血氧数据&#xff08;R,IR,G的值&#xff09;发送到路由器局域网内&#xff0c;局域网内的手机电脑&#xff0c;访问ESP的ip地址&#xff0c;获取实时的血氧数据动…

vue3:scss引用

原文查看&#xff1a;https://mp.weixin.qq.com/s?__bizMzg3NTAzMzAxNA&mid2247484356&idx2&sn44b127cd394e217b9e3c4eccafdc0aa9&chksmcec6fb1df9b1720b7bd0ca0b321bf8a995fc8cba233deb703512560cbe451cfb1f05cdf129f6&token1776233257&langzh_CN#rd…

SrpingBoot基础

SpringBoot基本框架中重要常用的包讲解: .idea包和.mvn包框架生成不经常用 src包下主要存放前后端代码: main包下的java包存放的是后端java代码主要负责数据处理 resource包下存放的是配置资源和前端页面,其中static中存放的是前端html网页一般存放静 态资源,templates包…

Nacos实现IP动态黑白名单过滤

一些恶意用户&#xff08;可能是黑客、爬虫、DDoS 攻击者&#xff09;可能频繁请求服务器资源&#xff0c;导致资源占用过高。因此我们需要一定的手段实时阻止可疑或恶意的用户&#xff0c;减少攻击风险。 本次练习使用到的是Nacos配合布隆过滤器实现动态IP黑白名单过滤 文章…

vue-next-admin框架配置(vue)

vue-next-admin 先安装依赖 npm i 依赖, npm run dev 运行 1.配置代理 2.把他的逻辑和自己的登录判断逻辑结合(我的放下面&#xff0c;可以参考哦&#xff0c;可以直接使用&#xff0c;到时候修改登录逻辑就好)&#xff0c;别忘了引入ajxio哦 const onSignIn async () &g…

算法定制LiteAIServer视频智能分析平台工业排污检测算法智控环保监管

随着工业化进程的加快&#xff0c;环境污染问题愈加严重&#xff0c;尤其是工业排污对生态环境的影响引发了广泛关注。在此背景下&#xff0c;视频智能分析平台LiteAIServer工业排污检测算法应运而生&#xff0c;作为一种先进的智能化解决方案&#xff0c;它在监测和管理工业排…

mini-lsm通关笔记Week2Day5

项目地址&#xff1a;https://github.com/skyzh/mini-lsm 个人实现地址&#xff1a;https://gitee.com/cnyuyang/mini-lsm Summary 在本章中&#xff0c;您将&#xff1a; 实现manifest文件的编解码。系统重启时从manifest文件中恢复。 要将测试用例复制到启动器代码中并运行…

【WPF】Prism学习(六)

Prism Dependency Injection 1.依赖注入&#xff08;Dependency Injection&#xff09; 1.1. Prism与依赖注入的关系&#xff1a; Prism框架一直围绕依赖注入构建&#xff0c;这有助于构建可维护和可测试的应用程序&#xff0c;并减少或消除对静态和循环引用的依赖。 1.2. P…

学习ASP.NET Core的身份认证(基于Cookie的身份认证1)

B/S架构程序可通过Cookie、Session、JWT、证书等多种方式认证用户身份&#xff0c;虽然之前测试过用户登录代码&#xff0c;也学习过开源项目中的登录认证&#xff0c;但其实还是对身份认证疑惑甚多&#xff0c;就比如登录验证后用户信息如何保存、客户端下次连接时如何获取用户…

使用Cursor和Claude AI打造你的第一个App

大家好&#xff0c;使用Cursor和Claude AI打造应用程序是一个结合智能代码辅助和人工智能对话的创新过程。Cursor是一个编程辅助工具&#xff0c;它通过智能代码补全、聊天式AI对话和代码生成等功能&#xff0c;帮助开发者提高编程效率。Claude AI则是一个强大的人工智能平台&a…

ssm152家庭财务管理系统设计与实现+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;家庭财务管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本家庭财务管理系…