FPGA_verilog_频率计实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

一,实验原理...(测频方法) (2)

二,任务要求 (3)

三,各模块功能及介绍

1,分频器 (3)

2,闸门选择器 (4)

3,频率计数器 (6)

4,锁存器 (7)

5,锁存—译码器 (8)

四,顶层电路及总体仿真

1顶层电路 (11)

2总体仿真结果 (14)

五,测试结果记录 (15)

一,测量原理与方法

所谓“频率”,就是周期性信号在单位时间(秒)内变化的次数。若在一定的时间间隔T 内计数,计得某周期性信号的重复变化次数为N,则该信号的频率可表达为:

f=N/T

所以测量频率就要分别知道N和T的值,由此,测量频率的方法一般有三种:测频方法、测周方法和等精度测量。

测频方法

这种方法即已知时基信号(频率或周期确定)做门控信号,T为已知量,然后在门控信号有效的时间段内进行输入脉冲的计数,原理图如下图所示:

首先,被测信号①(以正弦波为例)经过放大整形后转变成方波脉冲②,其重复频率等于被测信号频率。把方波脉冲②加到闸门的输入端。由一个高稳定的石英振荡器和一系列数字分频器组成了时基信号发生器,它输出时间基准(或频率基准)信号③去控制门控电路形成门控信号④,门控信号的作用时间T是非常准确的(由石英振荡器决定)。门控信号控制闸门的开与闭,只有在闸门开通的时间内,方波脉冲②才能通过闸门成为被计数的脉冲⑤由计数器计数。闸门开通的时间称为闸门时间,其长度等于门控信号作用时间T。比如,时间基准信号的重复周期为1S,加到闸门的门控信号作用时间T亦准确地等于1S,即闸门的开通时间——“闸门时间”为1S。在这一段时间内,若计数器计得N=100000个数,根据公式f=N/T,

那么被测频率就是100000Hz。如果计数式频率计的显示器单位为“KHz”,则显示100.000KHz,即小数点定位在第三位。不难设想,若将闸门时间设为T=0.1S,则计数值为10000,这时,显示器的小数点只要根据闸门时间T的改变也随之自动往右移动一位(自动定位),那么,显示的结果为100.00Khz。在计数式数字频率计中,通过选择不同的闸门时间,可以改变频率计的测量范围和测量精度。

二,任务要求

设计一个计数式频率计,其频率测量范围为10Hz~1MHz,测量结果用6只数码管显示。有三个带锁按键开关(任何时候都只能有一个被按下)被用来选择1S、0.1S和0.01S三个闸门时间中的一个。有一个按钮开关用来使频率计复位。有两只LED,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出指示。下图显示了该频率计前面板的基本排布构想。

三,各模块功能及介绍

1.分频器

由于晶体振荡器提供的为48M的时钟,而在整个频率计里将用到周期为2s、0.2s和0.02s 的闸门信号,还有译码显示的扫描信号1KHz,所以我们在此模块先分频产生1Hz、10Hz、100Hz、1KHz四个分频信号,以留作其它模块用。

分频分别采用4个计数器来实现,当计到一定的值时输出的分频信号翻转,最后分别获得4个分频输出,分频器模块如下图所示:

图1分频器模块

注:此处省去复位输入,因为复位对分频模块效果不大。

源程序如下:

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;

initial

begin

counter1<=0;counter2<=0;counter3<=0;counter4<=0;

clk_10hz<=0;clk_100hz<=0;clk_1khz<=0;clk_10khz<=0;

end

always@(posedge clk)

begin

if(counter1==2400000)begin counter1<=0;clk_10hz<=~clk_10hz;end else begin counter1<=counter1+1;end

if(counter2==240000)begin counter2<=0;clk_100hz<=~clk_100hz;end

else begin counter2<=counter2+1;end

if(counter3==24000)begin counter3<=0;clk_1khz<=~clk_1khz;end

else begin counter3<=counter3+1;end

if(counter4==2400)begin counter4<=0;clk_10khz<=~clk_10khz;end

else begin counter4<=counter4+1;end

end

endmodule

仿真图如下所示:

图2分频器模块仿真图(一)

图3分频器模块仿真图(二)

2闸门选择器

该模块用按键主要实现对闸门的选择功能,,通过输入的门选信号来确定输出的闸门,并同时生成清零信号以及锁存信号,生成的模块如下图所示:

图4闸门选择器

具体实现方法如下:用clk_10khz扫描三个按键,读取键码,选择相应后的信号输入下一步,进行生成清零信号和锁存信号。这里采用一个计数器判断的方法,当计数在0~9时产生高电平闸门信号,计数到11时闸门以关断,开始锁存,计数到13后给计数器送清零信号,而定义的计数器是四位,计数到15后溢出回零。

源代码如下所示:

module gatetest(clk_10hz,clk_100hz,clk_1khz,clk_10khz,

key1,key2,key3,gate,load,clr_count,keycode);

input clk_10hz,clk_100hz,clk_1khz,clk_10khz;

input key1,key2,key3;

output reg gate,load,clr_count;

output reg[1:0]keycode;

reg fre10;

reg[3:0]lat;

initial

begin

fre10<=0;gate<=1;load<=1;clr_count<=0;lat<=0;

end

always@(posedge clk_10khz)

begin

if((key1==0)&&(key2==1)&&(key3==1))begin

fre10<=clk_10hz;keycode<=0;end

else if((key1==1)&&(key2==0)&&(key3==1))begin

fre10<=clk_100hz;keycode<=1;end

else if((key1==1)&&(key2==1)&&(key3==0))begin

fre10<=clk_1khz;keycode<=2;end

else begin fre10<=0;end

end

always@(posedge fre10)

相关文档
最新文档