100MHz等精度频率计设计(基于Verilog HDL)
计算机毕业论文_基于FPGA的等精度频率计的设计与实现

目录前言...............................................................1 第一章 FPGA及Verilog HDL..........................................2 1.1 FPGA简介.....................................................2 1.2 Verilog HDL 概述.............................................2 第二章数字频率计的设计原理........................................3 2.1 设计要求.....................................................3 2.2 频率测量.....................................................3 2.3.系统的硬件框架设计..............................................4 2.4系统设计与方案论证............................................5 第三章数字频率计的设计............................................8 3.1系统设计顶层电路原理图........................................8 3.2频率计的VHDL设计.............................................9 第四章软件的测试...............................................15 4.1测试的环境——MAX+plusII.....................................15 4.2调试和器件编程...............................................15 4.3频率测试.....................................................16基于FPGA的等精度频率计的设计与实现摘要:本文详细介绍了一种基于FPGA的高精度频率计。
基于Verilog语言的等精度测频计设计

基于Ver ilog语言的等精度频率计设计赵 亮,吴振宇(大连理工大学创新院,辽宁省大连市116023)摘 要:介绍了等精度测量频率的原理,利用Veril og硬件描述语言设计实现了频率计内部功能模块,对传统的等精度测量方法进行了改进,增加了测量脉冲宽度的功能;采用AT89S51单片机进行数据运算处理,利用液晶显示器对测量的频率、周期、占空比进行实时显示,可读性好。
充分发挥FPG A(现场可编程门阵列)的高速数据采集能力和单片机的高效计算与控制能力,使两者有机地结合起来。
在QuartusⅡ6.0EDA(电子设计自动化)开发平台上进行仿真、测试,并最终下载到FPG A芯片内部。
系统测量精度高,实时性好,具有很好的应用前景。
关键词:等精度;频率计;Veril og硬件描述语言;单片机中图分类号:T M935.1收稿日期:2007201222;修回日期:2007203221。
0 引 言传统测量频率的方法主要有直接测量法、分频测量法、测周法等,这些方法往往只适用于测量一段频率,当被测信号的频率发生变化时,测量的精度就会下降。
本文提出一种基于等精度原理的测量频率的方法,在整个频率测量过程中都能达到相同的测量精度,而与被测信号的频率变化无关。
本文利用FPG A(现场可编程门阵列)的高速数据处理能力,实现对被测信号的测量计数;利用单片机的运算和控制能力,实现对频率、周期、脉冲宽度的计算及显示。
1 等精度测量原理等精度测量的一个最大特点是测量的实际门控时间不是一个固定值,而是一个与被测信号有关的值,刚好是被测信号的整数倍。
在计数允许时间内,同时对标准信号和被测信号进行计数,再通过数学公式推导得到被测信号的频率。
由于门控信号是被测信号的整数倍,就消除了对被测信号产生的±1误差,但是会产生对标准信号±1的误差。
如图1所示。
图1 等精度测量原理系统中,如果采用的标准信号源的精度很高,就可以达到一个很高的测量精度,一般情况下都是采用晶体作为标准信号源,因此可以达到很高的精度,满足一般系统的要求。
基于Verilog的数字频率计的设计(包含代码及仿真)

