首页 Verilog-数字频率计

Verilog-数字频率计

举报
开通vip

Verilog-数字频率计 摘要 I 摘 要 本文介绍了基于 FPGA的数字频率计的设计方法,设计采用硬件描述语言 Verilog ,在软件开发平台 ISE上完成,可以在较高速时钟频率(48MHz)下 正常工作。该数字频率计采用测频的方法,能准确的测量频率在 10Hz 到 100MHz之间的信号。使用 ModelSim仿真软件对 Verilog程序做了仿真,并完 成了综合布局布线,最终下载到芯片 Spartan3A上取得良好测试效果。 关键词:FPGA,Verilog,ISE,测频方法 摘要 I Abstract Thi...

Verilog-数字频率计
摘要 I 摘 要 本文介绍了基于 FPGA的数字频率计的设计方法,设计采用硬件描述语言 Verilog ,在软件开发平台 ISE上完成,可以在较高速时钟频率(48MHz)下 正常工作。该数字频率计采用测频的方法,能准确的测量频率在 10Hz 到 100MHz之间的信号。使用 ModelSim仿真软件对 Verilog程序做了仿真,并完 成了综合布局布线,最终下载到芯片 Spartan3A上取得良好测试效果。 关键词:FPGA,Verilog,ISE,测频方法 摘要 I Abstract This paper introduces the design method of digital frequency meter based on FPGA, which use hardware description language-Verilog in software development platform ISE and can word in relatively high-speed clock of 48MHz. The frequency meter uses the method of frequency measurement, which could accurately measure the frequency of signals between 10Hz to 100MHz. This system uses the simulation tool-ModelSim to run and debug the Verilog program, and design the circuit placement. A good result can be achieved when the program was burnt on the chip Spartan3A. KeywordsKeywordsKeywordsKeywords:::: FPGA, Verilog, ISE, Frequency Measurement 目录 III 目 录 第一章 测量原理与方法................................................................................................................................................................................................................................................................................................................................................................................................4444 1.1 测频方法.............................................................................................................4 1.2 测周方法.............................................................................................................5 1.3 等精度测量法.................................................................................................... 5 1.4 放大整形电路.................................................................................................... 6 1.5 时基信号产生.................................................................................................... 7 第二章 任务要求....................................................................................................................................................................................................................................................................................................................................................................................................................................................8888 第三章 各模块功能及介绍........................................................................................................................................................................................................................................................................................................................................................................8888 3.1 分频器.................................................................................................................. 8 4.2 闸门选择器........................................................................................................ 10 4.3 频率计数器........................................................................................................ 12 4.4 锁存器................................................................................................................ 14 4.5 扫描显示控制译码系统................................................................................... 15 第四章 顶层电路及总体仿真........................................................................................................................................................................................................................................................................................................................................................16161616 4.1 顶层电路.............................................................................................................. 16 4.2 总体仿真结果...................................................................................................... 16 4.3 测试结果............................................................................................................ 19 数字频率计 4 第一章 测量原理与方法 所谓“频率”,就是周期性信号在单位时间(秒)内变化的次数。若在一定的时 间间隔 T内计数,计得某周期性信号的重复变化次数为 N,则该信号的频率可 表达为: ffff ==== NNNN //// TTTT 所以测量频率就要分别知道 N和 T的值,由此,测量频率的方法一般 有三种:测频方法、测周方法和等精度测量。 1.11.11.11.1 测频方法测频方法测频方法测频方法 这种方法即已知时基信号(频率或周期确定)做门控信号,T为已知量,然 后在门控信号有效的时间段内进行输入脉冲的计数,原理图如下图所示: 图 1-1 测频方法原理图 首先,被测信号①(以正弦波为例)经过放大整形后转变成方波脉冲②,其重 复频率等于被测信号频率。把方波脉冲②加到闸门的输入端。由一个高稳定的 石英振荡器和一系列数字分频器组成了时基信号发生器,它输出时间基准(或频 率基准)信号③去控制门控电路形成门控信号④,门控信号的作用时间 T是非常 准确的(由石英振荡器决定)。门控信号控制闸门的开与闭,只有在闸门开通的 时间内,方波脉冲②才能通过闸门成为被计数的脉冲⑤由计数器计数。闸门开 通的时间称为闸门时间,其长度等于门控信号作用时间 T。比如,时间基准信 号的重复周期为 1S,加到闸门的门控信号作用时间 T亦准确地等于 1S,即闸 门的开通时间——“闸门时间”为 1S。在这一段时间内,若计数器计得 N=100000 个数,根据公式 f = N / T,那么被测频率就是 100000Hz。如果计数式频率计的 显示器单位为“KHz”,则显示 100.000KHz,即小数点定位在第三位。不难设 数字频率计 5 想,若将闸门时间设为 T=0.1S,则计数值为 10000,这时,显示器的小数点只 要根据闸门时间 T的改变也随之自动往右移动一位(自动定位),那么,显示的 结果为 100.00Khz。在计数式数字频率计中,通过选择不同的闸门时间,可以 改变频率计的测量范围和测量精度。 1.21.21.21.2测周方法测周方法测周方法测周方法 测周方法即:被测信号(频率或周期待测)做门控信号,T为未知量,做门 控信号 T,然后在门控信号有效的时间段内对时基信号脉冲计数,原理图如下 图所示: 图 1-2 测周方法原理图 计数器测周的基本原理刚好与测频相反,即由被测信号控制主门开门,而 用时标脉冲进行计数,所以实质上也是一种比较测量方法。 1.31.31.31.3等精度测量法等精度测量法等精度测量法等精度测量法 等精度测量法的核心思想是通过闸门信号与被测信号同步,将闸门时间τ 控制为被测信号周期长度的整数倍。测量时,先打开预置闸门,当 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 到被测 信号脉冲沿到达时,标准信号时钟开始计数。预置闸门关闭时,标准信号并不 立即停止计数,而是等检测到被测信号脉冲沿到达时才停止,完成被测信号整 数个周期的测量。测量的实际闸门时间可能会与预置闸门时间不完全相同,但 最大差值不会超过被测信号的一个周期。 在等精度测量法中,相对误差与被测信号本身的频率特性无关,即对整个 测量域而言,测量精度相等,因而称之为“等精度测量”。标准信号的计数值越 大则测量相对误差越小,即提高门限时间τ和标准信号频率 c f 可以提高测量精 数字频率计 6 度。在精度不变的情况下,提高标准信号频率可以缩短门限时间,提高测量速 度。原理图如下: 1.41.41.41.4放大整形电路放大整形电路放大整形电路放大整形电路 放大整形电路包括衰减器、跟随器、放大器、施密特触发器,衰减器由两 个双向限幅二极管构成,将来的信号限制在 0.7v到-0.7v之间。跟随器由一个集 成运算放大器组成,以增大带负载能力。放大器为由集成运放构成一个同向比 例放大器,放大位数为 50倍。施密特触发器由 555定时器组成,实现对波形的 整形,整形后的方波送到闸门以便计数。 其仿真电路如下图所示: 图 1-5 放大整形电路 当输入信号为 0.5V时,仿真放大整形后的输出结果如下图示: 图 1-4 等精度测量的原理图 数字频率计 7 图 1-6 放大整形电路仿真结果(一) 当输入信号为 3V时,仿真放大整形后的输出结果如下图示: 图 1-6 放大整形电路仿真结果(二) 当输入信号为 10V时,仿真放大整形后的输出结果如下图示: 1.51.51.51.5时基信号产生时基信号产生时基信号产生时基信号产生 系统所使用的时钟信号由时基信号产生模块产生,它由一块晶体振荡器及 简单的电路组成,如下图所示: 图 1-7 时基信号产生电路 图 1-6 放大整形电路仿真结果(三) 数字频率计 8 第二章 任务要求 设计一个计数式频率计,其频率测量范围为 10Hz~1MHz,测量结果用 6 只数码管显示。有三个带锁按键开关(任何时候都只能有一个被按下)被用来选 择 1S、0.1S和 0.01S三个闸门时间中的一个。有一个按钮开关用来使频率计复 位。有两只 LED,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出 指示。下图显示了该频率计前面板的基本排布构想。 第三章 各模块功能及介绍 3.13.13.13.1 分频器分频器分频器分频器 由于晶体振荡器提供的为 48M的时钟,而在整个频率计里将用到周期为 2s、0.2s和 0.02s的闸门信号,还有译码显示的扫描信号 1KHz ,所以我们在此 模块先分频产生 1Hz、10Hz、100Hz、1KHz四个分频信号,以留作其它模块用。 分频分别采用 4个计数器来实现,当计到一定的值时输出的分频信号翻转, 最后分别获得 4个分频输出,分频器模块如下图所示: 图 3-1 分频器模块 此模块的复位为同步方式,当复位有效时,输出将清零。 源程序如下: 数字频率计 9 module div_clk(reset, clk, clk_1hz, clk_10hz, clk_100hz, clk_1khz); input reset,clk; output reg clk_1hz, clk_10hz,clk_100hz,clk_1khz; reg [29:0] counter1,counter2,counter3,counter4; //分频计数值 always @(posedge clk or negedge reset) begin if(!reset) begin counter1<=0;counter2<=0;counter3<=0;counter4<=0; clk_1hz<=0;clk_10hz<=0;clk_100hz<=0;clk_1khz<=0; end else begin if(counter1==24000000) begin counter1<=0;clk_1hz<=~clk_1hz; end else begin counter1<=counter1+1; end if(counter2==2400000) begin counter2<=0;clk_10hz<=~clk_10hz; end else begin counter2<=counter2+1; end if(counter3==240000) begin counter3<=0;clk_100hz<=~clk_100hz; end else begin counter3<=counter3+1; end if(counter4==24000) begin counter4<=0;clk_1khz<=~clk_1khz; end else begin counter4<=counter4+1; end end end endmodule 仿真图如下所示: 图 3-2 分频器模块仿真图(一) 图 3-3 分频器模块仿真图(二) 数字频率计 10 4.24.24.24.2 闸门选择器闸门选择器闸门选择器闸门选择器 该模块主要实现对闸门的选择功能,通过输入的门选信号来确定输出的闸 门,生成的模块如下图所示: 图 3-4 闸门选择器 具体实现方法如下:当三个门选信号中有且仅有门选信号 gate_ch1有效时, reg变量 gate 为 clk_1hz ,f的值为 01;当三个门选信号中有且仅有门选信号 gate_ch2有效时,reg变量 gate 为 clk_10hz ,f的值为 10;当三个门选信号中 有且仅有门选信号 gate_ch3有效时,reg变量 gate为 clk_100hz ,f的值为 11。 reg变量 gate再二分频则是输出的闸门信号 gate_out(f 为标记信号,标记了当 前闸门的选择情况)。如果同时有两个或以上的门选信号有效,则 err 输出为低, 否则为高。 另外输出的译码扫描信号为 clk_1khz ,供后面的扫描译码模块使用。 本模块的源代码如下所示: module gate_ch(reset,gate_ch1,gate_ch2,gate_ch3, clk_1hz,clk_10hz,clk_100hz,clk_1khz, gate_out,err,scan_freq,f); input reset,gate_ch1,gate_ch2,gate_ch3, clk_1hz,clk_10hz,clk_100hz,clk_1khz; output reg gate_out,err; output wire scan_freq; output reg [1:0] f; reg [2:0] counter5; // 产生扫描信号时的分频计数值 数字频率计 11 reg gate; always @(posedge clk_1khz or negedge reset) begin if(!reset) begin gate<=0;counter5<=0;err<=1;f=2'b01; end else begin if(gate_ch1==0 && gate_ch2==1 && gate_ch3==1) begin gate<=clk_1hz; f=2'b01;err<=1; end else if(gate_ch1==1 && gate_ch2==0 && gate_ch3==1) begin gate<=clk_10hz;f=2'b10;err<=1; end else if(gate_ch1==1 && gate_ch2==1 && gate_ch3==0) begin gate<=clk_100hz;f=2'b11;err<=1; end else begin err<=0; end end end assign scan_freq=clk_1khz; always @(posedge gate or negedge reset) begin if(!reset) begin gate_out<=0; end else begin gate_out<=~gate_out; end end endmodule 仿真结果如下图所示: 图 3-5 当且仅当 gate_ch2有效时的仿真结果图(一) 数字频率计 12 4.34.34.34.3 频率计数器频率计数器频率计数器频率计数器 频率计数器的功能为在输入的闸门信号的控制下对输入脉冲时行计数,它 是一个 7拉的模十计数器。生成的模块如下图所示: 图 3-6 当且仅当 gate_ch2有效时的仿真结果图(一) 当 gate_out信号为高时才计数器才计数,在 gate_out为低后,马上将此时 计数的值 cnt赋给输出 cnte ,然后当输入 carry_in信号再过一个脉冲后降计数 的值 cn清零,以备下次闸门有效时又重新开始计数。源程序如下: module count(carry_in,gate_out,reset, cnte0,cnte1,cnte2,cnte3,cnte4,cnte5,cnte6); input carry_in,gate_out,reset; output reg [3:0] cnte0,cnte1,cnte2,cnte3,cnte4,cnte5,cnte6;//在每一次闸门有效时读数 //器传递的计数值 reg [3:0] cnt0,cnt1,cnt2,cnt3,cnt4,cnt5,cnt6; //计数器的 6个计数值 reg [2:0] counter6; // 延迟将 counter-num清零的计数值 always @(posedge carry_in or negedge reset) begin if(!reset) begin cnt0<=4'b0000;cnt1<=4'b0000;cnt2<=4'b0000;cnt3<=4'b0000; cnt4<=4'b0000;cnt5<=4'b0000;cnt6<=4'b0000;//判断是否溢出 cnte0<=4'b0000;cnte1<=4'b0000;cnte2<=4'b0000; cnte3<=4'b0000;cnte4<=4'b0000;cnte5<=4'b0000;counter6<=0; end else begin if(gate_out==1) begin counter6<=0; if((cnt5==4'b1001)&&(cnt4==4'b1001)&&(cnt3==4'b1001)&&(cnt2==4'b1001) &&(cnt1==4'b1001)&&(cnt0==4'b1001)) begin cnt0<=4'b0000;cnt1<=4'b0000;cnt2<=4'b0000;cnt3<=4'b0000; cnt4<=4'b0000;cnt5<=4'b0000;cnt6<=cnt6+4'b0001;end else begin 数字频率计 13 if((cnt4==4'b1001)&&(cnt3==4'b1001)&&(cnt2==4'b1001)&&(cnt1==4'b1001)&&(c nt0==4'b1001)) begin cnt0<=4'b0000; cnt1<=4'b0000; cnt2<=4'b0000; cnt3<=4'b0000; cnt4<=4'b0000; cnt5<=4'b0001+cnt5; cnt6<=cnt6; end else begin if((cnt3==4'b1001)&&(cnt2==4'b1001)&&(cnt1==4'b1001)&&(cnt0==4'b1001))begin cnt0<=4'b0000; cnt1<=4'b0000; cnt2<=4'b0000; cnt3<=4'b0000; cnt4<=4'b0001+cnt4; cnt5<=cnt5; cnt6<=cnt6; end else begin if((cnt2==4'b1001)&&(cnt1==4'b1001)&&(cnt0==4'b1001)) begin cnt0<=4'b0000; cnt1<=4'b0000; cnt2<=4'b0000; cnt3<=4'b0001+cnt3; cnt4<=cnt4; cnt5<=cnt5; cnt6<=cnt6; end else begin if((cnt1==4'b1001)&&(cnt0==4'b1001)) begin cnt0<=4'b0000; cnt1<=4'b0000; cnt2<=4'b0001+cnt2; cnt3<=cnt3; cnt4<=cnt4; cnt5<=cnt5;cnt6<=cnt6; end else begin if((cnt0==4'b1001)) begin cnt0<=4'b0000; cnt1<=4'b0001+cnt1; cnt2<=cnt2; cnt3<=cnt3; cnt4<=cnt4; cnt5<=cnt5; cnt6<=cnt6; end else begin cnt0<=4'b0001+cnt0; cnt1<=cnt1; cnt2<=cnt2; cnt3<=cnt3; cnt4<=cnt4; cnt5<=cnt5; cnt6<=cnt6; end end end end end end end else begin if(counter6==2'b01) begin cnt0<=4'b0000; cnt1<=4'b0000; cnt2<=4'b0000; cnt3<=4'b0000; cnt4<=4'b0000; cnt5<=4'b0000; cnt6<=4'b0000; end else begin counter6<=counter6+1; cnte0<=cnt0; cnte1<=cnt1; cnte2<=cnt2;cnte3<=cnt3; cnte4<=cnt4; cnte5<=cnt5; cnte6<=cnt6; end end end end endmodule 频率计数器的仿真工作时序如图所示: 图 3-7 频率计数器的仿真结果图 数字频率计 14 4.44.44.44.4 锁存器锁存器锁存器锁存器 如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入 脉冲数的增加而不断跳变,那么显示数码管则也会不断闪烁跳变,让人不能看 到稳定的输出,设锁存器后,则不再跳变,便可清晰读出计数结果。其生成的 功能模块如图所示: 图 3-7 锁存器模块 这模块实现了对七位计数结果的锁存功能。程序很简单如下所示: module latch(reset,clk_1hz,cnte0,cnte1,cnte2,cnte3,cnte4,cnte5,cnte6, cn0,cn1,cn2,cn3,cn4,cn5,cn6); input reset,clk_1hz; input [3:0] cnte0,cnte1,cnte2,cnte3,cnte4,cnte5,cnte6; output reg [3:0] cn0,cn1,cn2,cn3,cn4,cn5,cn6; always @(posedge clk_1hz or negedge reset) begin if(!reset) begin cn0<=4'b0000; cn1<=4'b0000; cn2<=4'b0000; cn3<=4'b0000; cn4<=4'b0000; cn5<=4'b0000; cn6<=4'b0000; end else begin cn0<=cnte0; cn1<=cnte1; cn2<=cnte2; cn3<=cnte3; cn4<=cnte4; cn5<=cnte5; cn6<=cnte6; end end endmodule 数字频率计 15 4.54.54.54.5 扫描显示控制译码系统扫描显示控制译码系统扫描显示控制译码系统扫描显示控制译码系统 本模块在扫描信号的 scan_for的控制下,对多路选择器进行扫描,实现对 实现对六位已经锁存的计数结果的扫描输出,由于人眼的视觉暂留效应,每支 数码管只需大于 25Hz的扫描频率即可实现动态扫描,所以我们用 1KHz的扫描 信号足以。其生成的功能模块如图所示: 图 3-7 频率计数器的仿真结果图 本模块还实现了高位的无意义的消隐,即高位若值为零且无意义时,相应 的数码管将不会显示。输出信号 over通过最高位 cnt6是否有值来判断结果是否 溢出,如果溢出则 over输出结果为低 ,led_khz为单位标志,如果 led_khz 为 有效时,显示结果的单位为 KHz ,dot实现了小数点的显示。其源程序较多, 可以附录中查看,此模块的仿真结果如下所示: 图 3-7 频率计数器的仿真结果图 数字频率计 16 第四章 顶层电路及总体仿真 4.14.14.14.1 顶层电路顶层电路顶层电路顶层电路 顶层电路如下图所示: 图 4-1顶层电路图 4.24.24.24.2 总体仿真结果总体仿真结果总体仿真结果总体仿真结果 为了验证我们的设计是否正确,我们用ModelSim对以上设计进行了仿真, 仿真精度达到 ps 级,基准时钟 clk用 20883ns,结果如下所示,在 1Hz 到 10000Hz中仿真结果与理论值相等,在输入为 100000Hz时出现了 3Hz的误差, 当输入被测信号为 1000000Hz时,出现了 26Hz的误差。 仿真结果波形如下图所示: 数字频率计 17 图 4-2被测信号为 10 Hz的仿真结果 图 4-3测信号为 100 Hz的仿真结果 图 4-3 被测信号为 1000 Hz的仿真结果 数字频率计 18 10 000 Hz: 图 4-4 被测信号为 10000 Hz的仿真结果 100 000 Hz: 图 4-5 被测信号为 100000 Hz的仿真结果 1000 000 Hz: 图 4-6 被测信号为 1000000 Hz的仿真结果 数字频率计 19 4.34.34.34.3 测试结果测试结果测试结果测试结果 在成功下载并运行后,为评估该设计系统的实际测量效果,做了一次对比 实验,选用频率可调的函数发生器,同时用示波器做同步的跟踪。测得的数据 较为精确,最低频率可以测到 10Hz,当输入信号不大于 10KHz时,显示结果 跟函数发生器以及示波器的显示全吻合,当输入信号频率达到 100KHz时,测 得的结果和显波器的显示出现了 3Hz的差值,当输入信号频率达到 1000KHz 时,测得的结果和显波器的显示出现了 27Hz的差值,由于所使用的函数发生 器最大只能产生 41MHz的信号,所以我们最高只测到 41MHz。 数字频率计 20 测量原理与方法 测频方法 测周方法 等精度测量法 放大整形电路 时基信号产生 第二章任务要求 第三章各模块功能及介绍 3.1分频器 4.2闸门选择器 4.3频率计数器 4.4锁存器 4.5扫描显示控制译码系统 第四章顶层电路及总体仿真 4.1顶层电路 4.2总体仿真结果 4.3测试结果
本文档为【Verilog-数字频率计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_167056
暂无简介~
格式:pdf
大小:493KB
软件:PDF阅读器
页数:20
分类:互联网
上传时间:2012-06-07
浏览量:32