基于FPGA数字频率计 (可测占空比)

合集下载

fpga测占空比技术文档

fpga测占空比技术文档

方波占空比测量龙树东一、设计要求:1、能测量方波占空比。

2、范围5%—95%。

二、设计达到的参数:1、测量占空比范围为DDS输出的20%—80%。

2、频率范围为3hz—100khz。

3、误差:频率低的情况下没有误差频率到8k以上小数点第一位有跳动。

三、测量数据:设计原理:被测信号和标准时钟经过D触发器得到一与被测信号等脉宽且与标准时钟同相的信号,用标准时钟对D触发器输出的信号的高低电平分别计数,运用公式算出占空比:占空比=高电平计数/(高电平计数+低电平计数)。

附件:分频器模块:module div_clk(reset,clk,clk_1mhz,clk_1khz,clk_12864);input reset,clk;output reg clk_1mhz,clk_1khz,clk_12864;reg[31:0] counter1,counter2,counter3;always@(posedge clk or negedge reset)beginif(!reset)begincounter1<=0;counter2<=0;counter3<=0;clk_1mhz<=0;clk_1khz<=0;clk_12864<=0;endelse beginif(counter1==1) begin counter1<=0;clk_1mhz<=~clk_1mhz; endelse begin counter1<=counter1+1; endif(counter2==24999) begin counter2<=0;clk_1khz<=~clk_1khz; endelse begin counter2<=counter2+1; endendendendmoduleD触发器模块:module D_chufaqi(clk, gatein, gateout);input clk;input gatein;output gateout;reg gateout;always @(posedge clk)begingateout <= gatein;endendmodule计数器模块:module cnt(clk,rst_n,catin,dat_out);input clk,rst_n,catin;output [23:0] dat_out;//首先对脉冲输入进行同步处理reg syn1;reg syn2;always @ (posedge clk)beginsyn1 <= catin;syn2 <= syn1;endreg [23:0] ratio;wire catin_pos;//获得输入脉冲的上升沿assign catin_pos = syn2 & (~syn1);//计算高低电平宽度reg [23:0] Pon_reg,Poff_reg;always @ (negedge rst_n or posedge clk)beginif(!rst_n)beginPon_reg <= 24'b0;Poff_reg <= 24'b0;endelse if(catin_pos)beginratio=1+1000*Pon_reg/(Poff_reg+Pon_reg);Pon_reg <= 24'b0;Poff_reg <= 24'b0;endelse if(syn1)beginPon_reg <= Pon_reg + 1'b1;endelsebeginPoff_reg <= Poff_reg + 1'b1;endendreg [5:0] cnt;reg [7:0] ge,shi,bai,qian;always @ (ratio)if(cnt==20) begincnt<=0;// qian <=ratio/1000%10+"0";bai <=ratio/100%10+"0";shi <=ratio/10%10+"0";ge <=ratio%10+"0";endelse begincnt<=cnt+1;endassign dat_out={bai[7:0],shi[7:0],ge[7:0]};endmodule12864液晶显示模块:/***********************12864底层文件************************/module lcd_12864(clk_r,rst_n,en,rs,rw,dat,lcd_data);input clk_r,rst_n;input [23:0] lcd_data;output [7:0] dat;output rs,rw,en;reg e;reg rs;//reg clk_r,clk_o; //分频后的时钟reg [7:0] dat;reg [7:0] dat1;reg [7:0] dat2;reg [1:0] cnt;reg [15:0] count; //分频计数器reg [6:0] i; //状态机变量/*always @(posedge clk) //分频部分if(!rst_n) count = 0;else begincount = count + 1'b1;if(count == 16'h000f)clk_r=~clk_r;end*/always @(posedge clk_r or negedge rst_n )if(!rst_n) begini <=0;rs<=0;e <=0;dat<=0;endelsecase(i)0: begin rs<=0; dat<=8'h30; i<=i+1'b1; end //lcd初始化1: begin rs<=0; dat<=8'h0c; i<=i+1'b1; end2: begin rs<=0; dat<=8'h6; i<=i+1'b1; end3: begin rs<=0; dat<=8'h81; i<=i+1'b1; end4: begin rs<=1; dat<=8'hd3; i<=i+1'b1; end //玉5: begin rs<=1; dat<=8'hf1; i<=i+1'b1; end6: begin rs<=1; dat<=8'hc1; i<=i+1'b1; end //林7: begin rs<=1; dat<=8'hd6; i<=i+1'b1; end8: begin rs<=1; dat<=8'hca; i<=i+1'b1; end //师9: begin rs<=1; dat<=8'ha6; i<=i+1'b1; end10: begin rs<=1; dat<=8'hb7; i<=i+1'b1; end //范11: begin rs<=1; dat<=8'hb6; i<=i+1'b1; end12: begin rs<=1; dat<=8'hd1; i<=i+1'b1; end //学13: begin rs<=1; dat<=8'ha7; i<=i+1'b1; end14: begin rs<=1; dat<=8'hd4; i<=i+1'b1; end //院15: begin rs<=1; dat<=8'hba; i<=i+1'b1; end16: begin rs<=0; dat<=8'h90; i<=i+1'b1; end //显示第二行17: begin rs<=1; dat<=8'hb5; i<=i+1'b1; end //电18: begin rs<=1; dat<=8'he7; i<=i+1'b1; end19: begin rs<=1; dat<=8'hd7; i<=i+1'b1; end //子20: begin rs<=1; dat<=8'hd3; i<=i+1'b1; end21: begin rs<=1; dat<=8'hb4; i<=i+1'b1; end //创22: begin rs<=1; dat<=8'hb4; i<=i+1'b1; end23: begin rs<=1; dat<=8'hd0; i<=i+1'b1; end //新24: begin rs<=1; dat<=8'hc2; i<=i+1'b1; end25: begin rs<=1; dat<=8'hca; i<=i+1'b1; end //实26: begin rs<=1; dat<=8'hb5; i<=i+1'b1; end27: begin rs<=1; dat<=8'hd1; i<=i+1'b1; end //验28: begin rs<=1; dat<=8'he9; i<=i+1'b1; end29: begin rs<=1; dat<=8'hca; i<=i+1'b1; end //室30: begin rs<=1; dat<=8'hd2; i<=i+1'b1; end31: begin e<=0; rs<=0; dat<=(8'h88+1); i<=i+1'b1; end //定位第三行,重新把en拉低32: begin rs<=1; dat<=8'hd5; i<=i+1'b1; end //占33: begin rs<=1; dat<=8'hbc; i<=i+1'b1; end34: begin rs<=1; dat<=8'hbf; i<=i+1'b1; end //空35: begin rs<=1; dat<=8'hd5; i<=i+1'b1; end36: begin rs<=1; dat<=8'hb1; i<=i+1'b1; end //比37: begin rs<=1; dat<=8'hc8; i<=i+1'b1; end38: begin rs<=1; dat<=8'ha1; i<=i+1'b1; end //:39: begin rs<=1; dat<=8'hc3; i<=i+1'b1; end40: begin rs<=1; dat<=lcd_data[23:16]; i<=i+1'b1; end41: begin rs<=1; dat<=lcd_data[15 :8]; i<=i+1'b1; end42: begin rs<=1; dat<="."; i<=i+1'b1; end //%43: begin rs<=1; dat<=lcd_data[7 :0]; i<=i+1'b1; end //%44: begin rs<=1; dat<=8'ha3; i<=i+1'b1; end //%45: begin rs<=1; dat<=8'ha5; i<=i+1'b1; end46:begin rs<=0; dat<=8'h00;if(cnt!=2'h2)begine<=0; cnt<=cnt+1'b1; i<=1'b0;endelse begine<=1; i<=6'd31;endenddefault: i<=1'b0;endcaseassign en=clk_r|e;assign rw=0;Endmodule综合模块:。

