8位频率计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA设计报告
------八位频率计
姓名成绩
班级学号
日期地点
一.试验内容
在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更加重要。

通过运用Verilog HDL语言,实现8位数字频率计,并利用Quartus II 6.0集成开发环境进行编辑、综合、波形仿真,并下载到FPGA器件中,经实际电路测试,该系统性能可靠。

本次EDA试验八位十进制频率计主要是通过Quartus II 6.0编写vhdl代码通过仿真调试后,下载到GW48-SOC+EP20K200试验箱完成硬件测试。

二.试验目的
通过EDA的试验设计,加深我们对FPGA的了解,熟悉FPGA的工作原理和试验环境,知道FPGA的开发流程,熟悉各种软件如Quartus II 6.0的使用。

通过设计小型试验项目学会仿真和硬件测试的基本方法。

三.试验原理,设计思路
8位十进制数据显示频率计设计
在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。

测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

数字式频率计的测量原理有两类:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法即测周期法,如周期测频法。

直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数器阀门的时间长短在达到不同的测量精度;间接测频法适用于低频信号的频率测量,本设计中使用的就是直接测频法,即用计数器在计算1S内输入信号周期的个数。

数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。

随着现场可编程门阵列FPGA的广泛应用,以EDA工具作为开发手段,运用VHDL等硬件描述语言语言,将使整个系统大大简化,提高了系统的整体性能和可靠性。

具体设计方法:
本实验通过频率控制模块,将时钟信号clkk 两分频后分别取反赋给所存使能和计数是能端,这样计数完成后就能实现数据的锁存,当计数使能和锁存使能同时无效,基都出现低电平的时候,计数复位信号有效,将计数器清零,从新开始计数。

实测的内容有2项:
1.能否完成正常的测频工作,即输入信号的频率与显示的数据
是否一致,稳定性是否好;
2. 被测信号能达到的频率上限是多少,与计算机的时序分析结果
的一致性如何。

实测时CLK1的频率必须为 1Hz。

四.底层文件仿真图
十进制计数器模块软件仿真图:
锁存器软件仿真图
频率控制模块软件仿真图:
最终程序仿真图:
结果输出:
F1hz=1us ,ftest=250ns
F1hz=1us ,ftest=50ns
管脚锁存:
五.源代码
--------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------freq.bdf--------------------------------------------------------------
---------------------------------顶层设计采用图形画界面模块-----------------------------------------------
------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------cnt.vhd----------------------------------------------------------------
---------------------------------------------- 十进制计数器模块-----------------------------------------------
------------------------------------------------------------------------------------------------------------------------ LIBRARY ieee;
USE ieee.std_logic_1164.all; --打开库
ENTITY cnt IS --端口定义
PORT
(
clk,rst,ena : IN STD_LOGIC; --clk为时钟脉冲,rst为复位信号,ena使能
outy : OUT integer range 0 to 9; --计数输出端口
COUT : OUT STD_LOGIC --计数进位输出端口);
END Cnt; --实体定义结束
ARCHITECTURE a OF Cnt IS --结构体开始
BEGIN
PROCESS (clk,RST,ena) --过程定义,敏感表
VARIABLE CQI: integer range 0 to 9; --定义进程里的局部变量,整型0到9 BEGIN
IF RST = '1' THEN CQI:=0; --如果复位信号高电平,这将cqi清零
ELSIF (clk'EVENT AND clk = '1') THEN --复位信号无效,clk上升沿到来就执行下一步IF ena = '1' THEN --如果ena高,则cqi加1
IF CQI<9 THEN CQI:=CQI+1; -- 如果ena高且cqi小于9,则cqi加1
ELSE CQI:=0; --否则cqi置零
END IF; --结束if语句
END IF; --结束if语句
END IF; --结束if语句
IF CQI=9 THEN COUT<='1'; --若
ELSE COUT<='0'; --
END IF;
outy<=CQI; --将进程局部变量赋值给outy输出端口END PROCESS; --结束进程
END a; --结束结构体
------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------reg4b.vhd-----------------------------------------------------------
---------------------------------------------- 锁存器模块-----------------------------------------------
------------------------------------------------------------------------------------------------------------------------ library ieee;
use ieee.std_logic_1164.all; --打开库
entity reg4b is --定义实体
port(load:in std_logic; --信号锁存
din:in std_logic_vector(3 downto 0); --信号输入端口
dout:out std_logic_vector(3 downto 0));--锁存输出
end reg4b; --实体定义完毕
architecture two of reg4b is --定义结构体
begin
process(load,din) --定义进程及其敏感表
begin
if load'event and load='1' then --锁存有效,则将输入给输出显示
dout<=din;
end if; --否则不改变输出
end process; --进程结束
end two;
------------------------------------------------------------------------------------------------------------------------ -----------------------------------------------testctl.vhd----------------------------------------------------------
---------------------------------------------- 频率控制模块----------------------------------------
------------------------------------------------------------------------------------------------------------------------ library ieee;
use ieee.std_logic_1164.all; --打开标准库
use ieee.std_logic_unsigned.all; --打开ussigned库
entity testctl is --定义实体
port(clkk:in std_logic; --输入时钟端口定义
cnt_en,rst_cnt,load:out std_logic); --cnt使能端口,rst
end testctl; --结构体结束
architecture one of testctl is --结构体开始
signal div2clk:std_logic; --2分频信号
begin
process(clkk) --2分频进程
begin
if clkk'event and clkk='1' then --时钟上升沿到来
div2clk<=not div2clk; --2分频
end if; --if时序结束
end process; --2分频进程结束
process(clkk,div2clk) --计数复位控制进程,div2clk为计数使能信号缓冲单元
begin
if clkk='0' and div2clk='0' then --时钟信号低电平,2分频信号低电平,则计数复位置一
rst_cnt<='1'; --计数复位信号置一
else
rst_cnt<='0'; --否则置零
end if;
end process; --计数复位控制进程结束
load<=not div2clk; --2分频取反给锁存器使能信号
cnt_en<=div2clk; --2分频给计数使能信号
end one;
六.心得体会
这次EDA试验我学会了vhdl语言的基本语法规范,了解了quartus软件的使用方法,学会了用硬件测试的基本技能,在学习过程中也遇到各种各样的问题,下面就总结出来,做为以后的学习的经验:
1.语法规则不熟悉,vhdl语法规则在刚刚接触的时候确实有各种各样的疏漏,写源代
码的时候会不小心遗漏一两个字母或者标点符号,有时候把半角改成全角,这都会导致编译出错。

2.Quartus软件版权问题,应为条件有限,实验室的软件都是破解版的,这些软件都经
过了一定的修改,部分功能缺失,在使用过程中常常会出现奇怪的问题。

如毛刺现象:不同的工程在同一个文件夹中是编译常会出现毛刺,如果把一个工程新建到一个新的文件夹中,毛刺显现就消除了。

3.图形化界面顶层设计,如设计时输出端口dout【0..3】为四输出端口,定义是应该用..,
不能用:,另外连线时候可能是一端口连到多端口,或者多端口连到一端口,这时候应该注意连线的根数。

4.硬件测试的时候,要选对工作模式,管脚的封装必须正确,否则会出现八段数码管
乱显示的现象。

相关文档
最新文档