八位十进制数字频率计之欧阳美创编.docx
- 文档编号:8708506
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:9
- 大小:19.06KB
八位十进制数字频率计之欧阳美创编.docx
《八位十进制数字频率计之欧阳美创编.docx》由会员分享,可在线阅读,更多相关《八位十进制数字频率计之欧阳美创编.docx(9页珍藏版)》请在冰豆网上搜索。
八位十进制数字频率计之欧阳美创编
EDA课程设计报告书
时间:
2021.01.01
创作:
欧阳美
题目:
8位十进制数字频率计的设计
姓名:
学号:
所属学院:
专业年级:
指导教师:
完成时间:
8位十进制数字频率计的设计
一、设计介绍
数字频率计是采用数字电路制做成的能实现对周期性变化信号频率测量的仪器。
频率计主要用于测量正弦波、矩形波、三角波和尖脉冲等周期信号的频率值。
其扩展功能可以测量信号的周期和脉冲宽度。
通常说的,数字频率计是指电子计数式频率计。
频率计主要由四个部分构成:
输入电路、时基(T)电路、计数显示电路以及控制电路。
在电子技术领域,频率是一个最基本的参数。
数字频率计作为一种最基本的测量仪器以其测量精度高、速度快、操作简便、数字显示等特点被广泛应用。
许多物理量,例如温度、压力、流量、液位、PH值、振动、位移、速度等通过传感器转换成信号频率,可用数字频率计来测量。
尤其是将数字频率计与微处理器相结合,可实现测量仪器的多功能化、程控化和智能化.随着现代科技的发展,基于数字式频率计组成的各种测量仪器、控制设备、实时监测系统已应用到国际民生的各个方面。
二、设计目的
(1)熟悉Quatus11软件的基本使用方法。
(2)熟悉EDA实验开发系统的使用方法。
(3)学习时序电路的设计、仿真和硬件设计,进一步熟悉VHDL设计技术。
三、数字频率计的基本原理
数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。
闸门时间也可以大于或小于一秒。
闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。
闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。
数字频率计的主要功能是测量周期信号的频率。
频率是单位时间(1S)内信号发生周期变化的次数。
如果我们能在给定的1S时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。
数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。
这就是数字频率计的基本原理。
频率计测量频率需要设计整形电路使被测周期性信号整形成脉冲,然后设计计数器对整形后的脉冲在单位时间内重复变化的次数进行计数,计数器计出的数字经锁存器锁存后送往译码驱动显示电路用数码管将数字显示出来,需要设计控制电路产生允许产生的门匣信号,计数器的清零信号和锁存器的锁存信号使电路正常工作,再设计一个量程自动转换使测量范围更广。
四系统总体框架
图3.1系统总体框架图
总体框图设计思路:
由50MHz系统时钟分频得到0.5Hz的基准时钟。
在基准时钟的1S高电平期间计被测频率的脉冲个数,1S高电平结束时计数结束,所记录的脉冲个数是被测信号的频率,为了在数码管上显示计数结果需要锁存器将所计的数锁存,因此,在基准时钟下降沿来的时候锁存器实现锁存功能。
为了下次计数必须将本次计数的结果清零,所以在基准时钟低电平期间对计数器清零。
被测频率从计数器的是中端输入实现频率的测试。
将锁存器锁存的数据输入扫描器,通过译码器将锁存的二进制数译成十进制然后显示到数码管上,最终被读出来。
五、设计内容
实验条件:
(1)开发条件:
Quatus11软件。
(2)实验设备:
GW48-ESEDA实验开发系统,电脑。
(3)拟用芯片:
EPF10K20TC144-4芯片。
源程序:
--testcontroler(测频控制器)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYTESTCTLIS
PORT(CLKK:
INSTD_LOGIC;--test1HZcontrolclk
CNT_EN,RST_CNT,LOAD:
OUTSTD_LOGIC);--cleartheenable,count,
ENDTESTCTL;
ARCHITECTUREBEHAVOFTESTCTLIS
SIGNALDIV2CLK:
STD_LOGIC;
BEGIN
PROCESS(CLKK)
BEGIN
IFCLKK'EVENTANDCLKK='1'THEN
DIV2CLK<=NOTDIV2CLK;
ENDIF;
ENDPROCESS;
PROCESS(CLKK,DIV2CLK)
BEGIN
IFCLKK='0'ANDDIV2CLK='0'THENRST_CNT<='1';
ELSERST_CNT<='0';
ENDIF;
ENDPROCESS;
LOAD<=NOTDIV2CLK;
CNT_EN<=DIV2CLK;
ENDBEHAV;
--COUNT10(CNT10.VHD)(十进制计数器)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENB:
INSTD_LOGIC;
OUTY:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT10;
ARCHITECTUREBEHAVOFCNT10IS
BEGIN
PROCESS(CLK,CLR,ENB)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFCLR='1'THENCQI:
="0000";
ELSIFCLK'EVENTANDCLK='1'THEN
IFENB='1'THEN
IFCQI<"1001"THENCQI:
=CQI+1;
ELSECQI:
="0000";
ENDIF;
ENDIF;
ENDIF;
OUTY<=CQI;
COUT<=CQI(0)AND(NOTCQI
(1))AND(NOTCQI
(2))ANDCQI(3);
ENDPROCESS;
ENDBEHAV;
--REGISTER(REG4B.VHD)(4位锁存器)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYREG4BIS
PORT(LOAD:
INSTD_LOGIC;
DIN:
INSTD_lOGIC_VECTOR(3DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDREG4B;
ARCHITECTUREBEHAVOFREG4BIS
BEGIN
PROCESS(LOAD,DIN)
BEGIN
IFLOAD'EVENTANDLOAD='1'THENDOUT<=DIN;--SUOCUN
ENDIF;
ENDPROCESS;
ENDBEHAV;
———8位十进制频率计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entitychooseis
port(clk:
instd_logic;
a,b,c,d,e,f,g,h:
inSTD_LOGIC_VECTOR(3DOWNTO0);
x,y:
outSTD_LOGIC_VECTOR(7DOWNTO0));
end;
ARCHITECTUREONEOFchooseIS
signalain:
STD_LOGIC_VECTOR(2DOWNTO0);
signalbin:
STD_LOGIC_VECTOR(3DOWNTO0);
begin
process(clk)
begin
if(clk'eventandclk='1')then
if(ain="111")thenain<="000";
elseain<=ain+'1';
endif;
endif;
endprocess;
process(ain)
begin
caseainis
when"000"=>bin<=a;y<="11111110";
when"001"=>bin<=b;y<="11111101";
when"010"=>bin<=c;y<="11111011";
when"011"=>bin<=d;y<="11110111";
when"100"=>bin<=e;y<="11101111";
when"101"=>bin<=f;y<="11011111";
when"110"=>bin<=g;y<="10111111";
when"111"=>bin<=h;y<="01111111";
whenothers=>null;
endcase;
endprocess;
process(bin)
begin
casebinis
when"0000"=>x<="11111100";
when"0001"=>x<="01100000";
when"0010"=>x<="11011010";
when"0011"=>x<="11110010";
when"0100"=>x<="01100110";
when"0101"=>x<="10110110";
when"0110"=>x<="10111110";
when"0111"=>x<="11100000";
when"1000"=>x<="11111110";
when"1001"=>x<="11110110";
whenothers=>null;
endcase;
endprocess;
end;
--QUENT1
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYQUENT1IS
PORT(CLKIN:
INSTD_LOGIC;
FIN:
INSTD_LOGIC;
scan:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
seg:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
COUTT:
OUTSTD_LOGIC);
ENDENTITYQUENT1;
ARCHITECTUREONEOFQUENT1IS
COMPONENTchoose
port(clk:
instd_logic;
a,b,c,d,e,f,g,h:
inSTD_LOGIC_VECTOR(3DOWNTO0);
x,y:
outSTD_LOGIC_VECTOR(7DOWNTO0));
endCOMPONENT;
COMPONENTTESTCTL
PORT(CLKK:
INSTD_LOGIC;
CNT_EN,RST_CNT,LOAD:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTCNT10
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENB:
INSTD_LOGIC;
OUTY:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTREG4B
PORT(LOAD:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
SIGNALA_ENA,B_RST,C_LOAD,COUT1,COUT2,COUT3,COUT4,COUT5,COUT6,COUT7:
STD_LOGIC;
SIGNALOUTY1,OUTY2,OUTY3,OUTY4,OUTY5,OUTY6,OUTY7,OUTY8,out1,out2,out3,out4,out5,out6,out7,out8:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
U1:
TESTCTLPORTMAP(CLKK=>CLKIN,CNT_EN=>A_ENA,RST_CNT=>B_RST,LOAD=>C_LOAD);
U2:
CNT10PORTMAP(CLK=>FIN,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY1,COUT=>COUT1);
U3:
CNT10PORTMAP(CLK=>COUT1,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY2,COUT=>COUT2);
U4:
CNT10PORTMAP(CLK=>COUT2,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY3,COUT=>COUT3);
U5:
CNT10PORTMAP(CLK=>COUT3,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY4,COUT=>COUT4);
U6:
CNT10PORTMAP(CLK=>COUT4,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY5,COUT=>COUT5);
U7:
CNT10PORTMAP(CLK=>COUT5,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY6,COUT=>COUT6);
U8:
CNT10PORTMAP(CLK=>COUT6,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY7,COUT=>COUT7);
U9:
CNT10PORTMAP(CLK=>COUT7,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY8,COUT=>COUTT);
U10:
REG4BPORTMAP(LOAD=>C_LOAD,DIN=>OUTY1,DOUT=>OUT1);
U11:
REG4BPORTMAP(LOAD=>C_LOAD,DIN=>OUTY2,DOUT=>OUT2);
U12:
REG4BPORTMAP(LOAD=>C_LOAD,DIN=>OUTY3,DOUT=>OUT3);
U13:
REG4BPORTMAP(LOAD=>C_LOAD,DIN=>OUTY4,DOUT=>OUT4);
U14:
REG4BPORTMAP(LOAD=>C_LOAD,DIN=>OUTY5,DOUT=>OUT5);
U15:
REG4BPORTMAP(LOAD=>C_LOAD,DIN=>OUTY6,DOUT=>OUT6);
U16:
REG4BPORTMAP(LOAD=>C_LOAD,DIN=>OUTY7,DOUT=>OUT7);
U17:
REG4BPORTMAP(LOAD=>C_LOAD,DIN=>OUTY8,DOUT=>OUT8);
u18:
chooseportmap(clk=>fin,a=>out1,b=>out2,c=>out3,d=>out4,e=>out5,f=>out6,g=>out7,h=>out8,x=>scan,y=>seg);
ENDARCHITECTUREONE;
六原理图
七、总结
(1)设计小结
本次设计中,我们成功完成本系统设计所要求的八位十进制频率计的测频功能。
在设计开始前我们就系统整体框架和各个模块功能进行了详细的分析和设计准备工作,设计过程中,我们相互协调,积极参与讨论,最终克服了所有遇到的技术难点。
(2)设计收获
通过本次设计,我们在对EDA这门技术上有了更深刻的认识,也在实践过程中感受到了EDA设计给我们设计带来的方便。
在这个过程中,我们不仅比较熟练地掌握了QuartusII软件的使用,与此同时,我们还对电子设计的思路有了更清晰的认识。
通过对EDA设计我们更深入的了解了可编程逻辑器件的各个功能,也从中学到了很多电子电路设计方面的知识,为我们以后从事设计工作打下了一定的基础,虽然设计的系统不算完美,但是我确信自己努力认真了,从中学到了知识、开阔了眼界,这也是课程设计真正目的所在。
(4)设计改进
由于自身能力有限,学到的知识不多,本次八位十进制频率计的设计仅仅是完成了一些基本的功能,如计数,锁存,译码和显示,在实际的频率测量中,信号在进入计数器之前应该先经过放大整形电路,将信号转化为标准的矩形波,如果信号的频率太大,还得要考虑是否要先对被测频率进行分频,从而使得测量结果更加精确稳定,更具说服力,频率计作为一种测量仪器应该有自动换挡的功能,从而才能方便使用。
另一方面,显示可以采用液晶显示,从而使显示的效果更加的美观。
(5)致谢
我们小组能够完成这次课程设计,首先要感谢老师耐心细致的为我们分析题目,提供解决方案,如果没有老师的悉心指导,我们的课程设计也不会进展的如此顺利,并最终实现各个功能。
此外还要感谢我的组员们,和他们一起思考问题,摸索quartus软件的使用方法,仿真方法等。
通过和他们一起思考,讨论分析问题,我受到很大的启发,理解到团队协作的重要性。
时间:
2021.01.01
创作:
欧阳美
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 八位 十进制 数字频率计 欧阳 创编