基于FPGA的数字频率计设计

基于FPGA的数字频率计设计

基于FPGA的数字频率计设计摘要数字频率计是一种常用的电子测量仪器,在工程领域中广泛应用。

与传统的模拟频率计相比,数字频率计具有精度高、响应快、体积小等优点,在现代电子技术领域中广泛应用。

本文将介绍如何使用FPGA设计数字频率计,并通过示例演示FPGA的应用。

介绍数字频率计是一种将输入信号的频率转换成计数信号输出的电子工具,它可以测量频率、周期和时间间隔等参数。

频率计通常采用数字进制计数方式,其测量精度取决于计数器的精度和时钟频率。

在电子电路测试、无线通信、音频、视频等领域中,数字频率计起着至关重要的作用。

FPGA(Field Programmable Gate Array)是一种具有灵活性、可编程性和高速性的逻辑芯片,适用于数字电路的设计和实现。

与ASIC(Application-Specific Integrated Circuit)相比,FPGA具有短设计周期、可重构、低成本等特点。

在数字系统中,FPGA作为计数器的电子部件,使得数字频率计的设计变得更加灵活和简便。

FPGA数字频率计设计系统框图FPGA数字频率计的系统框图如下:FPGA数字频率计系统框图FPGA数字频率计系统框图如图所示,FPGA数字频率计的输入端连接到待测信号,经过放大和滤波处理后送入计数器中进行计数,计数器输出的计数值存储在FPGA的存储器中并进行处理,最终形成数字频率读数并显示在数码管上。