一、实验名称数字频率计的设计二、实验地点211楼303三、实验目的和任务(1) 了解数字电路设计的基本特点(2) 了解数字频率计电路的基本原理(3) 基本掌握ISE 软件的使用(设计输入、仿真、实现)(4) 了解可编程逻辑器件(FPGA )的一般情况(5) 基本掌握HDL 的使用四、实验内容(1) 设计出符合设计要求的解决方案(2) 设计出单元电路(3) 利用EDA 软件对各单元电路及整体电路进行仿真(4)利用EDA 软件在ELB 电子课程设计实验板实现设计(5) 观察实验结果五、项目需用仪器设备名称以及所需主要元器件PC 机、EDA教学实验系统一台,带有(SPARTAN -3A XC3S200A芯片,LED 管, 七段数码管等)的实验板一块, 跳线、下载电缆一根,函数发生器。
六、实验任务与要求频率测量范围为10Hz~10MHz,用6只数码管以kHz为单位显示测量结果;有三个带锁按键开关(任何时候都只会有一个被按下)用来选择1S、0.1S和0.01S三个闸门时间中的一个;有一个按钮开关用来使频率计复位;有两只LED,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出指示。
数字频率计的相关技术指标如下:1、位数:测量频率通过LED数码管为六位十进制数显示。
2、测试频率范围为:10HZ-10MHZ。
3、计数器溢出时要有溢出标志over。
4、需要有闸门标志gate。
5、显示工作方式:a、用BCD七段共阳极数码管显示读数,只有在读数不发生跳变时才是正确的结果。
b、采用记忆显示方法,即在一次测试结束时,显示测试结果,此显示值一直保留到下次测量显示数到来,才将上次显示更新。
用第二次测试结果,更新显示值。
6、要求被测输入信号应是符合数字电路要求的脉冲波。
七、verilog设计环境介绍VerilogVerilog HDL是目前应用最为广泛的硬件描述语言.Verilog HDL可以用来进行各种层次的逻辑设计,也可以进数字系统的逻辑综合,仿真验证和时序分析等。
基于FPGA的等精度频率计的设计毕业设计论文

毕业论文声明本人郑重声明:1.此毕业论文是本人在指导教师指导下独立进行研究取得的成果。
除了特别加以标注地方外,本文不包含他人或其它机构已经发表或撰写过的研究成果。
对本文研究做出重要贡献的个人与集体均已在文中作了明确标明。
本人完全意识到本声明的法律结果由本人承担。
2.本人完全了解学校、学院有关保留、使用学位论文的规定,同意学校与学院保留并向国家有关部门或机构送交此论文的复印件和电子版,允许此文被查阅和借阅。
本人授权大学学院可以将此文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本文。
3.若在大学学院毕业论文审查小组复审中,发现本文有抄袭,一切后果均由本人承担,与毕业论文指导老师无关。
4.本人所呈交的毕业论文,是在指导老师的指导下独立进行研究所取得的成果。
论文中凡引用他人已经发布或未发表的成果、数据、观点等,均已明确注明出处。
论文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的研究成果。
对本文的研究成果做出重要贡献的个人和集体,均已在论文中已明确的方式标明。
学位论文作者(签名):年月关于毕业论文使用授权的声明本人在指导老师的指导下所完成的论文及相关的资料(包括图纸、实验记录、原始数据、实物照片、图片、录音带、设计手稿等),知识产权归属华北电力大学。
本人完全了解大学有关保存,使用毕业论文的规定。
同意学校保存或向国家有关部门或机构送交论文的纸质版或电子版,允许论文被查阅或借阅。
本人授权大学可以将本毕业论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存或编汇本毕业论文。
如果发表相关成果,一定征得指导教师同意,且第一署名单位为大学。
本人毕业后使用毕业论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为大学。
本人完全了解大学关于收集、保存、使用学位论文的规定,同意如下各项内容:按照学校要求提交学位论文的印刷本和电子版本;学校有权保存学位论文的印刷本和电子版,并采用影印、缩印、扫描、数字化或其它手段保存或汇编本学位论文;学校有权提供目录检索以及提供本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有关部门或者机构送交论文的复印件和电子版,允许论文被查阅和借阅。
基于verilog的频率计

