基于CPLD的简易数字频率计.docx

上传人:b****4 文档编号:5199296 上传时间:2022-12-13 格式:DOCX 页数:18 大小:207.96KB
下载 相关 举报
基于CPLD的简易数字频率计.docx_第1页
第1页 / 共18页
基于CPLD的简易数字频率计.docx_第2页
第2页 / 共18页
基于CPLD的简易数字频率计.docx_第3页
第3页 / 共18页
基于CPLD的简易数字频率计.docx_第4页
第4页 / 共18页
基于CPLD的简易数字频率计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

基于CPLD的简易数字频率计.docx

《基于CPLD的简易数字频率计.docx》由会员分享,可在线阅读,更多相关《基于CPLD的简易数字频率计.docx(18页珍藏版)》请在冰豆网上搜索。

基于CPLD的简易数字频率计.docx

基于CPLD的简易数字频率计

一.设计总体思路,基本原理和框图

1.1.设计总体思路

数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。

随着复杂可编程逻辑器件(CPLD)的广泛应用,以EDA工具作为开发手段,运用VHDL语言。

将使整个系统大大简化。

提高整体的性能和可靠性。

本文用VHDL在CPLD器件上实现一种8b数字频率计测频系统,能够用十进制数码显示被测信号的频率,不仅能够测量正弦波、方波和三角波等信号的频率,而且还能对其他多种物理量进行测量。

具有体积小、可靠性高、功耗低的特点。

1.2.基本原理

 工作过程:

脉冲发生器输入1Hz的标准信号,经过测频控制信号发生器2分频后产生一个脉宽为1秒的时钟信号,以此作为计数闸门信号。

测量时,将被测信号通过信号整形电路,产生同频率的矩形波,输入计数器作为时钟。

当计数闸门信号高电平有效时,计数器开始计数,并将计数结果送入锁存器中。

设置锁存器的好处是显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

最后将锁存的数值译码并在数码管上显示。

 

1.3.总体框图

二.单元电路设计

2.1.分频电路模块

本次课程设计中,我们选择的是20分频。

分频器在总电路中有两个作用。

由总图框图中不难看出分频器有两个输出,一个给计数器,一个给锁存器。

时钟信号经过分频电路形成了20分频后的门信号。

另一个给锁存器作锁存信号,当信号为低电平时就锁存计数器中的数。

其电路图如图1.

图1分频电路图

2.2.片选信号电路模块

此电路也有两用途。

一是为后面的片选电路产生片选信号,二则是为模块ch(译码信号)提供选择脉冲信号。

其电路图如图2.

图2片选信号电路图

2.3.计数器模块

计数器模块为该电路中的核心模块,它的功能是:

当门信号为上升沿时,电路开始计算半个周期内被测信号通过的周期数,到下升沿后结束。

然后送忘锁存器锁存。

其电路图如图3.

图3计数器电路图

2.4.锁存器模块

该模块在分频信号的下降沿到来时,将计数器的信号锁存,然后送给编译模块中。

其电路图如图4.

图4锁存器电路图

2.5.译码信号模块

该模块是对四个锁存器进行选择,按顺序的将四个锁存器中的数值送给译码模块中译码。

其电路图如图5.

图5译码信号电路图

2.6.片选模块

该模块接收到片选信号后,输出给显示器,选择显示那个显示管。

其电路图如图6.

图6片选电路图

2.7.译码模块

译码模块的作用就是将译码信号模块中选择出的信号进行译码,并将其送给显示器。

其电路图如图7.

图7译码电路图

三.设计仿真与调试

3.1.分频电路模块的仿真

打开quartusII后,建立工程文件,然后输入程序,保存后编译。

编译无错误既可以生成电路图。

其仿真图如图8.

图8分频电路仿真图

3.2.片选信号电路的仿真

其仿真图如图9.

图9片选信号电路仿真图

3.3.计算器模块的仿真

其仿真图如图10.

图10计算器电路仿真图

3.4.锁存器模块仿真

其仿真图如图11.

图11锁存器电路仿真图

3.5.译码信号模块的仿真

其仿真图如图12.

图12译码信号电路仿真图

3.6.片选模块的仿真

其仿真图如图13.

图13片选电路仿真图

3.7.译码器模块

其仿真图如图14.

图14译码电路仿真图

3.8.总电路图的仿真