输入端FPGA数字频率计的输入端通常使用低噪声前置放大器和有限带宽滤波器的组合,以保证待测信号的准确度和稳定性。

实际设计中应根据待测信号的具体情况选择合适的放大系数和滤波器参数。

计数器数字频率计的计数器是FPGA实现的核心部件。

计数器根据输入端计数触发信号进行计数,并将计数器输出的计数值存储在FPGA的存储器中。

计数器的计数值越大,频率读数的分辨率就越高。

在FPGA中,计数器可以采用累加计数器或移位寄存器计算,具体实现取决于设计者的需求和性能要求。

基于FPGA的数字频率计

基于FPGA的数字频率计
图3.6EPM570T1445N器件的管脚图
EPM570T1445N器件属于Altera公司MAX7000S系列,EPM570T144C5N器件包含一个二维行和列的架构实现自定义逻辑。行和列的互连提供信号互连之间的逻辑阵列块(实验室)。逻辑阵列组成的实验室,10个逻辑单元,在每个实验室(LE)之间。一个LE是一小单位逻辑用户提供逻辑功能的有效实施。实验室分为行和列上的设备。多轨互连实验室提供快速颗粒之间的时间延迟。括约肌之间的快速路由提供最低的时间延迟逻辑电平的增加与全球路由互连结构。MAX II器件的I / O引脚由我I/ O单元(雇主组织)在劳工顾问委员会的目的所在行和列周围设备的边缘。每个雇主组织包含一个双向I / O缓冲区的多种高级功能。I / O引脚支持施密特触发输入和各种单端标准,例如66兆赫,32位PCI,和LVTTL等级。MAX II器件提供了一个全局时钟网络。全球时钟网络的组成4全局时钟线,在整个整个设备驱动器,提供对所有时钟内资源的设备。全球时钟线也可用于控制信号如明确,预设,或输出使能。如图为EPM570T1445N的逻辑阵列块。
CPLD的LCD_D[7..0]作为总线通过与外部接插件连接,实现与液晶显示屏相连。LCD_DD0-LCD_DD7,以及LCD_RES_X0-LCD_RES_X3、LCD_RESET、片选线等等外部都连接一上拉电阻。如图3.4.2所示。
图3.4.1液晶显示1
图3.4.2 上拉电阻
3.5测频复位电路。
方案二:
2.3 方案选择
3单元模块电路设计
3.1电路设计总体框图
本设计主要由8个部分组成,以CPLD芯片部分为核心展开,待测信号输入,由外部电源,复位电路,单片机电路,液晶显示,标准时钟以及JTAG下载各个单元配合起来实现测试频率并在液晶显示屏上实时显示出数字频率信号。

