您好,欢迎访问三七文档
等精度频率测量一、设计背景介绍等精度频率测量有两个计数器,一个对标准频率时钟计数,另一个对被测频率时钟计数,计数器的ctrl输入端是使能输入,用于控制计数器计数的长度;clr输入端是同步清零输入。测量开始之前首先clr置高电平,使所有寄存器和计数器清零。然后由外部控制器发出频率测量使能信号,即使ctrl为高电平,而内部的门控信号ena要到被测脉冲的上升沿才会置为高电平,同时两个计数器开始计数。当ctrl持续一段时间之后,由外部控制器置为低电平,而此时ena信号仍将保持下一个被测脉冲的上升沿到来时才为0,此时计数器停止工作。这样就使得计数器的工作时间总是等于被测信号的完整周期,这就是等精度频率测量的关键所在。比如在一次测量中,被测信号的计数值为Nt,对基准时钟的技术值为Nr,设基准时钟的频率为Fr,则被测信号的频率为Ft=Fr×Nt÷Nr。最后两个计数值传输到主控制器中计算得到被测信号的频率。(本设计参阅《数字系统设计与VerilogHDL》(第四版)P354相关内容。)二、设计要求:1、熟悉等精度频率测量的工作原理,2、给出工作流程及子模块的构成,3、利用VerilogHDL设计等精度频率测量电路,给出详细设计过程4、编写测试程序,5、在EDA工具上仿真功能和时序的正确性,6、给出仿真时序,7、撰写课程设计报告三、设计方案与源程序说明//等精度频率测量Verilog源代码。modulefreq_ms_djd(inputclk_ref,//参考时钟inputclk_test,//被测信号inputenable,//全局使能outputreg[31:0]refer,//参考计数值outputreg[31:0]test);//被测计数值regena;//等精度门控信号regclr;//清零信号regtgate;//时间门控信号reg[31:0]timer;//计时器信号reg[31:0]ref_cnt;//参考计数器reg[31:0]test_cnt;//被测计数器always@(posedgeclk_ref)//计时器:100MHz时钟,计时2sbeginif(enable==0)begintimer=32'd0;endelsebeginif(timer==32'd200000001)begintimer=32'd0;endelsebegintimer=timer+1;endendendalways@(negedgeclk_ref)//时间门控信号:tgate,清零信号:clrbeginif(~enable)beginclr=1;tgate=0;endelsebeginif(timer==32'd100000000)begintgate=0;endelsebeginif(timer==32'd200000000)beginclr=1;endelsebeginif(timer==32'd200000001)beginclr=0;tgate=1;endendendendend//等精度门控信号产生:从tgate到ena,由被测信号clk_test触发always@(posedgeclk_testorposedgeclr)beginif(clr==1)beginena=1'b0;endelsebeginena=tgate;endendalways@(negedgeena)//每2s更新一次输出beginrefer=ref_cnt;test=test_cnt;endalways@(posedgeclk_reforposedgeclr)//参考时钟计数器beginif(clr==1)beginref_cnt=32'd0;endelseif(ena)beginref_cnt=ref_cnt+1;endendalways@(posedgeclk_testorposedgeclr)//被测信号计数器beginif(clr==1)begintest_cnt=32'd0;endelseif(ena)begintest_cnt=test_cnt+1;endendendmodule
本文标题:十八等精度频率测量
链接地址:https://www.777doc.com/doc-2588631 .html