将七个模块用导线相连,形成总电路图。

其仿真图如图15.

图15总电路仿真图

图15为总的电路图,图中alm为进位输出,clk为时钟信号,设为15us。

Clr为清零信号,点电平清零,高电平计数。

Q为显示输出端。

Sel为片选,sig为被测信号,设为1us。

图中显示结果为10011101111111101101为305.本电路为20分频。

结果应为300,考虑延时误差,测量结果正确。

3.9软件调试与硬件调试

(a)软件调试

仿真时,打开软件puartusII,建立工程文件,然后输入程序。

保存后,编译,无误后及可以仿真了。

进入界面后,先点击edict菜单,设置endtime,一般设为10ms,由于软件的缘故,endtime不要设的太小,否则延时会很大.

对总电路图仿真的时候也出现了一个问题,一开始我们怎么也仿真不出来,后来才知道总图仿真的时候也要建立工程文件,而且要将所有的模块文件加载到总电路图的文件夹中。

(b)硬件调试

软件仿真玩后,就的与硬件相连。

在这之前的先设置好管脚。

点击“assingmengt”菜单的“pinplanner”按照试验箱中的管脚设置好,确定后编译。

关闭puartus软件,将试验箱接入电脑,按提示安装。

重新打开软件,点击菜单“tools”中的”granmmer”确定接好USB接口。

将实验箱的线接好后就可以运行,看结果与仿真是否相符.

点击“start”将清零信号置低电平,显示器显示10000的字样。

将被侧信号与时钟信号设置合理的数值,将清理信号置为高电平。

显示器中就能显示器分频数值。

(c)调试结果

1.清零信号为低电平时候的显示结果如图16.

图16清零信号为低电平时的结果

图中为清零信号为低电平时,显示为0000,前面的1为在这种情况下只需要一个计数器工作。

2.清零信号置为高电平后的结果如下图图17.

图17清零信号为高电平时的显示结果

图中显示的为将被测信号为时钟信号的320倍的显示结果。

显示为0320.前面的3为需要用3个计数器工作。

四.编程下载

4.1.分频模块的程序

libraryieee;

useieee.std_logic_1164.all;

entityfenis

port(clk:

instd_logic;

q:

outstd_logic);

endfen;

architecturefen_arcoffenis

begin

process(clk)

variablecnt:

integerrange0to9;

variablex:

std_logic;

begin

ifclk'eventandclk='1'

thenifcnt<9then

cnt:

=cnt+1;

else

cnt:

=0;

x:

=notx;

endif;

endif;

q<=x;

endprocess;

endfen_arc;

4.2.片选信号模块的程序

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.3.计数器模块的程序

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='0'then

c3:

="0000";

c2:

="0000";

c1:

="0000";

c0:

="0000";

elsifdoor='1'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;

4.4.锁存器模块的程序

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;

4.5.译码信号模块的程序

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;

4.6.片选模块的程序

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;

4.7.译码器模块的程序

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;

五.总结与体会

经过两个星期的实习,过程曲折可谓一语难尽。

在此期间我也失落过,也曾一度热情高涨。

从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。

生活就是这样,汗水预示着结果也见证着收获。

劳动是人类生存生活永恒不变的话题。

通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义,我才意识到老一辈测绘为我们的社会付出。

我想说,测绘确实有些辛苦,但苦中也有乐,在如今物欲很流的世界,很少有机会能与大自然亲密接触,但我们可以,而且测绘也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契。

同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。

某个人的离群都可能导致导致整项工作的失败。

实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。

团结协作是我们实习成功的一项非常重要的保证。

而这次实习也正好锻炼我们这一点,这也是非常宝贵的。

对我而言,知识上的收获重要,精神上的丰收更加可喜。

挫折是一份财富,经历是一份拥有。

这次实习必将成为我人生旅途上一个非常美好的回忆!

 

六.附录

图18总电路图

七.参考文献

1.康华光主编.电子技术基础(数字部分),高等教育出版社。

2.阎石主编.电子技术基础(数字部分),清华大学出版社。

3.陈大钦主编,电子技术基础实验,高等教育出版社。

4.彭介华主编,电子技术课程设计指导,高等教育出版社。

5.张原编著,可编程逻辑器件设计及应用,机械工业出版社。

6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。

7.刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社

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

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1