课程设计(论文)-基于FPGA的verilog频率计设计.doc_第1页
课程设计(论文)-基于FPGA的verilog频率计设计.doc_第2页
课程设计(论文)-基于FPGA的verilog频率计设计.doc_第3页
课程设计(论文)-基于FPGA的verilog频率计设计.doc_第4页
课程设计(论文)-基于FPGA的verilog频率计设计.doc_第5页
免费预览已结束,剩余14页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电 子 科 技 大 学 (基于 fpga 的频率计设计) 题目 :简易频率计的设计 指导教师: 姓名 : 学号 : 专业 :光电学院一专业 摘要 本文主要介绍了基于 fpga 的简易多量程频率计的设计,使用硬件 描述语言 verilog 来实现对硬件的控制,在软件 ise 上实现编程的编 译综合,在系统时钟 48mhz 下可正常工作。该数字频率计采用测频 的方法,能准确的测量频率在 10hz 到 100mhz 之间的信号。使用 modelsim 仿真软件对 verilog 程序做了仿真,并完成了综合布局布 线,通过 ise 下载到 spartan3a 开发板上完成测试。 关键词:fpga ,verilog,ise,测频方法 abstractabstract this paper mainly introduces the simple more range based on fpga design of frequency meter,use hardware description language verilog to realize the control of hardware,in the software realize the compilation of the programming ise on comprehensive,in the system clock can work normally under 48 mhz。the digital frequency meter frequency measurement method used, can accurate measurement frequency in 10 hz to 100 mhz of signals between。use modelsim simulation software verilog program to do the simulation, and completed the overall layout wiring,through the ise downloaded to spartan3a development board complete test。 keywords: : fpga, verilog, ise, frequency measurement 目 录 第一章第一章 测量原理与方法测量原理与方法 1.1测频方法 1.2测周方法 1.3等精度测量法 1.4放大整形电路 1.5时基信号产生 第二章第二章 任务要求任务要求 第三章第三章 各模块功能及介绍各模块功能及介绍 3.1 分频器 3.2 闸门选择器 3.3 频率计数器 3.4 锁存器 3.5 扫描显示控制译码系统 第四章第四章 顶层电路及总体仿真顶层电路及总体仿真 4.1 顶层电路 4.2 总体仿真结果 4.3 测试结果 第一章:测量原理与方法 所谓“频率”,就是周期性信号在单位时间(秒)内变化的次数。若在一定的时 间间隔 t 内计数,计得某周期性信号的重复变化次数为 n,则该信号的频率可 表达为: f = n / t 所以测量频率就要分别知道 n 和 t 的值,由此,测量频率的方法一般 有三种:测频方法、测周方法和等精度测量。 1.1 测频方法 这种方法即已知时基信号(频率或周期确定)做门控信号,t 为已知量, 然后在门控信号有效的时间段内进行输入脉冲的计数,原理图如下图所示: 首先,被测信号(以正弦波为例)经过放大整形后转变成方波脉冲,其重 复频率等于被测信号频率。把方波脉冲加到闸门的输入端。由一个高稳定的 石英振荡器和一系列数字分频器组成了时基信号发生器,它输出时间基准(或频 率基准)信号去控制门控电路形成门控信号,门控信号的作用时间 t 是非常 准确的(由石英振荡器决定)。门控信号控制闸门的开与闭,只有在闸门开通的 时间内,方波脉冲才能通过闸门成为被计数的脉冲由计数器计数。闸门开 通的时间称为闸门时间,其长度等于门控信号作用时间 t。比如,时间基准信 号的重复周期为 1s,加到闸门的门控信号作用时间 t 亦准确地等于 1s,即闸 门的开通时间“闸门时间”为 1s。在这一段时间内,若计数器计得 n=100000 个数,根据公式 f = n / t,那么被测频率就是 100000hz。如果计数 式频率计的显示器单位为“khz”,则显示 100.000khz,即小数点定位在第三 位。不难设想,若将闸门时间设为 t=0.1s,则计数值为 10000,这时,显示器 的小数点只要根据闸门时间 t 的改变也随之自动往右移动一位(自动定位),那 么,显示的结果为 100.00khz。在计数式数字频率计中,通过选择不同的闸门 时间,可以改变频率计的测量范围和测量精度。 1.2 测周方法 测周方法即:被测信号(频率或周期待测)做门控信号,t 为未知量,做门 控信号 t,然后在门控信号有效的时间段内对时基信号脉冲计数,原理图如下 图所示: 计数器测周的基本原理刚好与测频相反,即由被测信号控制主门开门,而 用时标脉冲进行计数,所以实质上也是一种比较测量方法。 1.3 等精度测量法 等精度测量法的核心思想是通过闸门信号与被测信号同步,将闸门时间 控制为被测信号周期长度的整数倍。测量时,先打开预置闸门,当检测到被测 信号脉冲沿到达时,标准信号时钟开始计数。预置闸门关闭时,标准信号并不 立即停止计数,而是等检测到被测信号脉冲沿到达时才停止,完成被测信号整 数个周期的测量。测量的实际闸门时间可能会与预置闸门时间不完全相同,但 最大差值不会超过被测信号的一个周期。 在等精度测量法中,相对误差与被测信号本身的频率特性无关,即对整个 测量域而言,测量精度相等,因而称之为“等精度测量”。标准信号的计数值越 大则测量相对误差越小,即提高门限时间 和标准信号频率可以提高测量 精度。在精度不变的情况下,提高标准信号频率可以缩短门限时间,提高测量 速度。原理图如下: 1.4 放大整形电路 当输入信号为 0.5v 时,仿真放大整形后的输出结果如下图示 图 1-6 放大整形电路仿真结果(一) 当输入信号为 3v 时,仿真放大整形后的输出结果如下图示: 当输入信号为 10v 时,仿真放大整 形后的输出结果如下图示: 图 1-6 放大整形电路仿真结果(三) 1.5 时基信号的产生 图 1-7 时基信号产生电路 第二章:任务要求 设计一个计数式频率计,其频率测量范围为 10hz100mhz,测量结果用 6 只数码管显示。有三个带锁按键开关(任何时候都只能有一个被按下)被用来选 择 1s、0.1s 和 0.01s 三个闸门时间中的一个。有一个按钮开关用来使频率计复 位。有两只 led,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出 指示。 第三章:各功能模块的基本介绍 3.1 分频器 由于晶体振荡器提供的为 48m 的时钟,而在整个频率计里将用到周期为 2s、0.2s 和 0.02s 的闸门信号,还有译码显示的扫描信号 1khz ,所以我们在此 模块先分频产生 1hz、10hz、100hz、1khz 四个分频信号,以留作其它模块用。 分频分别采用 4 个计数器来实现,当计到一定的值时输出的分频信号翻转, 最后分别获得 4 个分频输出,分频器模块如下图所示: 此模块的复位为同步方式,当复位有效时,输出将清零。 源程序如下: module clk_div(reset, clk,clk_1hz, clk_10hz, clk_100hz,clk_1khz); input reset,clk; output reg clk_1hz,clk_10hz,clk_100hz,clk_1khz; reg 29:0 counter1,counter2,counter3,counter4; /分频计数值 always (posedge clk or negedge reset) begin if(!reset) begin counter1=0;counter2=0;counter3=0;counter4=0; clk_1hz=0;clk_10hz=0;clk_100hz=0;clk_1khz=0; endelse begin if(counter1=2400000) begin counter1=0;clk_1hz=clk_1hz; end else begin counter1=counter1+1; end if(counter2=240000) begin counter2=0;clk_10hz=clk_10hz;end else begin counter2=counter2+1; end if(counter3=24000) begin counter3=0;clk_100hz=clk_100hz; end else begin counter3=counter3+1; end if(counter4=2400) begin counter4=0;clk_1khz=clk_1khz; end else begin counter4=counter4+1; end end end endmodule 仿真图如下所示: 3.2 闸门选择器: 该模块主要实现对闸门的选择功能,通过输入的门选信号来确定输出的闸 门,生成的模块如下图所示: 具体实现方法如下:当三个门选信号中有且仅有门选信号 gate_ch1 有效时, reg 变量 gate 为 clk_1hz ,当三个门选信号中有且仅有门选信号 gate_ch2 有效 时,reg 变量 gate 为 clk_10hz;当三个门选信号中有且仅有门选信号 gate_ch3 有效时,reg 变量 gate 为 clk_100hz。reg 变量 gate 再二分频则是输出的闸门信 号 gate_out(dot 为标记信号,标记了当前闸门的选择情况)。如果同时有两个 或以上的门 另外输出的译码扫描信号为 clk_1khz ,供后面的扫描译码模块使用 程序如下:module gate_sel(reset,gate_ch1,gate_ch2,gate_ch3, clk_1hz,clk_10hz,clk_100hz,clk_1khz, gate_outdot); input reset,gate_ch1,gate_ch2,gate_ch3, clk_1hz,clk_10hz,clk_100hz,clk_1khz; output reg gate_out; output reg 2:0dot; always (posedge clk_1khz or negedge reset) begin if(!reset) begin gate_out=0;dot=3b111;end else begin if(gate_ch1=0) dot=3b011;end else if(gate_ch1=1)dot=3b010;end else if(gate_ch1=1)dot=3b001;end else begin gate_out=0;dot=3b111;end end end endmodule 3.3 频率计计数 频率计数器的功能为在输入的闸门信号的控制下对输入脉冲时行计数,它是一 个 7 拉的模十计数器。生成的模块如下图所示: 当 gate_out 信号为高时才计数器才计数,在 gate_out 为低后,马上将此时 计数的值 cnt 赋给输出 cnte ,然后当输入 carry_in 信号再过一个脉冲后降计数 的值 cn 清零,以备下次闸门有效时又重新开始计数。源程序如下: module count(carry_in,gate_out,reset, cnte0,cnte1,cnte2,cnte3,cnte4,cnte5,cnte6); input carry_in,gate_out,reset; output reg 3:0 cnte0,cnte1,cnte2,cnte3,cnte4,cnte5,cnte6;/在每一次闸门有效时读数/器传递的计数值 reg 3:0 cnt0,cnt1,cnt2,cnt3,cnt4,cnt5,cnt6; /计数器的 6 个计数值 reg 2:0 counter6; / 延迟将 counter-num 清零的计数值 always (posedge carry_in or negedge reset) begin if(!reset) begin cnt0=4b0000;cnt1=4b0000;cnt2=4b0000;cnt3=4b0000; cnt4=4b0000;cnt5=4b0000;cnt6=4b0000;/判断是否溢出 cnte0=4b0000;cnte1=4b0000;cnte2=4b0000; cnte3=4b0000;cnte4=4b0000;cnte5=4b0000;counter6=0; end else begin if(gate_out=1) begin counter6=0; if(cnt5=4b1001)cnt1=4b0000;cnt2=4b0000;cnt3=4b0000; cnt4=4b0000;cnt5=4b0000;cnt6=cnt6+4b0001;end else begin if(cnt4=4b1001) cnt1=4b0000; cnt2=4b0000; cnt3=4b0000; cnt4=4b0000; cnt5=4b0001+cnt5; cnt6=cnt6; end else begin if(cnt3=4b1001) cnt1=4b0000; cnt2=4b0000; cnt3=4b0000; cnt4=4b0001+cnt4; cnt5=cnt5; cnt6=cnt6; end else begin if(cnt2=4b1001) cnt1=4b0000; cnt2=4b0000; cnt3=4b0001+cnt3; cnt4=cnt4; cnt5=cnt5; cnt6=cnt6; end else begin if(cnt1=4b1001) cnt1=4b0000; cnt2=4b0001+cnt2; cnt3=cnt3; cnt4=cnt4; cnt5=cnt5;cnt6=cnt6; end else begin if(cnt0=4b1001) begin cnt0=4b0000; cnt1=4b0001+cnt1; cnt2=cnt2; cnt3=cnt3; cnt4=cnt4; cnt5=cnt5; cnt6=cnt6; end else begin cnt0=4b0001+cnt0; cnt1=cnt1; cnt2=cnt2; cnt3=cnt3; cnt4=cnt4; cnt5=cnt5; cnt6=cnt6; end end end end end end end else begin if(counter6=2b01) begin cnt0=4b0000; cnt1=4b0000; cnt2=4b0000; cnt3=4b0000; cnt4=4b0000; cnt5=4b0000; cnt6=4b0000; end else begin counter6=counter6+1; cnte0=cnt0; cnte1=cnt1; cnte2=cnt2;cnte3=cnt3; cnte4=cnt4; cnte5=cnt5; cnte6=cnt6; end end end end endmodule 3.4 锁存器 如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入 脉冲数的增加而不断跳变,那么显示数码管则也会不断闪烁跳变,让人不能看 到稳定的输出,设锁存器后,则不再跳变,便可清晰读出计数结果。其生成的 功能模块如图所示: 这模块实现了对七位计数结果的锁存功能。程序很简单如下所示: module data_latch(latch_enable,reset,num0, num 1, num 2, num 3, num 4, num 5,over, n_0,n_1,n_2,n_3,n_4,n_5,over_out); input reset,latch_enable,over; input 3:0 num 0, num 1, num 2, num 3, num 4, num 5; output reg 3:0n_0,n_1,n_2,n_3,n_4,n_5; output reg over_out; reg over_old,over_new; always (negedge latch_enable or negedge reset) begin if(!reset) begin n_0=4b0000; n_1=4b0000; n_2=4b0000; n_3=4b0000; n_4=4b0000; n_5=4b0000; end else begin n_0=digi0; n_1=digi1;n_2=digi2; n_3=digi3; n_4=digi4; n_5=digi5; end end always(negedge latch_enable) begin over_new=over; end always(over_new) begin if(over_old=1)over_old=over_new; end else begin over_out=1;over_old=over_new; end end endmodule 3.5 扫描显示译码系统 本模块在扫描信号的 clk-1khz 的控制下,对多路选择器进行扫描,实现对 实现对六位已经锁存的计数结果的扫描输出,由于人眼的视觉暂留效应,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论