基于FPGA的等精度数字频率计总结

基于FPGA的等精度数字频率计总结

作品总结智冰冰前几天做了数字频率计,虽然做的不是太好吧,但是还算是做出来了,我在这里就对大家分享一下我的制作过程,希望想做频率计的朋友能够少走一些弯路,如果有不好的地方请大家提出来,如果有更好的方法也可以和我交流交流。

拿到这个题目我首先看到题目要求频率计要能测频率、测周期、测占空比,所以我们要准备的东西就要有FPGA板,51开发板(主要利用数码管模块)、直流稳压电源、数字信号发生器。

准备好这些东西之后就要考虑作品方案问题了。

确立作品方案是整个作品中比较重要的一部分,如果作品方案不合理,就不会做出来比较好的作品。

在确立数字频率计设计方案的时候,首先就要确定用什么方法实现测频率、测周期、测占空比,查找了一些资料,大概知道了一下三种方法:(1)测频率法:测频率法是用脉冲信号产生一个固定的闸门时间t,在固定的闸门时间t内对被测信号进行计数,然后运算求出被测信号频率、周期,但是在闸门时间t内不能保证被测信号计数为整数个,这就会让被测信号产生±1的误差,所以当被测信号频率高时测量比较准确,但是测低频时误差就比较大了。

(2)测周期法:测频率法是用被测信号作为门控信号,在闸门时间t内对脉冲信号进行计数,然后运算求出被测信号频率、周期,但是同样的在闸门时间t内不能保证脉冲信号计数为整数个,这就会让脉冲信号产生±1的误差,所以当被测信号频率低时,相对来说比较准确,但对于高频来说误差就大了。

(3)等精度法:等精度测量是用脉冲信号产生一个预置闸门,然后在预置闸门时间内通过被测信号上升沿产生一个实际闸门,这样实际闸门刚好是被测信号的整数倍。

在计数允许时间内,同时对脉冲信号和被测信号进行计数,再通过数学公式推导得到被测信号的频率。

由于门控信号是被测信号的整数倍,就消除了对被测信号产生的±l周期误差,但是会产生对脉冲信号±1周期的误差。

但是相对测频率法来说误差相对较小。

确立好自己的设计方案后,就要设计自己的程序了。

基于 fpga 的数字频率计的设计与实现

基于 fpga 的数字频率计的设计与实现

基于 FPGA 的数字频率计的设计与实现随着现代科技的不断发展,我们对数字信号处理的需求也越来越高。

数字频率计作为一种用来测量信号频率的仪器,在许多领域有着广泛的应用,包括无线通信、雷达系统、声音处理等。

在这些应用中,精确、高速的频率测量常常是至关重要的。

而基于 FPGA 的数字频率计正是利用了 FPGA 高速并行处理的特点,能够实现高速、精确的频率计算,因此受到了广泛关注。

本文将从设计思路、硬件实现和软件调试三个方面,对基于 FPGA 的数字频率计的设计与实现进行详细讲解。

一、设计思路1.1 频率计原理数字频率计的基本原理是通过对信号进行数字化,然后用计数器来记录单位时间内信号的周期数,最后根据计数器的数值和单位时间来计算信号的频率。

在 FPGA 中,可以通过硬件逻辑来实现这一过程,从而实现高速的频率计算。

1.2 FPGA 的优势FPGA 作为一种可编程逻辑器件,具有并行处理能力强、时钟频率高、资源丰富等优点。

这些特点使得 FPGA 在数字频率计的实现中具有天然的优势,能够实现高速、精确的频率测量。

