好文档 - 专业文书写作范文服务资料分享网站

基于QUARTUS的EDA课程设计数字频率计的仿真设计

天下 分享 时间: 加入收藏 我要投稿 点赞

图3.1 数字频率计的电路原理框图

3.3、设计思路及解决方案

设计方案自顶向下设计,底层模块分时基产生与测评时序控制电路模块、待测信号脉冲计数电路模块、译码显示与锁存控制电路模块。 (1)时基产生与测评时序控制电路模块:

设计频率记得关键是设计一个测频率控制信号发生器(即时基产生与测评时序控制电路模块),产生测量频率 控制时序。控制时钟信号clk取为1Hz,二分频后即可产生一个脉宽为1s的时钟control-en ,以此作为计数闸门信号。当control-en为高电平时,允许计数;当control-en的下降沿时,应产生一个锁存信号,将计数值保存起来;锁存数据后,在下一个control-en上升沿到来之前对计数器清零,为下次计数做准备。 (2)待测信号脉冲计数电路模块

待测信号脉冲计数电路模块就是计数器,计数器以待测信号作为时钟,在清零信号clr到来时,异步清零;使能信号en为高电平时允许计数,为低电平时禁止计数。

(3)锁存与译码显示控制电路模块

锁存器在control-en下降沿到来时,将计数器的计数值锁存,这样就不会因为周期性的清零信号而不断闪烁了。

译码显示电路将计数器测得的BCD码数字转换为七段晶体管LED显示(0——9),显示出十进制的数字结果。

4.分层次方案设计及代码描述

4.1.底层程序源码

1、时基产生与测频时序控制电路模块的VHDL源程序

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity control is

port (clk:in std_logic; --定义输入 rst,ena: out std_logic); --定义输出 end control;

architecture behv of control is begin

process (clk) --clk为敏感信号 variable cqi :std_logic_vector(2 downto 0); begin

if clk'event and clk='1' then --时钟上升沿 if cqi <1 then cqi:=cqi+1;ena<='1';rst<='0'; elsif cqi=1 then cqi :=(others =>'0'); ena<='0';rst<='1'; end if; end if;

end process; --进程结束 end behv;

2、待测信号脉冲计数电路模块的VHDL源程序

(1)10进制计数器:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entityt10 is

port (rst,fx,ena:in std_logic; --rst,fx,ena为输入端口 cout: out std_logic;

outy :out std_logic_vector(3 downto 0)); endt10;

architecture behv oft10 is begin

process (rst,ena,fx) --rst,fx,ena为敏感信号 variable cqi :std_logic_vector(3 downto 0); begin

if rst='1' then cqi :=(others =>'0'); --执行清零 elsif fx'event and fx='1' then --fx上升沿 if ena ='1' then --如果使能信号为1 if cqi < 9 then cqi:=cqi+1;cout<='0'; elsif cqi=9 then cqi :=(others =>'0'); cout<='1'; end if;

elsif ena='0' then cqi:=(others =>'0'); --使能信号为0 end if; end if; outy <=cqi;

end process; --进程结束 end behv;

(2)4位10进计数器:

library ieee;

use ieee.std_logic_1164.all; entityt10_4 is

port(fx,rst,ena:in std_logic; --定义输入

d:out std_logic_vector(15 downto 0)); --定义输出

end entity;

architecture one oft10_4 is componentt10

port (rst,fx,ena:in std_logic; cout: out std_logic;

outy :out std_logic_vector(3 downto 0)); end component;

signal e:std_logic_vector(3 downto 0); begin --元件例化

u1:cnt10 port map(fx=>fx,rst=>rst,ena=>ena,cout=>e(0),outy=>d(3 downto 0));

u2:cnt10 port map(fx=>e(0),rst=>rst,ena=>ena,cout=>e(1),outy=>d(7 downto 4));

u3:cnt10 port map(fx=>e(1),rst=>rst,ena=>ena,cout=>e(2),outy=>d(11 downto 8));

u4:cnt10 port map(fx=>e(2),rst=>rst,ena=>ena,cout=>e(3),outy=>d(15 downto 12));

end architecture one;

(3)锁存器的VHDL源程序

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity latch4 is

port(d:in std_logic_vector(15 downto 0); --d,ena,clk为锁存器输入 ena,clk:in std_logic;

q:out std_logic_vector(15 downto 0)); --q为锁存器输出 end latch4;

architecture one of latch4 is begin

process(clk,ena,d) --ck,d,,ena为敏感信号 variable cqi:std_logic_vector(15 downto 0); begin

if ena='0' then cqi:=cqi;

elsif clk'event and clk='1' then cqi:=d; end if; q<=cqi;

end process; --进程结束 end one;

(4)译码显示电路的VHDL源程序

library ieee ;

use ieee.std_logic_1164.all;

基于QUARTUS的EDA课程设计数字频率计的仿真设计

图3.1数字频率计的电路原理框图3.3、设计思路及解决方案设计方案自顶向下设计,底层模块分时基产生与测评时序控制电路模块、待测信号脉冲计数电路模块、译码显示与锁存控制电路模块。(1)时基产生与测评时序控制电路模块:设计频率记得关键是设计一个测频率控制信号发生器(即时基产生与测评时序控制电路模块),产生测量频率控制时序。控制
推荐度:
点击下载文档文档为doc格式
06mv27r7bu35m4y31ezc5v45r56fh100906
领取福利

微信扫码领取福利

微信扫码分享