数字频率计的设计 ——毕业设计论文.doc
EDA技术及应用实验报告姓名:XXX班级:XXX学号:XXXX实验/上机报告课程名称:EDA技术及应用专业:电气工程及其自动化成绩:指导教师:XXX姓名:XXX日期:2013/10/23项目序号:实验三学号:XXX时间:星期三项目名称:数字频率计的设计组号:地点:XXXX一、实验目的设计一个能测量方波信号的频率的频率计。二、实验环境 Quartus II 7.0 开发系统。三、实验内容1.设计一个能测量方波信号的频率的频率计。2.测量的频率范围是0999999Hz。3.结果用十进制数显示。四、实验过程设计思想:用于频率测量的方法有很多,频率测量的准确度主要取决于所测量的频率范围以及被测对象的特点。而测量所能达到的精度,不仅仅取决于作为标准使用的频率源的精度,也取决于所使用的测量设备和测量方法。所谓频率,就是周期性信号在单位时间(1s)内变化的次数。若在一定时间间隔T内测得这个周期性信号的重复变化次数为N,则其频率可表示为f=N/T 。数字频率计的主要功能是测量周期信号的频率。频率是单位时间(1S)内信号发生周期变化的次数。如果我们能在给定的1S 时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。 实验步骤:1.测频控制信号发生器的功能模块及仿真源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTL IS PORT(CLK:IN STD_LOGIC; -1 Hz测频控制时钟 TSTEN:OUT STD_LOGIC; -计数器时钟使能 CLR_CNT:OUT STD_LOGIC; -计数器清零 LOAD:OUT STD_LOGIC); -输出锁存信号END ENTITY TESTCTL;ARCHITECTURE ART OF TESTCTL IS SIGNAL DIV2CLK :STD_LOGIC;BEGINPROCESS ( CLK ) IS BEGINIF CLK'EVENT AND CLK= '1' THEN -1HZ 时钟二分频 DIV2CLK<=NOT DIV2CLK;END IF ;END PROCESS;PROCESS ( CLK,DIV2CLK ) ISBEGIN IF CLK= '0' AND DIV2CLK = '0' THEN -产生计数器清零信号 CLR_CNT<= '1' ELSE CLR_CNT<= '0' ; END IF; END PROCESS; LOAD<=NOT DIV2CLK; TSTEN<=DIV2CLK;END ARCHITECTURE ART;2.32位锁存器的功能模块及仿真源程序如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS PORT(LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0);END ENTITY REG32B;ARCHITECTURE ART OF REG32B IS BEGIN PROCESS ( LOAD, DIN ) IS BEGINIF LOAD 'EVENT AND LOAD= '1' THEN DOUT<=DIN; -锁存输入数据END IF;END PROCESS;END ARCHITECTURE ART;3. 十进制计数器的功能模块及仿真源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY CNT10 IS PORT (CLK:IN STD_LOGIC; -计数时钟信号 CLR:IN STD_LOGIC; -清零信号 ENA:IN STD_LOGIC; -计数使能信号 CQ:OUT INTEGER RANGE 0 TO 15;-4位计数结果输出 CARRY_OUT:OUT STD_LOGIC); -计数进位END ENTITY CNT10; ARCHITECTURE ART OF CNT10 IS SIGNAL CQI :INTEGER RANGE 0 TO 15; BEGIN PROCESS(CLK,CLR,ENA)IS BEGIN IF CLR= '1' THEN CQI<= 0; -计数器异步清零 ELSIF CLK'EVENT AND CLK= '1' THEN IF ENA='1' THEN IF CQI<9 THEN CQI<=CQI+1; ELSE CQI<=0; END IF; -等于9,则计数器清零 END IF; END IF; END PROCESS; PROCESS (CQI) IS BEGIN IF CQI=9 THEN CARRY_OUT<= '1' -进位输出 ELSE CARRY_OUT<= '0'END IF; END PROCESS; CQ<=CQI;END ARCHITECTURE ART;4.8位十进制数字频率计的功能仿真LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY CNT10 IS PORT (CLK:IN STD_LOGIC; -计数时钟信号 CLR:IN STD_LOGIC; -清零信号 ENA:IN STD_LOGIC; -计数使能信号 CQ:OUT INTEGER RANGE 0 TO 15;-4位计数结果输出 CARRY_OUT:OUT STD_LOGIC); -计数进位END ENTITY CNT10;ARCHITECTURE ART OF CNT10 IS SIGNAL CQI :INTEGER RANGE 0 TO 15; BEGIN PROCESS(CLK,CLR,ENA)IS BEGIN IF CLR= '1' THEN CQI<= 0; -计数器异步清零 ELSIF CLK'EVENT AND CLK= '1' THEN IF ENA='1' THEN IF CQI<9 THEN CQI<=CQI+1; ELSE CQI<=0; END IF; -等于9,则计数器清零 END IF; END IF; END PROCESS; PROCESS (CQI) IS BEGIN IF CQI=9 THEN CARRY_OUT<= '1' -进位输出 ELSE CARRY_OUT<= '0'END IF; END PROCESS; CQ<=CQI;END ARCHITECTURE ART;LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS PORT(LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0);END ENTITY REG32B;ARCHITECTURE ART OF REG32B IS BEGINPROCESS ( LOAD, DIN ) ISBEGINIF LOAD 'EVENT AND LOAD= '1' THEN DOUT<=DIN; -锁存输入数据 END IF;END PROCESS;END ARCHITECTURE ART;待添加的隐藏文字内容2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTL IS PORT(CLK:IN STD_LOGIC; -1 Hz测频控制时钟 TSTEN:OUT STD_LOGIC; -计数器时钟使能 CLR_CNT:OUT STD_LOGIC; -计数器清零 LOAD:OUT STD_LOGIC); -输出锁存信号END ENTITY TESTCTL;ARCHITECTURE ART OF TESTCTL IS SIGNAL DIV2CLK :STD_LOGIC;BEGINPROCESS ( CLK ) IS BEGINIF CLK'EVENT AND CLK= '1' THEN -1 HZ时钟二分频DIV2CLK<=NOT DIV2CLK;END IF ;END PROCESS;PROCESS ( CLK,DIV2CLK ) ISBEGIN IF CLK= '0' AND DIV2CLK = '0' THEN -产生计数器清零信号 CLR_CNT<= '1' ELSE CLR_CNT<= '0' ; END IF; END PROCESS; LOAD<=NOT DIV2CLK; TSTEN<=DIV2CLK;END ARCHITECTURE ART;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FREQ8 IS PORT(FSIN:IN STD_LOGIC; CLK:IN STD_LOGIC; DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0);END ENTITY FREQ8;ARCHITECTURE ART OF FREQ8 ISCOMPONENT CNT10 IS -待调用的有时钟使能的十进制计数器端口定义 PORT(CLK,CLR,ENA:IN STD_LOGIC; CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT:OUT STD_LOGIC);END COMPONENT CNT10;COMPONENT REG32B IS-待调用的32位锁存器端口定义 PORT(LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0);END COMPONENT REG32B;COMPONENT TESTCTL IS -待调用的测频控制信号发生器端口定义 PORT(CLK:IN STD_LOGIC; TSTEN:OUT STD_LOGIC; CLR_CNT:OUT STD_LOGIC; LOAD:OUT STD_LOGIC); end component TESTCTL;SIGNAL SE,SC,SL:STD_LOGIC;SIGNAL S1,S2,S3,S4,S5,S6,S7,S8:STD_LOGIC;SIGNAL SD:STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINU0:TESTCTL PORT MAP(CLK=>CLK,TSTEN=>SE, CLR_CNT=>SC,LOAD=>SL);U1:CNT10 PORT MAP(CLK=>FSIN,CLR=>SC,ENA=>SE, CQ=>SD (3 DOWNTO 0),CARRY_OUT=>S1); -名字关联 U2:CNT10 PORT MAP(CLK=>S1,CLR=>SC,ENA=>SE, CQ=>SD (7 DOWNTO 4),CARRY_OUT=>S2);U3:CNT10 PORT MAP(S2,SC,SE,SD (11 DOWNTO 8 ),S3);-位置关联U4:CNT10 PORT MAP(S3,SC,SE,SD (15 DOWNTO 12),S4);U5:CNT10 PORT MAP(S4,SC,SE,SD (19 DOWNTO 16),S5);U6:CNT10 PORT MAP(S5,SC,SE,SD (23 DOWNTO 20),S6);U7:CNT10 PORT MAP(S6,SC,SE,SD (27 DOWNTO 24),S7);U8:CNT10 PORT MAP(S7,SC,SE,SD (31 DOWNTO 28),S8);U9:REG32B PORT MAP(LOAD=>SL,DIN=>SD(31 DOWNTO 0),DOUT=>DOUT);END ARCHITECTURE ART;仿真图五、实验总结这次课程设计中,我不仅复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力,并从根本上了解了VHDL语言的一些基本用法,应用了原来不会或者不熟练的句型如if句,case句等,也学会了一些基本功能的实现方法,如分频,状态控制等等,从另外一个角度重新审视了上学期完全从硬件角度出发的电路设计,明白了软硬件之间的交互。通过这个课题,对系统框图、逻辑流程图、状态转移图的设计有了一定的了解。也懂得了系统的前期设计对于后续的编程和调试的重要性。本课题采用了自下而上的设计方法,根据系统对硬件的要求,画出系统控制流程图;然后根据控制流程图,分化模块,利用模块实现功能;后进行仿真和调试。每个成功的背后都要面对无数次的失败,这次课设也不例外。虽然遇到不少问题与困难,但通过老师以及同学的帮助,都一一得到顺利地解决。我想这必定会为将来的实践积累宝贵的经验和教训。总之,这次课设我们都受益匪浅。整个过程氛围浓厚,本人也态度十分认真,积极向老师和同学求教并在此过程中收获良多,能够进一步了解和使用一门与硬件直接打交道的基本语言对我们将来的学习和工作都会十分有益。