基于CPLD的简易数字频率计_第1页
基于CPLD的简易数字频率计_第2页
基于CPLD的简易数字频率计_第3页
基于CPLD的简易数字频率计_第4页
基于CPLD的简易数字频率计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、等级:课 程 设 计课程名称嵌入式系统课程设计课题名称基于CPLD的简易数字频率计专 业电子信息工程班 级电信1303学 号 xxxxxxxxxxxxxxxxxxxx姓 名XX指导老师陈爱萍2016年12月20日目录一总体设计21.设计总体思路22.基本原理23.总体框图2二各个单元模块设计31.分频器模块32.计数器模块43.锁存器模块64.编码器模块85.片选模块96.显示模块107.片选信号模块11四.总体电路图14五.设计调试141.软件调试与硬件调试141.1软件调试141.2硬件调试15六. 总结与体会16七.参考文献16电气信息学院课程设计任务书课题名称基于CPLD的简易数字频率

2、计姓 名xx专业电子信息工程班级xxxx 学号xx 指导老师陈爱萍课程设计时间2016年12月18日-2016年12月30日(17、18周)教研室意见意见:同意 审核人:刘望军一、任务及要求CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,设计数字频率计,并最终完成电路的编程调试。具体要求如下:数字频率计是一种用数字显示的频率测量仪表,它不仅可以测量正弦信号、方波信号的频率,还可以测量如机械振动次数、物体转动次数、单位时间里经过传送带的产品数量等多种物理量。技术指标:()、频率测量范围:1/109999Hz。()、输入被测信号幅度Vi<100mV。()、测量1s和10s时间内的脉

3、冲数。()、显示时间分“手动”和“自动”两档。二、进度安排第一周:周一:集中布置课程设计相关事宜。周二周三:子模块程序设计,顶层电路程序设计。周四周日:子模块,顶层电路仿真。第二周:周一周三:编程下载,系统调试。周四周五:设计报告撰写。周五进行答辩和设计结果检查。一总体设计1.设计总体思路采用现场可编程门阵列(FPGA)为控制核心,利用VHDL语言编程,下载烧制实现。将所有器件集成在一块芯片上,体积大大减小的同时还提高了稳定性,可实现大规模和超大规模的集成电路,测频测量精度高,测量频率范围大,而且编程灵活、调试方便.2.基本原理频率计的基本原理是用高频信号基准时钟,对比测量其他信号的频率。通常

4、情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。闸门时间可以根据需要取值,大于或小于1 s都可以。闸门时间越长,得到的频率值就越准确。闸门时间越短,测得的频率值刷新就越快。一般取1 s作为闸门时间。数字频率计的关键组成部分包括分频器,计数器、锁存器、片选电路,译码驱动电路和显示电路.3.总体框图 图1-3-1 数字频率计总体框图二各个单元模块设计1.分频器模块本次实验主要采用的是计数器构成分频电路,对1KHz的时钟脉冲进行分频。这里使用的是10分频,一个输出给计数器,一个给锁存器。源程序:library ieee; use ieee.std_logic_1164.all; entity

5、 fen_ck22 is port(clk:in std_logic; q:out std_logic); end; architecture fen_arc of fen_ck22 is begin process(clk) variable cnt:integer range 0 to 9; variable x:std_logic; begin if clk'event and clk='1' then if cnt<9 then cnt:=cnt+1; else cnt:=0; x:=not x; end if; end if; q<=x; end

