基于Verilog HDL的数字频率计设计及仿真实现.docx

上传人:b****1 文档编号:2343217 上传时间:2023-05-03 格式:DOCX 页数:49 大小:235.50KB
下载 相关 举报
基于Verilog HDL的数字频率计设计及仿真实现.docx_第1页
第1页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第2页
第2页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第3页
第3页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第4页
第4页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第5页
第5页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第6页
第6页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第7页
第7页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第8页
第8页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第9页
第9页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第10页
第10页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第11页
第11页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第12页
第12页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第13页
第13页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第14页
第14页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第15页
第15页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第16页
第16页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第17页
第17页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第18页
第18页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第19页
第19页 / 共49页
基于Verilog HDL的数字频率计设计及仿真实现.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于Verilog HDL的数字频率计设计及仿真实现.docx

《基于Verilog HDL的数字频率计设计及仿真实现.docx》由会员分享,可在线阅读,更多相关《基于Verilog HDL的数字频率计设计及仿真实现.docx(49页珍藏版)》请在冰点文库上搜索。

基于Verilog HDL的数字频率计设计及仿真实现.docx

基于VerilogHDL的数字频率计设计及仿真实现

基于VerilogHDL的数字频率计设计及仿真实现

摘要:

在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。

测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

电子计数器测频有两种方式:

一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。

直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。

本文阐述了用VerilogHDL语言设计了一个简单的数字频率计的过程

关键词:

周期;EDA;VerilogHDL;数字频率计;波形仿真

 

1引言

在电子测量领域中,频率测量的精确度是最高的,可达10—10E-13数量级。

因此,在生产过程中许多物理量,例如温度、压力、流量、液位、PH值、振动、位移、速度、加速度,乃至各种气体的百分比成分等均用传感器转换成信号频率,然后用数字频率计来测量,以提高精确度。

国际上数字频率计的分类很多。

按功能分类,测量某种单一功能的计数器。

如频率计数器,只能专门用来测量高频和微波频率;时间计数器,是以测量时间为基础的计数器,其测时分辨力和准确度很高,可达ns数量级;特种计数器,它具有特种功能,如可逆计数器、予置计数器、差值计数器、倒数计数器等,用于工业和白控技术等方面。

数字频率计按频段分类

(1)低速计数器:

最高计数频率<10MHz;

(2)中速计数器:

最高计数频率10—100MHz;(3)高速计数器:

最高计数频率>100MHz;(4)微波频率计数器:

测频范围1—80GHz或更高。

单片机自问世以来,性能不断提高和完善,其资源又能满足很多应用场合的需要,加之单片机具有集成度高、功能强、速度快、体积小、功耗低、使用方便、价格低廉等特点,因此,在工业控制、智能仪器仪表、数据采集和处理、通信系统、高级计算器、家用电器等领域的应用日益广泛,并且正在逐步取代现有的多片微机应用系统。

单片机的潜力越来越被人们所重视。

特别是当前用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个脉冲所需的时间。

4.功能及技术指标

●频率测量范围:

10Hz~100MHz

●测量分辨率:

1Hz

●测量通道灵敏度:

50mVpp

●通道输入阻抗:

不小于100kΩ

●测量误差:

±1

●测量结果显示:

6位数码管显示

该数字频率计的操作面板如图1.2.4所示

图1.2.4简易数字频率计的操作面板

其中,被测信号可以有三种,分别是方波、三角波和正弦波;测量结果显示采用六个数码管来显示;量程分为三个,分别为:

0~999999Hz、0~9999.99kHz、0~99.9999MHz

2VerilogHDL简介

2.1VerilogHDL的简介

VerilogHDL是一种硬件描述语言(hardwaredescriptionlanguage),为了制作数位电路(数字电路)而用来描述ASICs和FPGAs的设计之用。

Verilog的设计者想要以C程序语言(en:

Cprogramminglanguage)为基础设计一种语言,可以使工程师比较熟悉跟容易接受。

事实上,它产生与C程序语言类似的不严谨性质,并且大概与Pascal很相像。

这种语言跟传统的程序设计语言不同,在于它的程序叙述并非严格地线性(循序)执行。

Verilog模式包含不同模组(modules)的阶层关系。

模组(modules)是输出(inputs)和输入(outputs)所定义出来的一个集合。

在每个模组中,有一串的电线(wires)、暂存器(registers)和子模组(submodules)的定义。

并且在每个模组里面,语言叙述大部分都被群组成为各种的执行区块(blocks),用来定义该模组所产生的行为描述。