1.3 设计方案在设计数字频率计时,可以采用过采样的方法,即对输入信号进行过取样,得到更高精度的测量结果。

还可以结合 PLL 锁相环等技术,对输入信号进行同步、滤波处理,提高频率测量的准确性和稳定性。

二、硬件实现2.1 信号采集在 FPGA 中,通常采用外部 ADC 转换芯片来对输入信号进行模数转换。

通过合理的采样率和分辨率设置,可以保证对输入信号进行精确的数字化处理。

2.2 计数器设计频率计最关键的部分就是计数器的设计。

在 FPGA 中,可以利用计数器模块对输入信号进行计数,并将计数结果送入逻辑单元进行进一步的处理。

2.3 频率计算通过对计数结果进行适当的处理和归一化,可以得到最终的信号频率。

在这一过程中,需要注意处理溢出、误差校正等问题,以保证频率测量的准确性和稳定性。

三、软件调试3.1 FPGA 开发环境在进行基于 FPGA 的数字频率计设计时,可以选择常见的开发工具,例如 Xilinx Vivado 或 Quartus II 等。

基于FPGA的数字式频率计设计报告

基于FPGA的数字式频率计设计报告

湖南大学电气与信息工程学院本科生课程设计题目:数字频率计课程:电子技术综合设计专业:电子信息工程班级:1703指导老师:设计时间:目录一、选题 (1)二、要求 (1)三、方案原理 (3)四、框图 (4)五、单元电路说明 (6)1分频模块 (6)2 显示模块六、参考资料 (21)一、选题数字式频率计的VERILOG设计二、要求对输入FPGA开发板的一定频率的输入信号的频率进行测量,并通过LCD进行显示,并使可测量范围尽可能大,精度尽可能高三、方案原理(1)L CD显示原理本次设计中使用的是基于HD44780的LCD1602。

管脚定义图如下:要实现液晶显示功能有如下关键步骤:1.确定字符显示位置:要在液晶上的某个位置上显示某个字符,就是要向DDRAM的某个地址写入要显示的数据代码。

屏幕物理位置与DDRAM地址的对应关系如下:2.确定显示字符的内容:液晶要显示某个字符时,实质上就是显示该字符的字模, ,即向DDRAM里写数,数据与字模对照表如下:3.将数据写入LCD:执行以下步骤:清屏指令->功能设置指令->进入模式设置指令->显示开关控制指令->设定DDRAM地址指令->数据写入DDRAM指令,相关指令如下:液晶读数据时序:把数据写入液晶时序:由上图可知要保证液晶能正常显示,在E的下降沿时,数据要有效。

(2)频率测量原理利用分频模块获得一个1HZ的clk脉冲,同时设定一个计数脉冲,clk 脉冲作为时基,同时设定一个计数脉冲,每当clk脉冲跳变时,将计数寄存器中的数据送至显示寄存器,同时清零计数寄存器,并显示寄存器中的内容送至LCD显示模块,即可完成频率测量功能模块例化思路分频模块产生多种频率的信号供不同模块使用顶层文件脉冲计数count门控信号二-十进制转换模块LCD1602模块显示频率(最小单位1Hz)和占空比(最小单位0.1%)Clk_In,sysclkClk_GateClk_500Cnt7~Cnt0countClk_500。

基于fpga的数字频率计设计

基于fpga的数字频率计设计

基于FPGA的数字频率计设计随着科学技术的不断进步,数字电子技术在各个领域都得到了广泛的应用。

其中,FPGA(现场可编程门阵列)作为一种灵活、可编程、可重构的数字电路设备,具有较高的性能和灵活性,被广泛应用于数字信号处理、通信、图像处理等各个领域。

本篇文章将介绍基于FPGA的数字频率计设计。

一、概述数字频率计是一种用于测量信号频率的设备,可以方便快速地获取信号的频率信息。

