Verilog数字频率计Word下载.docx
- 文档编号:17450842
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:17
- 大小:930.89KB
Verilog数字频率计Word下载.docx
《Verilog数字频率计Word下载.docx》由会员分享,可在线阅读,更多相关《Verilog数字频率计Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
被测信号(频率或周期待测)做门控信号,T为未知量,做门控信号T,然后在门控信号有效的时间段内对时基信号脉冲计数,原理图如下图所示:
图1-2测周方法原理图
计数器测周的基本原理刚好与测频相反,即由被测信号控制主门开门,而用时标脉冲进行计数,所以实质上也是一种比较测量方法。
1.3等精度测量法
等精度测量法的核心思想是通过闸门信号与被测信号同步,将闸门时间τ控制为被测信号周期长度的整数倍。
测量时,先打开预置闸门,当检测到被测信号脉冲沿到达时,标准信号时钟开始计数。
预置闸门关闭时,标准信号并不立即停止计数,而是等检测到被测信号脉冲沿到达时才停止,完成被测信号整数个周期的测量。
测量的实际闸门时间可能会与预置闸门时间不完全相同,但最大差值不会超过被测信号的一个周期。
在等精度测量法中,相对误差与被测信号本身的频率特性无关,即对整个测量域而言,测量精度相等,因而称之为“等精度测量”。
标准信号的计数值越大则测量相对误差越小,即提高门限时间τ和标准信号频率
可以提高测量精度。
在精度不变的情况下,提高标准信号频率可以缩短门限时间,提高测量速度。
原理图如下:
图1-4等精度测量的原理图
1.4放大整形电路
放大整形电路包括衰减器、跟随器、放大器、施密特触发器,衰减器由两个双向限幅二极管构成,将来的信号限制在0.7v到-0.7v之间。
跟随器由一个集成运算放大器组成,以增大带负载能力。
放大器为由集成运放构成一个同向比例放大器,放大位数为50倍。
施密特触发器由555定时器组成,实现对波形的整形,整形后的方波送到闸门以便计数。
其仿真电路如下图所示:
图1-5放大整形电路
当输入信号为0.5V时,仿真放大整形后的输出结果如下图示:
图1-6放大整形电路仿真结果
(一)
当输入信号为3V时,仿真放大整形后的输出结果如下图示:
图1-6放大整形电路仿真结果
(二)
当输入信号为10V时,仿真放大整形后的输出结果如下图示:
1.5时基信号产生
系统所使用的时钟信号由时基信号产生模块产生,它由一块晶体振荡器及简单的电路组成,如下图所示:
图1-7时基信号产生电路
第二章任务要求
设计一个计数式频率计,其频率测量范围为10Hz~1MHz,测量结果用6只数码管显示。
有三个带锁按键开关(任何时候都只能有一个被按下)被用来选择1S、0.1S和0.01S三个闸门时间中的一个。
有一个按钮开关用来使频率计复位。
有两只LED,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出指示。
下图显示了该频率计前面板的基本排布构想。
第三章各模块功能及介绍
3.1分频器
由于晶体振荡器提供的为48M的时钟,而在整个频率计里将用到周期为2s、0.2s和0.02s的闸门信号,还有译码显示的扫描信号1KHz,所以我们在此模块先分频产生1Hz、10Hz、100Hz、1KHz四个分频信号,以留作其它模块用。
分频分别采用4个计数器来实现,当计到一定的值时输出的分频信号翻转,最后分别获得4个分频输出,分频器模块如下图所示:
图3-1分频器模块
此模块的复位为同步方式,当复位有效时,输出将清零。
源程序如下:
modulediv_clk(reset,clk,
clk_1hz,clk_10hz,clk_100hz,clk_1khz);
inputreset,clk;
outputregclk_1hz,clk_10hz,clk_100hz,clk_1khz;
reg[29:
0]counter1,counter2,counter3,counter4;
//分频计数值
always@(posedgeclkornegedgereset)
begin
if(!
reset)
begin
counter1<
=0;
counter2<
counter3<
counter4<
clk_1hz<
clk_10hz<
clk_100hz<
clk_1khz<
endelsebegin
if(counter1==24000000)begincounter1<
clk_1hz<
=~clk_1hz;
end
elsebegincounter1<
=counter1+1;
if(counter2==2400000)begincounter2<
=~clk_10hz;
elsebegincounter2<
=counter2+1;
if(counter3==240000)begincounter3<
=~clk_100hz;
elsebegincounter3<
=counter3+1;
if(counter4==24000)begincounter4<
=~clk_1khz;
elsebegincounter4<
=counter4+1;
end
end
endmodule
仿真图如下所示:
图3-2分频器模块仿真图
(一)
图3-3分频器模块仿真图
(二)
4.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,供后面的扫描译码模块使用。
本模块的源代码如下所示:
modulegate_ch(reset,gate_ch1,gate_ch2,gate_ch3,
clk_1hz,clk_10hz,clk_100hz,clk_1khz,
gate_out,err,scan_freq,f);
inputreset,gate_ch1,gate_ch2,gate_ch3,
clk_1hz,clk_10hz,clk_100hz,clk_1khz;
outputreggate_out,err;
outputwirescan_freq;
outputreg[1:
0]f;
reg[2:
0]counter5;
//产生扫描信号时的分频计数值
reggate;
always@(posedgeclk_1khzornegedgereset)
if(!
reset)begin
gate<
counter5<
err<
=1;
f=2'
b01;
endelsebegin
if(gate_ch1==0&
&
gate_ch2==1&
gate_ch3==1)begin
gate<
=clk_1hz;
f=2'
endelseif(gate_ch1==1&
gate_ch2==0&
=clk_10hz;
b10;
gate_ch3==0)begin
=clk_100hz;
b11;
endelsebegin
err<
assignscan_freq=clk_1khz;
always@(posedgegateornegedgereset)
reset)begin
gate_out<
elsebegin
=~gate_out;
仿真结果如下图所示:
图3-5当且仅当gate_ch2有效时的仿真结果图
(一)
4.3频率计数器
频率计数器的功能为在输入的闸门信号的控制下对输入脉冲时行计数,它是一个7拉的模十计数器。
生成的模块如下图所示:
图3-6当且仅当gate_ch2有效时的仿真结果图
(一)
当gate_out信号为高时才计数器才计数,在gate_out为低后,马上将此时计数的值cnt赋给输出cnte,然后当输入carry_in信号再过一个脉冲后降计数的值cn清零,以备下次闸门有效时又重新开始计数。
modulecount(carry_in,gate_out,reset,
cnte0,cnte1,cnte2,cnte3,cnte4,cnte5,cnte6);
inputcarry_in,gate_out,reset;
outputreg[3:
0]cnte0,cnte1,cnte2,cnte3,cnte4,cnte5,cnte6;
//在每一次闸门有效时读数//器传递的计数值
reg[3:
0]cnt0,cnt1,cnt2,cnt3,cnt4,cnt5,cnt6;
//计数器的6个计数值
0]counter6;
//延迟将counter-num清零的计数值
always@(posedgecarry_inornegedgereset)begin
cnt0<
=4'
b0000;
cnt1<
cnt2<
cnt3<
cnt4<
cnt5<
cnt6<
//判断是否溢出cnte0<
cnte1<
cnte2<
cnte3<
cnte4<
cnte5<
counter6<
endelsebeginif(gate_out==1)begin
counter6<
if((cnt5==4'
b1001)&
(cnt4==4'
(cnt3==4'
(cnt2==4'
b1001)
(cnt1==4'
(cnt0==4'
b1001))begin
cnt0<
cnt4<
=cnt6+4'
b0001;
endelsebegin
if((cnt4==4'
cnt1<
cnt2<
cnt3<
cnt5<
b0001+cnt5;
cnt6<
=cnt6;
if((cnt3==4'
b1001))begin
b0001+cnt4;
=cnt5;
if((cnt2==4'
b0001+cnt3;
=cnt4;
endelsebeginif((cnt1==4'
b0001+cnt2;
=cnt3;
endelsebeginif((cnt0==4'
b1001))begin
b0001+cnt1;
=cnt2;
cnt0<
b0001+cnt0;
=cnt1;
endendendendendendendelsebegin
if(counter6==2'
b01)begin
counter6<
=counter6+1;
cnte0<
=cnt0;
cnte1<
cnte2<
cnte4<
cnte5<
cnte6<
endendendend
频率计数器的仿真工作时序如图所示:
图3-7频率计数器的仿真结果图
4.4锁存器
如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入脉冲数的增加而不断跳变,那么显示数码管则也会不断闪烁跳变,让人不能看到稳定的输出,设锁存器后,则不再跳变,便可清晰读出计数结果。
其生成的功能模块如图所示:
图3-7锁存器模块
这模块实现了对七位计数结果的锁存功能。
程序很简单如下所示:
modulelatch(reset,clk_1hz,cnte0,cnte1,cnte2,cnte3,cnte4,cnte5,cnte6,
cn0,cn1,cn2,cn3,cn4,cn5,cn6);
inputreset,clk_1hz;
input[3:
0]cn0,cn1,cn2,cn3,cn4,cn5,cn6;
always@(posedgeclk_1hzornegedgereset)begin
cn0<
cn1<
cn2<
cn3<
cn4<
cn5<
cn6<
=cnte0;
=cnte1;
=cnte2;
=cnte3;
cn4<
=cnte4;
=cnte5;
=cnte6;
endend
4.5扫描显示控制译码系统
本模块在扫描信号的scan_for的控制下,对多路选择器进行扫描,实现对实现对六位已经锁存的计数结果的扫描输出,由于人眼的视觉暂留效应,每支数码管只需大于25Hz的扫描频率即可实现动态扫描,所以我们用1KHz的扫描信号足以。
本模块还实现了高位的无意义的消隐,即高位若值为零且无意义时,相应的数码管将不会显示。
输出信号over通过最高位cnt6是否有值来判断结果是否溢出,如果溢出则over输出结果为低,led_khz为单位标志,如果led_khz为有效时,显示结果的单位为KHz,dot实现了小数点的显示。
其源程序较多,可以附录中查看,此模块的仿真结果如下所示:
第四章顶层电路及总体仿真
4.1顶层电路
顶层电路如下图所示:
图4-1顶层电路图
4.2总体仿真结果
为了验证我们的设计是否正确,我们用ModelSim对以上设计进行了仿真,仿真精度达到ps级,基准时钟clk用20883ns,结果如下所示,在1Hz到10000Hz中仿真结果与理论值相等,在输入为100000Hz时出现了3Hz的误差,当输入被测信号为1000000Hz时,出现了26Hz的误差。
仿真结果波形如下图所示:
图4-2被测信号为10Hz的仿真结果
图4-3测信号为100Hz的仿真结果
图4-3被测信号为1000Hz的仿真结果
10000Hz:
图4-4被测信号为10000Hz的仿真结果
100000Hz:
图4-5被测信号为100000Hz的仿真结果
1000000Hz:
图4-6被测信号为1000000Hz的仿真结果
4.3测试结果
在成功下载并运行后,为评估该设计系统的实际测量效果,做了一次对比实验,选用频率可调的函数发生器,同时用示波器做同步的跟踪。
测得的数据较为精确,最低频率可以测到10Hz,当输入信号不大于10KHz时,显示结果跟函数发生器以及示波器的显示全吻合,当输入信号频率达到100KHz时,测得的结果和显波器的显示出现了3Hz的差值,当输入信号频率达到1000KHz时,测得的结果和显波器的显示出现了27Hz的差值,由于所使用的函数发生器最大只能产生41MHz的信号,所以我们最高只测到41MHz。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog 数字频率计