• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

Quartus数字频率计VHDL代码

06/11 09:21
686
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-23122G00521205.doc

共1个文件

名称:Quartus数字频率计VHDL代码

软件:Quartus

语言:VHDL

代码功能:

课题内容及要求:

本课题采用Intl公司(原 Altera) CycloneⅢ系列的EP3C8O或EP3C40型FPGA芯片,利用 LTE-SOPO-02FD型EDA/SOPC实验开发平台的资源,根据等精度测频原理,设计一个数字频率计,对脉冲进行频率测量,测得结果在数码管上显示,并设计相应的功能按键,能够在所测量的整个频段内部,均可实现相同精度的测量,即测量精度与频率无关。

按键功能包括(1)闸门按键(01S,1S和105)、(2)手动测量、(3)自动测量,在数码管上显示闸门档位扩展内容:16*16点阵显示学号和姓名。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. 管脚分配

5. RTL图

6. Testbench

7. 仿真图

整体仿真图

闸门模块仿真

频率计算模块

显示模块

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--频率计算模块
ENTITY frequency_calculate IS
   PORT (
      clk_in           : IN STD_LOGIC;--输入50M基准时钟
      reset_p          : IN STD_LOGIC;--复位信号
      signal_in        : IN STD_LOGIC;--待测频率输入
      doors_open       : IN STD_LOGIC;--闸门
      total_frequency  : OUT INTEGER--输出频率
   );
END frequency_calculate;
ARCHITECTURE behave OF frequency_calculate IS
   SIGNAL door_1s         : STD_LOGIC;
   SIGNAL CNT1            : INTEGER := 10;--基准时钟计数器
   SIGNAL CNT2            : INTEGER := 10;--待测频率计数器
   SIGNAL CNT1_buf        : INTEGER := 10;--基准时钟计数器寄存器
   SIGNAL CNT2_buf        : INTEGER := 10;--待测频率计数器寄存器
   SIGNAL CNT1_bufc       : INTEGER := 10;--基准时钟计数器寄存器
   SIGNAL CNT2_bufc       : INTEGER := 10;--待测频率计数器寄存器
SIGNAL total_frequency_int       : INTEGER := 10;
   SIGNAL door_1s_buf     : STD_LOGIC := '0';
   SIGNAL door_1s_negedge : STD_LOGIC;
BEGIN
    
   PROCESS (signal_in)
   BEGIN
      IF (signal_in'EVENT AND signal_in = '1') THEN
         door_1s<= doors_open;--闸门信号同步到signal_in信号下
      END IF;
   END PROCESS;
   PROCESS (clk_in)
   BEGIN
      IF (clk_in'EVENT AND clk_in = '1') THEN
         IF (door_1s = '1') THEN
            CNT1 <= CNT1 + 1;--基准时钟计数器
         ELSE
            CNT1 <= 0;
         END IF;
      END IF;
   END PROCESS;
   
   PROCESS (signal_in)
   BEGIN
      IF (signal_in'EVENT AND signal_in = '1') THEN
         IF (door_1s = '1') THEN
            CNT2 <= CNT2 + 1;--待测频率计数器
         ELSE
            CNT2 <= 0;
         END IF;
      END IF;
   END PROCESS;
   
   PROCESS (clk_in)
   BEGIN
      IF (clk_in'EVENT AND clk_in = '1') THEN
         door_1s_buf <= door_1s;
      END IF;
   END PROCESS;
   
   door_1s_negedge <= NOT(door_1s) AND door_1s_buf;--闸门信号下降沿
   PROCESS (clk_in)
   BEGIN
      IF (clk_in'EVENT AND clk_in = '1') THEN
         CNT1_buf <= CNT1;--基准频率计数
         CNT2_buf <= CNT2;--待测频率计数
      END IF;
   END PROCESS;
   
   
   PROCESS (clk_in)
   BEGIN
      IF (clk_in'EVENT AND clk_in = '1') THEN
         IF (door_1s_negedge = '1') THEN
            CNT1_bufc <= CNT1_buf;--基准频率计数
            CNT2_bufc <= CNT2_buf;--待测频率计数
         END IF;
      END IF;
   END PROCESS;
   
   --待测频率计算=CNT2_buf*5*10^7/CNT1_buf
   total_frequency <= (50000000 / CNT1_bufc) * CNT2_bufc;--单位Hz
   
END behave;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=422

  • 2-23122G00521205.doc
    下载

相关推荐