在每个区块(blocks)内,使用begin和end的关键字来区隔开来,其中的叙述是循序被执行。

但是同一个设计,不同的区块间的执行是平行的。

这个语言的叙述之子集合是可合成(synthesizable)。

如果在一个电路设计的模组中仅包含可合成的叙述,那麽这个电路设计就可以被适当的软件,转换合成为电脑芯片的电路layout。

3数字频率计系统框图

3.1数字频率计系统框图

设计如图3.1.1所示的数字频率计系统电路框图

图3.1.1所示的数字频率计系统电路框图

3.2数字频率计系统部件简介

1.放大整形

数字频率计允许测量信号的类型有三种:

方波、三角波和正弦波,并且信号的测量通道灵敏度为50mVpp,为此,需要将被测信号放大整形成标准的TTL电平的方波型号,便于CPLD/FPGA对信号脉冲的计数。

2.SW1、SW2、SW3按键

SW1、SW2、SW3这三个按键用来在测量的时候,用户根据被测信号的大致频率范围选择不同的适合被测信号的量程。

在按键的设计中,需要考虑实际按键的消抖问题

3.标准时钟

标准时钟为频率计测量提供精度相对比较高的时基信号,其时间的稳定性与精度将会直接影响到频率计测量的准确性。

4.LED显示模块

频率计将测量的结果通过6位数码管(LED)来显示。

4基于VerilogHDL数字频率计程序设计

4.1数字频率计系统模块划分结构

数字频率计中的CPLD/FPGA是频率计的核心,主要实现在一定时间内,对被测信号的脉冲个数进行计算,并且转化为相应的频率值显示在六个数码管上。

首先将系统分成七个模块来分别设计仿真。

分别有以下七个模块:

经过上述模块化划分后的结构框如图4.1所示

图4.1模块化划分后的结构

●计数模块counter:

对包含被测信号频率信息的脉冲进行计数

●门控模块gate_control:

根据量程,控制技术模块计数。

●分频模块fdiv:

将标准时钟分频,得到计数以及动态显示所需的时钟。

●寄存器模块flip_latch:

对计数模块的计数值进行寄存。

●多路选择模块data_mux:

根据动态选择信号,选择相应的需要显示的计数值

●动态为选择模块dispselevt:

输出动态显示中的位选信号

●BCD译码模块dispdenoder:

将BCD码译成数码管的显示数据

4.2计数模块counter

该模块主要完成对被测信号经过放大整形后输入到可编程逻辑器件的F_IN信号是现在一定的时间下的计数,采用六个异步BCD码十进制计数器来实现0~999999范围的计数。

计数模块的结构框图如图4.2.1所示。

图4.2.1计数模块的结构框图

根据模块实现的功能设计VerilogHDL源代码如下:

modulecounter(EN,CLR,F_IN,F_OUT,Q0,Q1,Q2,Q3,Q4,Q5);

output[3:

0]Q5,Q4,Q3,Q2,Q1,Q0;

outputF_OUT;

inputEN;

inputCLR;

inputF_IN;

reg[3:

0]Q5,Q4,Q3,Q2,Q1,Q0;

regF_OUT;

regF_out0,F_out1,F_out2,F_out3,F_out4;

always@(posedgeF_IN)

begin

