课程设计论文基于CPLD的简易数字频率计.doc
一设计总体思路,基本原理和框图1.1.设计总体思路数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。随着复杂可编程逻辑器件(CPLD)的广泛应用,以EDA工具作为开发手段,运用VHDL语言。将使整个系统大大简化。提高整体的性能和可靠性。本文用VHDL在CPLD器件上实现一种8 b数字频率计测频系统,能够用十进制数码显示被测信号的频率,不仅能够测量正弦波、方波和三角波等信号的频率,而且还能对其他多种物理量进行测量。具有体积小、可靠性高、功耗低的特点。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分频电路模块的仿真 打开quartus II后,建立工程文件,然后输入程序,保存后编译。编译无错误既可以生成电路图。其仿真图如图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。图中显示结果为100111 0111111 1101101 为305.本电路为20分频。结果应为300,考虑延时误差,测量结果正确。 3.9 软件调试与硬件调试(a)软件调试 仿真时,打开软件puartus II,建立工程文件,然后输入程序。保存后,编译,无误后及可以仿真了。 进入界面后,先点击edict菜单,设置 end time ,一般设为10ms,由于软件的缘故,end time不要设的太小,否则延时会很大. 对总电路图仿真的时候也出现了一个问题,一开始我们怎么也仿真不出来,后来才知道总图仿真的时候也要建立工程文件,而且要将所有的模块文件加载到总电路图的文件夹中。(b)硬件调试 软件仿真玩后,就的与硬件相连。在这之前的先设置好管脚。点击“assingmengt”菜单的“pin planner”按照试验箱中的管脚设置好,确定后编译。关闭puartus软件,将试验箱接入电脑,按提示安装。重新打开软件,点击菜单“tools”中的”granmmer”确定接好USB接口。将实验箱的线接好后就可以运行,看结果与仿真是否相符.点击“start”将清零信号置低电平,显示器显示1 0000的字样。将被侧信号与时钟信号设置合理的数值,将清理信号置为高电平。显示器中就能显示器分频数值。(c)调试结果 1.清零信号为低电平时候的显示结果如图16. 图16 清零信号为低电平时的结果 图中为清零信号为低电平时,显示为0000,前面的1为在这种情况下只需要一个计数器工作。2.清零信号置为高电平后的结果如下图图17. 图17 清零信号为高电平时的显示结果 图中显示的为将被测信号为时钟信号的320倍的显示结果。显示为0320.前面的3为需要用3个计数器工作。四编程下载 4.1.分频模块的程序library ieee;use ieee.std_logic_1164.all;entity fen isport(clk:in std_logic; q:out std_logic);end fen;architecture fen_arc of fen isbeginprocess(clk)variable cnt:integer range 0 to 9;variable x:std_logic;beginif 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 process;end fen_arc;4.2.片选信号模块的程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sel isport(clk:in std_logic; q:out std_logic_vector(2 downto 0);end sel;architecture sel_arc of sel isbeginprocess(clk)variable cnt:std_logic_vector(2 downto 0);beginif clk'event and clk='1' then cnt:=cnt+1;end if;q<=cnt;end process;end sel_arc4.3.计数器模块的程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity corna isport(clr,sig,door:in std_logic; alm:out std_logic; q3,q2,q1,q0,dang:out std_logic_vector(3 downto 0);end corna;architecture corn_arc of corna 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"c0:="0000" elsif door='0' then c3:="0000"c2:="0000"c1:="0000"c0:="0000" elsif door='1' then if c0<"1001" thenc0:=c0+1; elsec0:="0000"if c1<"1001" thenc1:=c1+1;else c1:="0000"if c2<"1001" thenc2:=c2+1;elsec2:="0000"if c3<"1001" thenc3:=c3+1;elsec3:="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/="0000" then q3<="0000"q2<=c2;q1<=c1;q0<=c0;dang<="0011" elsif c1/="0000" thenq3<="0000"q2<="0000"q1<=c1;q0<=c0;dang<="0010" else q3<="0000"q2<="0000"q1<="0000"q0<=c0;dang<="0001"end if; end if;end process; end corn_arc;4.4.锁存器模块的程序library ieee;use ieee.std_logic_1164.all;entity lock isport(l:in std_logic; a4,a3,a2,a1,a0:in std_logic_vector(3 downto 0); q4,q3,q2,q1,q0:out std_logic_vector(3 downto 0);end lock;architecture lock_arc of lock isbegin process(l) variable t4,t3,t2,t1,t0:std_logic_vector(3 downto 0);beginif l'event and l='0' thent4:=a4;t3:=a3;t2:=a2;t1:=a1;t0:=a0;end if;q4<=t4;q3<=t3;q2<=t2;q1<=t1;q0<=t0;end process;end lock_arc;4.5.译码信号模块的程序library ieee;use ieee.std_logic_1164.all;entity ch isport(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 ch;architecture ch_arc of ch 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<="1111"end case;end process;end ch_arc;4.6.片选模块的程序library ieee;use ieee.std_logic_1164.all;entity ym isport(d:in std_logic_vector(2 downto 0); q:out std_logic_vector(7 downto 0);end ym;architecture ym_arc of ym isbeginprocess(d)begincase d iswhen "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"when others=>q<="00000000"end case;end process;end ym_arc;4.7.译码器模块的程序library ieee;use ieee.std_logic_1164.all;entity disp isport(d:in std_logic_vector(3 downto 0); q:out std_logic_vector(6 downto 0);end disp;architecture disp_arc of disp isbeginprocess(d)begincase d iswhen "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"when others=>q<="0000000"end case;end process;end disp_arc;五总结与体会 经过两个星期的实习,过程曲折可谓一语难尽。在此期间我也失落过,也曾一度热情高涨。从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。 生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义,我才意识到老一辈测绘为我们的社会付出。我想说,测绘确实有些辛苦,但苦中也有乐,在如今物欲很流的世界,很少有机会能与大自然亲密接触,但我们可以,而且测绘也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契。 同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们实习成功的一项非常重要的保证。而这次实习也正好锻炼我们这一点,这也是非常宝贵的。 对我而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次实习必将成为我人生旅途上一个非常美好的回忆! 六附录 图18 总电路图七.参考文献1. 康华光主编.电子技术基础(数字部分),高等教育出版社。2. 阎石主编. 电子技术基础(数字部分),清华大学出版社。3. 陈大钦主编,电子技术基础实验,高等教育出版社。4. 彭介华主编,电子技术课程设计指导,高等教育出版社。5. 张 原编著,可编程逻辑器件设计及应用,机械工业出版社。6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。7. 刘洪喜,陆颖编著. VHDL电路设计实用教程 清华大学出版社22