VHDL数字频率计的设计文档格式.docx
- 文档编号:14755211
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:13
- 大小:20.92KB
VHDL数字频率计的设计文档格式.docx
《VHDL数字频率计的设计文档格式.docx》由会员分享,可在线阅读,更多相关《VHDL数字频率计的设计文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
1、设计原理
1.1FPGA的介绍
1.2VHDL的介绍
1.3频率的测量原理
频率的即单位时间内发生的次数,在电路中,频率可以解释为周期信号正脉冲的个数,电子计数器测频有两种方式:
一是直接测频法,即在单位时间内测量被测信号的脉冲个数;
二是间接测频法,如周期测频法[3]。
直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。
本次设计采用的频率测量方法为直接测频法。
电路主要有两部分组成,第一部分是频率测量部分,用于测量出单位时间内周期信号的正脉冲数,第二部分是显示部分,用于对电路测量的频率进行显示;
在本次设计中,用6个7段共阴数码管进行显示。
2、分模块的设计
2.1计数器的设计
计数器模块的主要功能是测量脉冲的数目,在设计中,测量周期信号的正脉冲的数目;
计数器在工作时,其输入端来一个上升沿,计数器的值加一,计数部分的代码如下所示:
PROCESS(CLK,CLEAR)
BEGIN
IFCLK'
EVENTANDCLK='
1'
THEN
IFCOUNT1_1>
8THENCOUNT1_1<
=0;
COUNT1_2<
=COUNT1_2+1;
IFCOUNT1_2>
8THENCOUNT1_2<
COUNT1_3<
=COUNT1_3+1;
IFCOUNT1_3>
8THENCOUNT1_3<
COUNT1_4<
=COUNT1_4+1;
IFCOUNT1_4>
8THENCOUNT1_4<
COUNT1_5<
=COUNT1_5+1;
IFCOUNT1_5>
8THENCOUNT1_5<
COUNT1_6<
=COUNT1_6+1;
ENDIF;
ELSE
COUNT1_1<
=COUNT1_1+1;
ENDIF;
IFSUM>
COUNTTHEN
OVERFLOW<
='
;
0'
IFCLEAR='
THEN
COUNT1_2<
COUNT1_3<
COUNT1_4<
COUNT1_5<
COUNT1_6<
ENDPROCESS;
在计数器中,共有6个计数变量,均为10进制,低位计数变量计满后向高位进位,6个计数变量共同构成一个6位计数器,最大计数上限为999999。
2.2频率计算
频率的计算,即指取出在一秒钟时间间隔的计数器的计数值,所得的值即为频率。
频率计算部分的代码如下所示:
PROCESS(F_IN_50MHZ,OVERFLOW)
VARIABLESECOND:
STD_LOGIC_VECTOR(30DOWNTO0);
IFF_IN_50MHZ'
EVENTANDF_IN_50MHZ='
SECOND:
=SECOND+1;
IFOVERFLOW='
COUNT1_1_1<
=15;
COUNT1_2_1<
COUNT1_3_1<
COUNT1_4_1<
COUNT1_5_1<
COUNT1_6_1<
ELSE
IFSECOND>
50000000THEN
=(OTHERS=>
'
);
=COUNT1_1;
=COUNT1_2;
=COUNT1_3;
=COUNT1_4;
=COUNT1_5;
=COUNT1_6;
CLEAR<
当计算的频率值大于设定的量程之后,输出的频率值为16进制的FFFFFF,即输出单个计数器的值为15,以提示溢出测量范围。
2.3档位选择部分
设计要求档位分为三档,分别为0~10K、0~100K、0~1000K。
故需要设计档位选择部分,档位选择部分代码如下所示:
PROCESS(F_SELECT)
IFF_SELECT="
001"
COUNT<
=10000;
LIGHT1<
LIGHT2<
LIGHT3<
ELSIFF_SELECT="
010"
=100000;
100"
=1000000;
ENDIF;
当选择输入为001时,选择0~10K档,当选择输入为010时,选择0~100K档,当选择输入为100时,选择0~1000K档,并亮相应档位的指示灯。
2.4译码器模块的设计
由于要设计一个译码0~F值得译码器,共需输入16个值,所以要四位输入端,输出部分接数码管,由于数码管是7位的,所以输出有7位,设计的译码器模块代码如下所示:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDCD_TO_SMGIS
PORT(INPUT:
INSTD_LOGIC_VECTOR(3DOWNTO0);
OUTPUT:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITY;
ARCHITECTUREBHVOFDCD_TO_SMGIS
PROCESS(INPUT)
CASEINPUTIS
WHEN"
0000"
=>
OUTPUT<
="
0000001"
0001"
1001111"
0010"
0010010"
0011"
0000110"
0100"
1001100"
0101"
0100100"
0110"
0100000"
0111"
0001111"
1000"
0000000"
1001"
0000100"
1010"
0001000"
1011"
1100000"
1100"
0110001"
1101"
1000010"
1110"
0110000"
1111"
0111000"
WHENOTHERS=>
NULL;
ENDCASE;
ENDARCHITECTURE;
3、下载测试
代码写好后用Quartus进行编译,编译完后用Quartus自带的下载工具下载到实验箱中[4],然后连接好外接信号源与FPGA之间的电路,打开信号源,加载信号,信号波形为方波,幅值为3.3Vp-p,频率从1Hz到1000KHz变化,观察FPGA上数码管的显示的频率与信号源显示的信号的频率是否相等。
经测试当信号频率在500KHz以下时,数码管显示的频率与信号源的频率长时基本相同,瞬时相差±
1Hz。
500KHz以上时,数码管显示的数在信号源频率附近浮动,为了确定是电路的信号传输问题还是写的电路的功能的问题,写了一个分频模块,用分频模块的输出作为频率计的输入。
经测试,在使用分频模块时,电路在信号频率较高时未出现问题,故电路的逻辑功能正确。
分频模块的代码[5]如下所示:
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfenpingIS
PORT(CLK_50MHZ:
INSTD_LOGIC;
CLK_OUT:
BUFFERSTD_LOGIC
ARCHITECTUREBHVOFfenpingIS
PROCESS(CLK_50MHZ)
VARIABLEQ:
STD_LOGIC_VECTOR(25DOWNTO0);
IFCLK_50MHZ'
EVENTANDCLK_50MHZ='
Q:
=Q+1;
IFQ>
10000THENQ:
CLK_OUT<
=NOTCLK_OUT;
4、总结与体会
通过这次EDA的课程设计,我更加熟练了quartusII14.0软件的操作,更加熟悉了VHDL语言,增强了利用VHDL与Quartus软件进行设计的能力。
让我明白了FPGA是功能强大的电子设计自动化设计平台,FPGA可以通过简单的设计实现很多复杂的功能,并且FPGA实现的功能更加稳定,保密性好,在未来高速高精度的应用场合中必将大有作为。
同时,VHDL语言作为一门超高速集成电路描述语言,其语法严谨,实用性强,是一门很好的语言工具。
在具体设计过程中,应当跟具数字电路的结构特征写个模块,然后再连接起来,这样使代码更加简明,便于维护于修改,也便于在大规模电路中进行调用,使大规模电路的设计更加高效、简单。
参考文献
[1]潘松,黄继业.EDA技术与VHDL.北京:
清华大学出版社,2009.09.
[2]朱娜,张金保,王志强.EDA技术实用教程.北京:
人民邮电出版社,2012.07.
[3]朱小祥,游家发.EDA技术与应用.北京:
清华大学出版社,2012.07.
[4]佩里.VHDL编程实例.北京:
电子工业出版社,2009.06.
[5]KennethL.Short.VHDL大学实用教程.北京:
电子工业出版社,2011.09.
附录
1所有的代码
LIBRARYIEEE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 数字频率计 设计