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