100MHz等精度频率计设计基于Verilog HDLWord格式.docx
《100MHz等精度频率计设计基于Verilog HDLWord格式.docx》由会员分享,可在线阅读,更多相关《100MHz等精度频率计设计基于Verilog HDLWord格式.docx(13页珍藏版)》请在冰豆网上搜索。
![100MHz等精度频率计设计基于Verilog HDLWord格式.docx](https://file1.bdocx.com/fileroot1/2022-11/24/c190064c-1e5b-4d4f-b773-c67f8dafcdc6/c190064c-1e5b-4d4f-b773-c67f8dafcdc61.gif)
3.相位差:
测试两个同频率的信号之间的相位差,测试范围0~360
二、设计分析
使用FPGA数字信号处理方法,首先需要将正弦信号转换成可读取的数字方波信号,再经过FPGA设计计算得出所需测量值。
三、模电部分
首先选择比较器,对于100MHz信号,比较器灵敏度需要达到5ns内,TI公司的LTV3501灵敏度为4.5ns,符合要求
由TLV3501数据手册得知:
当频率低于50MHz的时候,正弦波的峰峰值需大于20mV,频率高于50MHz时,峰峰值需大于1V。
然后需要选择放大器,当正弦波幅值为10mV时,放大倍数需大于35。
方法通过二级放大,一级用OPA847放大20倍,二级用OPA675放大8倍,得到总放大倍数160的正弦波。
经转换后的输出电压符合TTL电平要求,可以被识别出0和1。
四、数电部分
开发板:
CycloneIVE:
EP4CE6E22C8
板载时钟为50MHz,带4个按键和一个复位键(按键按下为0,抬起为1),四个七段数码管(共阳),FPGA的引脚可由杜邦线引出。
设计思路:
测量频率:
输入一个100MHz的基准频率,由计数器CNT1来计算基准频率的上升沿个数,即周期数。
输入一个被测信号,它由计数器CNT2来测量周期数。
两个信号在同一个使能信号EN(使能信号时间为1~2s)下开始计数,计数完后,存储计数结果,由(CNT1*10)可以算出具体的计数时间(单位ns),再由((CNT1*10ns)/CNT2)*10^9可算得被测信号频率,单位Hz。
测量占空比:
同样由CNT1测量基准信号100MHz的周期数,使能信号还是EN。
CNT3测量的也是100MHz,但是它的使能信号是在EN使能时,有被测信号时且被测信号为高电平时计数,测得的是被测信号高电平中100MHz周期数的个数,即在一段时间内,高电平的计数个数占总计数个数的比例。
所以占空比计算公式为CNT3/CNT1*100。
测量相位差:
CNT3同前。
CNT4测量的也是100MHz,但它的使能信号为当被测信号1为高电平,被测信号2为低电平。
即被测信号1超前被测信号2的部分计数。
用CNT4/CNT3*180即被测信号1和被测信号2的相位差,但有一个限制,就是被测信号1和被测信号2的占空比都为50%。
原理图:
原理图仿真:
频率:
占空比:
相位差:
mySZQLJ:
下载用的顶层文件
test:
仿真用的顶层文件
KEY:
按键模块,用于按键消抖
DFF1:
D触发器,用于等待被测信号上升沿
PL:
用于产生测试信号
LPM_PLL:
用LPM生成的锁相环,用于倍频
couter32:
32位计数器
process:
用于选择数据输出及数据计算
MUX:
4选1选择器,选择输出计数器的值
SMG:
驱动4个7段数码管
mySZPLJ顶层文件
KEY模块
加入按键模块是为了防止按键抖动,同时实现TOGGLE,即按一下开始计数,再按一下计数结束。
DFF1模块
DFF1模块可以让使能信号和基准信号,被测信号等同上升沿,提高精准度。
PL模块
PL模块输入100MHz信号,通过程序转换,输出用于测试用的各个信号。
LPM_PLL模块
由于板载晶振50M,达不到100MHz要求,加入LPM_PLL模块为了倍频,得到所需要的100MHz基准信号。
couter32模块
计数器,采用32位,因为2^32>
100M.
process模块
软件转换,由于计算结果会溢出,这里下载到板子的程序并不包含这个,process模块仅用于仿真使用。
MUX模块
4选1模块,选择要输出的结果
SMG模块
驱动4个7段数码管。
五、下载测试与误差分析
下载测试
绑定引脚:
被测1输入:
PIN_30
被测2输入:
PIM_28
生成的测试信号1Hz:
PIN_105
生成的测试信号1KHz:
PIN_103
生成的测试信号1MHz:
PIN_100
PIN_98
下载与读数:
误差分析
可能出现的误差就是,当基准信号还在高电平和低电平时,EN使能,这会导致CNT1多计数或少计数一个周期,导致计算结果出现误差。
六、总结
为期两周的课设结束了,虽然我如愿完成了设计要求,但是由于身边没有可用MCU和自身知识的不足,我未能设计出一款由单片机控制,完全“傻瓜式”的频率计,这是个小小的遗憾。
我相信通过日后不断学习,我会设计出来的。
在这两周的设计过程中,我遇到了不少问题。
首先是对于Quartus的使用和Verilog知识的掌握,上一次使用它们已经是一年前,难免生疏了。
代价就是花费了我将近两三天的查阅书籍和翻看以前的程序才捡回来。
其次是对模电知识的理解不到位,可能课上学的都是理论知识,现实情况便手忙脚乱。
在设计过程中,遇到了大大小小的问题,有时候出现一个小小的错误,就需要半天才能发现和改正过来。
为了避免这种情况,我应该更严谨,把工程分为多个模块去完成,这样才可以快速定位问题。
通过这两周的学习,我知道知识不用会忘,学习不严谨会出错。
所以以后我要更加严谨,并且要多用自己学到的技能。