8位十进制显示数字频率计带周期设计报告.docx
《8位十进制显示数字频率计带周期设计报告.docx》由会员分享,可在线阅读,更多相关《8位十进制显示数字频率计带周期设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
![8位十进制显示数字频率计带周期设计报告.docx](https://file1.bdocx.com/fileroot1/2023-1/4/8da105c0-ad45-4180-a4fa-de4b032cd721/8da105c0-ad45-4180-a4fa-de4b032cd7211.gif)
8位十进制显示数字频率计带周期设计报告
EDA期末考试
设计报告
设计题目:
8位十进制显示数字频率计(带周期测量)
学校:
梧州学院
系别:
电子信息工程系
班别:
09电本2班
姓名:
陈迪
学号:
200900604215
组员:
刘芸云王缉俭
指导老师:
黄玉健
1、设计内容:
8位十进制显示数字频率计(带周期测量)。
二、设计目的与要求:
1、设计电路实现测量1~99999999Hz方波信号的频率以及其周期,并以十进制的方式显示。
2、要求其数值用七段LED数码管或液晶屏显示。
3、在实验系统上硬件测试,验证此设计的功能。
4、画出实体图,设计原理图,要求用Protel设计出具体的电路原理图。
三、设计原理:
8位十进制显示数字频率计(带周期测量)是由8位十进制频率计、8位十进制周期测量器和带锁存功能的64选32数据选择器构成。
频率计基准信号采用8Hz的方波信号,而周期测量采用基准信号为50MHz的方波信号。
其中,频率计和周期测量由相同的32位数据锁存器和8位十进制计数器及不同的测频控制电路构成。
为使电路设计更加简单快捷,且方便阅读与理解,本电路使采用模块化的设计思想,先由VHDL源程序对各个模块进行独立编写、测试,然后封装,再用原理图方式进行连接、整合与波形和硬件仿真。
例如将用CLOCK5、CLOCK2输入标准频率,CLOCK0输入被测频,用数码管显示频率和周期。
Protel设计原理图:
1、频率测量的基本原理:
根据频率的定义,若某一信号在T时间内重复变化N次,则可知该信号的频率为:
f=N/T对此可采用数字逻辑电路中的门电路来实现,如图:
在与门端加入被测信号,另一端加宽度为T1的控制信号(称闸门信号),输出端仅能在T1时间内有波形的出现,然后送入计数器计数,得N*T2=T1所以f=N/T1。
进一步分析可知,多周期测量可以减小误差。
因此,电路设计时我们采用基准信号的8个周期为一个T1。
如图CNT-EN信号
在T1时间结束的同时输出一个作用于计数器锁存信号load,在下一个T1来临前输出一个清零信号RST使得计数器复位,为下一次测量做好准备。
电路的基准信号为8Hz,由方程可知f=N/(8*(1/8))=N,从而计数器的数值就是被测信号的频率。
2、测量周期的基本原理:
如图所示为计数器测量信号周期的原理框图。
它是由上图的
标准信号和输入信号位置对调而构成的。
可以看出,被测信号经过放大后,形成闸门信号,周期为T2。
标准频率的周期为T1,在闸门时间内,标准频率通过闸门形计数脉冲,送至计数器计数,进过译码显示为N。
所以T2=N*T1=N/f1。
同理,多周期测量也可减小误差,但是由于被测信号为测频控制信号,当被测信号频率较低时,测量需要较长时间,因此我们的电路只采用被测信号的2倍周期进行测量。
为使能测量更高的频率,我们采用了50MHz的信号为计数信号。
电路同样设置了锁存和清零的输出信号,同时为防止高频率时锁存和清零过快,电路在闸门时间结束后设置了较长的过渡时间。
由方式T=N/(2*50M)=N/100000000,所以数码管显示的最高位位权为0.1依次类推为0.01一直到小数点后8位。
当信号小于1Hz和大于100MHz时都超出量程。
3、8位十进制计数器的构成:
用VHDL语言设计带进位的1位十进制计数器,然后封装如图
,再用8个1位计数器和与门连接成8位的十进制计数器。
4、利用VHDL语言来实现各个结构模块:
1.带进位的1位10进制计数器COUNTER.VHD
带进位的一位十进制计数器LIBRARYIEEE;--带进位的一位十进制计数器
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;--允许用户对操作符重新定义
ENTITYCOUNTERIS
PORT
(
CLK,RST,EN:
INSTD_LOGIC;--clk时钟频率,rst清零,en使能端
DOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--4位输出到7段数码管
COUT:
OUTSTD_LOGIC--进位信号
);
ENDCOUNTER;
ARCHITECTUREoneOFCOUNTERIS
BEGIN
PROCESS(CLK,RST,EN)--时钟,清零,使能为敏感信号
VARIABLEQ:
STD_LOGIC_VECTOR(3DOWNTO0);--定义变量Q为4位
BEGIN
IFRST='1'THEN
Q:
=(OTHERS=>'0');--如果rst为高电平,变量Q清零
ELSIFCLK'EVENTANDCLK='1'THEN--否则,若clk为上升沿,即上升沿触发
IFEN='1'THEN
IFQ<9THENQ:
=Q+1;--使能端高电平有效,当Q小于9时,自加1
ELSEQ:
=(OTHERS=>'0');--否则清零
ENDIF;
ENDIF;
ENDIF;
IFQ="1001"THENCOUT<='1';--当Q为9时输出进位信号1
ELSECOUT<='0';ENDIF;--否则输出0
DOUT<=Q;--把变量信号输出
ENDPROCESS;
ENDone;
2.32位锁存器REG32B.VHD
LIBRARYIEEE;--32位锁存器
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYREG32BIS
PORT(LK:
INSTD_LOGIC;--锁存信号
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);--计数信号输入
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));--计数信号输出并锁存
ENDREG32B;
ARCHITECTUREoneOFREG32BIS
BEGIN
PROCESS(LK,DIN)
BEGIN
IFLK'EVENTANDLK='1'THENDOUT<=DIN;--上沿边触发锁存
ENDIF;
ENDPROCESS;
ENDone;
3.基准频率为8HZ的测频控制电路FTCTRL.VHD
LIBRARYIEEE;--频率为8HZ的测频控制电路,用于频率计
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFTCTRLIS
PORT(CLKK:
INSTD_LOGIC;--8Hz
CNT_EN:
OUTSTD_LOGIC;--计数器时钟使能
RST_CNT:
OUTSTD_LOGIC;--计数器清零
Load:
OUTSTD_LOGIC);--输出锁存信号
ENDFTCTRL;
ARCHITECTUREoneOFFTCTRLIS
SIGNALM:
STD_LOGIC;
SIGNALC:
STD_LOGIC_VECTOR(3DOWNTO0);--计数信号
BEGIN
K1:
PROCESS(CLKK,C)--16分频
BEGIN
IFRISING_EDGE(CLKK)THEN
IF(C="1111")THENC<="0000";ELSEC<=C+1;ENDIF;--计数为15是清零
IF(C="0001")THENM<=NOTM;ELSIF(C="1001")THENM<=NOTM;--由1开始跳变,变到9时跳变
ENDIF;ENDIF;
ENDPROCESS;
CNT_EN<=M;--输出16分频后的波形
Load<=NOTM;--输出锁存信号
F2:
PROCESS(C,M)--产生计数器清零信号
BEGIN
IF(C="1101")ANDM='0'THENRST_CNT<='1';ELSERST_CNT<='0';ENDIF;--计数为13时为1,否则为0
ENDPROCESS;
ENDone;
4.基准频率为50MHZ的测频控制电路FTCTRL2.VHD
LIBRARYIEEE;--频率为50MHZ的测频控制电路,
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFTCTRL2IS
PORT(CLKK2:
INSTD_LOGIC;--50MHz
CNT_EN2:
OUTSTD_LOGIC;--计数器时钟使能
RST_CNT2:
OUTSTD_LOGIC;--计数器清零
Load2:
OUTSTD_LOGIC);--输出锁存信号
ENDFTCTRL2;
ARCHITECTUREoneOFFTCTRL2IS
SIGNALM:
STD_LOGIC;
SIGNALC:
STD_LOGIC_VECTOR(3DOWNTO0);--计数信号
BEGIN
K1:
PROCESS(CLKK2,C)--分频
BEGIN
IFRISING_EDGE(CLKK2)THEN
IF(C="1111")THENC<="0000";ELSEC<=C+1;ENDIF;--清零
IF(C="0001")THENM<=NOTM;ELSIF(C="0011")THENM<=NOTM;--由1开始跳变?
ENDIF;ENDIF;
ENDPROCESS;
CNT_EN2<=M;--输出分频后的波形
Load2<=NOTM;--锁存信号
F2:
PROCESS(C,M,CLKK2)--产生计数器清零信号
BEGIN
IFC="1010"AND(M='0')ANDCLKK2='0'THENRST_CNT2<='1';ELSERST_CNT2<='0';ENDIF;--计数为0时为1,否则为0
ENDPROCESS;
ENDone;
5.带锁存的2选1数据选择器MUX2.VHD
libraryieee;
useieee.std_logic_1164.all;
entitymux2is--64位输入的2选1数据选择器
port(
L1,L2:
OUTSTD_LOGIC;--L1锁存指示灯,L2信号选通灯
S,EN:
instd_logic;--选择,锁存
AIN,BIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);--输入通道A
DOUT3:
outSTD_LOGIC_VECTOR(31DOWNTO0)--数据输出
);
endentitymux2;
architectureoneofmux2is
SIGNALM:
STD_LOGIC_VECTOR(31DOWNTO0);--寄存
begin
process(AIN,BIN,S,EN)
begin
IFEN='0'THEN--非0锁存
ifS='1'thenM<=AIN;elseM<=BIN;--选通
endif;
ENDIF;
endprocess;
DOUT3<=M;
L1<=EN;
L2<=S;endarchitectureone;
5、利用原理图来完成各个模块的链接与功能的实现:
1.8位十进制计数器功能的实现:
先编译COUNTER.VHD生成原理图文件,如下图:
,再用元件库中的与门与其链接,然后加上输入输出端口,从而完成电路。
具体链接如下:
电路完成编译后,继续生产如下原理图文件,
为下一阶段工作做好准备。
2.8位频率计功能的实现:
先编译REG32B.VHD和FTCTRL.VHD,分别生成原理图文件,如下图:
和
。
再与上面的8位十进制计数器原理图文件与端口进行链接,完成计数器功能电路。
具体链接如下:
同时,电路完成编译后,继续生产如下原理图文件,为下一阶段工作做好准备
。
3.周期测量功能的实现:
先编译FTCTRL2.VHD生成原理图文件,如下图:
,再用已经编译生成的计数器和锁存器原理图链接,完成周期测量功能电路。
具体链接如下。
电路完成编译后,也生产如下原理图文件,为下一阶段工作做好准备
。
3.顶层文件用原理图表示实现测频测周功能,设计如下:
编译数据选择器MUX2.VHD生成原理图文件,如图:
然后与已经生成的测频和测周的原理图文件进行连接,生成带有锁存和选通功能,可显示频率和周期的频率计。
设计如下:
6.编译仿真、下载:
1、波形仿真:
设计好程序后便保存进行编译,查错,修改,成功后,进行仿真,观察波形。
如下图:
PCLK的基准频率为50MHz,但在综合仿真时,过高的频率需要较长的仿真时间,为了提高软件的效率,PCLK在仿真时设置基准频率为32Hz,FCLK设置为8Hz,测试频率为16Hz.同时对锁存以及选通进行测试。
在不同的选通状态下,由方程可知周期T=N/64和f=N。
波形仿真结果
T=4/64=0.0625s,f=16Hz,经检验,波形正确。
2、引脚分配:
选用实验模式5,键1(PIO0)用于锁存信号,cloke2的8Hz用于频率基准信号,cloke0用于被测频率的输入,键2(PIO1)用于选通信号,D1用于锁存指示灯,D2用于选通指示灯,8个数码管用于显示频率或周期大小。
具体引脚分配如下:
信号名引脚名
ENPIN_8DATAOUT[30]PIN_95
FCLKPIN_54DATAOUT[31]PIN_96
FINPIN_126
L1ENPIN_20
L2SPIN_21
PCLKPIN_124
SPIN_9
DATAOUT[0]PIN_30
DATAOUT[1]PIN_31
DATAOUT[2]PIN_32
DATAOUT[3]PIN_33
DATAOUT[4]PIN_36
DATAOUT[5]PIN_37
DATAOUT[6]PIN_38
DATAOUT[7]PIN_39
DATAOUT[8]PIN_41
DATAOUT[9]PIN_42
DATAOUT[10]PIN_65
DATAOUT[11]PIN_67
DATAOUT[12]PIN_68
DATAOUT[13]PIN_69
DATAOUT[14]PIN_70
DATAOUT[15]PIN_72
DATAOUT[16]PIN_73
DATAOUT[17]PIN_78
DATAOUT[18]PIN_79
DATAOUT[19]PIN_80
DATAOUT[20]PIN_81
DATAOUT[21]PIN_82
DATAOUT[22]PIN_83
DATAOUT[23]PIN_86
DATAOUT[24]PIN_87
DATAOUT[25]PIN_88
DATAOUT[26]PIN_89
DATAOUT[27]PIN_90
DATAOUT[28]PIN_91
3、硬件测试:
再次编译程序,成功后,下载到实验箱EP1K30TC144-3FPGA中,选用模式5,拨下显示开关拨码4。
键2未按下时,输入低电平,8个数码管显示为cloke0所选信号的频率。
当按下键1,输出高电平,D1亮,信号被锁存,数码管数字不发生改变。
按起键1,停止锁存,使D1灭。
按下键2,使其输入高电平,周期选通灯D2亮,8个数码管显示为cloke0所选信号的周期。
按下键1,D1亮起,信号再次被锁存,数码管数字不变。
注释:
超出量程时,显示值为0。
通过实物验证,该设计满足所要求的各个功能,达到了设计要求与目的。
七、设计结论与总结:
1、本设计利用计数器和闸门原理来测试信号的频率与周期,完成8位十进制频率计(周期)的功能。
2、本设计可以完全通过VHDL语言来描述,也可以用原理图的方法来实现。
通过用两种方法的结合,提高了工作效率,并让我们进一步对QuartusⅡ的操作以及VHDL语言有了更深的理解。
3、通过此设计实验,让我们对EDA课程有了更深的了解,它不仅功能强大,富于实用性,并且在未来的发展中还有非常广阔的应用前景。
同时,实验过程中,我们也体会到了团队合作的力量,以及团队精神的重要。
4、感谢黄玉健老师的悉心指导。