基于verilog的频率计——————————————————高风顶层模块module top(seg,dig,ena,ove_led,gate,dp,khz_led,clk,clk2,key1,key2,key3,reset);input clk,clk2,key1,key2,key3,reset;output ena,ove_led,gate,dp,khz_led;output [6:0] seg;output [2:0] dig;wireclk_10hz,clk_100hz,clk_1khz,clk_10khz,fre10,load,clr_count,ove;wire [3:0] cnt0,cnt1,cnt2,cnt3,cnt4,cnt5;divclk U1(.clk(clk),.clk_10hz(clk_10hz),.clk_100hz(clk_100hz),.clk_1khz(clk_1khz),.clk_10khz(clk_10khz));chang U2(.clk_10hz(clk_10hz),.clk_100hz(clk_100hz),.clk_1khz(clk_1khz),.clk_10khz(clk_10khz),.key1(key1),.key2(key2),.key3(key3),.fre10(fre10));gatetest U3(.fre10(fre10),.gate(gate),.load(load),.clr_count(clr_count) );counter U4(.clk_1khz(clk_1khz), .reset(reset),.clk2(clk2),.gate(gate),.clr_count(clr_count), .cnt0(cnt0),.cnt1(cnt1),.cnt2(cnt2),.cnt3(cnt3),.cnt4(cnt4),.cnt5(cnt5),.ove(ove));decode U5(.dig(dig),.load(load),.ena(ena),.seg(seg),.clk_1khz(clk_1khz), .key1(key1),.key2(key2),.key3(key3),.dp(dp),.khz_led(khz_led),.ove(ove),.ove_led(ove_led),.cnt0(cnt0),.cnt1(cnt1),.cnt2(cnt2),.cnt3(cnt3),.cnt4(cnt4),.cnt5(cnt5));Endmodule分频器module divclk(clk,clk_10hz,clk_100hz,clk_1khz,clk_10khz);input clk;output reg clk_10hz,clk_100hz,clk_1khz,clk_10khz;reg[29:0] counter1,counter2,counter3,counter4;initialbegincounter1<=0;counter2<=0;counter3<=0;counter4<=0;clk_10hz<=0;clk_100hz<=0;clk_1khz<=0;clk_10khz<=0;endalways @(posedge clk)beginif(counter1==2400000) begin counter1<=0;clk_10hz<=~clk_10hz; endelse begin counter1<=counter1+1;endif(counter2==240000) begin counter2<=0;clk_100hz<=~clk_100hz;endelse begin counter2<=counter2+1;endif(counter3==24000) begin counter3<=0;clk_1khz<=~clk_1khz;endelse begin counter3<=counter3+1;endif(counter4==2400) begin counter4<=0;clk_10khz<=~clk_10khz;endelse begin counter4<=counter4+1;endendendmodule按键换挡module chang(clk_10hz,clk_100hz,clk_1khz,clk_10khz,key1,key2,key3,fre10);input clk_10hz,clk_100hz,clk_1khz,clk_10khz;input key1,key2,key3;output reg fre10;always @(posedge clk_10khz)beginif((key1==0)&&(key2==1)&&(key3==1)) beginfre10<=clk_10hz;endelse if((key1==1)&&(key2==0)&&(key3==1)) beginfre10<=clk_100hz; endelse if((key1==1)&&(key2==1)&&(key3==0)) beginfre10<=clk_1khz; endelse begin fre10<=0;endendendmodule闸门信号产生模块module gatetest(fre10,gate,load,clr_count);input fre10;output reg gate,load,clr_count;reg [3:0] lat;initialbegingate<=1;load<=1;clr_count<=0;lat<=0;endalways @(posedge fre10)beginlat <=lat+1;gate <= (lat < 10);load <= (lat == 11);clr_count <= (lat == 13);endendmodule计数器模块modulecounter(clk_1khz,reset,clk2,gate,clr_count,cnt0,cnt1,cnt2,cnt3,cnt 4,cnt5,ove);input reset,clk2,gate,clr_count,clk_1khz;output reg [3:0] cnt0,cnt1,cnt2,cnt3,cnt4,cnt5;output reg ove;reg clr,dout1,dout2,dout3;initialbegincnt0<=0;cnt1<=0;cnt2<=0;cnt3<=0;cnt4<=0;cnt5<=0;ove<=1;endalways @(posedge clk_1khz)begindout1 <= reset;dout2 <= dout1;dout3 <= dout2;endalways @(negedge clk_1khz)begin clr <=(dout1 | dout2 | dout3);endalways @(posedge clk2 or negedge clr)beginif(!clr) begin cnt0<=0;cnt1<=0;cnt2<=0;cnt3<=0;cnt4<=0;cnt5<=0;end else beginif(clr_count) begincnt0<=0;cnt1<=0;cnt2<=0;cnt3<=0;cnt4<=0;cnt5<=0; ove<=1;endelse beginif(gate==1)if((cnt5==9)&&(cnt4==9)&&(cnt3==9)&&(cnt2==9)&&(cn t1==9)&&(cnt0==9))begin cnt0<=0;cnt1<=0;cnt2<=0;cnt3<=0; cnt4<=0;cnt5<=0;ove<=0;endelse beginif((cnt4==9)&&(cnt3==9)&&(cnt2==9)&&(cnt1==9)&&(cn t0==9))begin cnt0<=0; cnt1<=0; cnt2<=0; cnt3<=0;cnt4<=0; cnt5<=1+cnt5; endelse beginif((cnt3==9)&&(cnt2==9)&&(cnt1==9)&&(cnt0==9))begin cnt0<=0; cnt1<=0; cnt2<=0; cnt3<=0;cnt4<=1+cnt4; cnt5<=cnt5;endelse beginif((cnt2==9)&&(cnt1==9)&&(cnt0==9))begin cnt0<=0; cnt1<=0; cnt2<=0; cnt3<=1+cnt3;cnt4<=cnt4; cnt5<=cnt5;endelse beginif((cnt1==9)&&(cnt0==9))begin cnt0<=0; cnt1<=0; cnt2<=1+cnt2; cnt3<=cnt3;cnt4<=cnt4; cnt5<=cnt5; endelse beginif((cnt0==9))begin cnt0<=0; cnt1<=1+cnt1; cnt2<=cnt2; cnt3<=cnt3;cnt4<=cnt4; cnt5<=cnt5; endelse begin cnt0<=4'b0001+cnt0; cnt1<=cnt1; cnt2<=cnt2; cnt3<=cnt3;cnt4<=cnt4; cnt5<=cnt5; endendendendendendendendendendendmodule锁存——译码器模块moduledecode(dig,load,ena,seg,clk_1khz,key1,key2,key3,dp,khz_led,ove, ove_led,cnt0,cnt1,cnt2,cnt3,cnt4,cnt5);input [3:0] cnt0,cnt1,cnt2,cnt3,cnt4,cnt5;input clk_1khz,load,ove;input key1,key2,key3;output reg [2:0] dig;output reg [6:0] seg;output reg ena,dp,khz_led,ove_led;reg [3:0] data1,data2,data3,data4,data5,data6;reg [3:0] data_in;initialbegindig<=0;ena=0;seg<=0;dp<=0;khz_led<=0;data1<=0;data2<=0;data3<=0;data4<=0;data5<=0;data6< =0; data_in<=0;endalways @(posedge load)begindata1<=cnt0;data2<=cnt1;data3<=cnt2;data4<=cnt3;data5<=cnt4;data6<=cnt5;endalways @(posedge clk_1khz)begin dig=dig+1;endalways @(negedge clk_1khz)begincase(dig)3'b000: data_in<=data1;3'b001: data_in<=data2;3'b010: data_in<=data3;3'b011: data_in<=data4;3'b100: data_in<=data5;3'b101: data_in<=data6;default:data_in<=4'b1111;endcaseendalways @(posedge clk_1khz)begincase(data_in)4'b0000: seg <= 7'b1000000; // 0 404'b0001: seg <= 7'b1111001; // 1 794'b0010: seg <= 7'b0100100; // 2 244'b0011: seg <= 7'b0110000; // 3 304'b0100: seg <= 7'b0011001; // 4 194'b0101: seg <= 7'b0010010; // 5 124'b0110: seg <= 7'b0000010; // 6 024'b0111: seg <= 7'b1111000; // 7 784'b1000: seg <= 7'b0000000; // 8 004'b1001: seg <= 7'b0010000; // 9 10default: seg <= 7'b1111111; //no numeberendcaseendalways @(posedge clk_1khz)beginif((key1==0)&&(key2==1)&&(key3==1)) dp<=1;else if((key1==1)&&(key2==0)&&(key3==1)&&(dig==2)) dp<=0;else if ((key1==1)&&(key2==1)&&(key3==0)&&(dig==1)) dp<=0;else dp<=1;endalways @(posedge clk_1khz)beginif((key1==0)&&(key2==1)&&(key3==1)) khz_led<=1;else if((key1==1)&&(key2==0)&&(key3==1))khz_led<=0;else if ((key1==1)&&(key2==1)&&(key3==0)) khz_led<=0;else khz_led<=1;endalways @(posedge clk_1khz) begin if(dig==6 | dig==7) ena<=1; else ena<=0;endendmodule。
毕业设计 基于fpga的等精度数字频率计的设计