传统的数字频率计通常采用微处理器或专用集成电路来实现,但是这些方案在某些应用场景下存在着局限性。

使用FPGA来设计数字频率计,既可以充分利用FPGA的灵活性和并行性,又可以实现高性能和低功耗的设计。

二、基于FPGA的数字频率计设计原理基于FPGA的数字频率计主要通过计数器和时钟信号来实现。

其设计原理可以分为以下几个步骤:1. 时钟信号同步:通过FPGA内部的PLL(锁相环)模块,可以实现时钟信号的同步和稳定。

2. 信号输入:将待测信号输入FPGA,可以通过外部接口或模拟输入模块实现。

3. 计数器设计:利用FPGA内部的计数器模块,对输入信号进行计数,从而获取信号的频率信息。

4. 频率计算:根据计数器的计数值和时钟信号的周期,可以计算出输入信号的频率信息。

三、基于FPGA的数字频率计设计实现基于上述原理,可以利用FPGA内部的逻辑资源,设计出一个高性能的数字频率计。

具体实现步骤如下:1. 确定输入信号的接口:选择适合的输入接口,可以是数字信号接口、模拟信号接口或者通用IO口。

2. 设计计数器模块:根据待测信号的频率范围和精度要求,设计合适的计数器模块,可以结合FPGA的时钟管理模块实现高精度计数。

3. 编写频率计算算法:根据计数器得到的计数值和时钟信号的周期,设计频率计算算法,可以采用移位运算、累加运算等实现高效的频率计算。

4. 实现显示与输出:设计合适的显示模块和输出接口,将测得的频率信息在显示屏或者外部设备上进行输出。

四、基于FPGA的数字频率计设计应用基于FPGA的数字频率计设计可以广泛应用于各种领域,如通信、测控、仪器仪表等。

基于FPGA的数字频率计的设计

基于FPGA的数字频率计的设计

基于FPGA的数字频率计的设计摘要:数字频率计(FREQ)是一种用于计算信号频率的设备。

本文提出了一种基于FPGA的数字频率计的设计方案,使用Verilog HDL实现了数字频率计,可以实现输入信号频率的测量和显示。

该数字频率计的设计具有快速响应、低延迟、高精度的特点,并且适用于各种频率范围的输入信号。

关键词:数字频率计;FPGA;Verilog HDL;测量;显示;精度1. 简介数字频率计是一种用于测量信号频率的设备,广泛应用于电子、通信、计算机等领域。

传统的频率计一般采用模拟电路实现,但其精度和速度有限,且易受到噪声和温度等因素的影响,难以应用于高精度和高速测量。

随着FPGA技术的不断发展,基于FPGA的数字频率计逐渐成为一种新的解决方案。

2. 设计方案本文提出了一种基于FPGA的数字频率计的设计方案,使用Verilog HDL实现了数字频率计,可以实现输入信号频率的测量和显示。

数字频率计的核心是计数器,通过计数器来测量输入信号的周期,并计算出信号的频率。

本设计方案采用了高速计数器的设计思路,具体步骤如下:(1) 输入信号经过芯片引脚电路,进入FPGA芯片。

(2) FPGA内置的输入输出模块将输入信号进行采样和滤波处理,得到纯净的数字信号。

(3) 数字信号经过计数器进行计数,计数值存储在计数器的寄存器中。

(4) 计数值经过时钟分频和计算,得到输入信号的周期和频率。

(5) 输入信号的频率通过显示模块在数码管或LCD显示屏上显示,同时可以通过按键或旋转编码器进行设置和控制。

3. 实验结果本设计方案采用ALTERA CYCLONE III系列FPGA芯片,频率范围从1Hz到50MHz,精度为0.01Hz。

实验结果表明,数字频率计响应速度快,延迟较低(约为100ns),精度高(误差小于0.1%),同时可以适应各种信号频率范围的测量。

