VHDL课程设计报告 频率计
- 格式:docx
- 大小:231.90 KB
- 文档页数:12
频率计实验报告系别:电气工程系班级:应用电子081学生姓名:潘秀梅学号:860706027序号:27指导教师:张江伟完成时间:2010年5月25日数字频率计的设计前言数字频率计是一种应用很广泛的仪器。
数字频率计是数字电路中的一个典型应用,实际硬件设计采用的器件较多,连线复杂,而且会产生较大延时,造成测量误差且可靠性差。
随着复杂可编程逻辑器件的广泛应用,以EDA工具为开发手段,运用VHDL语言,从而大大简化系统设计,提高整体的性能和可靠性。
本次实验采用VHDL语言,运用自顶向下(Top To Down)的方法,使用Isp Expert集成开发环境进行编译、综合、波形仿真,并下载到CPLD器件中,设计并实现了四位数字频率计。
关键词EDA;VHDL;数字频率计;波形仿真;CPLD前言 (1)关键字 (2)一、设计目的 (3)二、设计要求 (4)三、实验环境 (5)四、设计原理 (6)五、各功能实现原理 (7)六、各模块介绍 (8)七、总连接图 (9)八、设计体会 (10)数字频率计一、设计目的1、了解数字频率计测量频率与测量周期的基本原理;2、熟练掌握数字频率计的设计与调试方法;3、掌握多个数码管显示的原理与方法;4、掌握使用VHDL语言的设计思想;5、对整个系统的设计有一个的了解。
二、设计要求1、对所有设计的小系统能够正确分析;2、基于VHDL语言描述系统的功能;3、在quartus 2环境中编译通过;4、仿真通过并得到正确的波形;5、给出相应的设计报告。
三、实验环境1、软件环境:Quartus II 6.02、硬件环境:实验箱四、设计原理数字频率计的原理框图如图3所示。
他主要由5个模块组成,分别是:脉冲发生器电路、测频控制信号发生器电路、计数模块电路、锁存器、译码驱动电路。
当系统正常工作时,脉冲发生器提供的5 Hz的输入信号,经过测频控制信号发生器进行信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码显示管上可以显示的十进制结果。
基于VHDL设计的频率计专业:信息工程学号:姓名:一、实验任务及要求1、设计一个可测频率的数字式频率计,测量范围为1Hz~12MHz。
该频率计的逻辑图如图所示。
2、用层次化设计方法设计该电路,编写各个功能模块的程序。
3、仿真各功能模块,通过观察有关波形确认电路设计是否正确。
4、完成电路设计后,用实验系统下载验证设计的正确性。
二、设计说明与提示由上图可知8位十进制数字频率计,由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B组成。
1、测频控制信号发生器设计要求。
频率测量的基本原理是计算每秒种内待测信号的脉冲个数。
这就要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同不控制。
当TSTEN高电平时允许计数、低电平时停止计数,并保持其所计的数。
在停止计数期间,首先需要一个锁存信号Load的上跳沿将计数器在前1秒钟的计数值锁存进32位锁存器REG32B中,并由外部的7段译码器译出并稳定显示。
设置锁存器的好处是为了显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号CLR_CNT对计数器进行清零,为下1秒钟的计数操作做准备。
测频控制信号发生器的工作时序如下图。
为了产生这个时序图,需首先建立一个由D触发器构成的二分频器,在每次时钟CLK上沿到来时使其值翻转。
其中控制信号时钟CLK的频率1Hz,那么信号TSTEN的脉宽恰好为1秒,可以用作闸门信号。
然后根据测频的时序要求,可得出信号Load和CLR_CNT 的逻辑描述。
由图可见,在计数完成后,即计数使能信号TSTEN在1秒的高电平后,利用其反相值的上跳沿产生一个锁存信号Load,0.5秒后,CLR_CNT产生一个清零信号上跳沿。
高质量的测频控制信号发生器的设计十分重要,设计中要对其进行仔细的实时仿真(TIMING SIMULATION),防止可能产生的毛剌。
XXXXXXX学院学生毕业设计(论文)报告系别:电子与电气工程学院专业:电子信息工程技术班号:学生姓名:学生学号:设计(论文)题目:基于VHDL的数字频率计设计指导教师:设计地点:XXXXXXX学院起迄日期:20XX.9.1~20XX.10.31毕业设计(论文)任务书专业电子信息工程技术班级姓名一、课题名称:基于VHDL的数字频率计设计二、主要技术指标:1. 频率范围为:1Hz~50MHz。
2. 结果用数码管十进制显示。
3. 输入信号电压幅度为50mV~5V。
三、工作内容和要求:1. 构建大体的设计方案,并了解其内容。
2. 构建出大体的顶层原理设计框图。
3. 对底层的每个电路模块的设计,并通过软件MAX+PLUS2完成程序的编写通过。
4. 对整个原理框图进行编译并通过。
5. 对整个仿真图编译通过。
四、主要参考文献:[1] 陈必群. EDA技术与项目训练[M] ,常州:常州信息职业技术学院,2009年.[2] 王凤英. 基于FPGA的数字频率计设计与仿真[J].科技资讯,,2008,15(8):1—10[3] 谭会生,张昌凡.EDA技术及应用.西安[M]:电子科技大学出版社,2001年[4] 张凯,林伟.VHDL实例剖析[M].北京:国防工业出版社,2004年[5] 刘玉良,李玲玉,邓勇全.吉林:用EDA方法设计数字系统的灵活性[D],2002年[6] 宋万杰等.CPLD技术及其应用.[M].西安:西安电子科技大学出版社,2000年.学生(签名)年月日指导教师(签名)年月日教研室主任(签名)年月日系主任(签名)年月日毕业设计(论文)开题报告基于VHDL的数字频率计设计目录摘要Abstract第1章前言 (1)第2章数字频率计的要求 (2)2.1 主要技术指标 (2)2.2 工作内容和要求 (2)第3章数字频率计的方案设计.............................. (3)3.1 基本原理 (3)3.1.1 频率计测量频率的设计原理 (3)3.1.2 频率计测量频率的原理图 (3)3.2 设计流程图 (3)第4章数字频率计各模块功能介绍 (4)4.1 频率控制模块的VHDL语言源程序 (4)4.1.1 频率控制模块的程序 (4)4.2 十进制加法计数器CNT10的VHDL语言源程序 (5)4.2.1 十进制计数器的程序 (5)4.2.2 十进制计数器的顶层设计 (6)4.3系统模块的VHDL语言源程序 (7)4.3.1系统模块的设计 (7)4.3.2 系统模块的程序 (7)4.4 锁存器LOCK的VHDL语言源程序 (10)4.4.1 锁存器LOCK的程序 (10)4.5 译码模块DECODER的VHDL语言源程序 (11)4.5.1 译码模块DECODER的程序 (11)4.6四选一选择器MUX41的VHDL语言源程序 (12)4.6.1 MUX41程序 (12)4.7 四进制计数器CNT4的VHDL语言源程序 (13)4.7.1 四进制计数器CNT4的程序 (13)4.8 250分频器的VHDL语言源程序 (14)4.8.1 250分频器的程序 (14)第5章数字频率计仿真图 (15)5.1 频率控制模块仿真波形图 (15)5.2 十进制计数器模块仿真波形图 (15)5.3 锁存模块仿真波形图 (15)5.4 译码模块波形仿真图 (16)5.5 四选一选择器MUX41的仿真图 (16)5.6 四进制计数器CNT4的仿真图 (16)5.7 250分频器的仿真图 (17)第6章频率计顶层原理图的输入 (18)第7章下载测试 (19)第8章结束语 (20)参考文献答谢辞数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置。
vhdl课程设计频率计一、课程目标知识目标:1. 掌握VHDL语言的基本语法和程序结构;2. 了解频率计的工作原理和设计方法;3. 学会使用VHDL语言设计简单的数字电路系统。
技能目标:1. 能够运用VHDL语言编写简单的程序代码;2. 能够运用所学知识设计并实现一个功能完整的频率计;3. 能够运用仿真工具对所设计的频率计进行测试和验证。
情感态度价值观目标:1. 培养学生对电子设计领域的兴趣和热情;2. 培养学生的团队协作意识和解决问题的能力;3. 培养学生严谨的科学态度和良好的工程素养。
课程性质:本课程为电子技术专业课程,旨在培养学生的硬件描述语言编程能力和电子系统设计能力。
学生特点:学生已具备一定的电子技术基础和编程能力,对数字电路和VHDL 语言有一定了解。
教学要求:结合学生特点和课程性质,将课程目标分解为具体的学习成果,注重理论与实践相结合,提高学生的实际操作能力。
在教学过程中,注重引导学生主动探究、积极实践,培养学生的创新意识和实际工程能力。
二、教学内容1. VHDL语言基础:- 数据类型、运算符和表达式;- 顺序语句和并行语句;- 进程语句和敏感列表;- 子程序和包的使用。
2. 频率计原理:- 频率计的基本工作原理;- 数字频率计的计数方法;- 频率计的误差分析和改进措施。
3. VHDL设计频率计:- 设计流程和需求分析;- 模块划分和接口设计;- 代码编写和调试;- 仿真测试和验证。
4. 教学内容的安排和进度:- 第一周:VHDL语言基础学习;- 第二周:频率计原理学习;- 第三周:VHDL设计频率计实践;- 第四周:代码调试、仿真测试和课程总结。
教材章节关联:1. VHDL语言基础:参考教材第3章;2. 频率计原理:参考教材第5章;3. VHDL设计频率计:参考教材第6章。
教学内容注重理论与实践相结合,按照教学大纲逐步推进,使学生能够系统地掌握VHDL语言和频率计的设计方法。
在教学过程中,结合实例进行分析和讲解,提高学生的实际操作能力。
数字频率计的设计一、频率计实现的功能要设计的频率计的测量范围为1MHz。
为了提高测量的精度,量程分为三档,分别是:10kHz、100kHz、1MHz。
并要求在测量频率大于或小于选择的量程时,频率计自动换档。
1、当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增加一档。
2、当读数小于009时,频率计处于欠量程状态,下一次测量时,量程自动减小一档。
3、当超出测量范围时,显示错误。
4、在计数时不显示数据,计数完成后只显示测量结果。
5、小数点位置要自动移位。
二、频率计各部分的分析在这个设计中,需要用计数器来进行计数,而且计数器在各个档位要被重复使用,在测量的过程中,计数允许时钟信号还要进行调整,故将计数器设计成一个单独的模块,提供计数值的输出。
显示结果包括数值显示,档位显示及溢出标志显示。
其中数值显示要用到三个数码管,实验箱上连在一起的三个数码管中,只有两个数码管内部接有译码器,因此我们自己还要在程序中为那个没有译码器的数码管再加一段七段译码器程序来显示结果。
档位标志由三个LED灯来显示,代替数码管上的小数点的功能。
溢出标志由两个LED灯来显示,其中一个显示结果溢出,另一个显示输入信号在测量范围之内。
该频率计的顶层逻辑电路原理图如图(1)所示:图(1)三、频率计各部分的设计和实现从上面的分析可以知道,频率计可以由三个模块来组成。
下面对各个模块的设计方法和实现方法进行详细说明。
1、时基进程的设计和实现在实际使用时,输入的信号是随意的,没有办法预知输入的频率。
因此选取频率计的时基是非常重要的。
在设计要求中,将量程分为三档,在某一档进行测量时,需要提供该档的时基。
在10kHz档,该档最大读数为9.99kHz,最小读数为0.01 kHz,所以要提供的时基是频率为0.01 kHz的脉冲。
同理,在100 kHz档上,要提供的时基应该是频率为0.1 kHz的脉冲。
在1 MHz档上,要提供的时基是频率为1 kHz的脉冲。
《电气工程及其自动化EDA课程设计》课程设计报告\题目:数字频率计的设计院(系):机电与自动化学院专业班级:电气工程及其自动化学生姓名: XXX学号: 2011XXXXXXX指导教师: XXX 】2014年1月6日至2014年1月10日#华中科技大学武昌分校《电气工程及其自动化EDA课程设计》设计任务书(目录摘要 (1)一.课程设计要求及内容 (1)主要技术指标 (1)工作内容及要求 (1)二数字频率计的基本原理 (1)数字频率计的组成 (1):数字频率器的原理 (2)三具体电路模块设计 (2)100MHz分频器 CLK_GEN的设计 (2)带时钟使能的十进制计数器CNT10的设计 (3)32位锁存器REG32B的设计 (5)测频控制信号发生器TESTCTL的设计 (6)动态输入编译译码器HC4511的设计 (7)四数字频率计系统模块的设计 (9)>系统模块程序设计及仿真波形 (9)数字频率计系统顶层设计 (10)五心得体会 (13)课程设计成绩评定表 (14)(摘要数字频率计是一种用十进制数字显示被测信号频率的一种数字测量仪器,其功能是测量正弦信号,方波信号,尖脉冲信号以及其他各种单位时间内变化的物理量,因此已经成为电路设计的常用元器件之一,有它不可替代的地位。
在电子技术中,频率与许多电参量的设计测量方案,测量结果都有着十分紧密的关系,因此频率的测量就显得更为重要。
测量频率的方法有很多种,其中数字计数器测量频率具有精度高,使用方便,测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
其原理为通过测量一定闸门时间内信号的脉冲个数。
本文阐述了利用VHDL语言在CPLD器件的基础上设计一个简单的数字频率计的过程。
采用VHDL编程技术设计实现的数字频率计,除被测信号的整形部分,键输入部分和数码显示部分以外,其余全部在一片集成电子芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。
课程设计题目、内容、要求目录1 课程设计题目、内容与要求……………………………………1.1 设计内容……………………………………………………1.2 具体要求……………………………………………………2 系统设计…………………………………………………………2.1 设计思路……………………………………………………2.2 系统原理与设计说明3 系统实现…………………………………………………………4 系统仿真…………………………………………………………5 硬件验证(操作)说明…………………………………………6 总结……………………………………………………………7 参考书目………………………………………………………1 课程设计题目、内容与要求1.1课程设计的题目:数字频率计设计1.2课程设计内容:(1)设计一个能测量方波信号的频率计;(2)测量范围是0-999999Hz;(3)结果用十进制数显示。
2 系统设计2.1设计思路:2.1.1 数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器.它的基本功能是测量方波信号及其他各种单位时间内变化的物理量。
本数字频率计采用自顶向下的设计思想,通过闸门提供的1s闸门时间对被测信号进行计数及测出的被测信号的频率,测出的频率再通过译码器译码后输出给显示器显示。
根据系统设计的要求,数字频率计的电路原理框图如下:数字频率计电路原理框图2.2 系统原理与设计说明系统各个模块的功能如下:2.2.1标准时钟发生电路模块借用实验板上标准时钟发生电路,为计数闸门控制电路提供一个标准8Hz信号。
2.2.2 计数器闸门控制电路模块计数器闸门控制电路就是产生三个控制信号,即计数器复位信号、4位十进制计数器允许计数信号、锁存信号。
2.2.3锁存电路模块锁存电路就是为了让LED数码管在信号来临之前保持计数值不变。
2.2.4计数器复位电路模块计数器复位电路是让频率计恢复到计数初始态。
2.2.5 LED数码管驱动电路模块LED数码管驱动电路就是为LED数码管提供驱动电压。
实验二:简易电子琴一、实验目的(1)学习采用状态机方法设计时序逻辑电路。
(2)掌握ispLEVER 软件的使用方法。
(3)掌握用VHDL 语言设计数字逻辑电路。
(4)掌握ISP 器件的使用。
二、实验所用器件和设备在系统可编程逻辑器件ISP1032一片示波器一台万用表或逻辑笔一只TEC-5实验系统,或TDS-2B 数字电路实验系统一台三、实验内容设计一个简易频率计,用于测量1MHz 以下数字脉冲信号的频率。
闸门只有1s 一档。
测量结果在数码管上显示出来。
不测信号脉宽。
用一片ISP芯片实现此设计,并在实验台上完成调试。
实验设计:1.产生准确闸门信号(1s)。
100kHz时钟经100K分频(一次完成),再经2分频产生方波,1s 用于计数,1s用于显示结果(及清零);2. 利用闸门信号控制一个计数器对被测脉冲信号进行计数, 1s内计数的结果就是被测信号的频率;3.每次对被测信号计数前,自动清零;4. 计数器采用十进制;5.显示频率值上下浮动,要修改源代码。
6.数码管高低位的接线。
VHDL源代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity fget isport(clk:in std_logic; --输入时钟源 bclk:in std_logic;kout:out std_logic_vector(26 downto 0));end fget;architecture top of fget iscomponent divideport(clk1:in std_logic;cl:out std_logic;co:out std_logic;ro:out std_logic);end component;component gateport(bc1:in std_logic;cl1:in std_logic;co1:in std_logic;op:out std_logic_vector(26 downto 0));end component;component saveport(op1:in std_logic_vector(26 downto 0);ro1:in std_logic;eout:out std_logic_vector(26 downto 0));end component;signal scl:std_logic;signal sco:std_logic;signal sro:std_logic;signal sop:std_logic_vector(26 downto 0);BEGINu1:divide PORT MAP(clk,scl,sco,sro);u2:gate PORT MAP(bclk,scl,sco,sop);u3:save PORT MAP(sop,sro,kout);end;--闸门模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity gate isport(bc1:in std_logic;cl1:in std_logic;co1:in std_logic;op:out std_logic_vector(26 downto 0) --5个8421,一个七段译码);end;architecture art2 of gate iscomponent cnt10 --十进制计数模块port(clk2:in std_logic;en:in std_logic;--使能端clr:in std_logic;--重置qout:out std_logic_vector(3 downto 0 );cout:out std_logic);end component;component seventranse --七段模块port(clk6:in std_logic_vector(3 downto 0 );op2:out std_logic_vector(6 downto 0 ));end component;signal scout1:std_logic;--输出(十进制)signal scout2:std_logic;signal scout3:std_logic;signal scout4:std_logic;signal scout5:std_logic;signal scout6:std_logic;signal qout1:std_logic_vector(3 downto 0);--8421(下同)signal qout2:std_logic_vector(3 downto 0);signal qout3:std_logic_vector(3 downto 0);signal qout4:std_logic_vector(3 downto 0);signal qout5:std_logic_vector(3 downto 0);signal qout6:std_logic_vector(3 downto 0);signal op2: std_logic_vector(6 downto 0);--七段beginr1:cnt10 PORT MAP(bc1,co1,cl1,qout1,scout1);r2:cnt10 PORT MAP(scout1,co1,cl1,qout2,scout2);r3:cnt10 PORT MAP(scout2,co1,cl1,qout3,scout3);r4:cnt10 PORT MAP(scout3,co1,cl1,qout4,scout4);r5:cnt10 PORT MAP(scout4,co1,cl1,qout5,scout5);r6:cnt10 PORT MAP(scout5,co1,cl1,qout6,scout6);t1:seventranse PORT MAP(qout6,op2);process(co1)beginif (co1'event and co1='0') thenop<=op2&qout5&qout4&qout3&qout2&qout1;--结果显示end if;end process;end;--寄存器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity save isport(op1:in std_logic_vector(26 downto 0);ro1:in std_logic;eout:out std_logic_vector(26 downto 0));end entity;architecture art4 of save issignal temp:std_logic_vector(26 downto 0);beginprocess(ro1)beginif ro1'event and ro1='1'then --上升沿判断temp<=op1;end if;eout<=temp;end process;end art4;--十进制计数器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity cnt10 isport(clk2:in std_logic;en:in std_logic;clr:in std_logic;qout:out std_logic_vector(3 downto 0 );cout:out std_logic);end entity;architecture art3 of cnt10 issignal temp:std_logic_vector(3 downto 0 );beginprocess(clk2,en,clr)beginif (clr='1') then --重置时清0temp<="0000";elsif (en='1') thenif(clk2'event and clk2='1')then --上升沿判断进位if(temp="1001")thentemp<="0000";elsetemp<=temp+1;end if;end if;end if;end process;qout<=temp;cout<='1' when temp="1001" else '0';end art3;--分频模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity divide isport(clk1:in std_logic;cl:out std_logic;co:out std_logic;ro:out std_logic);end;architecture art1 of divide issignal preclk:std_logic;signal temp1:std_logic;signal temp2:std_logic;beginp1: process(clk1) --先进行2500分频variable count:integer range 0 to 2500;beginif clk1'event and clk1='1'thenif count=2499 thencount:=0;preclk<='1';else count:=count+1;preclk<='0';end if;end if;end process;p2: process(preclk) --依次二分频实现闸门beginif preclk'event and preclk='1'thentemp2<=not temp2;end if;end process;p3: process(temp2)variable count2:std_logic;beginif temp2'event and temp2='1'thencount2:=not count2;if count2='1'thenco<='1';temp1<='0';else co<='0';temp1<='1';end if;end if;end process;p4:process(temp2)beginif (temp1='1' and temp2='0') thencl<='1';elsecl<='0';end if;end process;ro<=temp1;end;--七段译码器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity seventranse isport(clk6:in std_logic_vector(3 downto 0 );op2:out std_logic_vector(6 downto 0 ));end entity;architecture art5 of seventranse isbeginprocess(clk6)begincase clk6 iswhen "0000"=> op2<="1111110";when "0001"=> op2<="0110000";when "0010"=> op2<="1101101";when "0011"=> op2<="1111001";when "0100"=> op2<="0110011";when "0101"=> op2<="1011011";when "0110"=> op2<="1011111";when "0111"=> op2<="1110000";when others=> op2<="0000000";end case;end process;end art5;四、实验小结:实验要求用闸门信号控制计数器计时,于是在十进制计数器模块中添加使能信号en(en=‘1’计数器进行加1 计数,en=‘0’时计数器保持),将闸门信号作为使能信号接入,即可实现1s计数,1s显示。
基于VHDL语言的全同步数字频率计的设计与研究的开题报告一、题目基于VHDL语言的全同步数字频率计的设计与研究二、研究背景和意义数字频率计广泛应用于各种信号的频率测量,具有准确度高、稳定性好、适用范围广等优点。
目前市面上的数字频率计大多采用片上计数器实现,而片上计数器的精度受到芯片工艺和设计的限制,难以满足高精度应用的需求。
因此,本课题旨在研究一种基于VHDL语言的全同步数字频率计,通过FPGA实现,此方案将大幅提高精度,减小误差,提高计数范围。
三、研究内容和目标本课题拟研究的内容包括:1.通过对数字频率计功能和原理的分析,确定设计思路和参数。
2.根据设计思路和参数,完成数字频率计模块的设计与仿真,并验证其正确性和合理性。
3.使用VHDL语言完成数字频率计的程序设计。
4.将程序下载到FPGA中,实现数字频率计的硬件设计。
5.对硬件设计进行测试与调试,验证数字频率计的性能指标。
本课题的目标是:1.设计出一款精度高、误差小、计数范围广、应用范围广的全同步数字频率计。
2.通过实验验证数字频率计的功能和性能指标,并与市面上的数字频率计进行比较,证明本方案的优越性。
四、研究方法和技术路线本课题的研究方法和技术路线如下:1.文献调研通过查阅相关文献和资料,了解数字频率计的基本原理、设计思路、参数要求等内容,为后续的研究工作提供理论依据。
2.模块设计根据数字频率计的功能和参数要求,对数字频率计的各个模块进行设计,包括时钟模块、预分频器模块、计数器模块、显示模块等。
3.模块仿真通过VHDL语言进行数字频率计模块的仿真,验证模块的电路实现是否符合设计要求,进一步完善设计。
4.程序设计根据模块设计的结果,将各个模块的功能用VHDL语言进行程序设计。
5.硬件设计将程序下载到FPGA中,实现数字频率计的硬件设计,完成外围电路和显示模块的设计.6.测试与调试对数字频率计的设计进行测试和调试,记录其性能指标和实验结果,并对不足之处进行改进和提升。
目录1. 前言 (2)2. 设计要求 (2)3.整体设计 (3)4. 设计原理 (3)5. 设计程序 (3)5.1顶层文件 (3)5.2 8位是进制计数器 (4)5.3 10进制计数器 (5)5.4 测频控制电路 (6)5.5 32位锁存器及其控制器 (6)6. 引脚锁定 (8)7. 综合结果 (8)7.1 RTL电路 (8)7.2 测频控制电路 (9)7.3 8位十进制计数器 (9)7.3 32位锁存器 (9)8. 实验结果 (10)7.实验总结 (10)参考文献 (12)自适应数字频率计数器设计1. 前言传统的数字频率计一般是由分离元件搭接而成,用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差大、可靠性差。
后来随着单片机的大规模的应用, 出现了不少用单片机控制的频率测量系统。
相对于以前用分离元件搭接起来的频率测量系统, 单片机控制的频率测量系统在频率测量范围、频率测量精度和频率测量速度上都有了很大的提高。
但由于单片机工作频率的限制、单片机内部计数器位数的限制等因素, 由单片机控制的频率测量系统无法在频率测量范围、频率测量精度和频率测量速度上取得重大突破。
若再增加别的器件, 以弥补单片机的不足, 不仅会大大增加系统的复杂性, 而且不利于系统的集成化。
以E D A 工具作为开发平台,运用V H D L 语言,将使整个系统大大简化,从而提高整体的性能和可靠性。
本课题采用的是等精度数字频率计,在一片FPGA 开发板里实现了数字频率计的绝大部分功能, 它的集成度远远超过了以往的数字频率计。
又由于数字频率计最初的实现形式是用硬件描述语言写成的程序, 具有通用性和可重用性。
所以在外在的条件(如基准频率的提高, 基准频率精度的提高)的允许下,只需对源程序作很小的改动, 就可以使数字频率计的精度提高几个数量级。
同时对于频率精度要求不高的场合, 可以修改源程序, 使之可以用较小的器件实现, 从而降低系统的整体造价。
2. 设计要求设计一个频率计,频率测量范围为1-9999KHZ,量程分别为10 、100、 1M三档,要求如下:a. 当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增大1档b. 当读数小于099时,频率计处于欠量程状态,下一次测量时,量程自动减小1档c. 当超过频率范围时,显示器自动溢出3.整体设计当被测频率进入时候,档位1、2能自动换挡实现功能,在档位1中,有一个LED灯亮(表示Hz);档位2中有2个LED灯亮(表示kHz);当计数频率超出9999kHz 的时候,显示“E”而且LED灯全部熄灭,表示溢出功能。
在程序代码中,必须要清晰表示出计数的运行状况。
档位1:当被测频率为0—9999Hz时候,直接显示f x的值(单位为Hz);档位2:当被测频率为10k—9999kHz时候,显示10-9999(单位kHz);4. 设计原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1 秒的输入信号脉冲计数允许的信号;1 秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。
测频控制信号可以由一个独立的发生器来产生。
5. 设计程序5.1顶层文件LIBRARY IEEE; --频率计顶层文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FREQTEST ISPORT ( CLK1HZ : IN STD_LOGIC;FSIN : IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LED : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) );END FREQTEST;ARCHITECTURE struc OF FREQTEST ISCOMPONENT FTCTRLPORT (CLKK : IN STD_LOGIC; -- 1HzCNT_EN : OUT STD_LOGIC; -- 计数器时钟使能RST_CNT : OUT STD_LOGIC; -- 计数器清零Load : OUT STD_LOGIC ); -- 输出锁存信号END COMPONENT;COMPONENT COUNTERPORT (FIN : IN STD_LOGIC; -- 时钟信号CLR : IN STD_LOGIC; -- 清零信号ENABL : IN STD_LOGIC; -- 计数使能信号DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); -- 计数结果END COMPONENT;COMPONENT REG32BPORT ( LK : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LEDOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END COMPONENT;SIGNAL TSTEN1 : STD_LOGIC;SIGNAL CLR_CNT1 : STD_LOGIC;SIGNAL Load1 : STD_LOGIC;SIGNAL DTO1 : STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL CARRY_OUT1 : STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINU1 : FTCTRL PORT MAP(CLKK =>CLK1HZ,CNT_EN=>TSTEN1,RST_CNT =>CLR_CNT1,Load =>Load1);U2 : REG32B PORT MAP( LK => Load1, DIN=>DTO1, DOUT => DOUT,LEDOUT=>LED);U3 : COUNTER PORT MAP( FIN => FSIN, CLR => CLR_CNT1,ENABL => TSTEN1, DOUT=>DTO1 );END struc;5.2 8位是进制计数器LIBRARY IEEE;-- 8位十进制计数器USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER ISPORT (FIN : IN STD_LOGIC; -- 时钟信号CLR : IN STD_LOGIC; -- 清零信号ENABL : IN STD_LOGIC; -- 计数使能信号DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); -- 计数结果END COUNTER;ARCHITECTURE behav OF COUNTER ISCOMPONENT COUNTER10 ISPORT (FIN : IN STD_LOGIC; -- 时钟信号CLR : IN STD_LOGIC; -- 清零信号ENABL : IN STD_LOGIC; -- 计数使能信号DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- 计数结果COUT : OUT STD_LOGIC);END COMPONENT ;SIGNAL CLK1,CLK2,CLK3,CLK4,CLK5,CLK6,CLK7: STD_LOGIC;BEGINu1 : COUNTER10 PORT MAP(FIN=>FIN,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(3 DOWNTO 0),COUT=>CLK1);u2 : COUNTER10 PORT MAP(FIN=>CLK1,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(7 DOWNTO 4),COUT=>CLK2); u3 : COUNTER10 PORT MAP(FIN=>CLK2,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(11 DOWNTO 8),COUT=>CLK3); u4 : COUNTER10 PORT MAP(FIN=>CLK3,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(15 DOWNTO 12),COUT=>CLK4); u5 : COUNTER10 PORT MAP(FIN=>CLK4,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(19 DOWNTO 16),COUT=>CLK5); u6 : COUNTER10 PORT MAP(FIN=>CLK5,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(23 DOWNTO 20),COUT=>CLK6); u7 : COUNTER10 PORT MAP(FIN=>CLK6,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(27 DOWNTO 24),COUT=>CLK7); u8 : COUNTER10 PORT MAP(FIN=>CLK7,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(31 DOWNTO 28));END ARCHITECTURE behav;5.3 10进制计数器LIBRARY IEEE; --10位计数器USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER10 ISPORT (FIN : IN STD_LOGIC; -- 时钟信号CLR : IN STD_LOGIC; -- 清零信号ENABL : IN STD_LOGIC; -- 计数使能信号DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- 计数结果COUT : OUT STD_LOGIC);END COUNTER10;ARCHITECTURE behav OF COUNTER10 ISSIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(FIN, CLR, ENABL)BEGINIF CLR = '1' THEN CQI <= (OTHERS=>'0'); -- 清零ELSIF FIN'EVENT AND FIN = '1' THENIF ENABL = '1' THENIF CQI<9 THEN CQI <= CQI + 1;ELSE CQI <= (OTHERS=>'0');END IF;END IF;END IF;IF CQI="1001" THEN COUT<='1';ELSE COUT<='0'; END IF;END PROCESS;DOUT <= CQI;END behav;5.4 测频控制电路LIBRARY IEEE; --测频控制电路USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL ISPORT (CLKK : IN STD_LOGIC; -- 1HzCNT_EN : OUT STD_LOGIC; -- 计数器时钟使能RST_CNT : OUT STD_LOGIC; -- 计数器清零Load : OUT STD_LOGIC ); -- 输出锁存信号END FTCTRL;ARCHITECTURE behav OF FTCTRL ISSIGNAL Div2CLK : STD_LOGIC;BEGINPROCESS( CLKK )BEGINIF CLKK'EVENT AND CLKK = '1' THEN -- 1Hz时钟2分频Div2CLK <= NOT Div2CLK;END IF;END PROCESS;PROCESS (CLKK, Div2CLK)BEGINIF CLKK='0' AND Div2CLK='0' THEN RST_CNT<='1';-- 产生计数器清零信号ELSE RST_CNT <= '0'; END IF;END PROCESS;Load <= NOT Div2CLK; CNT_EN <= Div2CLK;END behav;5.5 32位锁存器及其控制器LIBRARY IEEE; --32位锁存器及控制器USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY REG32B ISPORT ( LK : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LEDOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END REG32B;ARCHITECTURE behav OF REG32B ISSIGNAL DD : STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINPROCESS(LK, DIN)BEGINIF LK'EVENT AND LK = '1' THEN DD<=DIN; END IF;if DD(31 DOWNTO 28)="0000" thenIF DD(27 DOWNTO 16)="000000000000" THEN DOUT<=DD(15 DOWNTO 0);LEDOUT<="01"; ELSIF DD (27 DOWNTO 16)/="000000000000" THEN DOUT<=DD(27 DOWNTO 12);LEDOUT<="11"; end if;else DOUT(15 DOWNTO 0)<="0000000000001110";LEDOUT<="00";END IF;END PROCESS;END behav;6. 引脚锁定7. 综合结果7.1 RTL电路7.2 测频控制电路7.3 8位十进制计数器7.3 32位锁存器8. 实验结果当计数频率为4Hz(范围在0-9999Hz)的时候,此时LED灯有一个亮,计数为:0004;当计数频率为500K Hz(范围在10K-9999KHz)的时候,此时设定两个LED灯都亮,计数为0500;当计数频率大于9999KHz的时候,设定此时两个LED灯都处于熄灭状态,而计数则输出一个‘E’值,表示范围超出计数范围。