重庆交通大学信息科学与工程学院综合性实验报告姓 名: 赵娅琳 学 号 10950214班 级: 通信工程专业2010级 2班实验项目名称: 8位16进制频率及设计实验项目性质: 设计性 实验所属课程: 数字设计基础 实验室(中心): 现代电子实验中心 指 导 教 师 : 李 艾 星 实验完成时间: 2012 年 6 月 18 日教师评阅意见:签名:年月日实验成绩:一、课题任务与要求1、验证8位16进制频率计的程序;2、根据8位16进制频率计的程序设计8位10进制频率计;二、设计系统的概述频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率,通常情况下计算每秒内待测的脉冲个数,此时闸门时间为1秒,闸门时间也可以大于或小于1秒。
频率信号易于传输,抗干扰性强,可以获得较好的测量精度。
数字频率计的关键组成部分包括一个测频控制信号发生器、一个计数器和一个锁存器,另外包括脉冲发生器、姨妈驱动电路和显示电路。
工作过程:系统正常工作时,脉冲信号发生器输入1HZ的标准信号,经过测频控制信号发生器的处理,2分频后即可产生一个脉宽为1秒的时钟信号,以此作为计数闸门信号。
测量信号时,将被测信号通过计数器作为时钟。
当技术闸门信号高平有效时,计数器开始计数,并将计数结果送入锁存器中。
设置锁存器的好处是现实的数据稳定,不会由于周期的清零信号而不断闪烁。
最后将所存的数值由外部的译码器并在数码管上显示。
三、单元电路的设计与分析(重点描述自己设计部分)1、八位十进制计数顶层模块设计(1)、此模块是元件例化语句将各个元件(测频控制模块、十进制计数模块、测频锁存器模块)连接形成一个整体,完成最终频率计所期望的功能。
(2)、具体程序如下。
library ieee; --频率计顶层文件library ieee;use ieee.std_logic_1164.all;entity freqtest is --定义逻辑电路的端口port(clk1hz,fsin:in std_logic;dout:out std_logic_vector(31 downto 0));end freqtest;architecture behv of freqtest is --说明语句component cnt10_8 --元件说明语句port(rst,fx,ena:in std_logic;d:out std_logic_vector(31 downto 0));end component;component reg32bport(lk:in std_logic;din:in std_logic_vector(31 downto 0);dout:out std_logic_vector(31 downto 0));end component;component ftctrlport (clkk:in std_logic;cnt_en :out std_logic;rst_cnt:out std_logic;load:out std_logic);end component;signal tsten1:std_logic; --信号量定义说明语句signal clr_cnt1:std_logic;signal load1:std_logic;signal dto1:std_logic_vector(31 downto 0);signal carry_out1:std_logic_vector(6 downto 0);begin --功能描述语句u1:ftctrl port map(clkk=>clk1hz,cnt_en=>tsten1,rst_cnt=>clr_cnt1,load=>load1);u2:reg32b port map(lk=>load1,din=>dto1,dout=>dout);u3:cnt10_8 port map(fx=>fsin,rst=>clr_cnt1,ena=>tsten1,d=>dto1);end behv;(3)、顶层文件的模块图2、测频控制模块(1)、此模块主要是由时钟输入、计数器使能、计数器清零、输出所存构成、其具体的实现是由一个1秒的输入信号脉冲计数允许的信号,1秒计数器结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期做好准备。
(2)、具体程序如下。
LIBRARY IEEE; --测频控制电路USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL IS --定义逻辑电路的端口PORT (CLKK:IN STD_LOGIC; --1HzCNT_EN:OUT STD_LOGIC; --计数器时钟使能RST_CNT:OUT STD_LOGIC; --计数器清零Load:OUT STD_LOGIC);--输出锁存信号END FTCTRL;ARCHITECTURE behav OF FTCTRL IS --说明语句SIGNAL Div2CLK:STD_LOGIC;BEGIN --功能描述语句PROCESS(CLKK)BEGINIF CLKK'EVENT AND CLKK='1' THEN --1Hz时钟2分频Div2CLK <= NOT Div2CLK;END IF;END PROCESS;PROCESS(CLKK,Div2CLK)BEGINIF CLKK='0' AND Div2CLK='0' THEN RST_CNT<='1'; --产生计数器清零信号ELSE RST_CNT <='0';END IF;END PROCESS;Load <= NOT Div2CLK;CNT_EN <= Div2CLK;END behav;3、十进制计数模块(1)、此模块先设计单个十进制计数模块,再设计八位十进制计数模块,将线设计好的单个十进制计数模块用元件例化语句构成八进制计数模块,就将可以完成八位十进制计数模块的设计,这件设计的好处是,减小了程序设计的复杂度,而且层次感强。
(2)、主要涉及两个程序如下。
library ieee; --单个十进制设计use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 is --定义逻辑端口语句port(rst,fx,ena:in std_logic;cout:out std_logic;outy:out std_logic_vector(3 downto 0));end cnt10;architecture behv of cnt10 isbegin --功能描述语句process(rst,ena,fx)variable cqi:std_logic_vector(3 downto 0);beginif rst='1' then cqi:=(others=>'0'); --清零端elsif fx'event and fx='1' thenif ena='1' thenif cqi<9 then cqi:=cqi+1; cout<='0'; --使能端为高电平开始计数elsif cqi=9 thencqi:=(others=>'0');cout<='1'; --计数值到达9时,cqi端清零,cout输出1 end if;elsif ena='0' then cqi:=(others=>'0');end if;end if;outy<=cqi;end process;end behv;library ieee; --八位十进制数模块use ieee.std_logic_1164.all;entity cnt10_8 isport(rst,fx,ena:in std_logic; --定义逻辑端口语句d:out std_logic_vector(31 downto 0));end cnt10_8;architecture behv of cnt10_8 is --说明语句component cnt10 --元件说明语句port(rst,fx,ena:in std_logic;cout:out std_logic;outy:out std_logic_vector(3 downto 0));end component;signal e:std_logic_vector(7 downto 0); --信号量定义说明语句begin --功能描述语句u1:cnt10 port map(fx=>fx,rst=>rst,ena=>ena,cout=>e(0),outy=>d(3 downto 0));u2:cnt10 port map(fx=>e(0),rst=>rst,ena=>ena,cout=>e(1),outy=>d(7 downto 4));u3:cnt10 port map(fx=>e(1),rst=>rst,ena=>ena,cout=>e(2),outy=>d(11 downto 8));u4:cnt10 port map(fx=>e(2),rst=>rst,ena=>ena,cout=>e(3),outy=>d(15 downto 12));u5:cnt10 port map(fx=>e(3),rst=>rst,ena=>ena,cout=>e(4),outy=>d(19 downto 16));u6:cnt10 port map(fx=>e(4),rst=>rst,ena=>ena,cout=>e(5),outy=>d(23 downto 20));u7:cnt10 port map(fx=>e(5),rst=>rst,ena=>ena,cout=>e(6),outy=>d(27 downto 24));u8:cnt10 port map(fx=>e(6),rst=>rst,ena=>ena,cout=>e(7),outy=>d(31 downto 28));end behv;4、测频锁存器模块(1)在频率计的设计当中设计了一个锁存器,设置锁存器的好处就是使数据显示稳定,不会由于周期周期性的清零而使信号不断的闪烁,这个模块的功能就是讲计数器在规定时间的计数值锁存进锁存器中。