4. 总结本文提出了一种基于FPGA的数字频率计的设计方案,采用了高速计数器的设计思路,具有快速响应、低延迟、高精度的特点,并且适用于各种频率范围的输入信号。

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

VHDL 课程设计报告——基于FPGA的数字频率计姓名:学号:班级:目录1 设计原理 (1)2功能设计 (1)3系统总体框图 (1)4各功能块设计说明 (2)5实验结果 (14)6结论分析 (15)一、设计原理频计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。

通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。

闸门时间可以根据需要取值,大于或小于1 s都可以。

闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。

闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。

一般取1 s作为闸门时间,此测量方法称为直接测频法。

由于闸门时间通常不是待测信号的整数倍,这种方法的计数值也会产生最大为±1个脉冲误差。

进一步分析测量准确度:设待测信号脉冲周期为Tx,频率为Fx,当测量时间为T=1s时,测量相对误差为Tx/T=Tx=1/Fx。

由此可知直接测频法的测量准确度与信号的频率有关:当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。

二、功能设计1、测量范围:1HZ--------99MHZ,测量精度±1HZ。

2、测量结果高4位与低4位进行分页显示。

当超过9999HZ时,系统亮灯提示超出低4位显示范围,可通过按键进行高低4位结果的显示切换。

高4位显示时,伴有小数点位的点亮,提示已成功切换到高4位。

3、测量所测信号的占空比。

能够快速测出输入待测信号的占空比,并且通过按键,切换到占空比显示状态。

4、内置自测信号由内部时钟产生三个特定时钟,以供自身测试功能是否正常。

三、系统总体框图系统总框图四、各功能块设计说明1、时钟发生器通过对50MHZ的晶振时钟进行50M的分频,等到一个1HZ信号。

再通过此信号,通过2分频,得到一个0.5HZ的信号,从而得到高电平为1秒的闸门控制信号en来控制计数器的计数时间.再通过对en求反,等到锁存信号load.而清零信号clr则通过en与1HZ信号共同产生.同时对50MHZ信号进行500分频,一个两位的std_logic_vector(1 downto 0)信号在分频信号的驱动下不断加‘1’,等到“00”、“01”、“10”、“11”四种片选信号,对应4个数码管,从而驱动数码管的动态扫描显示。

时钟发生器的代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clock isport(clk0:in std_logic;load,en,clr:out std_logic;pian:buffer std_logic_vector(1 downto 0));end entity clock;architecture run of clock issignal en1,en2,en3:std_logic;beginonehz:process(clk0) --产生1HZ信号variable cnt:integer range 0 to 50000000;variable x:std_logic;beginif(clk0'event and clk0='1') thenif(cnt<24999999) thencnt:=cnt+1;else cnt:=0; x:=not x;end if;en1<=x;end if;end process onehz;zreo5hz:process(en1) --产生0.5HZ信号beginif(en1'event and en1='1') thenen2<=not en2;end if;en<=en2;end process;locks:process(en2) --对en信号进行取反,得到锁存信号load beginload<=not en2;end process;clr1:process(en1,en2) --由en信号与1HZ信号共同产生清零信号clrbeginif(en1='0'and en2='0') thenclr<='1';else clr<='0';end if;end process;onekhz:process(clk0) --对50MHZ信号进行500分频variable cnt1:integer range 0 to 50000000;variable x1:std_logic;beginif(clk0'event and clk0='1') thenif(cnt1<500) thencnt1:=cnt1+1;else cnt1:=0; x1:=not x1;end if;en3<=x1;end if;end process;pianx:process(en3) --由500分频信号得到片选信号beginif(en3'event and en3='1') thenpian<=pian+1;end if;end process;end architecture run;2、信号输入器通过对50MHZ信号进行不同的2的n次方分频,得到781250HZ,195313HZ,24HZ这三个内部自测信号,以检测频率计是够正常。

通过按键key1,key2,key3来选择三个中的一个信号输入以对频率计进行自检。

而信号输入器的默认情况是输入外部待测信号。