本科生毕业论文题目:基于fpga的等精度数字频率计的设计摘要在电子工程,资源勘探,仪器仪表等相关应用中,频率计是工程技术人员必不可少的测量工具。
频率测量也是电子测量技术中最基本最常见的测量之一。
不少物理量的测量,如转速、振动频率等的测量都涉及到或可以转化为频率的测量。
基于传统测频原理的频率计的测量精度会随被测信号频率的下降而降低。
本文介绍了一种基于FPGA的等精度数字频率计,它不但具有较高的测量精度,而且在整个测量区域能保持恒定的测量精度。
文章首先介绍了硬件描述语言(HDL)的发展,以VHDL为核心,说明了利用VHDL语言进行设计的步骤。
然后介绍FPGA器件的基本结构和开发流程,接着阐述等精度数字频率计的工作原理以及利用VHDL语言实现数字频率计的具体做法,重点是利用BCD码减法实现的BCD码除法器的设计,最后还利用modelsim软件对其进行了仿真,具体分析验证了此设计的正确性。
关键词:FPGA VHDL 等精度BCD码除法AbstractCymometer is a necessary measure tool for technical engineers in electronic engineering , resource exploration and apparatus using . frequency mesure is one of the most essential and the most common mesure of electronic mesure technology . many physical quantities’ mesure , such as rotate speed , vibration frequency’s mesure , is related with or can be transformed into frequency mesure.The precision of cymometer based on traditional frequency-testing theory will decrese when the measured frequency becomes lower. this article introduces a cymometer of same-precision based on FPGA. The cymometer not only has high precision, but also its precision doesn’t decrese when the measured frequency becomes lower.This article first introduces the development of HDL , focusing on VHDL , present the step of design of VHDL . then it introduces the basic structure and the develop flow of FPGA device . in the end , it introduces the theory of cymometer and the specific implement of cymometer based on VHDL , emphasizing the theory of implementing BCD division. the function simulation and logic synthesis also come out, showing the correction of the design .Keywords: FPGA VHDL same-precision BCD division目录第一章前言............................................................................................................... 错误!未定义书签。
基于Verilog HDL的频率计的设计