6、process; end fen_arc; 电路模块如图所示:图2-1-1分频模块仿真波形如图:图2-1-2 分频模块仿真波形2.计数器模块这个模块主要是记录待测信号经过了多少的波峰,将其转换成数量。然后给锁存器锁存。源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity count_ck22 isport(clr,sig,door:in std_logic; alm:out std_logic; q3,q2,q1,q0,dang:out std_logic_vector(3 do

7、wnto 0);end;architecture count22_arc of count_ck22 isbeginprocess(door,sig)variable c3,c2,c1,c0:std_logic_vector(3 downto 0);variable x:std_logic;begin if sig'event and sig='1' then if clr='0' then alm<='0' c3:="0000" c2:="0000" c1:="0000"

8、 c0:="0000" elsif door='0' then c3:="0000" c2:="0000" c1:="0000" c0:="0000" elsif door='1' then if c0<"1001" thenc0:=c0+1; else c0:="0000" if c1<"1001" then c1:=c1+1; else c1:="0000" if c2

9、<"1001" then c2:=c2+1; else c2:="0000" if c3<"1001" then c3:=c3+1; else c3:="0000" alm<='1' end if; end if; end if; end if; end if; if c3/="0000" then q3<=c3; q2<=c2; q1<=c1; q0<=c0; dang<="0100" elsif c2/=&q

10、uot;0000" then q3<="0000" q2<=c2; q1<=c1; q0<=c0; dang<="0011" elsif c1/="0000" then q3<="0000" q2<="0000" q1<=c1; q0<=c0; dang<="0010" else q3<="0000" q2<="0000" q1<="000

11、0" q0<=c0; dang<="0001"end if;end if;end process;end count22_arc;模块如图所示:图2-2-1计数器模块仿真波形如图:图2-1-2计数器模块仿真波形3.锁存器模块此模块主要是锁存来自于计数器的数据然后传送给编码器。library ieee;use ieee.std_logic_1164.all;entity lock_ck22 isport(l:in std_logic; a4,a3,a2,a1,a0:in std_logic_vector(3 downto 0); q4,q3,q2,q1,

12、q0:out std_logic_vector(3 downto 0);end;architecture lock22_arc of lock_ck22 isbegin process(l) variable t4,t3,t2,t1,t0:std_logic_vector(3 downto 0);begin if l'event and l='0' then t4:=a4; t3:=a3; t2:=a2; t1:=a1; t0:=a0; end if; q4<=t4; q3<=t3; q2<=t2; q1<=t1; q0<=t0; end

13、process;end lock22_arc;模块如图所示:图2-3-1锁存器模块仿真波形图如下:图2-3-2锁存器模块仿真波形4.编码器模块 从前面的锁存器模块接受由计数器记录的数据并且编码,并且接受片选模块来的信号,根据来自片选模块的信号选择锁存器中的数据编码,然后给后面的显示译码器。library ieee;use ieee.std_logic_1164.all;entity bm_ck22 isport(sel:in std_logic_vector(2 downto 0);a3,a2,a1,a0,dang:in std_logic_vector(3 downto 0);q:out s

14、td_logic_vector(3 downto 0);end;architecture bm_ck22_arc of bm_ck22 isbeginprocess(sel)begincase sel iswhen "000"=>q<=a0;when "001"=>q<=a1;when "010"=>q<=a2;when "011"=>q<=a3;when "111"=>q<=dang;when others=>q<=&qu

15、ot;1111"end case;end process;end ;电路图如图所示:图2-4-1编码器模块仿真波形图如下:图2-4-2编码器模块仿真波形5.片选模块通过时钟信号clk产生片选信号,此信号主要是给后面的模块选择数码管的位置,输出显示信号。源程序:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ph_ck22 is port(clk:in std_logic; q:out std_logic_vector(2 downto 0);end;architectur

16、e ph_ck22_arc of ph_ck22 is begin process(clk) variable cnt:std_logic_vector(2 downto 0); begin if clk'event and clk='1' then cnt:=cnt+1; end if; q<=cnt;end process;end;电路图如图所示:图2-5-1片选模块仿真波形如图:图2-5-2片选模块仿真波形6.显示模块此模块主要是接受上个模块的编码信号,然后通过显示译码给数码管。源程序:library ieee;use ieee.std_logic_1164

17、.all; entity display_ck22 isport(d:in std_logic_vector(3 downto 0);q:out std_logic_vector(6 downto 0);end;architecture display_ck22_arc of display_ck22 isbeginprocess(d)begincase d iswhen "0000"=>q<="0111111"when "0001"=>q<="0000110"when "0010

18、"=>q<="1011011"when "0011"=>q<="1001111"when "0100"=>q<="1100110"when "0101"=>q<="1101101"when "0110"=>q<="1111101"when "0111"=>q<="0100101"when &quo

19、t;1000"=>q<="1111111"when "1001"=>q<="1101111"when others=>q<="0000000"end case;end process;end;电路图如图所示:图2-6-1显示模块仿真波形如图:图2-6-2显示模块仿真波形7.片选信号模块片选信号模块的作用就是接受片选模块信号,选择数码管。源程序:library ieee;use ieee.std_logic_1164.all;entity phs_ck22 isport(

20、d:in std_logic_vector(2 downto 0);q:out std_logic_vector(7 downto 0);end;architecture phs_ck22_arc of phs_ck22 isbeginprocess(d)begincase d iswhen "000"=>q<="00000001"when "001"=>q<="00000010"when "010"=>q<="00000100"when

21、"011"=>q<="00001000"when "100"=>q<="00010000"when "101"=>q<="00100000"when "110"=>q<="01000000"when "111"=>q<="10000000"when others=>q<="00000000"end case

22、;end process;end;电路图如图所示:图2-7-1片选信号模块仿真波形图:图2-7-2片选信号模块仿真波形三、顶层文件设计用元件例化语句写一个顶层文件library ieee;use ieee.std_logic_1164.all;entity ck22 is port(sig,clr,clk,door:in std_logic; alm:out std_logic; q:out std_logic_vector(6 downto 0); se:out std_logic_vector(7 downto 0);end ck22;architecture art of ck22 is

23、component count_ck22 port(clr,sig,door:in std_logic; alm:out std_logic; q3,q2,q1,q0,dang:out std_logic_vector(3 downto 0);end component;component fen_ck22 port(clk:in std_logic; q:out std_logic);end component;component lock_ck22 port(l:in std_logic; a4,a3,a2,a1,a0:in std_logic_vector(3 downto 0); q4

24、,q3,q2,q1,q0:out std_logic_vector(3 downto 0);end component;component ph_ck22 port(clk:in std_logic; q:out std_logic_vector(2 downto 0);end component;component bm_ck22 port(sel:in std_logic_vector(2 downto 0);a3,a2,a1,a0,dang:in std_logic_vector(3 downto 0); q:out std_logic_vector(3 downto 0);end co

25、mponent;component display_ck22 port(d:in std_logic_vector(3 downto 0); q:out std_logic_vector(6 downto 0);end component;component phs_ck22 port(d:in std_logic_vector(2 downto 0); q:out std_logic_vector(7 downto 0);end component;signal t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t12:std_logic_vector(3 downto 0);s

26、ignal t11:std_logic;signal t20:std_logic_vector(2 downto 0);beginu1:count_ck22 port map (clr=>clr,sig=>sig,door=>door,alm=>alm,q3=>t1,q2=>t2,q1=>t3,q0=>t4,dang=>t5);u2: fen_ck22 port map (clk=>clk,q=>t11);u3:lock_ck22 port map (l=>t11,a4=>t1,a3=>t2,a2=>t3

27、,a1=>t4,a0=>t5,q4=>t6,q3=>t7,q2=>t8,q1=>t9,q0=>t10);u4: ph_ck22 port map (clk=>clk,q=>t20);u5: bm_ck22 port map (sel=>t20,a3=>t6,a2=>t7,a1=>t8,a0=>t9,dang=>t10,q=>t12);u6: display_ck22 port map (d=>t12,q=>q);u7: phs_ck22 port map (d=>t20,q=>se);end architecture art;通过元件例化语句生成的元件图3-1总体仿真波形图:图3-2总体仿真波形图四.总体电路图图4-1总体电路图五.设计调试 1.软件调试与硬件调试 1.1软件调试 仿真时,打开软件Quartus II,建立工程文件,然后新建7个VHDL文件。保存后,编译,无误后及可以仿真了。 仿真时最好每个模块单独分开仿真,这样不容易出错。可以用默认的end time。对时钟频率clk不宜过小,最好不要小于1ns否则可能出错,导致无仿真图。 1.2硬件调试1、连接线路:选择主菜单“Assignments”中的“pin pl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论