由于使用if---elsif语句,三个按键中,优先级最高的是key1,然后是key2,最后是key3。

信号输入器的代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fenpin isport(cin,k1,k2,k3,p:in std_logic;clkout,pp:out std_logic);end entity fenpin;architecture run3 of fenpin issignal temp:std_logic_vector(50 downto 0);beginc:process(cin) --对50Mhz进行2的n次方分频beginif(cin'event and cin='1') thentemp<=temp+1;end if;end process;d:process(p,k1,k2,k3)beginif(k1='0') thenclkout<=temp(20); --得到24HZ信号elsif(k2='0') thenclkout<=temp(7); --得到195313HZ信号elsif(k3='0') thenclkout<=temp(5); --得到781250HZ信号else clkout<=p; --默认情况下检测外部信号end if;end process;pp<=temp(20); --向外输出一个24HZ的频率,可供自身测试使用end architecture run3;3、计数器根据在时基有效时间内的计数值进行判断,计数器可以直接定义成8个std_logic_vector(3 downto 0)的32位信号,在待测时钟上升沿到来的时候,使用语句“计数器<=计数器+1;”,当信号的值小于“1001”时,信号就不断自增;当信号大于或等于“1001”时,就归零。

由于if语句的特性,使得到一个二进制显示的十进制计数器,对于后续的显示代码转换也是十分的方便。

当高4位不全为零时,产生一个信号来点亮板上的led灯,告诉使用者待测频率已经超过9999hz,需要翻页才能看到结果的高4位数据。

同时通过一个按键key5,产生一个高低4位传送切换信号。

当key5信号为0时,送低4位到译码显示电路;当key5信号为1时,送高四位到译码显示电路。

默认情况下是送低4位到译码显示电路。

这样就可以通过按键来实现高低四位的换页显示了。

Key5也同时控制着小数点的显示与否,若小数点点亮,则表示切换到高位成功,否则,仍然显示低位。

计数器代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity counter isport(clkin,clr0,do,k:in std_logic;biao,dian:out std_logic;d1,d2,d3,d4:out std_logic_vector(3 downto 0));end entity counter;architecture run1 of counter isbegina:process(clkin)variable a1,a2,a3,a4,a5,a6,a7,a8:std_logic_vector(3 downto 0);beginif(clkin'event and clkin='1') then --1 32位宽的信号进行加1计算,得到频率值if(do='1') then --11 最低位if(a1<"1001") thena1:=a1+1;else a1:="0000";if(a2<"1001") thena2:=a2+1;else a2:="0000";if(a3<"1001") thena3:=a3+1;else a3:="0000";if(a4<"1001") thena4:=a4+1;else a4:="0000";if(a5<"1001") thena5:=a5+1;else a5:="0000";if(a6<"1001") thena6:=a6+1;else a6:="0000";if(a7<"1001") thena7:=a7+1;else a7:="0000";if(a8<"1001") then --最高位a8:=a8+1;else a8:="0000";end if;end if;end if;end if;end if;end if;end if;end if;end if; --11if(clr0='1') then --12 清零信号有效时,对32位宽信号进行清零,为下一次计数做好准备a1:="0000";a2:="0000";a3:="0000";a4:="0000";a5:="0000";a6:="0000";a7:="0000";a8:="0000";end if; --12end if; --1if(a5/="0000") or (a6/="0000") or (a7/="0000")or (a8/="0000")then --2biao<='1'; --待测信号是否超出9999HZ的判断,从而产生高位翻页提醒信号elsebiao<='0';end if; --2if(k='0') then --3 高低4位翻页切换信号的产生与执行d4<=a8;d3<=a7;d2<=a6;d1<=a5;dian<='0';elsed4<=a4;d3<=a3;d2<=a2;d1<=a1;dian<='1';end if; --3end process;end architecture run1;4、占空比测量电路以50MHZ信号作为计数的频率基准。

相关文档
最新文档