基于Verilog HDL的频率计的设计
张兴娇;肖永江;廖建波;肖丽丽
【期刊名称】《萍乡学院学报》
【年(卷),期】2015(032)006
【摘要】以Altera公司Cyclone IV系列EP4CE15F17C8N器件为核心,制作了一个宽带高频小信号频率计。
该系统将正弦信号通过硬件电路整形、放大、滤波后,用Verilog HDL实现分频、门控、计数、锁存、译码显示等设计,进行数据读取、运算和显示,正弦信号频率范围为1Hz-10MHz,有效值电压范围为50m V-1V,测量相对误差的绝对值不大于10-4。
【总页数】3页(P25-27)
【作者】张兴娇;肖永江;廖建波;肖丽丽
【作者单位】萍乡学院,江西萍乡337000
【正文语种】中文
【中图分类】TN98
【相关文献】
1.基于Verilog HDL的频率计的设计 [J], 张兴娇;肖永江;廖建波;肖丽丽
2.基于Verilog语言的自适应数字频率计设计 [J], 李秋生;邱勇
3.基于Verilog HDL的简易数字频率计设计 [J], 杨晓岚
4.基于Verilog HDL的自动售货机设计与仿真 [J], 李红科;王庆春;贾晓菲
5.基于Verilog语言的等精度频率计设计 [J], 赵亮;吴振宇
因版权原因,仅展示原文概要,查看原文内容请购买。
(完整版)基于FPGA的等精度频率计的设计与实现毕业论文

