基于Verilog语言的等精度测频计设计
根据Verilog的数字频率计的设计

根据Verilog的数字频率计的设计以下是一个使用Verilog设计并仿真的数字频率计的示例:```verilogmodule frequency_counterinput reset,input clk,output reg [31:0] frequencyreg [31:0] count;reg [31:0] prev_count;reg counting;if (reset) begincounting <= 0;count <= 0;prev_count <= 0;end else beginprev_count <= count;count <= count + 1;if (prev_count == 0) begincounting <= 1;counting <= 0;frequency <= count;count <= 0;endendendendmodule```为了仿真该模块,可以使用任何支持Verilog仿真的工具,如ModelSim。
以下是一个对该模块进行仿真的示例测试台代码:```verilogmodule frequency_counter_tb;reg reset;reg clk;wire [31:0] frequency;frequency_counter dut.reset(reset),.clk(clk),.frequency(frequency)initial beginreset = 1;;reset = 0;endalways begin;clk = ~clk;endendmodule```在上述测试台代码中,引脚`reset`和`clk`通过不断的切换来产生复位和时钟信号。
然后,通过监视`frequency`引脚,可以检查计算的频率是否正确。
完成设计和测试台代码后,可以使用仿真工具对其进行仿真,以验证设计的正确性和性能。
MHz等精度频率计设计基于VerilogHDL

M H z等精度频率计设计基于V e r i l o g H D L Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#姓名:郑中权班级:电子1班 数电课设报告江苏科技大学 2017/10/12100MHz等精度频率计设计(基于Verilog HDL)一、设计要求:提供一个幅值为10mV ~ 1 V,频率为 1 ~ 100MHz的正弦信号,需测试以下指标:1.频率:测频范围 1Hz ~ 100MHz,测频精度为测频全域内相对误差恒为百万分之一。
2.占空比:测试精度 1% ~ 99%3.相位差:测试两个同频率的信号之间的相位差,测试范围 0 ~ 360二、设计分析使用FPGA数字信号处理方法,首先需要将正弦信号转换成可读取的数字方波信号,再经过FPGA设计计算得出所需测量值。
三、模电部分首先选择比较器,对于 100 MHz 信号,比较器灵敏度需要达到5ns内,TI公司的LTV3501灵敏度为,符合要求由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。
基于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可以用来进行各种层次的逻辑设计,也可以进数字系统的逻辑综合,仿真验证和时序分析等。
基于VHDL的等精度频率计设计—毕业设计论文

摘要基于传统测频原理的频率计的测量精度将随被测信号频率的下降而降低,在实用中有较大的局限性,本设计采用单片机AT89C51作为主要的控制单元,用来完成电路的信号测试控制、数据运算处理、键盘扫描和控制数码管显示等功能,待测信号经过LM358放大后又经过74HC14形成系统需要的矩形波,然后送入复杂可编程逻辑器件(CPLD),最后由可编程逻辑器件CPLD进行各种时序控制及计数测频功能,并用8位8段LED进行显示。
关键词单片机可编程逻辑器件频率计AbstractBased on the traditional principle of measuring the frequency of the frequency of measurement accuracy will be tested with thefrequency and reduce the decline in the more practical limitations.SCM AT89C51 use this design as the main control unit, the signals used to complete the circuit test control, data processing, keyboard scanning and digital control of the show, and other functions, under test signal LM358 Larger then after a 74 HC14 system needs Rectangular waves, and then into the complex programmable logic devices (CPLD), programmable logic devices by the end CPLD various control and timing count frequency measurement functions, and with eight 8 of the LED display.Keywords: SCMC CPLD Cymometer目录1 引言 (1)1.1课题分析 (1)1.2等精度频率计在国内外发展概况 (1)1.3M AX+P LUS II简介及VHDL语言简介 (3)1.4课题要求 (6)2 等精度频率计的方案选择及原理分析 (7)2.1等精度频率计测频原理 (7)2.2系统原理框图 (9)2.3周期测量 (9)2.4脉冲宽度测量 (10)2.5周期脉冲信号占空比的测量 (10)3 等精度频率计硬件设计 (11)3.1键盘控制模块 (11)3.2显示模块 (12)3.3主控模块 (13)3.4信号输入放大和整形模块 (16)3.5音频输出电路 (17)3.6CPLD功能模块描述 (18)4 等精度频率计软件设计方案 (19)4.1VHDL语言 (19)4.2VHDL软件设计方案 (21)4.3所需VHDL文件及波形仿真结果 (22)4.4单片机的汇编语言编程 (24)5 电路系统调试 (28)6 结论 (29)致谢 (33)附录一:元器件清单 (34)附录二:程序清单 (36)附录三:原理图 (36)1 引言1.1 课题分析在现代电子系统中,数字系统所占的比例越来越大。
基于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。
MHz等精度频率计设计基于VerilogHDL

