基于CPLD的建议数字频率计的设计.docx
- 文档编号:28109257
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:21
- 大小:156.01KB
基于CPLD的建议数字频率计的设计.docx
《基于CPLD的建议数字频率计的设计.docx》由会员分享,可在线阅读,更多相关《基于CPLD的建议数字频率计的设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于CPLD的建议数字频率计的设计
基于CPLD的简易数字频率计
目录
任务书…………………………………………………………………………………………4
1设计目的和要求………………………………………………………………….4
2任务日期………………………………………………………………………….5
一、设计总体思路和基本框图…………………………………………………………………6
1设计总体思路…………………………………………………………………….6
2基本原理………………………………………………………………………….8
3总体框图………………………………………………………………………….8
二、各单元模块设计…………………………………………………………………………..16
1模块FEN…………………………………………………………………………...17
2模块SEL……………………………………………………………………………17
3模块CORNA………………………………………………………………………...19
4模块LOCK………………………………………………………………………...19
5模块CH…………………………………………………………………………...19
6模块DISP………………………………………………………………………...19
7模块YM…………………………………………………………………………...19
三、顶层文件设计……………………………………………………………………………..20
1总体电路图………………………………………………………………………...19
四、调试下载………………………………………………………………………….20
五、心得体会…………………………………………………………………………………..24
六、参考文献…………………………………………………………………………………...24
一.设计总体思路,基本原理和框图
1.设计总体思路
采用现场可编程门阵列(FPGA)为控制核心,利用VHDL语言编程,下载烧制实现。
将所有器件集成在一块芯片上,体积大大减小的同时还提高了稳定性,可实现大规模和超大规模的集成电路,测频测量精度高,测量频率范围大,而且编程灵活、调试方便.
2.基本原理
众所周知,频率信号易于传输,抗干扰性强,可以获得较好的测量精度。
因此,频率检测是电子测量领域最基本的测量之一。
频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1s。
闸门时间可以根据需要取值,大于或小于1s都可以。
闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。
闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。
一般取1s作为闸门时间。
数字频率计的关键组成部分包括分频器,计数器、锁存器、片选电路,译码驱动电路和显示电路.
3.总体框图
二、各个单元模块设计
1、模块FEN
采用计数器构成分频电路,对1KHz的时钟脉冲进行分频,取得不同量程所需要的时间基准信号,实现量程控制。
模块FEN通过对4Hz时钟的分频得到0.5Hz时钟,为模块CORNA提供1s的闸门时间。
源程序:
libraryieee;
useieee.std_logic_1164.all;
entityfenis
port(clk:
instd_logic;
q:
outstd_logic);
endfen;
architecturefen_arcoffenis
begin
process(clk)
variablecnt:
integerrange0to2999999;
variablex:
std_logic;
begin
ifclk'eventandclk='1'
thenifcnt<2999999then
cnt:
=cnt+1;
else
cnt:
=0;
x:
=notx;
endif;
endif;
q<=x;
endprocess;
endfen_arc;
合成后如下图:
图3模块FEN
仿真波形如图:
2、模块SEL
模块SEL产生数码管的片选信号。
源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityselis
port(clk:
instd_logic;
q:
outstd_logic_vector(2downto0));
endsel;
architecturesel_arcofselis
begin
process(clk)
variablecnt:
std_logic_vector(2downto0);
begin
ifclk'eventandclk='1'then
cnt:
=cnt+1;
endif;
q<=cnt;
endprocess;
endsel_arc;
合成后为:
图4模块SEL
仿真波形如图:
3、模块CORNA
模块CORNA是整个程序的核心,它完成在1S的时间里对被测信号计数的功能,并通过选择输出数据实现自动换档的功能。
源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycornais
port(clr,sig,door:
instd_logic;
alm:
outstd_logic;
q3,q2,q1,q0,dang:
outstd_logic_vector(3downto0));
endcorna;
architecturecorn_arcofcornais
begin
process(door,sig)
variablec3,c2,c1,c0:
std_logic_vector(3downto0);
variablex:
std_logic;
begin
ifsig'eventandsig='1'then
ifclr='0'then
alm<='0';
c3:
="0000";
c2:
="0000";
c1:
="0000";
c0:
="0000";
elsifdoor='1'then
c3:
="0000";
c2:
="0000";
c1:
="0000";
c0:
="0000";
elsifdoor='0'then
ifc0<"1001"then
c0:
=c0+1;
else
c0:
="0000";
ifc1<"1001"then
c1:
=c1+1;
elsec1:
="0000";
ifc2<"1001"then
c2:
=c2+1;
else
c2:
="0000";
ifc3<"1001"then
c3:
=c3+1;
else
c3:
="0000";
alm<='1';
endif;
endif;
endif;
endif;
endif;
ifc3/="0000"then
q3<=c3;
q2<=c2;
q1<=c1;
q0<=c0;
dang<="0100";
elsifc2/="0000"then
q3<="0000";
q2<=c2;
q1<=c1;
q0<=c0;
dang<="0011";
elsifc1/="0000"then
q3<="0000";
q2<="0000";
q1<=c1;
q0<=c0;
dang<="0010";
else
q3<="0000";
q2<="0000";
q1<="0000";
q0<=c0;
dang<="0001";
endif;
endif;
endprocess;
endcorn_arc;
合成后为:
图5模块CORNA
仿真波形图如下:
4、模块LOCK
模块LOCK实现锁存器的功能,在信号L的下降沿到来时将信号A4、A3、A2、A1锁存。
源程序:
libraryieee;
useieee.std_logic_1164.all;
entitylockis
port(l:
instd_logic;
a4,a3,a2,a1,a0:
instd_logic_vector(3downto0);
q4,q3,q2,q1,q0:
outstd_logic_vector(3downto0));
endlock;
architecturelock_arcoflockis
begin
process(l)
variablet4,t3,t2,t1,t0:
std_logic_vector(3downto0);
begin
ifl'eventandl='0'then
t4:
=a4;
t3:
=a3;
t2:
=a2;
t1:
=a1;
t0:
=a0;
endif;
q4<=t4;
q3<=t3;
q2<=t2;
q1<=t1;
q0<=t0;
endprocess;
endlock_arc;
合成后为:
图6模块LOCK
仿真波形图如下:
5、模块CH
模块CH对于于数码管片选信号,将相应的数据送出,其中档位也通过数码管显示。
源程序:
libraryieee;
useieee.std_logic_1164.all;
entitychis
port(sel:
instd_logic_vector(2downto0);
a3,a2,a1,a0,dang:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(3downto0));
endch;
architecturech_arcofchis
begin
process(sel)
begin
caseselis
when"000"=>q<=a0;
when"001"=>q<=a1;
when"010"=>q<=a2;
when"011"=>q<=a3;
when"111"=>q<=dang;
whenothers=>q<="1111";
endcase;
endprocess;
endch_arc;
合成后为:
图7模块CH
仿真波形如图:
6、模块DISP
DISP为七段译码器。
源程序:
libraryieee;
useieee.std_logic_1164.all;
entitydispis
port(d:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(6downto0));
enddisp;
architecturedisp_arcofdispis
begin
process(d)
begin
casedis
when"0000"=>q<="0111111";
when"0001"=>q<="0000110";
when"0010"=>q<="1011011";
when"0011"=>q<="1001111";
when"0100"=>q<="1100110";
when"0101"=>q<="1101101";
when"0110"=>q<="1111101";
when"0111"=>q<="0100101";
when"1000"=>q<="1111111";
when"1001"=>q<="1101111";
whenothers=>q<="0000000";
endcase;
endprocess;
enddisp_arc;
合成后为:
图8模块DISP
仿真波形如图:
7、模块YM
源程序:
libraryieee;
useieee.std_logic_1164.all;
entityymis
port(d:
instd_logic_vector(2downto0);
q:
outstd_logic_vector(7downto0));
endym;
architectureym_arcofymis
begin
process(d)
begin
casedis
when"000"=>q<="00000001";
when"001"=>q<="00000010";
when"010"=>q<="00000100";
when"011"=>q<="00001000";
when"100"=>q<="00010000";
when"101"=>q<="00100000";
when"110"=>q<="01000000";
when"111"=>q<="10000000";
whenothers=>q<="00000000";
endcase;
endprocess;
endym_arc;
合成后为:
图9模块YM
仿真波形图:
三、顶层文件设计
libraryieee;
useieee.std_logic_1164.all;
entitypljis
port(sig,clr,clk:
instd_logic;
alm:
outstd_logic;
q:
outstd_logic_vector(6downto0);
se:
outstd_logic_vector(7downto0));
endplj;
architectureartofpljis
componentcorna
port(clr,sig,door:
instd_logic;
alm:
outstd_logic;
q3,q2,q1,q0,dang:
outstd_logic_vector(3downto0));
endcomponent;
componentfen
port(clk:
instd_logic;
q:
outstd_logic);
endcomponent;
componentlock
port(l:
instd_logic;
a4,a3,a2,a1,a0:
instd_logic_vector(3downto0);
q4,q3,q2,q1,q0:
outstd_logic_vector(3downto0));
endcomponent;
componentsel
port(clk:
instd_logic;
q:
outstd_logic_vector(2downto0));
endcomponent;
componentch
port(sel:
instd_logic_vector(2downto0);
a3,a2,a1,a0,dang:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(3downto0));
endcomponent;
componentdisp
port(d:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(6downto0));
endcomponent;
componentym
port(d:
instd_logic_vector(2downto0);
q:
outstd_logic_vector(7downto0));
endcomponent;
signalt1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t12:
std_logic_vector(3downto0);
signalt11:
std_logic;
signalt20:
std_logic_vector(2downto0);
begin
u1:
cornaportmap(clr=>clr,sig=>sig,door=>t11,alm=>alm,q3=>t1,q2=>t2,q1=>t3,q0=>t4,dang=>t5);
u2:
fenportmap(clk=>clk,q=>t11);
u3:
lockportmap(l=>t11,a4=>t1,a3=>t2,a2=>t3,a1=>t4,a0=>t5,q4=>t6,q3=>t7,q2=>t8,q1=>t9,q0=>t10);
u4:
selportmap(clk=>clk,q=>t20);
u5:
chportmap(sel=>t20,a3=>t6,a2=>t7,a1=>t8,a0=>t9,dang=>t10,q=>t12);
u6:
dispportmap(d=>t12,q=>q);
u7:
ymportmap(d=>t20,q=>se);
endarchitectureart;
总体仿真波形图:
四、总体电路图
五.设计调试
1、软件调试与硬件调试
(a)软件调试
仿真时,打开软件puartusII,建立工程文件,然后输入程序。
保存后,编译,无误后及可以仿真了。
进入界面后,先点击edict菜单,设置endtime,一般设为10ms,由于软件的缘故,endtime不要设的太小,否则延时会很大.
对总电路图仿真的时候也出现了一个问题,一开始我们怎么也仿真不出来,后来才知道总图仿真的时候也要建立工程文件,而且要将所有的模块文件加载到总电路图的文件夹中。
(b)硬件调试
1、引脚锁定:
这个过程中特别要注意的是,在锁定引脚后必须再通过QuartusII的编译器“Compilation”,对文件重新进行编译一次,以便将引脚信息编入下载文件中。
2、连接线路:
选择主菜单“Assignments”中的“pinplanner”按钮,按照引脚锁定连接好线路,打开电源。
3、正式下载:
单击“Tools”中的“programmer”按钮,下载配置文件,如果连接无误,将出现一个以.cdf为后缀的窗口,然后点击“start”按钮。
六.总结与体会
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,EDA技术已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为电子信息工程专业的学生来说掌握单片机的开发技术是十分重要的。
我的题目是基于CPLD的简易数字频率计,对于我们这些实践中的新手来说,这是一次考验。
怎样让自己的业余更接近专业?
怎样让自己的计划更具有序性,而不会忙无一用?
这都是我们所要考虑和努力的。
这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。
在这次基于CPLD的简易数字频率计课程设计中,我运用了QuartusII软件。
这个软件以前接触过但不是很熟练,这次课程设计让我掌握软件中编辑输入图形设计文件、编译设计文件、仿真设计文件及编程下载设计文件各种不同的文件设计。
要达到实验结果可以通过不同方式,图形文件和顶层文件都可以
这次课程设计通过我们小组的努力终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于迎刃而解,在此我表示感谢!
同时,对给过我帮助的所有同学和陈爱萍老师再次表示忠心的感谢!
七.参考文献
1.康华光主编.电子技术基础(数字部分),高等教育出版社。
2.阎石主编.电子技术基础(数字部分),清华大学出版社。
3.陈大钦主编,电子技术基础实验,高等教育出版社。
4.彭介华主编,电子技术课程设计指导,高等教育出版社。
5.张原编著,可编程逻辑器件设计及应用,机械工业出版社。
6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。
7.刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 CPLD 建议 数字频率计 设计