软件: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
686