1、EDA课程设计EDA技术使用教程课程设计报告题目名称: 设计一个1HZ9999HZ的频率计 学生姓名: 学 号: 专业年级: 指导教师: 时 间: 2014年12月28日 目 录一 设计任务与要求 1二 设计思路 2三 频率计设计原理 3四 频率计的各个设计模块 44.1. 频率产生器lpm_counter0: 44.2. 测频控制信号发生器testpl: 64.3. 十进制计数器cnt10: 74.4. 16位锁存器reg16b: 94.5. 数码管控制器ledcom: 104.6. 译码器ymq: 124.7 元件声明及例化 14五 仿真结果 16六 心得体会 17七 参考文献 181设计
2、任务与要求设计一个1HZ9999HZ的频率计,需满足一下条件:1)待测信号为方波信号,且已进行量化,1表示高电平,0表示低电平,占空比不定;2)提供一个1HZ的信号,去控制打开被检测信号的与门,使计数器在一秒钟内计数;3)数码管显示的就是被检测信号的频率,以十进制显示;4)系统时钟10MHz2设计思路数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器.它的基本功能是测量方波信号及其他各种单位时间内变化的物理量。本数字频率计采用自顶向下的设计思想,通过闸门提供的1s闸门时间对被测信号进行计数及测出的被测信号的频率,测出的频率再通过译码器译码后输出给显示器显示。我分为以下的六个部分来完成这
3、次的设计:1) 频率产生器lpm_counter0:2) 测频控制信号发生器testpl:3) 十进制计数器cnt10:4) 16位锁存器reg16b5) 数码管控制器ledcom:6) 译码器ymq:在实验仿真电路中clk端口用实验箱的输出为标准时基信号,sig端口接入被测的信号,clr端口连接一个电平开关,将电平开关-置高电平,输出端接好LED显示器就可以观察被测信号的频率了。3频率计设计原理在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速
4、,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。数字式频率计的测量原理有两类:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法即测周期法,如周期测频法。直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数器阀门的时间长短在达到不同的测量精度;间接测频法适用于低频信号的频率测量。 在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率
5、测量的重要手段之一。数字式频率计的测量原理有两类:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法即测周期法,如周期测频法。直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数器阀门的时间长短在达到不同的测量精度;间接测频法适用于低频信号的频率测量。本设计中使用的就是直接测频法,即用计数器在计算1s内输入信号周期的个数,其测频范围为1Hz9999H。4频率计的各个设计模块4.1. 频率产生器lpm_counter0:有一50MHz的时钟输入端clk,经过分频处理后从输出端q26.0输出27种频率信号,从中选出三个不同频率的信号:q
6、25为1Hz输入testpl的clk端,q13为测试信号输入低位计数器的cnt10的clk端,q17为数码管显示选择的扫描信号输入数码管控制器的clk端。library ieee;use ieee.std_logic_1164.all;library lpm;use lpm.lpm_components.all;entity lpm_counter0 is port(clock: in std_logic ; q: out std_logic_vector (26 downto 0);end lpm_counter0;architecture syn of lpm_counter0 is si
7、gnal sub_wire0 : std_logic_vector (26 downto 0); component lpm_counter generic ( lpm_direction : string; lpm_port_updown : string; lpm_type : string; lpm_width : natural ); port(clock : in std_logic ; q : out std_logic_vector (26 downto 0); end component;begin q up, lpm_port_updown = port_unused, lp
8、m_type = lpm_counter, lpm_width = 27 ) port map ( clock = clock, q = sub_wire0 );end syn;4.2. 测频控制信号发生器testpl:输入端clk收到1Hz信号后,其输出端testen控制各个cnt10的使能,clr_cnt控制各个cnt10的清零,load控制锁存器内数据的输出。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity testpl is port(clk:in std_logic;-1Hz
9、信号 tsten:out std_logic;-计数器使能信号 clr_cnt:out std_logic;-计数器清零信号 load:out std_logic);-锁存器输出控制信号end testpl;architecture art of testpl is signal div2clk:std_logic;begin process(clk) begin if clkevent and clk=1then div2clk=not div2clk; -div2clk为2Hz end if ; end process; process (clk ,div2clk) begin if( c
10、lk=0and div2clk=0)then clr_cnt=1; -当div2clk与clk同时为零时计数器清零 else clr_cnt=0; -当div2clk处于的高电平时计数器计数 end if; end process; load=not div2clk; -锁存器输出与计数器使能信号反相 tsten=div2clk; end art;4.3. 十进制计数器cnt10:有一时钟使能输入端en,用于锁定计数值。当高电平1时计数允许计数,低电平0时禁止计数。多位十进制计数器时,最低位的计数器的clk端输入被测信号,各计数器的进位输出端c10将信号输到下一位十进制计数器cnt10的输入端
11、clk,最高位十进制计数器cnt10的进位输出端c10不处理。代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 is port(clk,clr,en: in std_logic; -clk:计数器时钟,clr:清零信号,en:计数使能信号 q: out std_logic_vector(3 downto 0);-q:4位计数结果输出 c10: out std_logic);-计数进位end cnt10;architecture art of cnt10 issigna
12、l cqi: std_logic_vector(3 downto 0);begin process (clk,clr) begin if clr=1 then cqi=0000; -当输入的clr_cnt为低电平0时清零 elsif clkevent and clk=1 then if en=1 then -当输入的tesen为高电平1时允许计数 if (cqi9) then cqi=cqi+1; else cqi=0000; -等于9则计数器清零 end if; -当输入的tesen为低电平0时禁止计数,锁定计数值 end if; end if;end process;-产生进位proces
13、s(cqi) begin if cqi=1001 then c10=1; -当加的9时产生进位输出 else c10=0; end if;end process;q=cqi;end art;4.4. 16位锁存器reg16b: 将已有16 位bcd码存在于此模块的输入口din15.0,在信号load的上升沿后即被锁存到寄存器reg16b的内部,并由reg16b的输出端dout15.0输出,设置锁存器的好处是,数码管上显示的数据稳定,不会由于周期性的清零信号而不断闪烁。 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_uns
14、igned.all;entity reg16b is port (load: in std_logic;-输出锁存控制信号 din: in std_logic_vector(15 downto 0); dout: out std_logic_vector(15 downto 0);end reg16b;architecture art of reg16b isbegin process(load,din) begin if loadevent and load=1then -load为高电平时teten为低电平,计数器禁止 dout=3 then comclk =00; else comclk
15、 com com com comNULL; end case; end process;-对应数码管的输出 process(comclk,datain) begin case comclk is when 11= dataout dataout dataout dataoutNULL; end case; end process;end art;4.6. 译码器ymq:输入端d_in3.0将接收BCD码信号,译码后输出端d_out7.0输出8为7段数码管信号,其中输出的第8位均为高电平1可以使四个数码管的小数点不显示。经译码器的处理输出后数码管显示相应的数值。library IEEE;use
16、IEEE.std_logic_1164.all;entity ymq is port( d_in: in std_logic_vector(3 downto 0); -数码管控制器输入四位信号 d_out: out std_logic_vector(7 downto 0); -输出8位信号 end ymq; -第8位d_out7为逗号architecture art of ymq isbegin process(d_in) begin case d_in is -第8位为1高电平逗号不显示 when 0000 = d_out d_out d_out d_out d_out d_out d_ou
17、t d_out d_out d_outNULL; end case; end process;end art; 4.7 元件声明及例化:library ieee;use ieee.std_logic_1164.all;entity lx is port(clk: in std_logic; led: out std_logic_vector(7 downto 0); ledc: out std_logic_vector(3 downto 0);end lx;architecture art of lx iscomponent lpm_counter0 -待调用的频率生成器端口定义PORT (c
18、lock: IN STD_LOGIC ; q: OUT STD_LOGIC_VECTOR (26 DOWNTO 0) );end component;-十进制计数器component cnt10 -待调用的有时钟使能的十进制计数器端口定义 port(clk,clr,en: in std_logic; q: out std_logic_vector(3 downto 0); c10: out std_logic);end component;-16位锁存器component reg16b -待调用的32位锁存器端口定义 port (load: in std_logic; din: in std_
19、logic_vector(15 downto 0); dout: out std_logic_vector(15 downto 0);end component;-测频控制器component testpl -待调用的测频控制信号发生器端口定义 port(clk:in std_logic; tsten:out std_logic; clr_cnt:out std_logic; load:out std_logic);end component;-数码管选择器component ledcom -待调用的数码管选择器端口定义port(clk:in std_logic; datain: in std
20、_logic_vector(15 downto 0); dataout: out std_logic_vector(3 downto 0); com: out std_logic_vector(3 downto 0);end component;-译码器component ymq -待调用的译码器端口定义 port(d_in: in std_logic_vector(3 downto 0); d_out: out std_logic_vector(7 downto 0);end component; signal clk1,clk2,clk3: std_logic;-clk1为1Hz信号,cl
21、k2为被测信号,clk3为数码管扫描信号signal tsten,clr,load: std_logic; signal c1,c2,c3,c4: std_logic; signal qout,rout: std_logic_vector(15 downto 0); signal datao: std_logic_vector(3 downto 0); begin u0:testpl port map(clk1,tsten,clr,load); u1:cnt10 port map(clk2,clr,tsten,qout(3 downto 0),c1); u2:cnt10 port map(c1
22、,clr,tsten,qout(7 downto 4),c2); u3:cnt10 port map(c2,clr,tsten,qout(11 downto 8),c3); u4:cnt10 port map(c3,clr,tsten,qout(15 downto 12),c4); u5:reg16b port map(load,qout(15 downto 0),rout); u6:ledcom port map(clk3,rout,datao,ledc); u8:ymq port map(datao,led); u9:lpm_counter0 port map(clk,q(25)=clk1,q(15)=clk2,q(17)=clk3);end art;5仿真结果5.1 .设计的原理框图如下所示:5.2 频率计原理图5.3 仿真结果
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1