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

EDA技术-VHDL-5.10 采用测频法的数字频率计程序设计与仿真

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

5.10 采用测频法的数字频率计程序设计与仿真实验

1.实验目的

掌握测频法数字频率计的基本原理,设计VHDL程序实现其基本功能。 2.实验原理

系统组成的框图如图5.10.1所示,图中从左至右包括时基产生与测频时序控制电路模块,以及待测信号脉冲计数电路和锁存与译码显示控制电路模块。

FPGA 基准时钟 分频 闸门 复位信号 十进制 计数器

数据 锁存 动态 显示 译码 显 示 图5.10.1 系统组成框图

(1)控制模块

控制十进制计数器的计数及锁存器的工作,当计数器计数时,锁存器锁存前一次的计数状态,当计数器停止计数则锁存器接收计数器的计数数据,因此控制模块控制计数器与锁存器交替工作。

(2)计数器

由于需要使用LED显示频率,所以采用的是10进制可清零、使能功能的计数器模块 (3)锁存模块

接收四个计数器传输的信号进行锁存。 (4)译码显示模块

一共有6个LED需要显示,所以需要6个译码模块。 3.实验内容

(1)完成各基本模块的设计,并对各模块进行功能仿真,得到仿真波形。

(2)设计顶层文件,将各模块结合在一起,构成频率计整体,并进行仿真,检查程序功能是否完善。 (3)对设计进行引脚配置并下载。 4.实验预习与思考

(1)了解测频原理

197

(2)锁存模块在该系统的必要性。 (3)编写顶层设计文件时应当注意的问题。 5.程序设计与仿真 (1)程序设计

①顶层文件(freq_top.vhd)源程序如下:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity freq_top is

Port (CLKIN,RESET,QING1: IN STD_LOGIC; --控制信号

DQ1,DQ2,DQ3,DQ4 : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);

--4位十进制数输出

COUTT : OUT STD_LOGIC);--进位输出 end freq_top;

architecture Behavioral of freq_top is

COMPONENT TESTCTL —元件说明 PORT ( rst, clkk : in std_logic;

cnt_en, rst_cnt, load : out std_logic); END COMPONENT;

COMPONENT CNT10

PORT ( CLK,RST,EN : IN STD_LOGIC;

CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END COMPONENT; COMPONENT REG4B

Port ( load, QING : in std_logic;

din : in std_logic_vector(3 downto 0); dout : out std_logic_vector(3 downto 0)); END COMPONENT;

COMPONENT DECL7S

PORT (A : IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END COMPONENT;

--定义中间信号SIGNAL N : STD_LOGIC_VECTOR (24 DOWNTO 0); --秒分频 SIGNAL M : STD_LOGIC_VECTOR (11 DOWNTO 0); --被测信号

198

SIGNAL FIN,F1HZ,EN_S,RST_S,LOAD_S : STD_LOGIC;

SIGNAL CQ1,CQ2,CQ3,CQ4 : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL COUT1,COUT2,COUT3 : STD_LOGIC;

SIGNAL DOUT1,DOUT2,DOUT3,DOUT4 : STD_LOGIC_VECTOR (3 DOWNTO 0);

begin

PROCESS(CLKIN,RESET) BEGIN

IF RESET='1' THEN N<=(OTHERS=>'0'); M<=(OTHERS=>'0'); ELSIF(CLKIN'EVENT AND CLKIN='1')THEN N<=N+1; M<=M+1; END IF; END PROCESS; F1HZ<=N(24); FIN<=M(11);

--元件例化

U1:TESTCTL PORT MAP (RST=>RESET,CLKK=>F1HZ,CNT_EN=>EN_S,

RST_CNT=>RST_S, LOAD=>LOAD_S);

U2 : CNT10 PORT MAP (FIN, RST_S, EN_S, CQ1, COUT1); U3 : CNT10 PORT MAP (COUT1, RST_S, EN_S, CQ2, COUT2); U4 : CNT10 PORT MAP (COUT2, RST_S, EN_S, CQ3, COUT3); U5 : CNT10 PORT MAP (COUT3, RST_S, EN_S, CQ4, COUTT); U6 : REG4B PORT MAP (LOAD_S, QING1, CQ1, DOUT1); U7 : REG4B PORT MAP (LOAD_S, QING1, CQ2, DOUT2); U8 : REG4B PORT MAP (LOAD_S, QING1, CQ3, DOUT3); U9 : REG4B PORT MAP (LOAD_S, QING1, CQ4, DOUT4); U10 : DECL7S PORT MAP (DOUT1, DQ1); U11 : DECL7S PORT MAP (DOUT2, DQ2); U12 : DECL7S PORT MAP (DOUT3, DQ3); U13 : DECL7S PORT MAP (DOUT4, DQ4);

end Behavioral;

②十进制计数器模块(cnt10.vhd)源程序如下:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity cnt10 is

Port (CLK,RST,EN : IN STD_LOGIC;

CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); end cnt10;

199

architecture Behavioral of cnt10 is

begin

PROCESS(CLK, RST, EN)

VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0):=\ BEGIN

IF RST = '1' THEN CQI := (OTHERS =>'0'); ELSIF CLK'EVENT AND CLK='1' THEN IF EN='1' THEN

IF CQI < \ ELSE CQI :=(OTHERS=>'0'); END IF; END IF; END IF;

IF CQI = \ ELSE COUT<= '0'; END IF; CQ <= CQI; END PROCESS;

end Behavioral;

③四位锁存器模块(reg4b.vhd)源程序如下: library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity reg4b is

Port ( load : in std_logic; qing : in std_logic; din : in std_logic_vector(3 downto 0); dout : out std_logic_vector(3 downto 0)); end reg4b;

architecture Behavioral of reg4b is

begin

process(load,qing,din) begin

if qing = '1' then dout <= \

elsif load'event and load = '1' then dout <= din ; end if ; end process;

200

end Behavioral;

④控制模块(testctl.vhd)源程序如下:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity testctl is

Port ( rst, clkk : in std_logic;

cnt_en, rst_cnt, load : out std_logic); end testctl;

architecture Behavioral of testctl is signal div2clk : std_logic; begin

process( clkk ,rst) begin

if rst = '1' then div2clk <= '0' ;

elsif clkk'event and clkk = '1' then div2clk <= not div2clk; end if; end process;

process ( clkk, div2clk ) begin

if clkk = '0' and div2clk='0' then rst_cnt <= '1'; else rst_cnt <= '0';

end if; end process;

load <= not div2clk; cnt_en <= div2clk;

end Behavioral; (2)仿真

① 四位锁存器仿真结果如图5.10.2所示。由图中可知,当qing=1时清零,即输出dout=0000,而

当qing=0时,将输入din的信号锁存,即输出信号与输入信号相同。

图5.10.2四位锁存器模块仿真波形

② 顶层文件仿真结果如图5.10.3所示。图中的仿真结果仅用于表明程序设计正确,是经过调小程序

201

EDA技术-VHDL-5.10 采用测频法的数字频率计程序设计与仿真

5.10采用测频法的数字频率计程序设计与仿真实验1.实验目的掌握测频法数字频率计的基本原理,设计VHDL程序实现其基本功能。2.实验原理系统组成的框图如图5.10.1所示,图中从左至右包括时基产生与测频时序控制电路模块,以及待测信号脉冲计数电路和锁存与译码显示控制电路模块。FPGA基准时钟分频闸门复位
推荐度:
点击下载文档文档为doc格式
6phh093huw2xzhu2kzn0175lm26knl009vt
领取福利

微信扫码领取福利

微信扫码分享