网易网站开发语言,网站建设服务费怎么入账,建筑设计师接私活平台,站酷网怎么赚钱#xff08;原创声明#xff1a;该文是作者的原创#xff0c;面向对象是FPGA入门者#xff0c;后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门#xff0c;作者不光让大家知其然#xff0c;还要让大家知其所以然#xff01;每个工程作者都搭建了全自动化的仿…原创声明该文是作者的原创面向对象是FPGA入门者后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门作者不光让大家知其然还要让大家知其所以然每个工程作者都搭建了全自动化的仿真环境只需要双击top_tb.bat文件就可以完成整个的仿真前提是安装了modelsim降低了初学者的门槛。如需整个工程请留言WXBlue23Light不收任何费用但是仅供参考不建议大家获得资料后从事一些商业活动
频率计可以采集外部周期信号的频率当然实现方法有很多种这儿我们用FPGA采样计数来实现。
如果用FPGA采样计数实现频率计那FPGA的采样频率一定要远大于输入信号的频率。这个从直观上是很明确的你不可能用低频率采样高频信号就如拿砖头取打天上的飞机根本打不到的。用相近频率采集输入信号也不可以因为非常容易错过采集信号的跳变沿漏过很多采样的信号只要采样频率远远大于采集信号的频率才能不会漏过采集信号的跳变细节得到近似的频率值。
为什么我们不敢保证一定能得到外部输入信号的准确频率值因为输入信号和FPGA的系统时钟是异步信号FPGA采集的点有可以巧合错过一个跳变沿所以我们设计的频率计会有1-2个时钟周期的误差.这个误差可以通过长时间的采集求平均值来减小。
如下所示是FPGA实现频率计的波形示意图sys_clk是系统时钟freq_clk是要采集的时钟flag是设定时间段进行freq_clk时钟数的统计。建议将flag设置成2幂次方秒这样直接将计数值右移即可避免了除法的运算。 用系统时钟sys_clk采集输入时钟freq_clk所以要先把freq_clk同步到sys_clk时钟域再进行时钟数的统计。所以FPGA的设计也是非常简单的。这里sys_clk时钟频率设置为1MHz主要是为了减少计数值方便快速仿真。
设置了一个参数CNT4000000就是4秒的时间进行频率计数然后停4秒再进行4秒的频率计数以此反复用meter_flag进行标识。 freq_flag用来标识采样点完成输入周期信号freq_clk到sys_clk的同步。 在meter_flag拉高的时候对freq_clk进行计数通过采集freq_clk的上升沿最终得计数值通过右移2位实现除4的操作。 在仿真文件中设置freq_clk是128Hz仿真结果是128结果正确。 设置freq_clk是100KHz仿真结果是100_000结果正确。 设置freq_clk是128KHz仿真结果是128.008有8个时钟的偏差原因一是128KHz频率和1MHz比已经相差不大了而且128KHz不是1MHz的整数倍所以测量可能就会有偏差的。 还有一个重要的原因就是仿真产生的时钟周期freq_clk不是刚刚好的128KHz可能会有偏差。我们测量一下freq_clk的频率确实是128008Hz。 这节课只是简单的介绍频率计的FPGA实现如果要提高频率计的精度有多种方法可以改进比如用两个计数器一个上升沿计数一个下降沿计数相加求平均再比如将N个连续的频率值相加求平均等等有兴趣的读者可以自己设计来试一下。