课程设计绝对绝对最终版.docx
《课程设计绝对绝对最终版.docx》由会员分享,可在线阅读,更多相关《课程设计绝对绝对最终版.docx(12页珍藏版)》请在冰豆网上搜索。
![课程设计绝对绝对最终版.docx](https://file1.bdocx.com/fileroot1/2023-1/24/800b315a-29e2-4662-b11e-9490997301f1/800b315a-29e2-4662-b11e-9490997301f11.gif)
课程设计绝对绝对最终版
武汉工程大学邮电与信息工程学院
课程设计:
数字频率计设计
姓名:
柯晚学号:
6102160115
专业班级:
11电气自动化01班
指导老师:
李艳红老师
时间:
2013.11.22
摘要
数字频率计是用数字显示被测信号频率的仪器,它由一个测频控制信号发生器TESTCTL,8个有时钟使能的十进制计数器CNT10和一个32位锁存器REG32B组成。
本次设计的数字频率计是通过VHDL语言编写的,并在QuartusII软件中编译、仿真实现。
关键词:
VHDL;数字频率计;十进制计数器CNT10,32位锁存器,测频控制信号发生器
Abstract
Thedigitalfrequencymeterwithdigitaldisplayinstrumentmeasuredfrequencysignal,whichconsistsofaTESTCTLfrequencysignalgeneratorcontrol,enabletheCNT10decimalcounteranda32bitlatchREG32Bconsistof8clocks.ThedesignofthedigitalfrequencymetersthroughtheVHDLlanguage,compiler,addingtheQuartusIIsoftwaresimulation.
Keywords:
VHDL;digitalfrequencymeter;CNT10,32decimalcounterlatchfrequencycontrollingsignalgenerator
本设计将以QuartusII软件来进行各个数据的操作,将仿真的图形数据来分析该课题。
本设计所选择的QuartusII文本编辑输入法,在文本编辑窗口中完成VHDL设计文件的编辑,然后对设计文件进行编译、仿真操作。
1、数字频率计的基本原理
数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。
闸门时间也可以大于或小于一秒。
闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。
闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。
数字频率计的主要功能是测量周期信号的频率。
频率是单位时间(1S)内信号发生周期变化的次数。
如果我们能在给定的1S时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。
数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。
这就是数字频率计的基本原理。
本设计中使用的就是直接测频法,即用计数器在计算1s内输入信号周期的个数,其测频范围为1Hz~9999Hz频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。
这就要求测频控制信号发生器testpl的计数使能信号tsten能产生一个1秒脉宽的周期信号,并对频率计的每一计数器cnt10的使能端en进行同步控制。
当tsten为高电平"1"时,允许计数;为低电平"0"时停止计数,并保持其计数结果。
在停止计数期间,首先需要一个锁存信号load的上跳沿将计数器在前1 秒种的计数值锁存进32位锁存器reg32b中。
锁存信号之后,必须有一个清零信号clr_cnt对计数器进行清零,为下1 秒的计数操作做准备。
,然后由外部数码管控制器ledcom控制的7段译码器ymq译出,并稳定显示。
系统总体框架图1
2.1、8位十进制数字频率计的电路逻辑图
8位十进制数字频率计的电路逻辑图,它由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B[8]组成。
以下分别叙述频率计各逻辑模块的功能与设计方法。
8位十进制数字频率计的电路逻辑如图2所示。
源程序如下:
FREQTEST.VHD
LIBRARY.IEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFREQTESTIS
PORT(CLK:
INSTD_LOGIC;
FSIN;INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDFREQTEST;
ARCHITECTUREstrucOFFREQTESTIS
COMONENTTESTCTL
PORT(CLK:
INSTD_LOGIC;
TSTEN:
OUTSTD_LOGIC;
CLK_CNT:
OUTSTD_LOGIC;
Load:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTCNT10
PORT(CLK:
INSTD_LOGIC;CLK:
INSTD_LOGIC;ENA:
INSTD_LOGIC
Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CARRY_OUT:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTREG32B
PORT(Load:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDCOMPONENT;
SIGNALLoad1,TSTEN1,CLK_CNT1:
STD_LOGIC;
SIGNALDTO1:
STD_LOGIC_VECTOR(31DOWNTO0);
SIGNALCARRY_OUT1:
STD_LOGIC_VECTOR(6DOWNTOO);
BEGIN
U1:
TESTCTLPORTMAP(CLK=>CLK,TSTEN=>TSTEN1,
CLR_CNT=>CLR_CNT1,Load=>Load1);
U2:
REG32BPORTMAP(Load=>Load1,DIN=>DTO1,DOUT=>DOUT);
U3:
CNT10PORTMAP(CLK=>FSIN,CLR=>CLR_CNT1,ENA=>TSTEN1,
CQ=>DTO1(3DOWNTO0),CARRY_OUT=>CARRY_OUT1(0);
U4:
CNT10PORTMAQP(CLK=>CARRY_OUT1(0),CLR=>CLR_CNT1,
ENA=>TSTEN1,CQ=>DTO1(7DOWNTO4),CARRY_OUT=>CARRY_OUT1
(1);
U5:
CNT10PORTMAP(CLK=>CARRY_OUT1
(1),CLR=>CLR_CNT1
ENA=>TSTEN1,CQ=>DTO1(11DOWNTO8),
CARRY_OUT=>CARRY_OUT1
(2));
U6:
CNT10PORTMAP(CLK=>CARRY_OUT1
(2),CLR=>CLR_CNT1,
ENA=>TSTEN1,CQ=>DTO1(15DOWNTO12),
CARRY_OUT=>CARRY_OUT1(3));
U7:
CNT10PORTMAP(CLK=>CARRY_OUT1(3),CLR=>CLR_CNT1,
ENA=>TSTEN1,CQ=>DTO1(19DOWNTO16),
CARRY_OUT=>CARRY_OUT1(4);
U8:
CNT10PORTMAP(CLK=>CARRY_OUT1(4),CLR=>CLR_CNT1,
ENA=>TSTEN1,CQ=>DTO1(23DOWNTO20),
CARRY_OUT=>CARRY_OUT1(5));
U9:
CNT10PORTMAP(CLK=>CARRY_OUT1(5),CLR=>CLR_CNT1,
ENA=>TSTEN1,CQ=>DTO1(27DOWNTO24),
CARRY_OUT=>CARRY_OUT1(6);
U10:
CNT10PORTMAP(CLK=>CARRY_OUT1(6),CLR=>CLR_CNT1,
ENA=>TSTEN1,CQ=>DTO1(31DOWNTO28));
ENDstruc;
图28位十进制数字频率计的电路逻辑图
2.2、测频控制信号发生器的功能模块及仿真
测频控制信号发生器testpl:
输入端clk收到1Hz信号后,其输出端TSTEN控制各个cnt10的使能,CLR_CNT控制各个cnt10的清零,load控制锁存器内数据的输出。
测频控制信号发生器的闸门信号产生电路如所示,输入标准时钟信号,经过闸门信号电路产生使能信号CNT、清零信号RST和锁存信号LOAD。
使能信号CNT和清零信号控制十进制的工作;而锁存信号LOAD控制锁存器的工作。
频率计的关键是设计一个测频率控制信号发生器,产生测量频率的控制时序。
控制时钟信号CLK取为1Hz,2分频后即可产生一个脉宽为1秒的时钟TSTEN,以此作为计数闸门信号。
当TSTEN为高电平时,允许计数;当TSTEN由高电平变为低电平(下降沿到来)时,应产生一个锁存信号,将计数值保存起来;锁存数据后,还要在下次TSTEN上升沿的到来之前产生零信号CLEAR,将计数器清零,为下次计数做准备。
源程序如下:
TESTCTL.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYTESTCTYIS
PORT(CLK:
INSTD_LOGIC;
TSTEN:
OUTSTD_LOGIC;
CLR_CNT:
OUTSTD_LOGIC;
Load:
OUTSTD_LOGIC);
ENDTESTCTL;
ARCHITECTUREbehavOFTESTCTLIS
SIGNALDiv2CLK:
STD_LOGIC
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
Div2CLK<=NOTDiv2CLK;
ENDIF;
ENDPROCESS;
PROCESS(CLK,Div2CLK)
BEGIN
IFCLK='0'ANDDiv2CLK='0'THENCLR_CNT<='1';
ELSECLK_CNT<='0';
ENDIF;
ENDPROCESS;
Load<=NOTDiv2CLK;
TSTEN<=Div2clk;
ENDbehav;
测频控制信号发生器的功能模块如图3所示。
图3测频控制信号发生器的功能模块图
测频控制信号发生器的波形图,如图4所示。
图4测频控制信号发生器的波形图
3、32位锁存器的功能模块及仿真
锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。
锁存,就是把信号暂存以维持某种电平状态。
若已有32位BCD码存在此模块输入口,则信号LOAD的上升沿即被锁存REG32B的内部,并由REG32B的输出端输出,然后由实验板上的7段译码器在数码管上输入锁存器[13]32位锁存器reg32B:
将已有32 位BCD码存在于此模块的输入口din[27..0],在信号load的上升沿后即被锁存到寄存器reg32b的内部,并由reg32b的输出端DOUT[27..0]输出,设置锁存器的好处是,数码管上显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
为了使显示结果稳定显示,需要将计数器每次记得的结果进行锁存,闸门电路产生的LOAD接至锁存器的LOAD端;十进制计数器输出接至锁存器的DIN[3..0]端,而锁存器的输出端DOUT[3..0]作为动态扫描器的输入端。
源程序如下:
REG32B.VHD
LIBRARY.IEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYREG32BIS
PORT(Load:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0)
ENDREG32B;
ARCHITECTURERbehavOFREG32BIS
BEGIN
PROCESS(Load,DIN)
BEGIN
IFLoadEVENTANDLoad=’1’THENDOUT<=DIN;
ENDIF;
ENDPROCESS;
ENDbehav;
3.1、32位锁存器的功能模块如图5所示。
图5锁存器功能图
3.2、32位锁存器的波形图,如图6所示。
图6锁存器的波形图
4、十进制计数器的功能模块及仿真
计数器的作用是实现十进制计数功能。
此十进制计数器的特殊之处是有一时钟使能输入端ENA用于锁定计数值,当高电平时计数允许,低电平时禁止计数。
从仿真图中可以得出,当第一个CNT10计数输出CQ=9时,下一秒时钟上升沿到来时,将产生一个CARRY_OUT信号作为下一个CNT10的时钟信号,同时CQ清零,依次递推到8个CNT10。
源程序如下:
CNT10.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYCNT10IS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
CQ:
OUTINTEGERRANGE0TO15;
CARRY_OUT:
STD_LOGIC);
ENDCNT10;
ARCHITECTUREbehavOFCNT10IS
SIGNALCQI:
INTEGERRANGE0TO15;
BEGIN
PROCESS(CLK,CLR,ENA)
BEGIN
IFCLR='1'THENCQI<=0;
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI,9THENCQI<=CQI+1;
ELSECQI<=0;
ENDIF;
ENDIF;
ENDROCESS;
PROCESS(CQI)
BEGIN
IFCQI=9THENCARRY_OUT<='1';
ELSECARRY_OUT<='0';
ENDIF;
ENDROCESS;
CQ<=CQI;
ENDbehave;
4.1、十进制计数器的功能模块,如图7所示。
图7十进制计数器的功能模块
4.2、十进制计数器的功能模块,如图8所示。
图8计数器计数波形图
5.心得体会
这次课程设计中,我不仅复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力,并从根本上了解了VHDL语言的一些基本用法,应用了原来不会或者不熟练的句型,如if句,case句等,也学会了一些基本功能的实现方法,如分频,状态控制等等,从另外一个角度重新审视了上学期完全从硬件角度出发的电路设计,明白了软硬件之间的交互。
通过这个课题,对系统框图、逻辑流程图、状态转移图的设计有了一定的了解。
也懂得了系统的前期设计对于后续的编程和调试的重要性。
本课题采用了自下而上的设计方法,根据系统对硬件的要求,画出系统控制流程图;然后根据控制流程图,分化模块,利用模块实现功能;最后进行仿真和调试。
每个成功的背后都要面对无数次的失败,这次课程设计也不例外。
虽然遇到不少问题与困难,但通过老师以及同学的帮助,都一一得到顺利地解决。
我想这必定会为将来的实践积累宝贵的经验和教训。
这次EDA试验我学会了VHDL语言的基本语法规范,了解了quartus软件的使用方法,学会了用硬件测试的基本技能,在学习过程中也遇到各种各样的问题,下面就总结出来,作为以后的学习的经验:
(1)、语法规则不熟悉,VHDL语法规则在刚刚接触的时候确实有各种各样的疏漏,写源代码的时候会不小心遗漏一两个字母或者标点符号,有时候把半角改成全角,这都会导致编译出错。
(2)、Quartus软件版权问题,应为条件有限,实验室的软件都是破解版的,这些软件都经过了一定的修改,部分功能缺失,在使用过程中常常会出现奇怪的问题。
如毛刺现象:
不同的工程在同一个文件夹中是编译常会出现毛刺,如果把一个工程新建到一个新的文件夹中,毛刺显现就消除了。
(3)图形化界面顶层设计,如设计时输出端口DOUT【0..3】为四输出端口,定义是应该用,不能用:
,另外连线时候可能是一端口连到多端口,或者多端口连到一端口,这时候应该注意连线的根数。
(4)、硬件测试的时候,要选对工作模式,管脚的封装必须正确,否则会出现八段数码管乱显示的现象。
总之,这次课程设计我们都受益匪浅。
整个过程氛围浓厚,本人也态度十分认真,积极向老师和同学求教并在此过程中收获良多,能够进一步了解和使用一门与硬件直接打交道的基本语言对我们将来的学习和工作都会十分有益。
参考文献
[1]潘松,黄继业。
EDA技术与VHDL.北京:
清华大学出版社,2007
[2]王建校,危建国。
SOPC设计基础与实践。
西安:
西安电子科技大学出版社,2006
[3]吴建新.基于量程自动转换的频率计设计[J].电子元器件应用,2007,(9):
25~30.
[4]曹昕燕,周凤臣.EDA技术试验与课程设计[M].北京:
清华大学出版社,2006,30~45.
[5]徐志军,王金明,尹廷辉,徐光辉,苏勇.EDA技术与VHDL设计[M].北京:
电子工业出版社,2009,20~25.
[6]刘欲晓,方强,黄宛宁.EDA技术与VHDL电路开发应用实践[M].北京:
电子工业出版社,2009,11~14.
[7]朱正伟.EDA技术及应用[M].北京:
清华大学出版社,2005,10~15.