版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实 验 报 告 学 生: 学 院: 专 业: 学 号: 指 导 老 师:目录一、实验名称:3二、实验目的:3三、实验任务:3四、实验原理:31.分频器:4 功能4 实现:42.闸门选择5 功能5 实现53.门控电路:6 功能:6 实现74.计数器:8 功能8 实现85.锁存器:9 功能9 实现96.扫面显示9 功能9 实现97.top顶层文件10 功能:10 实现:108.管脚的配置:11六、误差分析:13 1. 原因132.减小误差13七、实验结论:14八、程序附录:141.分频器:142.闸门选择:153.门控电路:164.计数器:175.锁存器:196.扫面显示:207.top程序:21
2、一、实验名称:基于FPGA的数字频率计的设计二、实验目的:学习VHDL语言并使用它完成频率计的设计,使学生不断的加深对VHDL描述语言的掌握,以及不断总结由软件来实现硬件的特点,学会程序与芯片的对接,为以后的工作和更进一步的学习学习打好基础。三、实验任务: 基于FPGA采用硬件描述语言VHDL,在软件开发平台ISE上设计出一个数字频率计,使用ModelSim仿真软件对VHDL程序做仿真并下载到芯片完成实际测量。要求:其频率测量范围为10Hz10MHz,测量结果用6只数码管显示。有三个带锁按键开关(任何时候都只能有一个被按下)被用来选择1S、0.1S和0.01S三个闸门时间中的一个。有两只LED
3、,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出指示。四、实验原理:频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟(本实验采用50MHz的石英振荡器作为基准时钟),对比测量其他信号的频率。通常情况下计数每秒内待测信号的脉冲个数,此时我们称闸门时间为1S,闸门时间也可以大于或小于1S。闸门时间越长,得到的频率值就准确,但闸门时间越长则每测一次频率的间隔就越长;闸门时间越短,测得频率值刷新就越快,但测得的频率精准度会受到影响。频率是指周期性信号在单位时间(一秒)内变化的次数。若在一定时间T内计得这个周期信号变化的次数为N,则其频率可表达: f=N/T所以将N和T分别测量出来即可得出
4、测量频率。因此需要的模块有:计数器、基准时钟、门控电路,由此得出基本原理图如下所示:工作原理: 把被测信号(以正弦波为例)通过脉冲形成电路转变成脉冲(实验室直接测量方波,即相当于跳过放大整形)其重复频率等于被测频率,,然后将它加到闸门的一个输入端。闸门出门控信号来控制开、闭时间,只有在闸门开通时间T内,被计数的脉冲才能通过闸门,被送到十进制电子计数器进行计数。 考虑到测量范围和显示要求,需要对上面原理图做完善,需要添加:分频器、数据锁存器、扫描显示的控制子系统(包括显示译码和扫描控制)、两只LED指示闸门通断和计数器溢出,由此得出如下完善之后原理图:五、实验步骤: 先对各个模块进行设计仿真,保
5、证每个模块的正常运行,最后将各个模块进行汇总连接,编写top顶层文件,最后对top文件进行仿真测试,测试好之后下载到芯片进行实际测量。1.分频器:1 功能:对石英振荡器产生的信号进行分频,得到10Hz、100Hz和1KHz三个基准频率,提供标准闸门时间控制信号以精确控制计数器的开闭;同时将1KHz的信号作为扫描显示译码模块的时钟,以产生扫描选择信号。2 实现:分频器的功能是由于闸门时间只有1S,0.1S,0.01S三档,且在数码管显示时采用动态扫描的方法,需要产生1kHz的扫描信号,由于本设计将下载到开发板上,其提供的标准时间是48MHz,所以要对系统的48MHz时钟信号进行分频,以产生符合要
6、求的各频率信号:先由系统时钟50MHz分频出1kHz作为数码管显示的动态扫描信号,同时产生0.01S的计数闸门信号脉冲,再由1kHz分频出100Hz产生0.1S的计数闸门信号脉冲,由100Hz分频出10Hz产生1S的计数闸门信号脉冲。由此写出分频器的VHDL程序(见程序附录1),仿真模块如图所示:到此完成了对分频器模块的设计和仿真。2.闸门选择:1 功能:实现对输入的几个闸门信号的手动选择,将选择的闸门信号有fref输出到下一个模块,同时输出小数点的控制信号dp1。2 实现:采用数字电路里所学的多路复用器原理,s(2:0)为选择端,f1,f10,f100为被选时基信号输入端,通过选择端s来控制
7、哪一个时基型号被选择输出:当s(2:0)为100时,f1的输入时基信号被选中,被赋值给输出端口fref输出,此时dp1(2)有效,其余的无效,点亮对应连接的小数点;当s(2:0)为010时,f10时基信号被选中,被赋值给输出端口fref输出,此时dp1(1)有效,其余的无效,点亮对应连接的小数点;最后当s(2:0)为001时,f100时基信号被选中,被赋值给输出端口fref输出,此时dp1(0)有效,其余的无效,点亮对应)连接的小数点。由此写出闸门选择的VHDL程序(见程序附录2),仿真模块如图所示:到此完成了对闸门选择模块的设计和仿真。3.门控电路:1 功能:控制整个频率计各模块进行时序工作
8、的控制装置,它对输入的标准时钟信号进行变换,产生我们所需要的三个信号闸门信号gate,锁存信号latch以及清零信号reset。2 实现:测量过程中,产生的上个闸门信号有着先后顺序。根据我们的测量需要,可以得出三个信号的先后为:gate、latch、reset。同时为了规避冒险,我们需要将三个信号的上升沿错开,由此采用图1所示原理进行编写VHDL程序(见程序附录3);同时对模块进行仿真,仿真模块如图所示:到此完成了对门控电路模块的设计和仿真。4.计数器:1 功能:在门控电路的gate的控制下对输入的信号进行计数,即完成f=N/T公式中的N的测量。2 实现:采用数字电路所学的十进制计数器,并对计
9、数器采用级联的方法扩展为6位十进制计数器。由此编写其VHDL程序(见程序附录4),同时对模块进行仿真,仿真模块如图所示:到此完成了对计数器模块的设计和仿真。5.锁存器:1 功能:对计数器送来的六位计数结果和溢出信号ove_out进行锁存,保证显示数码管的数字不会跳动,方便读取数据。2 实现:采用数字电路所学的D锁存器的思想,编写能够同时对六位技术界和溢出信号进行锁存的VHDL程序(见程序附录5),编写好之后进行仿真测试,仿真模块如图所示:到此完成了对锁存器模块的设计和仿真。6.扫面显示:1 功能:对锁存器送来的数据进行动态扫描(即位选)、将六位计数结果分别翻译成七段数码管所能识别的数据(即段选
10、)。2 实现:通过用一个频率1KHz的信号来扫描一个多路选择器,实现对六位已经锁存的计数结果的扫描输出,由于1KHz相对了人眼的暂留效应已经很高了,所以显示结果不会让人感觉到闪烁。这样就可以用一个译码器来实现对六个4位二进制数的译码。译码结果再连接到一个多路选择器的输入端,同样由1KHz的信号来同步扫描选通。实现最终结果的数字显示。六位十进制数的BCD码经7段译码输出,显示十进制数。并根据档位信号确定小数点显示的位置以实现档位的显示,最后的输出全部通过下载前的固定引脚连接到LED显示管上。由此编写VHDL程序(见程序附录6),编写好之后进行仿真测试,仿真模块如图所示: 到此完成了所有模块的设计
11、和仿真,接下来就是对所有模块的汇总连接,编写top顶层文件。完成最终的设计和仿真。7.top顶层文件1 功能:将所有的模块的功能进行连接,完成频率计的设计。 2 实现:将每个模块点击ISE软件右下角窗口中的“View HDL Instantiation Template”将生成的文件拷贝到新建的top文件对应位置,并对中间的连接线进行定义,最后完成top文件的编写。仿真模块如图所示:8.管脚的配置:分配引脚,即实现设计的输入输出端口与实际芯片的输入输出端口的对应连接。参考老师提供的电路板管脚(见图1),完成对引脚的分配,得到top_fan.ucf文件(见下图):9.下载程序: 将电路板连接好之
12、后,点击“Configure Target Device”,生成top_fan.bit文件,在将bit文件下载到电路板板中,到此完成了所有的设计。六、误差分析: 1. 原因:计数N不准,存在1误差。通过仔细分析可知,在测频时,主门的开启时刻与计数脉冲之间的时间关系是不相关的,所以它们在时间轴上的相对位置是随机的。这样,在相同的主门开启时间内,计数器所计得的数却不一定相同,当主门开启时间T接近甚至等于被测信号周期的整数倍N倍时,此项误差为最大,图4 画出的就是这种情况: 图 4 正负1误差 若主门开启时刻为,而第1个计数脉冲出现在,图 4 (a)中示出了0的情况(),这时计数器计得N个数(图中N
13、=6);现在再来看图 4 (b)情况,即趋近于0,这就有两种可能的计数结果:若第1个计数脉冲和第7个计数脉冲都能通过主门,则可计得N+1=7个数;也可能这两个脉冲都没有能进入主门,则只能计得N-1=5个数。由此可知,最大的计数误差为个数,即存在1误差。2.减小误差:由上述的分析可知不管计数值N多少,其最大误差总是1个计数单位。当T选定后,越低,则由1误差产生的测频误差越大。一定时,增大闸门时间T,可减小1误差对测频误差的影响。因此我们在测量频率的时候尽量选择合适的闸门可以减小误差。七、实验结论:本次实验利用VHDL语言完成了基于FPGA的数字频率计的设计与实现。利用ISE和ModelSim对程
14、序设计进行了仿真、分析、综合,并最终下载到FPGA芯片中,完成了整个频率计的设计。通过此次频率计的设计试验,对频率计有了更深的认识,尤其是对频率计的工作原理以及各功能模块的实现有深入了解,同时深入的了解学习了VHDL语言,学会了如何利用ISE和ModelSim对编写的VHDL程序进行联合仿真;最后将编写好的程序下载到芯片中,让我学会了如何将程序与芯片进行对接,提高了自己的动手能力。八、程序附录:1.分频器:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;use IEEE.STD_LOGIC_ARI
15、TH.ALL;entity div_f isport (clk : in std_logic;fp_10,fp_100,fp_1k : out std_logic);end div_f;architecture Behavioral of div_f issignal div_10: std_logic_vector(2 downto 0):=000;signal div_100: std_logic_vector(2 downto 0):=000;signal div_1k: std_logic_vector(14 downto 0):=000000000000000;signal clk_
16、10,clk_100,clk_1k: std_logic;beginfen1k: process(clk) beginif rising_edge(clk) thenif div_1k=24999 thendiv_1k=000000000000000;clk_1k=not clk_1k;else div_1k=div_1k+1;end if;end if;end process;fen100: process(clk_1k) beginif rising_edge(clk_1k) thenif div_100=5 thendiv_100=000;clk_100=not clk_100;else
17、 div_100=div_100+1;end if;end if;end process;fen10: process(clk_100) beginif rising_edge(clk_100) thenif div_10=5 thendiv_10=000;clk_10=not clk_10;else div_10=div_10+1;end if;end if;end process;fp_10=clk_10;fp_100=clk_100;fp_1kfref=f1;dp1fref=f10;dp1fref=f100;dp1fref=0;dp1=111;end case;end process;e
18、nd Behavioral;3.门控电路:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;use IEEE.STD_LOGIC_ARITH.ALL;entity control isport( insignal : in STD_LOGIC;gate : out STD_LOGIC:=0;latch : out STD_LOGIC:=0;reset : out STD_LOGIC:=0);end control;architecture Behavioral of control issignal
19、 counter_16 : std_logic_vector(3 downto 0):=0000;Beginprocess(insignal)beginif rising_edge(insignal) then counter_16=counter_16 + 1;if counter_16 10 then gate=1;else gate=0;end if;if counter_16=11 thenlatch=1;else latch=0;end if;if counter_16=13 then reset=1;else reset=0;end if;end if;end process;en
20、d Behavioral;4.计数器:entity counter_10 isport (ce_signal, clr, en : in std_logic;over_l : out std_logic;cn1 : out std_logic_vector (3 downto 0);cn2 : out std_logic_vector (3 downto 0);cn3 : out std_logic_vector (3 downto 0);cn4 : out std_logic_vector (3 downto 0);cn5 : out std_logic_vector (3 downto 0
21、);cn6 : out std_logic_vector (3 downto 0);end counter_10;architecture Behavioral of counter_10 issignal count1:std_logic_vector(3 downto 0):=0000;signal count2:std_logic_vector(3 downto 0):=0000;signal count3:std_logic_vector(3 downto 0):=0000;signal count4:std_logic_vector(3 downto 0):=0000;signal
22、count5:std_logic_vector(3 downto 0):=0000;signal count6:std_logic_vector(3 downto 0):=0000;begincn1=count1;cn2=count2;cn3=count3;cn4=count4;cn5=count5;cn6=count6;process(ce_signal,clr,en) isbeginif clr=1 thencount1=0000;count2=0000;count3=0000;count4=0000;count5=0000;count6=0000;over_l=0;elsif risin
23、g_edge(ce_signal) then if en=1 thenif count11001 thencount1=count1+1;else count1=0000;if count21001 thencount2=count2+1;else count2=0000;if count31001 thencount3=count3+1;else count3=0000;if count41001 thencount4=count4+1;else count4=0000;if count51001 thencount5=count5+1;else count5=0000;if count61
24、001 thencount6=count6+1;else count6=0000;over_l=1;end if;end if;end if;end if;end if;end if;end if;end if;end process;end Behavioral;5.锁存器:entity suo_cun isPort ( latch_in , over_in : in std_logic; data_in1 : in std_logic_vector (3 downto 0); data_in2 : in std_logic_vector (3 downto 0); data_in3 : i
25、n std_logic_vector (3 downto 0); data_in4 : in std_logic_vector (3 downto 0); data_in5 : in std_logic_vector (3 downto 0); data_in6 : in std_logic_vector (3 downto 0); over_out : out std_logic; data_out1 : out std_logic_vector (3 downto 0); data_out2 : out std_logic_vector (3 downto 0); data_out3 :
26、out std_logic_vector (3 downto 0); data_out4 : out std_logic_vector (3 downto 0); data_out5 : out std_logic_vector (3 downto 0); data_out6 : out std_logic_vector (3 downto 0);end suo_cun;architecture Behavioral of suo_cun isbeginprocess(latch_in)beginif rising_edge(latch_in) thenover_out=not over_in
27、;data_out1=data_in1;data_out2=data_in2;data_out3=data_in3;data_out4=data_in4;data_out5=data_in5;data_out6data=data1;xs_outdata=data2;xs_outdata=data3;xs_outdata=data4;xs_outdata=data5;xs_outdata=data6;xs_outdata=1111;xs_outdpdpdp dpsegsegsegsegsegsegsegsegsegsegseg=1111111;end case;end process;end B
28、ehavioral;7.top程序:library ieee;use ieee.std_logic_1164.ALL;use ieee.numeric_std.ALL;library UNISIM;use UNISIM.Vcomponents.ALL;entity top_fan is port ( ce_liang : in std_logic; clk : in std_logic; s : in std_logic_vector (2 downto 0); cnte_5 : out std_logic; cnte_6 : out std_logic; dot_out : out std_
29、logic; light_out : out std_logic; over_out : out std_logic; seg : out std_logic_vector (6 downto 0); sel : out std_logic_vector (5 downto 0);end top_fan;architecture BEHAVIORAL of top_fan is signal cnte_1 : std_logic; signal cnte_2 : std_logic; signal cnte_3 : std_logic; signal cnte_4 : std_logic; s
30、ignal cnte_7 : std_logic; signal cnte_9 : std_logic_vector (3 downto 0); signal cnte_10 : std_logic_vector (3 downto 0); signal cnte_11 : std_logic_vector (3 downto 0); signal cnte_12 : std_logic_vector (3 downto 0); signal cnte_13 : std_logic_vector (3 downto 0); signal cnte_14 : std_logic_vector (
31、3 downto 0); signal cnte_15 : std_logic_vector (3 downto 0); signal cnte_16 : std_logic_vector (3 downto 0); signal cnte_17 : std_logic_vector (3 downto 0); signal cnte_18 : std_logic_vector (3 downto 0); signal cnte_19 : std_logic_vector (3 downto 0); signal cnte_20 : std_logic_vector (3 downto 0);
32、 signal cnte_5_DUMMY : std_logic; signal cnte_6_DUMMY : std_logic; signal light_out_DUMMY : std_logic; component control port ( insignal : in std_logic; gate : out std_logic; latch : out std_logic; reset : out std_logic); end component; component counter_10 port ( ce_signal : in std_logic; clr : in
33、std_logic; en : in std_logic; over_l : out std_logic; cn1 : out std_logic_vector (3 downto 0); cn2 : out std_logic_vector (3 downto 0); cn3 : out std_logic_vector (3 downto 0); cn4 : out std_logic_vector (3 downto 0); cn5 : out std_logic_vector (3 downto 0); cn6 : out std_logic_vector (3 downto 0);
34、end component; component div_f port ( clk : in std_logic; fp_10 : out std_logic; fp_100 : out std_logic; fp_1k : out std_logic); end component; component sele port ( f1 : in std_logic; f10 : in std_logic; f100 : in std_logic; s : in std_logic_vector (2 downto 0); fref : out std_logic; dp1 : out std_
35、logic_vector (2 downto 0); end component; component shao_miao port ( f1k : in std_logic; dp2 : in std_logic_vector (2 downto 0); data1 : in std_logic_vector (3 downto 0); data2 : in std_logic_vector (3 downto 0); data3 : in std_logic_vector (3 downto 0); data4 : in std_logic_vector (3 downto 0); dat
36、a5 : in std_logic_vector (3 downto 0); data6 : in std_logic_vector (3 downto 0); dp : out std_logic; xs_out : out std_logic_vector (5 downto 0); seg : out std_logic_vector (6 downto 0); end component; component suo_cun port ( latch_in : in std_logic; over_in : in std_logic; data_in1 : in std_logic_v
37、ector (3 downto 0); data_in2 : in std_logic_vector (3 downto 0); data_in3 : in std_logic_vector (3 downto 0); data_in4 : in std_logic_vector (3 downto 0); data_in5 : in std_logic_vector (3 downto 0); data_in6 : in std_logic_vector (3 downto 0); over_out : out std_logic; data_out1 : out std_logic_vec
38、tor (3 downto 0); data_out2 : out std_logic_vector (3 downto 0); data_out3 : out std_logic_vector (3 downto 0); data_out4 : out std_logic_vector (3 downto 0); data_out5 : out std_logic_vector (3 downto 0); data_out6 : out std_logic_vector (3 downto 0); end component; begin cnte_5 = cnte_5_DUMMY; cnt
39、e_6 = cnte_6_DUMMY; light_out cnte_4, gate=light_out_DUMMY, latch=cnte_6_DUMMY, reset=cnte_5_DUMMY); Part_2 : counter_10 port map (ce_signal=ce_liang, clr=cnte_5_DUMMY, en=light_out_DUMMY, cn1(3 downto 0)=cnte_9(3 downto 0), cn2(3 downto 0)=cnte_10(3 downto 0), cn3(3 downto 0)=cnte_11(3 downto 0), cn4(3 downto 0)=cnte_12(3 downto 0), cn5(3 d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校教学课件教学课件
- 七年级生物下册知识点(济南版)
- 中山大学排球教案
- 临时仓储设施转租协议
- 交通运输服务创新投标管理
- 互联网公司技术支持人员就业合同
- 人才招聘定金协议书
- 仓库租赁合同书范本制造业版
- 个人合伙协议书撰写指南
- 企业现金支票管理规范
- 动火作业施工方案5篇
- 河南省郑州市第四中学教育集团2024-2025学年七年级上学期期中地理试题
- 八年级生物中考备考计划
- 2024-2030年全球及中国湿巾和卫生纸行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2024高考物理一轮复习 第13讲 牛顿第二定律的基本应用(课件)
- 公务员2019年国考《申论》真题及答案(省级)
- 职业技术学院材料工程技术专业调研报告
- 五年级阅读《概括题专项训练》
- 【九上沪科版数学】安徽省安庆市2023-2024学年九年级上学期期中数学试题
- 书法鉴赏 (浙江财大版)学习通超星期末考试答案章节答案2024年
- 043.中国老年心肺复苏急诊专家共识2024
评论
0/150
提交评论