电子技术综合试验实验报告
班级:测控一班
学号:2907101002
:大帅
指导老师:颖
基于FPGA的数字频率计设计报告
一、系统整体设计
设计要求:
2、测试频率围为:10Hz~100MHz
3、量程分为三档:第一档:闸门时间为1S时,最大读数为999.999KHz 第二档:闸门时间为0.1S时,最大读数为9999.99KHz
第三档:闸门时间为0.01S时,最大读数为99999.9KHz。
4、显示工作方式:a、用六位BCD七段数码管显示读数。 b、采用记忆显示方法
c、实现对高位无意义零的消隐。
系统设计原理:
所谓“频率”,就是周期性信号在单位时间(1秒)变化的次数。若在一定的时间间隔T计数,计得某周期性信号的重复变化次数为N,则该信号的频率可表达为:f = N / T . 基于这一原理我们可以使用单位时间对被测信号进行计数的方法求得对该信号的频率测量,具体实现过程简述如下:首先,将被测信号①希网网络(方波)加到闸门的输入端。由一个高稳定的石英振荡器和一系列数字分频器组成了时基信号发生器,它输出时间基准(或频率基准)信号③去控制门控电路形成门控信号④,门控信号的作用时间T是非常准确的(由石英振荡器决rc振荡电路
定)。门控信号控制闸门的开与闭,只有在闸门开通的时间,方波脉冲②才能通过闸门成为被计数的脉冲⑤由计数器计数。
闸门开通的时间称为闸门时间,其长度等于门控信号作用时间T。比如,时间基准信号的重复周期为1S,加到闸门的门控信号作用时间T亦准确地等于1S,即闸门的开通时间——“闸门时间”为1S。在这一段时间,若计数器计得N=100000个数,根据公式f = N / T,那么被测频率就是100000Hz。如果计数式频率计的显示器单位为“611aaKHz”,则显示100.000KHz,即小数点定位在第三位。不难设想,若将闸门时间设为T=0.1S,则计数值为10000,这时,显示器的小数点只要根据闸门时间T的改变也随之自动往右移动一位(自动定位),那么,显示的结果为100.00Khz。在计数式数字频率计中,通过选择不同的闸门时间,可以改变频率计的测量围和测量精度。
系统单元模块划分:
1)分频器,将产生用于计数控制的时钟分别为1HZ,10HZ,100HZ脉冲和1KHZ的用于七段显示数码管扫描显示的扫描信号。
2)闸门选择器,用于选择不同的闸门时间以与产生后续的小数点的显示位置。
3)门控电路,产生用于计数的使能控制信号,清零信号以与锁存器锁存信号。
4)计数器,用于对输入的待测信号进行脉冲计数,计数输出。
5)锁存器,用于对计数器输出数据的锁存,便于后续译码显示电路的对数据进行记忆显示,同时避免计数器清零信号对数据产生影响。
6)译码显示,用于产生使七段显示数码管的扫描数字显示,小数点显示的输出信号,同时对高位的无意义零进行消隐。
二、单元电路设计
1、分频器:
该电路将产生四个不同频率的信号输出,因为电路板上给出了一个48MHZ的晶振,所以我们只需要对48MHZ的信号进行适当分频即可得到我们所需的四个不同频率的信号输出,我们设计一个输入为48MHZ,有四个输出端分别为1HZ,10HZ和100HZ,1KHZ的分频器,原程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity fenpinqi is
Port ( clk : in STD_LOGIC;
clkout1 : out STD_LOGIC;
clkout10 : out STD_LOGIC;
clkout100 : out STD_LOGIC;
clkout1K : out STD_LOGIC);
end fenpinqi;
maop
architecture Behavioral of fenpinqi is
signalt1:integer range 1 to 24000000;
signalt10:integer range 1 to 2400000;
signalt100:integer range 1 to 240000;
signalt1K:integer range 1 to 24000;
signal c1:std_logic;
signal c2:std_logic;
signal c3:std_logic;
signal c4:std_logic;
begin
process(clk)is
begin
if clk'event and clk='1' then
ift1<24000000 then --对cnt1进行计数,当cnt1未计满后对其进行加1
t1<=cnt1+1;
elsift1=24000000 then --cnt1计满后对其进行赋一,并且令c1进行翻转,然后将c1的值赋给clkout1
c1<=not c1; --由于48MHZ的的信号,前一半的时候c1为0,则后一半是为1,就完成了对信号进行分频,产生了1HZ的信号
t1<=1;
end if;
end if;
end process;
process(clk)is
begin
if clk'event and clk='1' then --方法同上
ift10<2400000 then
t10<=cnt10+1;
elsift10=2400000 then
c2<=not c2;
t10<=1;
end if;
end if;
end process;
process(clk)is
begin
if clk'event and clk='1' then --方法同上
ift100<240000 then
t100<=cnt100+1;
elsift100=240000 then
c3<=not c3;
t100<=1;
end if;
end if;
end process;
process(clk)is
begin
if clk'event and clk='1' then --方法同上
ift1K奇虎360借壳上市<24000000 then
t1K<=cnt1K+1;
elsift1=24000 then
c4<=not c4;
t1K<=1;
end if;
end if;
end process;
clkout1<=c1;
clkout10<=c2;
clkout100<=c3;
clkout1K<=c4;
end Behavioral;
源文件编写成功后编译并生成图形文件符号如图:
仿真文件编写如下:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY tbb_vhd IS
END tbb_vhd;
ARCHITECTURE behavior OF tbb_vhd IS
COMPONENT fenpinqi
PORT(clk : IN std_logic;
clkout1 : OUT std_logic;
clkout10 : OUT std_logic;
clkout100 : OUT std_logic;
clkout1K : OUT std_logic);
END COMPONENT;
SIGNAL clk : std_logic := '0';
SIGNAL clkout1 : std_logic;
SIGNAL clkout10 : std_logic;
SIGNAL clkout100 : std_logic;
SIGNAL clkout1K : std_logic;
BEGIN
uut: fenpinqi PORT MAP(clk => clk,
clkout1 => clkout1,
clkout10 => clkout10,
clkout100 => clkout100,
clkout1K => clkout1K);
tb : PROCESS
BEGIN
clk<='0';
wait for 10 ps;
clk<='1';
wait for 10 ps;
END PROCESS;
END;
七珠展筋散对该模块进行仿真结果如下:
有上图可知分频器工作正常,产生的个信号也没有毛刺,结果十分理想。
2、闸门选择器:
在这个模块中我们有四个输出端和六个输入端,其中四个输出端中有一个是频率输出端,是通过三个闸门选择开关输入和三个输入频率决定的,另外三个输出端则是用来后面的小数点控制的,而六个输入端中的三个是上面分频器的三个输出1HZ,10HZ和100HZ,另外三个是电路板上的拨动开关,用来选择闸门,控制输出。其原程序和分析如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity SELE is
Port ( SE1 : in STD_LOGIC;
SE10 : in STD_LOGIC;
SE100 : in STD_LOGIC;
F1HZ : IN STD_LOGIC;
F10HZ : IN STD_LOGIC;
F100HZ :IN STD_LOGIC;
FREF : out STD_LOGIC;
DP1 : out STD_LOGIC;
DP2 : out STD_LOGIC;
DP3 : out STD_LOGIC);
end SELE;
architecture Behavioral of SELE is
begin