1、课程设计绝对绝对最终版武汉工程大学邮电与信息工程学院课程设计:数字频率计设计 姓名: 柯晚 学号: 6102160115 专业班级: 11电气自动化01班 指导老师: 李艳红老师 时 间: 2013.11.22摘 要数字频率计是用数字显示被测信号频率的仪器,它由一个测频控制信号发生器TESTCTL,8个有时钟使能的十进制计数器CNT10和一个32位锁存器REG32B组成。本次设计的数字频率计是通过VHDL语言编写的,并在Quartus II软件中编译、仿真实现。关键词:VHDL ;数字频率计;十进制计数器CNT10,32位锁存器,测频控制信号发生器 AbstractThe digital fr
2、equency meter with digital display instrument measured frequency signal, which consists of a TESTCTL frequency signal generator control, enable the CNT10 decimal counter and a 32 bit latch REG32B consist of 8 clocks. The design of the digital frequency meters through the VHDL language, compiler, add
3、ing the Quartus II software simulation.Keywords: VHDL; digital frequency meter; CNT10, 32 decimal counter latch frequency controlling signal generator 本设计将以QuartusII软件来进行各个数据的操作,将仿真的图形数据来分析该课题。本设计所选择的QuartusII文本编辑输入法,在文本编辑窗口中完成VHDL设计文件的编辑,然后对设计文件进行编译、仿真操作。1、数字频率计的基本原理数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,通
4、常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。闸门时间也可以大于或小于一秒。闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。数字频率计的主要功能是测量周期信号的频率。频率是单位时间(1S)内信号发生周期变化的次数。如果我们能在给定的1S时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。这就是数字频率计
5、的基本原理。本设计中使用的就是直接测频法,即用计数器在计算1s内输入信号周期的个数,其测频范围为1Hz9999Hz频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。这就要求测频控制信号发生器testpl的计数使能信号tsten能产生一个1秒脉宽的周期信号,并对频率计的每一计数器cnt10的使能端en进行同步控制。当tsten为高电平1时,允许计数;为低电平0时停止计数,并保持其计数结果。在停止计数期间,首先需要一个锁存信号load的上跳沿将计数器在前1秒种的计数值锁存进32位锁存器reg32b中。锁存信号之后,必须有一个清零信号clr_cnt对计数器进行清零,为下1秒的计数操作做准备。,然后
6、由外部数码管控制器ledcom控制的7段译码器ymq译出,并稳定显示。系统总体框架图12.1、 8位十进制数字频率计的电路逻辑图 8位十进制数字频率计的电路逻辑图,它由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B 8组成。以下分别叙述频率计各逻辑模块的功能与设计方法。8位十进制数字频率计的电路逻辑如图2所示。源程序如下:FREQTEST.VHDLIBRARY.IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FREQTEST IS PORT (CLK: IN STD_LOGIC; FSIN; IN ST
7、D_LOGIC; DOUT: OUT STD_LOGIC_VECTOR (31 DOWNTO 0);END FREQTEST;ARCHITECTURE struc OF FREQTEST IS COMONENT TESTCTL PORT (CLK: IN STD_LOGIC; TSTEN: OUT STD_LOGIC; CLK_CNT: OUT STD_LOGIC; Load: OUT STD_LOGIC); END COMPONENT;COMPONENT CNT10 PORT (CLK: IN STD_LOGIC; CLK: IN STD_LOGIC; ENA: IN STD_LOGIC Q
8、: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); CARRY_OUT: OUT STD_LOGIC); END COMPONENT;COMPONENT REG32B PORT (Load: IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR (31 DOWNTO 0); DOUT: OUT STD_LOGIC_VECTOR (31 DOWNTO 0);END COMPONENT; SIGNAL Load1, TSTEN1, CLK_CNT1:STD_LOGIC; SIGNAL DTO1:STD_LOGIC_VECTOR (31 DOWNTO 0
9、); SIGNAL CARRY_OUT1:STD_LOGIC_VECTOR (6 DOWNTO O);BEGINU1: TESTCTL PORT MAP (CLK=CLK, TSTEN=TSTEN1, CLR_CNT=CLR_CNT1, Load=Load1);U2:REG32B PORT MAP (Load=Load1, DIN=DTO1, DOUT=DOUT);U3:CNT10 PORT MAP (CLK=FSIN, CLR=CLR_CNT1, ENA=TSTEN1, CQ=DTO1 (3 DOWNTO 0), CARRY_OUT=CARRY_OUT1 (0);U4:CNT10 PORT
10、MAQP (CLK=CARRY_OUT1 (0), CLR=CLR_CNT1, ENA=TSTEN1, CQ=DTO1 (7 DOWNTO 4), CARRY_OUT=CARRY_OUT1 (1);U5:CNT10 PORT MAP (CLK=CARRY_OUT1 (1), CLR=CLR_CNT1 ENA=TSTEN1, CQ=DTO1 (11 DOWNTO 8), CARRY_OUT=CARRY_OUT1 (2);U6:CNT10 PORT MAP (CLK=CARRY_OUT1 (2), CLR=CLR_CNT1, ENA=TSTEN1, CQ=DTO1 (15 DOWNTO 12),
11、CARRY_OUT=CARRY_OUT1 (3);U7:CNT10 PORT MAP (CLK=CARRY_OUT1 (3), CLR=CLR_CNT1, ENA=TSTEN1, CQ=DTO1 (19 DOWNTO 16), CARRY_OUT=CARRY_OUT1 (4);U8:CNT10 PORT MAP (CLK=CARRY_OUT1 (4), CLR=CLR_CNT1, ENA=TSTEN1, CQ=DTO1 (23 DOWNTO 20), CARRY_OUT=CARRY_OUT1 (5);U9:CNT10 PORT MAP (CLK=CARRY_OUT1 (5), CLR=CLR_
12、CNT1, ENA=TSTEN1, CQ=DTO1 (27 DOWNTO 24), CARRY_OUT=CARRY_OUT1 (6);U10:CNT10 PORT MAP (CLK=CARRY_OUT1 (6), CLR=CLR_CNT1, ENA=TSTEN1, CQ=DTO1 (31 DOWNTO 28); END struc;图2 8位十进制数字频率计的电路逻辑图2.2、测频控制信号发生器的功能模块及仿真 测频控制信号发生器testpl:输入端clk 收到1Hz信号后,其输出端TSTEN控制各个cnt10的使能,CLR_CNT控制各个cnt10的清零,load控制锁存器内数据的输出。测频
13、控制信号发生器的闸门信号产生电路如所示,输入标准时钟信号,经过闸门信号电路产生使能信号CNT、清零信号RST和锁存信号LOAD。使能信号CNT和清零信号控制十进制的工作;而锁存信号LOAD控制锁存器的工作。频率计的关键是设计一个测频率控制信号发生器,产生测量频率的控制时序。控制时钟信号CLK取为1Hz,2分频后即可产生一个脉宽为1秒的时钟TSTEN,以此作为计数闸门信号。当TSTEN为高电平时,允许计数;当TSTEN由高电平变为低电平(下降沿到来)时,应产生一个锁存信号,将计数值保存起来;锁存数据后,还要在下次TSTEN上升沿的到来之前产生零信号CLEAR,将计数器清零,为下次计数做准备。源程
14、序如下:TESTCTL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTY IS PORT (CLK: IN STD_LOGIC; TSTEN: OUT STD_LOGIC; CLR_CNT: OUT STD_LOGIC; Load: OUT STD_LOGIC);END TESTCTL;ARCHITECTURE behav OF TESTCTL IS SIGNAL Div2CLK:STD_LOGICBEGIN PROCESS (CLK)BEGIN IF CLKEV
15、ENT AND CLK=1THEN Div2CLK=NOT Div2CLK;END IF;END PROCESS;PROCESS (CLK, Div2CLK)BEGIN IF CLK=0 AND Div2CLK=0 THEN CLR_CNT=1;ELSE CLK_CNT=0;END IF;END PROCESS;Load= NOT Div2CLK; TSTEN=Div2clk;END behav; 测频控制信号发生器的功能模块如图3所示。 图3 测频控制信号发生器的功能模块图测频控制信号发生器的波形图,如图4所示。图4 测频控制信号发生器的波形图3、32位锁存器的功能模块及仿真锁存器(Latc
16、h)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。锁存,就是把信号暂存以维持某种电平状态。若已有32位BCD码存在此模块输入口,则信号LOAD的上升沿即被锁存REG32B的内部,并由REG32B的输出端输出,然后由实验板上的7段译码器在数码管上输入锁存器1332位锁存器reg32B:将已有32位BCD码存在于此模块的输入口din27.0,在信号load的上升沿后即被锁存到寄存器reg32b的内部,并由reg32b的输出端DOUT27.0输出,设置锁存器的好处是,数码管上显示的数据稳定,不会由于周期性的清零信号而不断闪烁。为了使显示结果稳定显示,需要将计数器每次记
17、得的结果进行锁存,闸门电路产生的LOAD接至锁存器的LOAD端;十进制计数器输出接至锁存器的DIN3.0端,而锁存器的输出端DOUT3.0作为动态扫描器的输入端。源程序如下:REG32B.VHDLIBRARY.IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS PORT(Load:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR (31 DOWNTO 0); DOUT: OUT STD_LOGIC_VECTOR (31 DOWNTO 0)END REG32B;ARCHITECTURER behav OF REG32B I
18、S BEGINPROCESS (Load, DIN) BEGIN IF Load EVENT AND Load=1THEN DOUT=DIN; END IF; END PROCESS; END behav;3.1、 32位锁存器的功能模块如图5所示。 图5锁存器功能图32、 32位锁存器的波形图,如图6所示。 图6 锁存器的波形图4、十进制计数器的功能模块及仿真 计数器的作用是实现十进制计数功能。此十进制计数器的特殊之处是有一时钟使能输入端ENA用于锁定计数值,当高电平时计数允许,低电平时禁止计数。从仿真图中可以得出,当第一个CNT10计数输出 CQ=9 时,下一秒时钟上升沿到来时,将产生一个
19、CARRY_OUT信号作为下一个CNT10 的时钟信号,同时CQ 清零,依次递推到8个CNT10。源程序如下:CNT10.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CNT10 IS PORT (CLK: IN STD_LOGIC; CLR: IN STD_LOGIC; ENA: IN STD_LOGIC; CQ: OUT INTEGER RANGE 0 TO 15; CARRY_OUT: STD_LOGIC); END CNT10;ARCHITECTURE behav OF CNT10 IS SIGNAL CQI: INTEGER R
20、ANGE 0 TO 15;BEGINPROCESS (CLK, CLR, ENA) BEGIN IF CLR=1 THEN CQI=0; ELSIF CLKEVENT AND CLK=1 THEN IF ENA=1THEN IF CQI, 9 THEN CQI=CQI+1; ELSE CQI=0; END IF; END IF; END ROCESS; PROCESS (CQI) BEGIN IF CQI=9 THEN CARRY_OUT=1; ELSE CARRY_OUT=0; END IF; END ROCESS; CQ=CQI;END behave;4.1、十进制计数器的功能模块,如图7
21、所示。 图7 十进制计数器的功能模块4.2、十进制计数器的功能模块,如图8所示。图8 计数器计数波形图5.心得体会 这次课程设计中,我不仅复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力,并从根本上了解了VHDL语言的一些基本用法,应用了原来不会或者不熟练的句型,如if句,case句等,也学会了一些基本功能的实现方法,如分频,状态控制等等,从另外一个角度重新审视了上学期完全从硬件角度出发的电路设计,明白了软硬件之间的交互。通过这个课题,对系统框图、逻辑流程图、状态转移图的设计有了一定的了解。也懂得了系统的前期设计对于后续的编程和调试的重要性。 本课题采用了自下而上的设计方法,根据系
22、统对硬件的要求,画出系统控制流程图;然后根据控制流程图,分化模块,利用模块实现功能;最后进行仿真和调试。 每个成功的背后都要面对无数次的失败,这次课程设计也不例外。虽然遇到不少问题与困难,但通过老师以及同学的帮助,都一一得到顺利地解决。我想这必定会为将来的实践积累宝贵的经验和教训。 这次EDA试验我学会了VHDL语言的基本语法规范,了解了quartus软件的使用方法,学会了用硬件测试的基本技能,在学习过程中也遇到各种各样的问题,下面就总结出来,作为以后的学习的经验:(1)、语法规则不熟悉,VHDL语法规则在刚刚接触的时候确实有各种各样的疏漏,写源代码的时候会不小心遗漏一两个字母或者标点符号,有
23、时候把半角改成全角,这都会导致编译出错。(2)、Quartus软件版权问题,应为条件有限,实验室的软件都是破解版的,这些软件都经过了一定的修改,部分功能缺失,在使用过程中常常会出现奇怪的问题。如毛刺现象:不同的工程在同一个文件夹中是编译常会出现毛刺,如果把一个工程新建到一个新的文件夹中,毛刺显现就消除了。(3)图形化界面顶层设计,如设计时输出端口DOUT【0.3】为四输出端口,定义是应该用,不能用:,另外连线时候可能是一端口连到多端口,或者多端口连到一端口,这时候应该注意连线的根数。(4)、硬件测试的时候,要选对工作模式,管脚的封装必须正确,否则会出现八段数码管乱显示的现象。总之,这次课程设计
24、我们都受益匪浅。整个过程氛围浓厚,本人也态度十分认真,积极向老师和同学求教并在此过程中收获良多,能够进一步了解和使用一门与硬件直接打交道的基本语言对我们将来的学习和工作都会十分有益。 参考文献1 潘松,黄继业。EDA技术与VHDL.北京:清华大学出版社,20072 王建校,危建国。SOPC设计基础与实践。西安:西安电子科技大学出版社,20063 吴建新. 基于量程自动转换的频率计设计J.电子元器件应用,2007, (9):2530.4 曹昕燕,周凤臣.EDA 技术试验与课程设计M.北京:清华大学出版社,2006,3045.5 徐志军,王金明,尹廷辉,徐光辉,苏勇. EDA 技术与VHDL设计M.北京:电子工业出版社,2009,2025.6 刘欲晓,方强,黄宛宁. EDA技术与VHDL电路开发应用实践M .北京:电子工业出版社,2009,1114.7 朱正伟.EDA 技术及应用M.北京:清华大学出版社,2005, 1015.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1