




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字频率计数字频率计的设计 学号: 姓名: 指导老师: 摘 要本文介绍了基于fpga的数字频率计的设计方法,设计采用硬件描述语言verilog ,在软件开发平台ise上完成,可以在较高速时钟频率(48mhz)下正常工作。该数字频率计采用测频的方法,能准确的测量频率在10hz到100mhz之间的信号。使用modelsim仿真软件对verilog程序做了仿真,并完成了综合布局布线,最终下载到芯片spartan3a上取得良好测试效果。关键词:fpga,verilog,ise,测频方法目 录目录1 引 言- 3 -1.1 数字频率计概述- 3 -1.2 频率测量的思想和方法- 3 -第二章 任务要求- 3 -第三章 基于verilog hdl数字频率计程序设计- 3 -3.1数字频率计系统模块划分结构- 3 -3.2计数模块counter- 3 -3.3门控模块gate_control- 3 -4.4分频模块fdiv- 3 -3.5 寄存器模块flip_latch- 3 -4.6 多路选择模块data_mux- 3 -3.7 动态位选模块dispselect- 3 -3.8 bcd译码模块dispdecoder- 3 -3.9 顶层电路top- 3 -第四章 综合分析- 3 -4.1 总体仿真结果- 3 -4.2 误差分析- 3 -参考文献- 3 -1 引 言 在电子测量领域中,频率测量的精确度是最高的,可达1010e-13数量级。因此,在生产过程中许多物理量,例如温度、压力、流量、液位、ph值、振动、位移、速度、加速度,乃至各种气体的百分比成分等均用传感器转换成信号频率,然后用数字频率计来测量,以提高精确度。 国际上数字频率计的分类很多。按功能分类,测量某种单一功能的计数器。如频率计数器,只能专门用来测量高频和微波频率;时间计数器,是以测量时间为基础的计数器,其测时分辨力和准确度很高,可达ns数量级;特种计数器,它具有特种功能,如可逆计数器、予置计数器、差值计数器、倒数计数器等,用于工业和白控技术等方面。数字频率计按频段分类 (1)低速计数器:最高计数频率10mhz; (2)中速计数器:最高计数频率10100mhz; (3)高速计数器:最高计数频率100mhz; (4)微波频率计数器:测频范围180ghz或更高。单片机自问世以来,性能不断提高和完善,其资源又能满足很多应用场合的需要,加之单片机具有集成度高、功能强、速度快、体积小、功耗低、使用方便、价格低廉等特点,因此,在工业控制、智能仪器仪表、数据采集和处理、通信系统、高级计算器、家用电器等领域的应用日益广泛,并且正在逐步取代现有的多片微机应用系统。单片机的潜力越来越被人们所重视。特别是当前用cmos工艺制成的各种单片机,由于功耗低,使用的温度范围大,抗干扰能力强、能满足一些特殊要求的应用场合,更加扩大了单片机的应用范围,也进一步促使单片机性能的发展。1.1 数字频率计概述 频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。闸门时间也可以大于或小于一秒。闸门时间越长,得到的频率值就越准确,但闸门时间越长则没测一次频率的间隔就越长。闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。本文数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它周期性变化的信号。如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率,转速,声音的频率以及产品的计件等等。因此,数字频率计是一种应用很广泛的仪器 电子系统非常广泛的应用领域内,到处可见到处理离散信息的数字电路。数字电路制造工业的进步,使得系统设计人员能在更小的空间内实现更多的功能,从而提高系统可靠性和速度。 集成电路的类型很多,从大的方面可以分为模拟电路和数字集成电路2大类。数字集成电路广泛用于计算机、控制与测量系统,以及其它电子设备中。一般说来,数字系统中运行的电信号,其大小往往并不改变,但在实践分布上却有着严格的要求,这是数字电路的一个特点。数字集成电路作为电子技术最重要的基础产品之一,已广泛地深入到各个应用领域 1.2 频率测量的思想和方法1频率测量的基本思想测量被测信号在单位时间内的脉冲个数,其数字表达式f = n / t 其中: f为被测信号的频率 n为脉冲的个数 t为被测信号产生n个脉冲所需的时间2 频率测量方法 直接测量法:直接测量被测信号的频率,通过计数法来对被测信号在一定时间内的脉冲个数进行计数。直接厕灵法的结构框图如图1.2.1所示。被测信号 测量结果计 数放大整形标准时钟分 频图1.2.1 直接测量法的结构框图3 误差来源 技术过程中最大存在着1个字的量化误差 对时间t的准确把握,主要包括准时钟的时间准确性、整形电路、分频电路以及技术时间控制闸门的开关速度等因素。直接法测量的最大相对误差可以表达为( df/f )max=( |1/n| + |g| )=( |1/ft| + |g| ) 其中: n为脉冲的个数,g为标准时钟的频率稳定性,f为被测信号频率,t为被测信号产生n个脉冲所需的时间。第二章 任务要求设计一个计数式频率计,其频率测量范围为10hz10mhz,测量结果用6只数码管显示。有三个带锁按键开关(任何时候都只能有一个被按下)被用来选择1s、0.1s和0.01s三个闸门时间中的一个。有一个按钮开关用来使频率计复位。有两只led,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出指示。下图显示了该频率计前面板的基本排布构想。第三章 基于verilog hdl数字频率计程序设计3.1数字频率计系统模块划分结构数字频率计中的cpld/fpga是频率计的核心,主要实现在一定时间内,对被测信号的脉冲个数进行计算,并且转化为相应的频率值显示在六个数码管上。首先将系统分成七个模块来分别设计仿真。分别有以下七个模块:经过上述模块化划分后的结构框如图3.1所示图3.1 模块化划分后的结构 计数模块counter:对包含被测信号频率信息的脉冲进行计数 门控模块gate_control:根据量程,控制技术模块计数。 分频模块fdiv:将标准时钟分频,得到计数以及动态显示所需的时钟。 寄存器模块flip_latch:对计数模块的计数值进行寄存。 多路选择模块data_mux:根据动态选择信号,选择相应的需要显示的计数值 动态为选择模块dispselevt:输出动态显示中的位选信号 bcd译码模块dispdenoder:将bcd码译成数码管的显示数据3.2计数模块counter该模块主要完成对被测信号经过放大整形后输入到可编程逻辑器件的f_in信号是现在一定的时间下的计数,采用六个异步bcd码十进制计数器来实现 0999999范围的计数,而加入了一个复位信号,当复位信号到来时,全部输出为0,并输出一个led来指示阀门信号的选择值。因为要输出一个over_alarm信号所以必须在6个计数器的基础上再加上一个计数器来储存溢出值。计数模块的结构框图如图3.2.1所示。图 3.2.1源程序如下:module counter(en,reset,f_in,q0,q1,q2,q3,q4,q5,q6,led);output 3:0 q5,q4,q3,q2,q1,q0; output q6;output led;input en;input f_in; input reset;reg 3:0 q5,q4,q3,q2,q1,q0; reg q6; reg led;always (posedge f_in or negedge reset)if(!reset)begin q0 = 4b0000;q1 = 4b0000;q2 = 4b0000;q3 = 4b0000; q4 = 4b0000;q5 = 4b0000;q6 = 1b0; end else begin if(en = 1b1)&(q0 != 4b1001) begin q0 = q0 + 4b0001;led = 1b0; end else begin q0 = 4b0000; if(en = 1b1)&(q1 != 4b1001) begin q1 = q1 + 4b0001; led = 1b0; end else begin q1 = 4b0000; if(en = 1b1)&(q2 != 4b1001) begin q2 = q2 + 4b0001; led = 1b0; end else begin q2 = 4b0000;if(en = 1b1)&(q3 != 4b1001) begin q3 = q3 + 4b0001; led = 1b0; end elsebegin q3 = 4b0000;if(en = 1b1)&(q4 != 4b1001) begin q4 = q4 + 4b0001; led = 1b0; end else begin q4 = 4b0000;if(en = 1b1)&(q5 != 4b1001) begin q5 = q5 + 4b0001;led = 1b0; end else begin q5 = 4b0000;led = 1b1;if(en = 1b1)&(q0 = 4b1001)&(q0 = 4b1001)&(q1 = 4b1001)&(q2 = 4b1001)&(q3 = 4b1001)&(q4 = 4b1001)&(q5 = 4b1001) begin q6 = q6 + 4b0001; end else q6 = 4b0000; end end end end end end end endmodule该模块定义输入端口如下: en:异步bcd码十进制计数器的全局使能信号 reset:异步bcd码十进制计数器复位信号 f_in:被测信号经过放大与整形处理后的信号该模块定义输出端口如下: led:阀门选择信号灯,闪烁频率等于现在选择的闸门值。 q0:计数器的最低位输出 q1:计数器的第5位输出 q2:计数器的第4位输出 q3:计数器的第3位输出 q4:计数器的第2位输出 q5:计数器的第1位输出 q6:计数器的最高位溢出储存位经过modelsim se 6.1f仿真图像如下:3.3门控模块gate_control 门控模块实现检测外界量程的选择,并且根据量程输出控制6位bcd码十进制计算器的计数时钟。生成的模块如下: 实现的源程序如下:module gate_control(sw0,sw1,sw2,f1hz,f10hz,f100hz,latch_en,counter_en,dp_s1hz,dp_s10hz,dp_s100hz); output latch_en; output counter_en; output dp_s1hz,dp_s10hz,dp_s100hz;input sw0,sw1,sw2; input f1hz,f10hz,f100hz;reg dp_s1hz,dp_s10hz,dp_s100hz; reg fref; reg wire_1; reg wire_2;initial begin fref = 1b0; wire_1 = 1b0; wire_2 = 1b0;endalways (sw0 or sw1 or sw2 or f1hz or f10hz or f100hz)begin if(sw2 = 1b1) begin fref = f100hz; dp_s1hz,dp_s10hz,dp_s100hz = 3b001;end else if(sw1 = 1b1) begin fref = f10hz ; dp_s1hz,dp_s10hz,dp_s100hz = 3b010;end else if(sw0 = 1b1) begin fref = f1hz; dp_s1hz,dp_s10hz,dp_s100hz = 3b100;end endalways (posedge fref) begin wire_1 = ! wire_1; endalways (negedge fref) begin wire_2 = wire_1; endassign counter_en = wire_1;assign latch_en = (! counter_en) & wire_2;endmodule该模块定义输入端口如下: sw0、sw1、sw2:量程选择开关 flhz:1hz的标准时钟输入 fl0hz:10hz的标准时钟输入 fl00hz:100hz的标准时钟输入该模块定义输入端口如下: latch_en:用来是能寄存器所存数据 counter_en:用于使能计数器开始计数 dp_s1hz:选择999999hz量程时,用于控制显示中的小数点位置 dp_s10hz:选择9999.99hz量程时,用于控制显示中的小数点位置 dp_s100hz:选择99.9999hz量程时,用于控制显示中的小数点位置经过modelsim se 6.1f仿真图像如下:4.4分频模块fdiv分频模块在系统全局时钟的驱动下,经过分频得到系统中所需要的多种频率成分的时钟信号。分频模块的结构框图如图4.4.1所示。图4.4.1 分频模块结构框图实现分频功能的源代码如下:module fdiv(clk,f1hz,f10hz,f100hz,f1khz);output f1hz,f10hz,f100hz,f1khz;input clk;reg f1hz,f10hz,f100hz,f1khz;integer cnt1=0,cnt2=0,cnt3=0,cnt4=0;always (posedge clk) begin if(cnt147999) begin f1khz = 1b0;cnt1 = cnt1 + 1; end else begin f1khz = 1b1; cnt1 = 0; endendalways (posedge f1khz) begin if(cnt2 9) beginf100hz = 1b0; cnt2 = cnt2 + 1;end else begin f100hz = 1b1; cnt2 = 0; end endalways (posedge f100hz) begin if(cnt39) begin f10hz = 1b0; cnt3 = cnt3 + 1; end elsebegin f10hz = 1b1; cnt3 = 0; end endalways (posedge f10hz) beginif(cnt49) begin f1hz = 1b0;cnt4 = cnt4 + 1;end else begin f1hz = 1b1; cnt4 = 0; end endendmodule该模块定义输入端口如下: clk:全局系统时钟信号该模块定义输出端口如下: f1hz:输出1hz的时钟信号 f10hz:输出1hz的时钟信号 f1khz:输出1hz的时钟信号经过modelsim se 6.1f仿真图像如下:3.5 寄存器模块flip_latch寄存器模块实现每一个测量频率时,计数器计算值的暂时存储。并且将储存的溢出信号输出。该模块的结构图如下图所示:实现该模块的源代码如下:module flip_latch(clk,a0,a1,a2,a3,a4,a5,a6,q0,q1,q2,q3,q4,q5,q6);output 3:0 q0,q1,q2,q3,q4,q5; output q6;input clk; input 3:0 a0,a1,a2,a3,a4,a5; input a6;reg 3:0 q0,q1,q2,q3,q4,q5; reg q6;always (posedge clk) beginq0 = a0; q1 = a1; q2 = a2; q3 = a3; q4 = a4; q5 = a5; q6 = a6;end endmodule该模块定义输入端口如下 clk:所存数据信号输入,当clk的上升沿到来时,寄存器将输入端信号锁存进寄存器,并且改变输出。 a0,a1,a2,a3,a4,a5,a6:寄存器的数据输入端该模块定义输出端口如下: q0,q1,q2,q3,q4,q5,q6:寄存器的数据输出端。经过modelsim se 6.1f仿真图像如下:4.6 多路选择模块data_mux多路选择模块实现测量频率值的分时显示,即动态显示。经过多路选择器模块来分时地传输数据。多路选择模块的结构如图4.6.1所示。图4.6.1 多路选择模块结构框图根据模块实现的功能设计verilog hdl源代码如下:module data_mux(disp_select,a0,a1,a2,a3,a4,a5,q);output 3:0 q; input 3:0disp_select;input 3:0 a0,a1,a2,a3,a4,a5; reg 3:0 q;always (disp_select,a5,a4,a3,a2,a1,a0,q)begin case(disp_select)4b0000: q = a0; 4b0001: q = a1; 4b0010: q = a2;4b0011: q = a3;4b0100: q = a4; 4b0101: q = a5;default: q = 4b0;endcase end endmodule该模块定义输入端口如下: disp_select:选择信号输入 a0,a1,a2,a3,a4,a5:多路选择模块的数据输入端口该模块定义输出端口如下: 多路选择模块的数据输出端口。经过modelsim se 6.1f仿真图像如下:3.7 动态位选模块dispselect动态位选模块用来驱动数码动态地显示频率测量数据,分时地选择各个数码管进行显示 该模块的结构图如下: 实现该模块功能的源代码如下:module dispselect(clk,disp_select); output 3:0 disp_select;input clk; reg 3:0 disp_select; always (posedge clk) beginif(disp_select 4b0101) disp_select = disp_select + 4b0001;else disp_select = 4b0000; end endmodule该模块定义输入端口如下: clk:动态位选的时钟信号输入,一般取1khz左右的标准时钟。该模块定义输出端口如下: disp_select:动态位选中间量输出,用于与系统中其他模块之间的同步。经过modelsim se 6.1f仿真图像如下:3.8 bcd译码模块dispdecoderbcd译码模块主要实现bcd码到7段数码管显示码字段的转换,同时,考虑到频率测量中的一些“零”的处理,比如选择量程1999999hz,但被测信号频率为100hz,这样在显示的时候就需要将6为数码管的前三位屏蔽。该模块的结构图如下:实现该模块的功能的源程序如下:module dispdecoder(data_in,disp_select,dp_s1hz,dp_s10hz,dp_s100hz,data_out, dp);output 6:0 data_out;output dp;input 3:0 data_in; input 3:0 disp_select;input dp_s1hz,dp_s10hz,dp_s100hz;reg dp; reg 6:0 data_out;initial begin dp = 1b1; endalways (data_in,data_out) begin case(data_in) 4b0000 : data_out = 7b0000001; /04b0001 : data_out = 7b1001111; /14b0010 : data_out = 7b0010010; /24b0011 : data_out = 7b0000110; /34b0100 : data_out = 7b1001100; /44b0101 : data_out = 7b0100100; /54b0110 : data_out = 7b0100000; /64b0111 : data_out = 7b0001111; /74b1000 : data_out = 7b0000000; /84b1001 : data_out = 7b0000100; /9default : data_out = 7b1111111;endcaseend always (disp_select,dp_s1hz,dp_s10hz,dp_s100hz, dp )begin if (disp_select = 4b0001 ) & (dp_s100hz = 1b1)| (disp_select = 4b0010) & (dp_s10hz = 1b1)| (disp_select = 4b0011) & (dp_s1hz = 1b1) dp = 1b0; else dp = 1b1; end endmodule该模块定义输入端口如下: data_in:bcd码字输入信号 disp_select:来自动态显示位模块,实现两者之间的同步 dp_s1hz,dp_s10hz,dp_s100hz:输入小数点位置控制信号来自门控模块该模块定义输出端口如下: data_out:经过译码后的7段数码管显示数据输出,可以直接连接到数码管的数据端口 dp:小数点控制信号经过modelsim se 6.1f仿真图像如下:3.9 顶层电路top在设计完各个模块后,需要将各个模块有机地组合成一个整体,最后来实现系统的功能。在数字频率计中,同时采用了电路原理图示的设计以及verilog hdl语言来编写的顶层电路,其中顶层如图4.9.1所示。用verilog hdl语言描述如下:module main(reset,clock,sw2,sw1,sw0,f_in,over_alarm,dp,disp_data,disp_select,led);inputclock; inputsw2; inputsw1; inputsw0; input f_in; input reset;outputover_alarm; outputdp; output6:0 disp_data;output3:0 disp_select; output led;wiresynthesized_wire_0; wiresynthesized_wire_2;wire3:0 synthesized_wire_32;wire3:0 synthesized_wire_33;wire3:0 synthesized_wire_34;wire3:0 synthesized_wire_35;wire3:0 synthesized_wire_36;wire3:0 synthesized_wire_37;wiresynthesized_wire_5; wiresynthesized_wire_9;wiresynthesized_wire_10; wiresynthesized_wire_11;wiresynthesized_wire_12; wiresynthesized_wire_13;wiresynthesized_wire_14; wire3:0 synthesized_wire_16;wire3:0 synthesized_wire_38; wiresynthesized_wire_24;wire3:0 synthesized_wire_25; wire3:0 synthesized_wire_26;wire3:0 synthesized_wire_27; wire3:0 synthesized_wire_28;wire3:0 synthesized_wire_29; wire3:0 synthesized_wire_30;counterb2v_inst(.en(synthesized_wire_0),.f_in(f_in),.reset(reset),.q0(synthesized_wire_32),.q1(synthesized_wire_33),.q2(synthesized_wire_34),.q3(synthesized_wire_35),.q4(synthesized_wire_36), .q5(synthesized_wire_37), .q6(synthesized_wire_5),.led(led);fdiv b2v_inst1(.clk(clock),.f1hz(synthesized_wire_9),.f10hz(synthesized_wire_10),.f100hz(synthesized_wire_11),.f1khz(synthesized_wire_24);flip_latch b2v_inst2(.clk(synthesized_wire_2),.a0(synthesized_wire_32),.a1(synthesized_wire_33),.a2(synthesized_wire_34),.a3(synthesized_wire_35),.a4(synthesized_wire_36),.a5(synthesized_wire_37),.a6(synthesized_wire_5),.q0(synthesized_wire_25),.q1(synthesized_wire_26),.q2(synthesized_wire_27),.q3(synthesized_wire_28),.q4(synthesized_wire_29),.q5(synthesized_wire_30),.q6(over_alarm);gate_control b2v_inst3(.sw0(sw0),.sw1(sw1),.sw2(sw2),.f1hz(synthesized_wire_9),.f10hz(synthesized_wire_10),.f100hz(synthesized_wire_11), .latch_en(synthesized_wire_2),.counter_en(synthesized_wire_0),.dp_s1hz(synthesized_wire_12),.dp_s10hz(synthesized_wire_13),.dp_s100hz(synthesized_wire_14);dispdecoder b2v_inst5(.dp_s1hz(synthesized_wire_12),.dp_s10hz(synthesized_wire_13),.dp_s100hz(synthesized_wire_14),.data_in(synthesized_wire_16),.disp_select(synthesized_wire_38),.dp(dp), .data_out(disp_data);dispselectb2v_inst7(.clk(synthesized_wire_24),.disp_select(synthesized_wire_38);assign disp_select = synthesized_wire_38;data_muxb2v_inst8(.a0(synthesized_wire_25),.a1(synthesized_wire_26),.a2(synthesized_wire_27),.a3(synthesized_wire_28),.a4(synthesized_wire_29),.a5(synthesized_wire_30),.disp_select(synthesized_wire_38),.q(synthesized_wire_16);endmodule第四章 综合分析4.1 总体仿真结果经过全方位的设计和检验,最后程序编写顺利结束,故而需检验整体仿真结果。所以整体仿真结果如下:4.2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 总览纺织工程师考试中的软技能考察试题及答案
- 浙江林场考试试题及答案
- 激光技术工程师试题探讨
- 深度理解医学基础知识概念的重要性试题及答案
- 药品研发中的伦理标准研究试题及答案
- 探讨文化产业管理证书考试的试题与答案
- 营养指南更新的背景与公共营养师考试知识的对接试题及答案
- 系统架构设计师考试有效学习方法探讨试题及答案
- 系统管理师笔试中的常见错误试题及答案
- 激光技术工程师重要知识点总结试题及答案
- (2024年)过敏性休克的急救及处理流程课件
- 坚定理想信念争做时代新人
- 浮与沉潜水艇课件
- 《大学生就业指导》大学生就业权益与保障
- 塔吊与起重机械操作安全培训课程
- 七星瓢虫课件
- 2024年英才计划笔试化学
- 安全生产月“一把手”讲安全课件
- 初中文言文教学的现状与对策研究
- 全国水利ABC证单选题七
- 曾国藩人生修炼日课
评论
0/150
提交评论