




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学硬件描述语言与数系统设计课程设计说明书I目录1、设计原理11.1 FPGA的介绍11.2 VHDL的介绍11.3频率的测量原理12、分模块的设计12.1 计数器的设计12.2 频率计算32.3 档位选择部分42.4 译码器模块的设计53、下载测试64、总结与体会7参考文献8附录91所有的代码9II摘要随着时代的快速发展,频率测量的需求在现实生活中越来越多,也对频率测量精度的要求越来越高。传统的基于电路板的频率计在频率较高时,由于电路的高频效应,其测量精度会大大下降。为了解决传统测量方法在高频的应用问题,产生了基于FPGA的频率计。本文主要介绍基于Cyclone V SoC 5CSE
2、MA5F31C6的用VHDL语言编写的频率测量系统。关键词:FPGA,VHDL,频率计。武汉理工大学硬件描述语言与数系统设计课程设计说明书1、设计原理1.1 FPGA的介绍1.2 VHDL的介绍1.3频率的测量原理 频率的即单位时间内发生的次数,在电路中,频率可以解释为周期信号正脉冲的个数,电子计数器测频有两种方式:一是直接测频法,即在单位时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法3。直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。本次设计采用的频率测量方法为直接测频法。 电路主要有两部分组成,第一部分是频率测量部分,用于测量出单位时间内周期信号的正脉冲
3、数,第二部分是显示部分,用于对电路测量的频率进行显示;在本次设计中,用6个7段共阴数码管进行显示。2、分模块的设计2.1 计数器的设计 计数器模块的主要功能是测量脉冲的数目,在设计中,测量周期信号的正脉冲的数目;计数器在工作时,其输入端来一个上升沿,计数器的值加一,计数部分的代码如下所示:PROCESS(CLK,CLEAR)BEGINIF CLK'EVENT AND CLK='1' THENIF COUNT1_1>8 THEN COUNT1_1<=0;COUNT1_2<=COUNT1_2+1; IF COUNT1_2>8 THEN COUNT1_
4、2<=0;COUNT1_3<=COUNT1_3+1;IF COUNT1_3>8 THEN COUNT1_3<=0;COUNT1_4<=COUNT1_4+1;IF COUNT1_4>8 THEN COUNT1_4<=0;COUNT1_5<=COUNT1_5+1;IF COUNT1_5>8 THEN COUNT1_5<=0;COUNT1_6<=COUNT1_6+1;END IF;END IF;END IF;END IF;ELSE COUNT1_1<=COUNT1_1+1;END IF;END IF;IF SUM>COUN
5、T THENOVERFLOW<='1'ELSE OVERFLOW<='0'END IF;IF CLEAR='0'THENCOUNT1_1<=0;COUNT1_2<=0;COUNT1_3<=0;COUNT1_4<=0;COUNT1_5<=0;COUNT1_6<=0;END IF;END PROCESS;在计数器中,共有6个计数变量,均为10进制,低位计数变量计满后向高位进位,6个计数变量共同构成一个6位计数器,最大计数上限为999999。2.2 频率计算 频率的计算,即指取出在一秒钟时间间隔的计数器的
6、计数值,所得的值即为频率。频率计算部分的代码如下所示:PROCESS(F_IN_50MHZ,OVERFLOW)VARIABLE SECOND : STD_LOGIC_VECTOR(30 DOWNTO 0);BEGIN IF F_IN_50MHZ'EVENT AND F_IN_50MHZ='1'THEN SECOND:=SECOND+1; IF OVERFLOW='1' THEN COUNT1_1_1<=15; COUNT1_2_1<=15; COUNT1_3_1<=15; COUNT1_4_1<=15; COUNT1_5_1<
7、;=15; COUNT1_6_1<=15; ELSE IF SECOND > 50000000 THEN SECOND:=(OTHERS=>'0'); COUNT1_1_1<=COUNT1_1; COUNT1_2_1<=COUNT1_2; COUNT1_3_1<=COUNT1_3; COUNT1_4_1<=COUNT1_4; COUNT1_5_1<=COUNT1_5; COUNT1_6_1<=COUNT1_6; CLEAR<='0' ELSE CLEAR<='1' END IF;
8、END IF; END IF;END PROCESS;当计算的频率值大于设定的量程之后,输出的频率值为16进制的FFFFFF,即输出单个计数器的值为15,以提示溢出测量范围。2.3 档位选择部分 设计要求档位分为三档,分别为010K、0100K、01000K。故需要设计档位选择部分,档位选择部分代码如下所示:PROCESS(F_SELECT)BEGINIF F_SELECT ="001" THENCOUNT<=10000;LIGHT1<='0'LIGHT2<='0'LIGHT3<='1'ELSIF F_
9、SELECT ="010"THENCOUNT<=100000;LIGHT1<='0'LIGHT2<='1'LIGHT3<='0'ELSIF F_SELECT ="100"THENCOUNT<=1000000;LIGHT1<='1'LIGHT2<='0'LIGHT3<='0'END IF;END PROCESS;当选择输入为001时,选择010K档,当选择输入为010时,选择0100K档,当选择输入为100时,选择
10、01000K档,并亮相应档位的指示灯。2.4 译码器模块的设计 由于要设计一个译码0F值得译码器,共需输入16个值,所以要四位输入端,输出部分接数码管,由于数码管是7位的,所以输出有7位,设计的译码器模块代码如下所示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DCD_TO_SMG ISPORT(INPUT : IN STD_LOGIC_VECTOR(3 DOWNTO 0);OUTPUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY;ARCHITECTURE BHV OF DCD_TO_SMG I
11、SBEGINPROCESS(INPUT)BEGINCASE INPUT ISWHEN "0000" => OUTPUT <="0000001"WHEN "0001" => OUTPUT <="1001111"WHEN "0010" => OUTPUT <="0010010"WHEN "0011" => OUTPUT <="0000110"WHEN "0100" =>
12、; OUTPUT <="1001100"WHEN "0101" => OUTPUT <="0100100"WHEN "0110" => OUTPUT <="0100000"WHEN "0111" => OUTPUT <="0001111"WHEN "1000" => OUTPUT <="0000000"WHEN "1001" => OUT
13、PUT <="0000100"WHEN "1010" => OUTPUT <="0001000"WHEN "1011" => OUTPUT <="1100000"WHEN "1100" => OUTPUT <="0110001"WHEN "1101" => OUTPUT <="1000010"WHEN "1110" => OUTPUT &
14、lt;="0110000"WHEN "1111" => OUTPUT <="0111000"WHEN OTHERS => NULL;END CASE;END PROCESS;END ARCHITECTURE;3、下载测试 代码写好后用Quartus进行编译,编译完后用Quartus自带的下载工具下载到实验箱中4,然后连接好外接信号源与FPGA之间的电路,打开信号源,加载信号,信号波形为方波,幅值为3.3Vp-p,频率从1Hz到1000KHz变化,观察FPGA上数码管的显示的频率与信号源显示的信号的频率是否相等。经测试
15、当信号频率在500KHz以下时,数码管显示的频率与信号源的频率长时基本相同,瞬时相差±1Hz。500KHz以上时 ,数码管显示的数在信号源频率附近浮动,为了确定是电路的信号传输问题还是写的电路的功能的问题,写了一个分频模块,用分频模块的输出作为频率计的输入。经测试,在使用分频模块时,电路在信号频率较高时未出现问题,故电路的逻辑功能正确。分频模块的代码5如下所示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fenping IS PORT(CLK_50MHZ : IN ST
16、D_LOGIC;CLK_OUT : BUFFER STD_LOGIC);END ENTITY;ARCHITECTURE BHV OF fenping ISBEGINPROCESS(CLK_50MHZ)VARIABLE Q : STD_LOGIC_VECTOR(25 DOWNTO 0);BEGINIF CLK_50MHZ'EVENT AND CLK_50MHZ='1'THENQ:=Q+1;IF Q>10000 THEN Q:=(OTHERS=>'0');CLK_OUT<=NOT CLK_OUT;END IF;END IF;END PROC
17、ESS;END ARCHITECTURE;4、总结与体会 通过这次EDA的课程设计,我更加熟练了quartusII14.0软件的操作,更加熟悉了VHDL语言,增强了利用VHDL与Quartus软件进行设计的能力。让我明白了FPGA是功能强大的电子设计自动化设计平台,FPGA可以通过简单的设计实现很多复杂的功能,并且FPGA实现的功能更加稳定,保密性好,在未来高速高精度的应用场合中必将大有作为。同时,VHDL语言作为一门超高速集成电路描述语言,其语法严谨,实用性强,是一门很好的语言工具。在具体设计过程中,应当跟具数字电路的结构特征写个模块,然后再连接起来,这样使代码更加简明,便于维护于修改,也便
18、于在大规模电路中进行调用,使大规模电路的设计更加高效、简单。参考文献1 潘松,黄继业. EDA技术与VHDL. 北京:清华大学出版社,2009.09.2 朱娜,张金保,王志强. EDA技术实用教程.北京:人民邮电出版社,2012.07.3 朱小祥,游家发.EDA技术与应用.北京:清华大学出版社,2012.07.4 佩里.VHDL编程实例.北京:电子工业出版社,2009.06.5 Kenneth L. Short.VHDL大学实用教程.北京:电子工业出版社,2011.09.附录1 所有的代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD
19、_LOGIC_UNSIGNED.ALL;USE IEEE.numeric_std.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY FREQ ISPORT(F_SELECT : IN STD_LOGIC_VECTOR(2 DOWNTO 0);F_IN : IN STD_LOGIC;F_IN_50MHZ : IN STD_LOGIC;SMG5 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SMG4 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SMG3 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0
20、);SMG2 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SMG1 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SMG0 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);LIGHT1 : OUT STD_LOGIC;LIGHT2 : OUT STD_LOGIC;LIGHT3 : OUT STD_LOGIC;OVERFLOW : BUFFER STD_LOGIC);END ENTITY;ARCHITECTURE BHV OF FREQ ISSIGNAL COUNT : INTEGER RANGE 1000000 DOWNT
21、O 0;SIGNAL SUM : INTEGER RANGE 1000000 DOWNTO 0;SIGNAL COUNT1_1 : INTEGER RANGE 10 DOWNTO 0;SIGNAL COUNT1_2 : INTEGER RANGE 10 DOWNTO 0;SIGNAL COUNT1_3 : INTEGER RANGE 10 DOWNTO 0;SIGNAL COUNT1_4 : INTEGER RANGE 10 DOWNTO 0;SIGNAL COUNT1_5 : INTEGER RANGE 10 DOWNTO 0;SIGNAL COUNT1_6: INTEGER RANGE 1
22、0 DOWNTO 0;SIGNAL COUNT1_1_1 : INTEGER RANGE 15 DOWNTO 0;SIGNAL COUNT1_2_1 : INTEGER RANGE 15 DOWNTO 0;SIGNAL COUNT1_3_1: INTEGER RANGE 15 DOWNTO 0;SIGNAL COUNT1_4_1 : INTEGER RANGE 15 DOWNTO 0;SIGNAL COUNT1_5_1: INTEGER RANGE 15 DOWNTO 0;SIGNAL COUNT1_6_1: INTEGER RANGE 15 DOWNTO 0;SIGNAL CLEAR : S
23、TD_LOGIC;SIGNAL SMG0_BUFF : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SMG1_BUFF : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SMG2_BUFF : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SMG3_BUFF : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SMG4_BUFF : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SMG5_BUFF : STD_LOGIC_VECTOR(3 DOWNTO 0);COM
24、PONENT DCD_TO_SMG ISPORT(INPUT : IN STD_LOGIC_VECTOR(3 DOWNTO 0);OUTPUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END COMPONENT;BEGINPROCESS(F_SELECT)BEGINIF F_SELECT ="001" THENCOUNT<=10000;LIGHT1<='0'LIGHT2<='0'LIGHT3<='1'ELSIF F_SELECT ="010"THENCO
25、UNT<=100000;LIGHT1<='0'LIGHT2<='1'LIGHT3<='0'ELSIF F_SELECT ="100"THENCOUNT<=1000000;LIGHT1<='1'LIGHT2<='0'LIGHT3<='0'END IF;END PROCESS;PROCESS(CLK,CLEAR)BEGINIF CLK'EVENT AND CLK='1' THENIF COUNT1_1>8
26、THEN COUNT1_1<=0;COUNT1_2<=COUNT1_2+1; IF COUNT1_2>8 THEN COUNT1_2<=0;COUNT1_3<=COUNT1_3+1;IF COUNT1_3>8 THEN COUNT1_3<=0;COUNT1_4<=COUNT1_4+1;IF COUNT1_4>8 THEN COUNT1_4<=0;COUNT1_5<=COUNT1_5+1;IF COUNT1_5>8 THEN COUNT1_5<=0;COUNT1_6<=COUNT1_6+1;END IF;END
27、IF;END IF;END IF;ELSE COUNT1_1<=COUNT1_1+1;END IF;END IF;IF SUM>COUNT THENOVERFLOW<='1'ELSE OVERFLOW<='0'END IF;IF CLEAR='0'THENCOUNT1_1<=0;COUNT1_2<=0;COUNT1_3<=0;COUNT1_4<=0;COUNT1_5<=0;COUNT1_6<=0;END IF;END PROCESS;PROCESS(F_IN_50MHZ,OVERFLOW
28、)VARIABLE SECOND : STD_LOGIC_VECTOR(30 DOWNTO 0);BEGIN IF F_IN_50MHZ'EVENT AND F_IN_50MHZ='1'THEN SECOND:=SECOND+1; IF OVERFLOW='1' THEN COUNT1_1_1<=15; COUNT1_2_1<=15; COUNT1_3_1<=15; COUNT1_4_1<=15; COUNT1_5_1<=15; COUNT1_6_1<=15; ELSE IF SECOND > 50000000
29、THEN SECOND:=(OTHERS=>'0'); COUNT1_1_1<=COUNT1_1; COUNT1_2_1<=COUNT1_2; COUNT1_3_1<=COUNT1_3; COUNT1_4_1<=COUNT1_4; COUNT1_5_1<=COUNT1_5; COUNT1_6_1<=COUNT1_6; CLEAR<='0' ELSE CLEAR<='1' END IF; END IF; END IF;END PROCESS;SMG0_BUFF<=CONV_STD_LOGI
30、C_VECTOR(COUNT1_1_1,4);SMG1_BUFF<=CONV_STD_LOGIC_VECTOR(COUNT1_2_1,4);SMG2_BUFF<=CONV_STD_LOGIC_VECTOR(COUNT1_3_1,4);SMG3_BUFF<=CONV_STD_LOGIC_VECTOR(COUNT1_4_1,4);SMG4_BUFF<=CONV_STD_LOGIC_VECTOR(COUNT1_5_1,4);SMG5_BUFF<=CONV_STD_LOGIC_VECTOR(COUNT1_6_1,4);SUM<=COUNT1_1 + COUNT1_2
31、 * 10 +COUNT1_3 * 100 +COUNT1_4 * 1000 +COUNT1_5 * 10000 + COUNT1_6 * 100000;U0 : DCD_TO_SMG PORT MAP(INPUT => SMG0_BUFF,OUTPUT=>SMG0);U1 : DCD_TO_SMG PORT MAP(INPUT => SMG1_BUFF,OUTPUT=>SMG1);U2 : DCD_TO_SMG PORT MAP(INPUT => SMG2_BUFF,OUTPUT=>SMG2);U3 : DCD_TO_SMG PORT MAP(INPUT
32、=> SMG3_BUFF,OUTPUT=>SMG3);U4 : DCD_TO_SMG PORT MAP(INPUT => SMG4_BUFF,OUTPUT=>SMG4);U5 : DCD_TO_SMG PORT MAP(INPUT => SMG5_BUFF,OUTPUT=>SMG5);END ARCHITECTURE;/*/LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DCD_TO_SMG ISPORT(INPUT : IN STD_LOGIC_VECTOR(3 DOWNTO 0);OUTPUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY;ARCHIT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 节能型潜水电泵企业数字化转型与智慧升级战略研究报告
- 产品市场占有率分析重点基础知识点
- 产品市场趋势研究重点基础知识点
- 产品发布管理重点基础知识点
- 四年级语文上册心理健康教育计划
- 2025年高考材料作文“孔颜之乐”的多角度解析
- 一年级学生数学学习计划
- 2025年铅及铅合金材合作协议书
- 幼儿园2025秋季学期师资培训计划
- 奶制品生产企业仓库管理制度及流程
- 幼教培训课件:《幼儿园一日活动的组织实施》
- 免疫检查点抑制剂毒性防治策略探索
- 2024陕西中考数学二轮专题训练 题型四 尺规作图 (含答案)
- 24春国家开放大学《农村环境保护》形成性考核册参考答案
- 2024年郑州市中考二模英语试题含答案
- 2024年潍坊市寒亭区小升初语文检测卷含答案
- 第24课《诗词曲五首-南乡子 登京口北固亭有怀》课件共34张
- 山东省潍坊市2023-2024 学年高二下学期期中质量监测化学试题+带答案
- 铁路少年-练习及答案
- 《隧道工程》课件
- DB-T29-111-2018埋地钢质管道阴极保护技术规程
评论
0/150
提交评论