第一章课题研究概述1.1课题研究的目的和意义在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。
测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
目前常用的测频方案有三种:方案一:完全按定义式F=N/T进行测量。
被测信号Fx经放大整形形成时标ГX,晶振经分频形成时基TR。
用时基TR开闸门,累计时标ГX的个数,则有公式可得Fx=1/ГX=N/TR。
此方案为传统的测频方案,其测量精度将随被测信号频率的下降而降低。
方案二:对被信号的周期进行测量,再利用F=1/T(频率=1/周期)可得频率。
测周期时,晶振FR经分频形成时标ГX,被测信号经放在整形形成时基TX控制闸门。
闸门输出的计数脉冲N=ГX/TR,则TX=NГX。
但当被测信号的周期较短时,会使精度大大下降。
方案三:等精度测频,按定义式F=N/T进行测量,但闸门时间随被测信号的频率变化而变化。
如图1所示,被测信号Fx经放大整形形成时标ГX,将时标ГX经编程处理后形成时基TR。
用时基TR开闸门,累计时标ГX的个数,则有公式可得Fx=1/ГX=N/TR。
此方案闸门时间随被测信号的频率变化而变化,其测量精度将不会随着被测信号频率的下降而降。
本次实验设计中采用的是第三种测频方案。
等精度频率计是数字电路中的一个典型应用,其总体设计方案有两种:方案一:采用数字逻辑电路制作,用IC拼凑焊接实现。
其特点是直接用现成的IC组合而成,简单方便,但由于使用的器件较多,连线复杂,体积大,功耗大,焊点和线路较多将使成品稳定度与精确度大打折扣,而且会产生比较大的延时,造成测量误差、可靠性差。
方案二:采用可编程逻辑器件(CPLD)制作。
随着现场可编程门阵列FPGA的广泛应用,以EDA工具作为开发手段,运用VHDL等硬件描述语言语言,将使整个系统大大简化,提高了系统的整体性能和可靠性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数电课设报告
姓名:郑中权
学号:152210303127
班级:电子1班
江苏科技大学
2017/10/12
100MHz等精度频率计设计(基于Verilog HDL)一、设计要求:
提供一个幅值为10mV ~ 1 V,频率为 1 ~ 100MHz的正弦信号,需测试以下指标:
1.频率:测频范围 1Hz ~ 100MHz,测频精度为测频全域内相对误差恒为百万分之一。
2.占空比:测试精度 1% ~ 99%
3.相位差:测试两个同频率的信号之间的相位差,测试范围 0 ~ 360
二、设计分析
使用FPGA数字信号处理方法,首先需要将正弦信号转换成可读取的数字方波信号,再经过FPGA 设计计算得出所需测量值。
三、模电部分
首先选择比较器,对于 100 MHz 信号,比较器灵敏度需要达到5ns内,TI公司的LTV3501灵敏度为4.5ns,符合要求
由TLV3501数据手册得知:当频率低于 50MHz 的时候,正弦波的峰峰值需大于 20mV,频率高于
50MHz时,峰峰值需大于 1V。
然后需要选择放大器,当正弦波幅值为 10mV时,放大倍数需大于35。
方法通过二级放大,一级用OPA847放大20倍,二级用OPA675放大8倍,得到总放大倍数160的正弦波。
经转换后的输出电压符合TTL电平要求,可以被识别出0和1。
四、数电部分
开发板:Cyclone IV E: 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
生成的测试信号1KHz: PIN_98 下载与读数:
误差分析
可能出现的误差就是,当基准信号还在高电平和低电平时,EN使能,这会导致CNT1多计数或少计数一个周期,导致计算结果出现误差。
六、总结
为期两周的课设结束了,虽然我如愿完成了设计要求,但是由于身边没有可用MCU和自身知识的不足,我未能设计出一款由单片机控制,完全“傻瓜式”的频率计,这是个小小的遗憾。
我相信通过日后不断学习,我会设计出来的。
在这两周的设计过程中,我遇到了不少问题。
首先是对于Quartus的使用和Verilog知识的掌握,上一次使用它们已经是一年前,难免生疏了。
代价就是花费了我将近两三天的查阅书籍和翻看以前的程序才捡回来。
其次是对模电知识的理解不到位,可能课上学的都是理论知识,现实情况便手忙脚乱。
在设计过程中,遇到了大大小小的问题,有时候出现一个小小的错误,就需要半天才能发现和改正过来。
为了避免这种情况,我应该更严谨,把工程分为多个模块去完成,这样才可以快速定位问题。
通过这两周的学习,我知道知识不用会忘,学习不严谨会出错。
所以以后我要更加严谨,并且要多用自己学到的技能。