姓名:郑中权班级:电子1班 数电课设报告江苏科技大学2017/10/12100MHz等精度频率计设计(基于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。
100MHz等精度频率计设计(基于某VerilogHDL)

某某:X中权学号:152210303127班级:电子1班数电课设报告100MHz等精度频率计设计〔基于Verilog HDL〕一、设计要求:提供一个幅值为10mV ~ 1 V,频率为 1 ~ 100MHz的正弦信号,需测试以下指标:1.频率:测频X围 1Hz ~ 100MHz,测频精度为测频全域内相对误差恒为百万分之一。
2.占空比:测试精度 1% ~ 99%3.相位差:测试两个同频率的信号之间的相位差,测试X围 0 ~ 360 某某科技大学2017/10/12二、设计分析使用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的基准频率,由计数器T1来计算基准频率的上升沿个数,即周期数。
输入一个被测信号,它由计数器T2来测量周期数。
两个信号在同一个使能信号EN〔使能信号时间为1~2s〕下开始计数,计数完后,存储计数结果,由〔T1 * 10〕可以算出具体的计数时间〔单位ns〕,再由(〔T1 * 10ns〕/T2 )*10^9可算得被测信号频率,单位Hz。
基于verilog语言的数字频率计设计

基于verilog语言的数字频率计设计以下是一种基于Verilog语言的数字频率计设计:```verilogmodule frequency_counterinput clk, //输入时钟input reset, //复位信号input enable, //启用信号input signal_in, //输入信号output [31:0] frequency //输出频率reg [31:0] count; //计数器if (reset) begincount <= 0;end else if (enable) beginif (signal_in) begincount <= count + 1;endendendassign frequency = count; //将计数器值赋给输出端口endmodule```在此设计中,我们使用一个32位的计数器(count)来计算输入信号(signal_in)的高电平脉冲数。
输入时钟(clk)用于同步计数器的操作。
复位信号(reset)用于将计数器复位为0。
启用信号(enable)用于控制计数器的启用与禁用。
当reset为高电平时,计数器会被复位为0。
当enable为高电平时,计数器会逐渐增加,直到输入信号(signal_in)为低电平。
此时,计数器的值会保持不变。
最终,计数器的值会通过输出端口frequency输出。
在这个设计中,frequency是一个32位的输出端口,表示输入信号的高电平脉冲数。
这个设计可以通过Verilog仿真工具进行仿真,并且可以综合到FPGA芯片中进行硬件实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于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 等精度测量原理系统中,如果采用的标准信号源的精度很高,就可以达到一个很高的测量精度,一般情况下都是采用晶体作为标准信号源,因此可以达到很高的精度,满足一般系统的要求。
2 FPGA模块设计本系统在传统的等精度测量原理基础上进行了改进和优化。
增加了测量占空比的功能,同时由FPG A内部产生清零信号,节省了资源。
改进后的FPG A核心模块如图2所示。
FPG A部分主要由门控信号产生模块、计数器控制模块、计数器模块、锁存器、中断输出、数据选择输出、顶层模块组成。
图2 等精度测量核心结构1)门控信号为了测量频率为1Hz的信号,要求系统的开门时间不小于1s;同理,为了测量0.1Hz频率的信号,要求开门时间最短为10s。
但是如果系统一直采用10s的门控信号,测量高频信号的等待时间太长,显然不合理,因为测量结果的显示必须要等到一个测量周期结束之后才能更新。
本系统采用的方法是,由单片机给FPG A提供一个门控的选择信号,如果FPG A测得的频率小于1Hz,那么单片机自动给出一个启动10s门控・41・第33卷第9期2007年9月电子工程师 E LECTRON I C E NGI N EER Vol.33No.9Sep.2007的控制信号;反之,如果发现测量的频率大于1Hz,自动切换回1s 门控,实现了一个闭环的自动控制,很好地解决了门控的时间问题。
2)计数器控制模块该模块是本文的创新点所在,主要用来同步被测信号。
由前面的分析可知,门控信号启动(上升沿)后,在被测信号的上升沿启动计数允许模块,允许计数器计数;门控信号关闭(下降沿)后,在被测信号的下一个上升沿关闭计数允许模块,停止计数,从而保证了门控信号是被测信号的整数倍,达到了等精度的目的。
该模块有G ATE 、CLK_x 这2个输入端;EN _h 、E N _x 、Load 、CLR 这4个输出端。
G ATE 为上一级给出的门控信号;CLK_x 为被测信号;E N _h,高电平期间对标准信号进行计数,得到CNT_h;E N _x 为给出的允许计数信号,在E N _x 的高电平期间,对被测信号、标准信号同时计数,得到CNT_x 、CNT_b;Load 为锁存信号;CLR 为计数器清零信号。
由CNT_x 和CNT_b 可以计算出被测信号的频率和周期;由CNT_x 和CNT_h 可以计算出被测信号的脉冲宽度。
仿真图如图3所示。
图3 Quartus 仿真 3)计数器模块在设计计数器的过程中需要注意计数器的宽度设置,系统中采用的最大门控时间为10s,标准信号源的频率为50MHz,则在计数的允许时间内计数的最大值为:10×50000000=500000000<229=536870912,为了方便数据传输,系统中采用了32位位宽的计数器。
4)锁存器模块在门控信号关闭的同时,停止计数,同时启动锁存模块,把测量的数据锁存起来,以便传输。
5)中断输出锁存数据的同时,给单片机一个低电平的中断信号,通知单片机读取数据。
6)数据选择输出模块系统中采用了3个32位的计数器,由于单片机采用的是51系列单片机,只有8位的数据总线,所以一次通信只能传输8位数据,3×32/8=12,所以设计了一个数据输出控制模块,由单片机提供4根地址线,译码后可以选择16组数据,单片机得到中断通知后,分12次读取测量的数据。
7)顶层模块实例化所有的底层模块,同时为了调试方便,加入了一些测试点。
FPG A 部分的整体结构图如图4所示。
图4 FPGA 整体结构3 单片机模块控制3.1 理论分析在计数允许E N _x 时间内,对被测信号和标准信号同时进行进行计数,得到CNT_x 和CNT_b,设被测信号的周期为T x 、频率为F x ,标准信号周期为F b 、频率为F b 。
则有:CN T_x ×T x =CN T_b ×T b(1)・51・第33卷第9期赵 亮,等:基于Veril og 语言的等精度频率计设计・测控技术・式中:T x =1F x(2)T b =1F b(3) 将式(2)、式(3)代入式(1)可以得到:CN T_x F x=CN T_bF b(4) 变换可以得到被测信号频率为:F x =F bCNT_b×CNT_x (5)系统实现的被测频率为:F_x =F_bCN T_F_b×CNT_F_x(6)被测周期为:T_x =1F_x(7)占空比r 为:H_du ty =CNT_F_h /CNT_F_b(8) 系统中采用式(6)~式(8)进行计算,得到最终的测量数据,单片机中采用浮点数进行运算,计算的精度可以满足系统的要求。
3.2 硬件电路系统硬件电路比较简单,就是单片机的最小系统加上液晶显示模块,设计时需要注意,51单片机端口电压是5V 输出,而FPG A 是3.3V 输出,所以在数据传输时要串联一个电阻,一般100Ω~300Ω即可。
电路原理图如图5所示。
图5 单片机部分电路3.3 软件设计单片机软件主要由系统初始化、数据传输、频率、周期、占空比计算、液晶显示等程序模块组成。
下面简单介绍主函数及计算子函数。
系统主函数:void main (void ){ I nit_mcu (); //初始化系统 while (1) { if (F_x <1) //判断测量的频率大小,控制门控 Sel_gate =1; if (F_x >1) Sel_gate =0; if (flag ) //进入中断 { Trans (); //传输数据 Cal (); //计算 flag =0; //清除中断标志位 } D is p lay (); //显示测量的结果 }}计算子函数:void Cal (void ){ l ong te mp3,temp2,temp1,temp0; //定义临时变量 te mp3=Cnt_F_b_data[3]; te mp2=Cnt_F_b_data[2]; te mp1=Cnt_F_b_data[1]; te mp0=Cnt_F_b_data[0]; Cnt_F_b =(te mp3<<24)+(te mp2<<16)+(temp1<<8)+(te mp0<<0);// 将测得的数据进行组合 te mp3=Cnt_F_x_data[3]; te mp2=Cnt_F_x_data[2]; te mp1=Cnt_F_x_data[1]; te mp0=Cnt_F_x_data[0]; Cnt_F_x =(te mp3<<24)+(te mp2<<16)+(temp1<<8)+(te mp0<<0); te mp3=Cnt_F_h_data[3]; te mp2=Cnt_F_h_data[2]; te mp1=Cnt_F_h_data[1]; te mp0=Cnt_F_h_data[0]; Cnt_F_h =(te mp3<<24)+(te mp2<<16)+(temp1<<8)+(te mp0<<0); F_x =F_b /Cnt_F_b 3Cnt_F_x;// 计算频率 T_x =1/F_x;// 计算周期 H_duty =Cnt_F_h /Cnt_F_b;// 计算占空比}・61・・测控技术・电子工程师2007年9月软件流程如图6所示。
图6 系统流程中断服务子程序如图7所示。
图7 中断服务子程序4 结束语本系统设计采用FPG A 和单片机结合的方式实现等精度测量频率,充分发挥了FPG A 高速的数据处理能力以及单片机的计算、控制能力。
采用Veril og 硬件描述语言对系统进行仿真测试,最终下载到FPG A 内部。
单片机采用C 语言编写程序,利用浮点数进行计算,精度高。
同时设计了门控信号自动选择的闭环控制,大大地提高了系统的性能。
等精度测量技术在生产、实验等环境中得到了广泛的应用。
参 考 文 献[1]P ALN I TK AR S .Veril og HDL 数字设计与综合[M ].二版.夏宇闻,胡燕祥,刁岚松,等译.北京:电子工业出版社,2004.[2]常晓明,李媛媛.Veril og -HDL 工程实践入门[M ].北京:北京航空航天大学出版社,2005.[3]马忠梅.单片机的C 语言应用程序设计[M ].北京:北京航空航天大学出版社,2003. 赵 亮(19832),男,硕士研究生,主要从事FPG A 方面的研究工作。
Desi gn of Equal Precisi on Frequency M eter Basedon Ver ilog H DLZHAO L i a ng,W U Zhenyu(Dalian University of Technol ogy,Dalian 116023,China )Abstract:The p rinci p le of equal p recisi on measure ment is intr oduced in this paper,it adop ts Veril og Hardware Descri p ti on Language t o i m p le ment functi on module in frequency meter,and adds pulse width meas 2ure ment on the base of traditi onal frequency measure ment .It als o adop ts AT89S51M icr o Contr oller Unit asdata p r ocessing unit,uses LCD1602equi pment t o dis p lay frequency,peri ods and pulse in real 2ti m e .FPG A ′s high 2s peed data acquisiti on and high 2perfor mance contr olling and computing of MCU are rep resented in this syste m.Data is si m ulated and tested in Quartus Ⅱ6.0E DA devel opment p latfor m ,and finally do wnl oaded t o the chi p.Keywords:equal p recisi on measure ment;frequency meter;Veril og HDL;MCU欢 迎 投 稿E 2mail:radarnet @126.co m・71・第33卷第9期赵 亮,等:基于Veril og 语言的等精度频率计设计・测控技术・。