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

数字频率计的设计-- 基于 HDL 方法

   

目录

   

数字频率计的设计

1.计数、锁存与显示译码电路设计

2.主控电路设计

3.分频电路设计

4.顶层电路设计

伪随机序列发生器 的设计


数字频率计的设计

基于HDL设计数字系统时,可以根据需要应用Verilog HDL描述所需要的功能电路,既有利于节约资源,同时又有利于提高系统的性能和可靠性。

   本节仍以设计能够测量1Hz~100MHz信号频率的数字频率计为目标,讲述基于Verilog HDL的设计方法。频率计应用8位数码管显示频率值,要求测量误差不大于±1Hz。

1.计数、锁存与显示译码电路设计

   描述只具有异步清零、计数允许控制和进位链接功能的同步十进制计数器的Verilog代码参考如下:

module HC160s(clk,rd_n,ep,et,q,co); input clk;input rd_n,ep,et;output reg [3:0] q;output wire co;// 进位逻辑assign co = (( q == 4'b1001 ) & et );     // 计数过程always @( posedge clk or negedge rd_n )  if ( !rd_n )   q <= 4'b0000;else if ( ep & et )if ( q == 4'b1001 )  q <= 4'b0000;  else  q <= q + 1'b1; endmodule

  为了节约FPGA资源,可以简化掉CD4511的灯测试和灭灯功能,只保留锁存功能,同时将显示译码器的输出设计为低电平有效以适应驱动DE2-115开发板上共阳数码管的需要。

2.主控电路设计

  主控电路用于产生周期性的清零信号、闸门信号和显示刷新信号。基于HDL设计时,可以根据功能要求直接描述主控电路。

 module freqer_ctrl ( clk, clr_n, cnten, dispen_n );input clk;           // 8Hzoutput reg clr_n;         // 计数器清零信号output reg cnten;         // 闸门信号output reg dispen_n;     // 显示刷新信号,低电平有效// 计数器状态变量定义reg [3:0] q;              // 10进制计数逻辑always @( posedge clk )  if (q >= 4'b1001) q <= 4'b0000;elseq <= q  +1'b1;// 译码输出always @( q )               case ( q )                 4'b0000 : begin clr_n = 0; cnten = 0; dispen_n = 1; end4'b0001 : begin clr_n = 1; cnten = 1; dispen_n = 1; end4'b0010 : begin clr_n = 1; cnten = 1; dispen_n = 1; end4'b0011 : begin clr_n = 1; cnten = 1; dispen_n = 1; end4'b0100 : begin clr_n = 1; cnten = 1; dispen_n = 1; end4'b0101 : begin clr_n = 1; cnten = 1; dispen_n = 1; end4'b0110 : begin clr_n = 1; cnten = 1; dispen_n = 1; end4'b0111 : begin clr_n = 1; cnten = 1; dispen_n = 1; end4'b1000 : begin clr_n = 1; cnten = 1; dispen_n = 1; end4'b1001 : begin clr_n = 1; cnten = 0; dispen_n = 0; enddefault: begin clr_n = 1; cnten = 0; dispen_n = 1; endendcaseendmodule

3.分频电路设计

   将DE2-115开发板所用的50MHz晶振分频为8Hz,需要用分频系数为(50×106/8=)6250000的分频器。应用偶分频器实现。

4.顶层电路设计

   频率计顶层电路既可以应用原理图进行设计,也可以应用Verilog HDL进行例化描述。

伪随机序列发生器 的设计

   在数字系统中,伪随机序列(pseudo-random sequence)是指具有随机统计特性,重复产生的确定性二值序列。伪随机序列在雷达、数字通信、信息安全以及通信系统性能测试等领域有着广泛的应用。

   伪随机序列通常由移位寄存器附加反馈网络产生,可分为线性反馈移位寄存器( Linear Feedback Shift Register,简称LFSR )和非线性反馈移位寄存器两大类。由LFSR产生的最大长度二值序列称为m序列。n级LFSR产生的m序列长度为 2n-1,是除全0状态之外的所有状态。m序列因其理论成熟,实现简单,因而获得了广泛的应用。

  如果n级LFSR序列的特征多项式f(x)满足以下三个条件:(1) f(x)是既约的,即f(x)不能再分解为多项式;(2 )f(x)可整除xm+1,其中m=2n-1;(3) f(x)除不尽xq+1,其中q<m,则f(x)为本原多项式。

    对于7级LFSR序列:取反馈系数c1和c7同时为1,或者c3和c7为同时1时,可以产生127位的m序列;对于12级LFSR:取反馈系数c1、c4、c5和c12同时为1时,可以产生4095位的m序列。

 // 定义循环变量integer i,j;// 时序逻辑过程,生成m序列输出位always @( posedge clk or negedge rst_n )  if ( !rst_n ) beginmCode_reg <= LFSR_INIT_STATE;mCode_bit <= 1'b0;endelse beginmCode_reg[1] <= polydat;for ( i=1; i <= mCode_LFSR_LEN-1; i = i+1 )mCode_reg[i+1] <= mCode_reg[i];mCode_bit <= mCode_reg[mCode_LFSR_LEN];end// 组合过程,根据特征多项式确定反馈值always @ *  for ( j = mCode_LFSR_LEN; j >= 1; j = j-1 )  if ( j == mCode_LFSR_LEN )polydat = mCode_reg[j];else if ( polynomial[j] )polydat = polydat ^ mCode_reg[j];            // m序列输出assign mCode_out = mCode_bit;
endmodule

  要求m序列的数据率为10~100kbps、按10kbps步进可调时,可应用分频器,通过切换分频器的分频系数,或者应用DDS实现。

http://www.lryc.cn/news/484323.html

相关文章:

  • [程序员] 没有产生core文件的原因
  • 【数字图像处理+MATLAB】基于 Sobel 算子计算图像梯度并进行边缘增强:使用 imgradientxy 函数
  • P10901 [蓝桥杯 2024 省 C] 封闭图形个数
  • ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法)
  • 手机直连卫星NTN通信初步研究
  • 蓝桥杯c++算法学习【2】之搜索与查找(九宫格、穿越雷区、迷宫与陷阱、扫地机器人:::非常典型的必刷例题!!!)
  • Android加载pdf
  • IOT物联网低代码可视化大屏解决方案汇总
  • Python的面向对象day7
  • 计算机网络(11)和流量控制补充
  • Rust 所有权机制
  • Pwn VM writeup
  • LSTM(长短期记忆网络)详解
  • 机器学习 贝叶斯公式
  • Scala-注释、标识符、变量与常量-用法详解
  • 大数据学习14之Scala面向对象--至简原则
  • docker 安装之 windows安装
  • JS 实现游戏流畅移动与按键立即响应
  • LabVIEW大数据处理
  • NVR录像机汇聚管理EasyNVR多品牌NVR管理工具视频汇聚技术在智慧安防监控中的应用与优势
  • 海思3403对RTSP进行目标检测
  • Vue之插槽(slot)
  • 分布式服务高可用实现:复制
  • 基于yolov8、yolov5的车型检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • 机器学习—决定下一步做什么
  • Java Optional详解:避免空指针异常的优雅方式
  • SpringBoot开发——整合EasyExcel实现百万级数据导入导出功能
  • AcWing 1097 池塘计数 flood fill bfs搜索
  • R门 - rust第一课陈天 -内存知识学习笔记
  • java itext后端生成pdf导出