利用VHDL语言进行的100MHZ数字频率计的设计.docx
《利用VHDL语言进行的100MHZ数字频率计的设计.docx》由会员分享,可在线阅读,更多相关《利用VHDL语言进行的100MHZ数字频率计的设计.docx(22页珍藏版)》请在冰豆网上搜索。
利用VHDL语言进行的100MHZ数字频率计的设计
《电气工程及其自动化EDA课程设计》
课程设计报告
题目:
数字频率计的设计
院(系):
机电与自动化学院
专业班级:
电气工程及其自动化
学生姓名:
XXX
学号:
2020XXXXXXX
指导教师:
XXX
2014年1月6日至2014年1月10日
华中科技大学武昌分校
《电气工程及其自动化EDA课程设计》设计任务书
一、设计题目
数字频率计的设计
二、设计主要内容
1.设计目的:
(1)巩固和加深对《EDA技术及应用》及《数字电子技术》基本知识的理解,提高学生综合运用本课程所学知识的能力;
(2)培养学生根据课题需要选学参考书籍、查阅手册、图表和文献资料的自学能力;通过独立思考,深入钻研有关问题,学会自己分析解决问题的方法;
(3)以学生的动手为主要内容,培养学生系统软、硬件设计、调试的基本思路、方法和技巧,并能熟练使用集成软件QuartusⅡ进行有关电路设计与分析;
(4)掌握FPGA器件的正确使用方法,提高学生动手能力,能在教师指导下,完成课程任务;
(5)培养严肃认真的工作作风和科学态度。
通过课程设计实践,帮助学生逐步建立正确的生产观念、工程观念和全局观点。
2.设计内容:
(1)8位频率计输入端分别为:
系统基准时钟100MHZ(CLK)、被测信号输入(Fx);及输出端为(DOUT),皆采用BCD码计数方式;
(2)可测量范围从1Hz到99999999Hz;
(3)将被测信号的频率直接送到8个LED显示;
也可选择其它题目,但分量不能低于上述题目。
三、原始资料
1.频率测量方法的基本原理是计算每秒内待测信号的脉冲个数,这就要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一个计数器CNT10的ENA使能端进行同步控制。
当TSTEN高电平时,允许计数,并保持其所计的数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒的计数值锁存进32位锁存器REG32B中,并由外部的7段译码器译出并稳定的显示。
此方法测量精度高。
数字频率计由多频信号源模块、测频控制模块、CNT计数模块、32位锁存器模块及频率显示模块组成,其框图为图1所示:
图1数字频率计组成框图
2.在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过;
3.下载顶层文件到目标芯片;
4.将被测信号fx输入到系统,数码管将会显示被测信号频率。
四、要求的设计成果
1、基本要求:
在QuartusII软件中新建原理图文件,编译,仿真,锁定管脚并下载到目标芯片。
将被测信号fx输入到系统,数码管将会显示被测信号频率。
(1)根据设计要求,设计系统的原理框图,说明系统中各主要组成部分的功能;
(2)在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过;
(3)根据软件编好用于系统仿真的测试文件;
(4)编好用于硬件验证的管脚锁定文件;
(5)记录系统各个模块仿真结果;
(6)记录仿真结果中出现的问题及解决办法。
2、备选要求:
学生可根据课堂教学对《EDA技术及应用》所掌握知识点的实际情况,也可选择其它方案完成设计,从而形成难易程度不同的设计方法。
注意:
基本要求学生必须完成,学有余力的学生可以在基本要求完成的前提下,选择其它方案完成设计。
一般来说,测频精度越高,考查评价就越高。
五、进程安排
表2进度安排及学时分配表
序号
课程设计内容
学时分配
备注
1
集中学生学习课程设计的关键理论知识、分配设计任务、明确设计要求、查找资料等。
1天
2
根据任务的要求进行方案构思,初选方案,绘制系统原理框图并与指导教师讨论,方案定稿。
1天
完成各模块的VHDL程序设计、编译和时序仿真
1天
3
编程、下载,结合硬件平台,进行调试。
完成顶层文件图绘制,对编制好的封图交给老师检查,并按照老师要求修改。
1天
4
撰写课程设计说明书
1天
5
答辩及验收课程设计
1天
合计
5天
六、主要参考资料
[1]侯伯享.VHDL硬件描述语言与数字逻辑电路设计.西安:
西安电子科技大学出版,2010.
[2]潘松.EDA技术实用教程.成都:
电子科技大学出版社,2010.
[3]李玉山.电子系统集成设计技术.北京:
电子工业出版社,2010.6.
[4]李国丽.EDA与数字系统设计.北京:
机械工业出版社,2009.
[5]周彩宝.VHDL语言及其应用.上海:
华东计算机技术研究所:
2009.
[6]谭会生.EDA技术中和应用实例与分析.西安:
西安电子科技大学出版社,2008.
指导教师(签名):
20年月日
摘要…………………………………………………………………
(1)
一.课程设计要求及内容……………………………………………
(1)
1.1要紧技术指标…………………………………………………
(1)
1.2工作内容及要求………………………………………………
(1)
二数字频率计的大体原理………………………………………
(1)
2.1数字频率计的组成……………………………………………
(1)
2.2数字频率器的原理……………………………………………
(2)
三具体电路模块设计………………………………………………
(2)
3.1100MHz分频器CLK_GEN的设计………………………………
(2)
3.2带时钟使能的十进制计数器CNT10的设计…………………(3)
3.332位锁存器REG32B的设计…………………………………(5)
3.4测频操纵信号发生器TESTCTL的设计………………………(6)
3.5动态输入编译译码器HC4511的设计………………………(7)
四数字频率计系统模块的设计……………………………………(9)
4.1系统模块程序设计及仿真波形………………………………(9)
4.2数字频率计系统顶层设计…………………………………(10)
五心得体会…………………………………………………………(13)
课程设计成绩评定表………………………………………………(14)
摘要
数字频率计是一种用十进制数字显示被测信号频率的一种数字测量仪器,其功能是测量正弦信号,方波信号,尖脉冲信号和其他各类单位时刻内转变的物理量,因此已经成为电路设计的经常使用元器件之一,有它不可替代的地位。
在电子技术中,频率与许多电参量的设计测量方案,测量结果都有着十分紧密的关系,因此频率的测量就显得更为重要。
测量频率的方式有很多种,其中数字计数器测量频率具有精度高,利用方便,测量迅速,和便于实现测量进程自动化等优势,是频率测量的重要手腕之一。
其原理为通过测量必然闸门时刻内信号的脉冲个数。
本文论述了利用VHDL语言在CPLD器件的基础上设计一个简单的数字频率计的进程。
采纳VHDL编程技术设计实现的数字频率计,除被测信号的整形部份,键输入部份和数码显示部份之外,其余全数在一片集成电子芯片上实现,整个系统超级精简,而且具有灵活的现场可更改性。
关键词:
数字频率计,测量,VHDL语言,设计
一.课程设计要求及内容
1.1要紧技术指标
(1)可测量范围从1Hz到99999999Hz;
(2)8位频率计输入端别离为:
系统基准时钟100MHZ(CLK)、被测信号输入(Fx);及输出端为(DOUT),皆采纳BCD码计数方式;
(3)将被测信号的频率直接送到8个LED显示。
1.2工作内容及要求
(1)依照任务的要求进行方案构思,初选方案,绘制系统原理框图并与指导教师讨论,方案定稿。
(2)依照选定的方案,在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过,记录系统各个模块仿真结果;
(3)对各个模块进行综合仿真,调试,实现数字频率计的大体功能和硬件实现;
(4)记录仿真结果中显现的问题及解决方法。
二数字频率计的大体原理
2.1数字频率计的组成
本课程设计设计的数字频率计正常工作时,可测量0Hz-100MHz的频率。
设
(1)
计系统是有五部份组成:
一个100MHz分1Hz的分频器CLK_GEN,一个测频操纵信号发生器TESTCTL,带时钟使能的十进制计数器CNT10(设计中需要八个),一个32位锁存器REG32B,和动态输入译码器HC4511电路设计(设计中需要八个)。
2.2数字频率器的原理
数字频率计的大体原理是用一个频率稳固度高的频率源作为基准信号,对照测量出其他信号的频率。
通常情形下计算每秒内待测信号的脉冲个数,即闸门时刻为一秒。
闸门时刻能够依照取值大于或小于1秒都能够。
闸门时刻越长,那么每测一次频率的距离就越长,闸门时刻越短,测得的频率值刷新就越快,单侧的的频率精度就越受阻碍。
一样取1秒作为闸门时刻。
其原理框图如下:
设计的数字频率计工作进程如下:
被测信号接入频率计的输入端FSIN,下载板上100M时钟通过频率计的分频器模块中CLK端口输入,通过度频器的分频,变成1Hz的工作频率提供给测频器。
当被测频率和工作频率进入测频器模块时,测频器TESTCTL工作进行测频,TESTCTL的计数使能信号CLR_CNT产生一个1秒脉宽的周期信号,并对频率集中的十进制计数器CNT10的ENT使能端进行同步操纵。
当ENT高电平常许诺计数,低电平常停止计数,并维持其所记得脉冲数。
在停止计数期间,第一需要一个锁存信号LOAD的上升沿将计数器所计的值锁存进32位锁存器REG32B中,数字频率计的源程序综合以上模块而且通过对硬件的链接,实现8个数码管显示出计数值。
三具体电路模块设计
3.1100MHz分频器CLK_GEN的设计
100MHz工作时钟接入分频器,用一个计数器进行计数,计满二分之一100M个,CLK信号取反一次,分频后频率变成1Hz,周期由1/100000000秒变大为1秒,知足数字频率计时序工作频率的要求。
分频器程序设计如下:
---------------------------------------------------------------------
100MHz分频器:
clk_gen.vhd
---------------------------------------------------------------------
libraryieee;
useieee.std_logic_1164.all;
entityclk_genis
port(clk:
instd_logic;
newclk:
outstd_logic);
endentityclk_gen;
(2)
architectureartofclk_genis
signalclk2:
std_logic;
begin
process(clk)is
variablecnter:
integerrange0to99999999;
begin
ifclk'eventandclk='1'then
ifcnter=99999999thencnter:
=0;
elsecnter:
=cnter+1;
endif;
ifcnter<50000000thenclk2<='1';
elseclk2<='0';endif;
endif;
endprocess;
newclk<=notclk2;
endarchitectureart;
分频器编译仿真波形如下:
3.2带时钟使能的十进制计数器CNT10的设计
计数器模块是对输入脉冲信号的频率进行测量技术的部份,有八个带时钟使能的十进制计数器组成。
其中ENA为计数器选通操纵信号,CLR为计数清零信号。
在计数清零信号清零后,当使能信号ENA有效时,开始对待测信号进行计数。
若是使能信号ENA的宽度为1时,那么计数结果就为待测信号的频率。
(3)
带时钟使能的十进制计数器程序设计如下:
---------------------------------------------------------------------
带时钟使能的十进制计数器:
CNT10.vhd
---------------------------------------------------------------------
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYCNT10IS
PORT(CLK:
INSTD_LOGIC;
CLR,ENA:
INSTD_LOGIC;
CQ:
OUTINTEGERRANGE0TO15;
CO:
OUTSTD_LOGIC);
ENDENTITYCNT10;
ARCHITECTUREARTOFCNT10IS
SIGNALCQI:
INTEGERRANGE0TO15;
BEGINPROCESS(CLK,CLR,ENA)IS
BEGIN
IFCLR='1'THENCQI<=0;
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI<9THENCQI<=CQI+1;
ELSECQI<=0;ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CQI)IS
BEGIN
IFCQI=9THENCO<='1';
ELSECO<='0';ENDIF;
ENDPROCESS;
CQ<=CQI;
ENDARCHITECTURE;
十进制计数器编译仿真波形如下:
(4)
3.332位锁存器REG32B的设计
当锁存信号上升沿到来时,将计数器的计数值锁存。
设置锁存器的益处是显示的数据稳固,可不能由于周期的清零信号而闪烁。
锁存器的位数应该和计数器一样,都是32位。
寄放器在计数终止后,利用触发器的上升沿把最新的频率测量值保留起来,如此在计数进程中没必要一直看数码显示管,显示器将最终的频率读数按期进行更新,其输出将作为动态扫描电路的输入。
32位锁存器程序设计如下:
---------------------------------------------------------------------
32位锁存器:
reg32b.vhd
---------------------------------------------------------------------
Libraryieee;
useieee.std_logic_1164.all;
entityreg32bis
port(lk:
instd_logic;
din:
instd_logic_vector(31downto0);
dout:
outstd_logic_vector(31downto0));
endreg32b;
architecturebehavofreg32bis
begin
process(lk,din)
begin
iflk'eventandlk='1'then
dout<=din;
endif;
endprocess;
endarchitecturebehav;
32位锁存器编译仿真波形图如下:
(5)
3.4测频操纵信号发生器TESTCTL的设计
频率测量的大体原理确实是计算每秒钟内待测信号的脉冲个数。
这就要求TESTCTL的计数使能信号TATEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步操纵。
当TSTEN高电平常,许诺计数,低电平常停止计数,并维持所记的数。
在停止计数期间,第一需要一个锁存信号LOAD的上升沿将计数器所计的值锁存进32位锁存器REG32B中,并有外部的译码器译出并稳固显示。
锁存信号以后,必需有一清零信号CLR_CNT对计数器进行清零,为下一秒做好预备。
测频操纵信号发生器程序设计如下:
---------------------------------------------------------------------
测频操纵信号发生器:
TESTCTL.vhd
---------------------------------------------------------------------
Libraryieee;
useieee.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
entitytestctlis
port(clk:
instd_logic;
tsten:
outstd_logic;
clr_cnt:
outstd_logic;
load:
outstd_logic);
endentitytestctl;
architectureartoftestctlis
signaldiv2clk:
std_logic;
begin
process(clk)is
begin
ifclk'eventandclk='1'then
div2clk<=notdiv2clk;
endif;
endprocess;
process(clk,div2clk)is
begin
ifclk='0'anddiv2clk='0'then
clr_cnt<='1';
elseclr_cnt<='0';
endif;
endprocess;
load<=notdiv2clk;tsten<=div2clk;
endarchitectureart;
测频操纵信号发生器编译仿真波形图如下:
(6)
3.5动态输入编译译码器HC4511的设计
别离将寄放器的输出端DATA(0至3),DATA(4至7),DATA(8至11),DATA(12至15),DATA(16至19),DATA(20至23),DATA(24至27),DATA(28至31)对应接到各个译码器的输出端口datain,然后将各个译码器的输出端a,b,c,d,e,f,g端接到数码管的a,b,c,d,e,f,g端口。
动态输入编译译码器程序设计如下:
---------------------------------------------------------------------
动态输入编译译码器:
HC451.vhd
---------------------------------------------------------------------
libraryieee;
useieee.std_logic_1164.all;
entityHC4511is
port(datain:
instd_logic_vector(3downto0);
a:
bufferstd_logic;
b:
bufferstd_logic;
c:
bufferstd_logic;
d:
bufferstd_logic;
e:
bufferstd_logic;
f:
bufferstd_logic;
g:
bufferstd_logic);
endentityHC4511;
architectureARTofHC4511is
(7)
begin
process(datain)is
begin
casedatainis
when"0001"=>
a<='0';b<='1';c<='1';d<='0';e<='0';f<='0';g<='0';
when"0010"=>
a<='1';b<='1';c<='0';d<='1';e<='1';f<='0';g<='1';
when"0011"=>
a<='1';b<='1';c<='1';d<='1';e<='0';f<='0';g<='1';
when"0100"=>
a<='0';b<='1';c<='1';d<='0';e<='0';f<='1';g<='1';
when"0101"=>
a<='1';b<='0';c<='1';d<='1';e<='0';f<='1';g<='1';
when"0110"=>
a<='0';b<='0';c<='1';d<='1';e<='1';f<='1';g<='1';
when"0111"=>
a<='1';b<='1';c<='1';d<='0';e<='0';f<='0';g<='0';
when"1000"=>
a<='1';b<='1';c<='1';d<='1';e<='1';f<='1';g<='1';
when"1001"=>
a<='1';b<='1';c<='1';d<='1';e<='0';f<='1';g<='1';
whenothers=>NULL;
endcase;
endprocess;
endarchitectureART;
动态输入编译译码器编译波形如下:
(8)
四数字频率计系统模块的设计
4.1系统模块程序设计及仿真波形
系统模块实现对各个模块的整合,实现整个系统的功能。
FSIN为输入被测频率信号,CLK为分频器输出的1Hz工作频率,DOUT为数字频率计输出的频率测试结果。
在整个模块的设计中,需要利用以上各个模块的功能和应用,通过系统模块程序的子程序挪用,实现对整个系统的操纵。
数字频率计系统模块源程序设计如下:
---------------------------------------------------------------------
数字频率计:
FREQ.vhd
---------------------------------------------------------------------
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFREQIS
PORT(FSIN:
INSTD_LOGIC;
CLK:
INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDENTITYFREQ;
ARCHITECTUREARTOFFREQIS
COMPONENTCNT10IS
PORT(CLK,CLR,ENA:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CO:
OUTSTD_LOGIC);
ENDCOMPONENTCNT10;
COMPONENTREG32BIS
port(lk:
instd_logic;
din