基于CPLD的建议数字频率计的设计.docx

上传人:b****6 文档编号:15846174 上传时间:2023-07-08 格式:DOCX 页数:21 大小:156.01KB
下载 相关 举报
基于CPLD的建议数字频率计的设计.docx_第1页
第1页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第2页
第2页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第3页
第3页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第4页
第4页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第5页
第5页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第6页
第6页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第7页
第7页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第8页
第8页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第9页
第9页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第10页
第10页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第11页
第11页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第12页
第12页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第13页
第13页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第14页
第14页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第15页
第15页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第16页
第16页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第17页
第17页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第18页
第18页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第19页
第19页 / 共21页
基于CPLD的建议数字频率计的设计.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于CPLD的建议数字频率计的设计.docx

《基于CPLD的建议数字频率计的设计.docx》由会员分享,可在线阅读,更多相关《基于CPLD的建议数字频率计的设计.docx(21页珍藏版)》请在冰点文库上搜索。

基于CPLD的建议数字频率计的设计.docx

基于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电路设计实用教程清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2