if((EN==1'b1)&&(CLR==1'b0)&&(Q0!

=4'b1001))

begin

Q0<=Q0+4'b0001;

F_OUT<=1'b0;

end

else

begin

Q0<=4'b0000;

if((EN==1'b1)&&(CLR==1'b0)&&(Q1!

=4'b1001))

begin

Q1<=Q1+4'b0001;

F_OUT<=1'b0;

end

else

begin

Q1<=4'b0000;

if((EN==1'b1)&&(CLR==1'b0)&&(Q2!

=4'b1001))

begin

Q2<=Q2+4'b0001;

F_OUT<=1'b0;

end

else

begin

Q2<=4'b0000;

if((EN==1'b1)&&(CLR==1'b0)&&(Q3!

=4'b1001))

begin

Q3<=Q3+4'b0001;

F_OUT<=1'b0;

end

else

begin

Q3<=4'b0000;

if((EN==1'b1)&&(CLR==1'b0)&&(Q4!

=4'b1001))

begin

Q4<=Q4+4'b0001;

F_OUT<=1'b0;

end

else

begin

Q4<=4'b0000;

if((EN==1'b1)&&(CLR==1'b0)&&(Q5!

=4'b1001))

begin

Q5<=Q5+4'b0001;

F_OUT<=1'b0;

end

else

begin

Q5<=4'b0000;

F_OUT<=1'b1;

end

end

end

end

end

end

end

Endmodule

该模块定义输入端口如下:

●EN:

异步BCD码十进制计数器的全局使能信号

●CLR:

异步BCD码十进制计数器复位信号

●F_IN:

被测信号经过放大与整形处理后的信号

该模块定义输出端口如下:

●F_OUT:

超出技术范围0~999999的输出信号,用来指示提醒用户选择更大的量程。

●Q0:

计数器的最低位输出

●Q1:

计数器的第5位输出

●Q2:

计数器的第4位输出

●Q3:

计数器的第3位输出

●Q4:

计数器的第2位输出

●Q5:

计数器的第1位输出

在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.2.2所示。

图4.2.2计数模块counter的仿真波形

4.3门控模块gate_control

门控模块实现检测外界量程的选择,并且根据量程输出控制6位BCD码十进制计算器的计数时钟,以及在测量完一次信号频率后,计数器计数值清零。

计数器的清零要与后级寄存器的锁存时刻做很好的时序配合。

应该实在计数器测量完一次信号频率后,首先将数据锁存到寄存器,然后再将计数器值清零,这样可以惊醒下一次测量。

门控模块的结构框图如图4.3.1所示

图4.3.1门控模块结构框图

根据模块实现的功能设计VerilogHDL源代码如下:

modulegate_control(

SW0,SW1,SW2,

f1hz,f10hz,f100hz,

Latch_EN,

Counter_Clr,

Counter_EN,

dp_s1hz,dp_s10hz,dp_s100hz

);

outputLatch_EN;

outputCounter_Clr;

outputCounter_EN;

outputdp_s1hz,dp_s10hz,dp_s100hz;

inputSW0,SW1,SW2;

inputf1hz,f10hz,f100hz;

regdp_s1hz,dp_s10hz,dp_s100hz;

regfref;

regwire_1;

regwire_2;

//初始化输入以及中间量

initial

begin

fref<=1'b0;

wire_1<=1'b0;

wire_2<=1'b0;

end

//根据不同的外界量程选择,选择相应的计数基时钟

always@(SW0orSW1orSW2orf1hzorf10hzorf100hz)

begin

if(SW2==1'b1)

begin

fref<=f100hz;

{dp_s1hz,dp_s10hz,dp_s100hz}<=3'b001;

end

elseif(SW1==1'b1)

begin

fref<=f10hz;

{dp_s1hz,dp_s10hz,dp_s100hz}<=3'b010;

end

elseif(SW0==1'b1)

begin

fref<=f1hz;

{dp_s1hz,dp_s10hz,dp_s100hz}<=3'b100;

end

end

//根据不同的计数基时钟,提供输出相应的计数器计数值的清除脉冲与锁存器锁存脉冲

always@(posedgefref)

begin

wire_1<=!

wire_1;

end

always@(negedgefref)

begin

wire_2<=wire_1;

end

assignCounter_EN=wire_1;

assignLatch_EN=(!

Counter_EN)&wire_2;

assignCounter_Clr=(!

Counter_EN)&(!

Latch_EN)|(!

wire_2);

endmodule

 

该模块定义输入端如下:

●SW0、SW1、SW2:

量程选择开关

●flhz:

1Hz的标准时钟输入

●fl0hz:

10Hz的标准时钟输入

●fl00hz:

100Hz的标准时钟输入

该模块定义输入端口如下:

●Latch_EN:

用来是能寄存器所存数据

●Counter_Clr:

用于计数器的清零

●Counter_EN:

用于使能计数器开始计数

●dp_s1hz:

选择999999Hz量程时,用于控制显示中的小数点位置

●dp_s10hz:

选择9999.99Hz量程时,用于控制显示中的小数点位置

●dp_s100hz:

选择99.9999Hz量程时,用于控制显示中的小数点位置

在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.3.2所示。

图4.3.2门控模块的仿真波形

4.4分频模块fdiv

分频模块在系统全局时钟的驱动下,经过分频得到系统中所需要的多种频率成分的时钟信号。

分频模块的结构框图如图4.4.1所示。

图4.4.1分频模块结构框图

根据模块实现的功能设计VerilogHDL源代码如下:

modulefdiv(clk,f1hz,f10hz,f100hz,f1khz);

outputf1hz,f10hz,f100hz,f1khz;

inputclk;

regf1hz,f10hz,f100hz,f1khz;

integercnt1=0,cnt2=0,cnt3=0,cnt4=0;

always@(posedgeclk)

begin

//if(cnt1<9999)//实际系统分频值

if(cnt1<2)//仿真时的分频值

begin

f1khz<=1'b0;

cnt1=cnt1+1;

end

else

begin

f1khz<=1'b1;

cnt1=0;

end

end

always@(posedgef1khz)

begin

//if(cnt2<9)//实际系统分频值

if(cnt2<2)//仿真时的分频值

begin

f100hz<=1'b0;

cnt2=cnt2+1;

end

else

begin

f100hz<=1'b1;

cnt2=0;

end

end

always@(posedgef100hz)

begin

//if(cnt3<9)//实际系统分频值

if(cnt3<2)//仿真时的分频值

begin

f10hz<=1'b0;

cnt3=cnt3+1;

end

else

begin

f10hz<=1'b1;

cnt3=0;

end

end

always@(posedgef10hz)

begin

//if(cnt4<9)//实际系统分频值

if(cnt4<2)//仿真时的分频值

begin

f1hz<=1'b0;

cnt4=cnt4+1;

end

else

begin

f1hz<=1'b1;

cnt4=0;

end

end

endmodule

该模块定义输入端口如下:

●Clk:

全局系统时钟信号

该模块定义输出端口如下:

●F1hz:

输出1Hz的时钟信号

●F10hz:

输出1Hz的时钟信号

●F1khz:

输出1Hz的时钟信号

在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.4.2所示。

图4.4.2分频模块的仿真波形

4.5寄存器模块flip_latch

寄存器模块实现每一个测量频率时,计数器计算值的暂时存储。

寄存器模块的结构框图如图4.5.1所示。

图4.5.1寄存器模块

 

根据模块实现的功能设计VerilogHDL源代码如下:

moduleflip_latch(clk,A0,A1,A2,A3,A4,A5,Q0,Q1,Q2,Q3,Q4,Q5);

output[3:

0]Q0,Q1,Q2,Q3,Q4,Q5;

inputclk;

input[3:

0]A0,A1,A2,A3,A4,A5;

reg[3:

0]Q0,Q1,Q2,Q3,Q4,Q5;

always@(posedgeclk)

begin

Q0<=A0;

Q1<=A1;

Q2<=A2;

Q3<=A3;

Q4<=A4;

Q5<=A5;

end

Endmodule

该模块定义输入端口如下:

●clk:

所存数据信号输入,当clk的上升沿到来时,寄存器将输入端信号锁存进寄存器,并且改变输出。

●A0,A1,A2,A3,A4,A5:

寄存器的数据输入端

该模块定义输出端口如下:

●Q0,Q1,Q2,Q3,Q4,Q5:

寄存器的数据输出端。

在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.5.2所示。

图4.5.2寄存器模块的仿真波形

4.6多路选择模块data_mux

多路选择模块实现测量频率值的分时显示,即动态显示。

经过多路选择器模块来分时地传输数据。

多路选择模块的结构如图4.6.1所示。

图4.6.1多路选择模块结构框图

根据模块实现的功能设计VerilogHDL源代码如下:

moduledata_mux(disp_select,A0,A1,A2,A3,A4,A5,Q);

output[3:

0]Q;

input[2:

0]disp_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)

3'b000:

Q<=A5;

3'b001:

Q<=A4;

3'b010:

Q<=A3;

3'b011:

Q<=A2;

3'b100:

Q<=A1;

3'b101:

Q<=A0;

default:

Q<=4'b0;

endcase

end

Endmodule

该模块定义输入端口如下:

●disp_select:

选择信号输入

●A0,A1,A2,A3,A4,A5:

多路选择模块的数据输入端口

该模块定义输出端口如下:

●多路选择模块的数据输出端口。

在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.6.2所示。

图4.6.2多路选择模块的仿真波形

4.7动态位选模块dispselect

动态位选模块用来驱动数码动态地显示频率测量数据,分时地选择各个数码管进行显示

动态位选的结构框图4.7.1所示。

图4.7.1动态位选模块的结构框图

根据模块实现的功能设计VerilogHDL源代码如下:

moduledispselect(clk,disp_select,Q);

output[5:

0]Q;

output[2:

0]disp_select;

inputclk;

reg[5:

0]Q;

reg[2:

0]disp_select;

always@(posedgeclk)

begin

if(disp_select<3'b101)

disp_select<=disp_sele

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2