电子科技大学-电子技术实验-FPGA-频率计-实验报告(共25页).doc

上传人:飞****2 文档编号:15014702 上传时间:2022-05-10 格式:DOC 页数:25 大小:934KB
返回 下载 相关 举报
电子科技大学-电子技术实验-FPGA-频率计-实验报告(共25页).doc_第1页
第1页 / 共25页
电子科技大学-电子技术实验-FPGA-频率计-实验报告(共25页).doc_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《电子科技大学-电子技术实验-FPGA-频率计-实验报告(共25页).doc》由会员分享,可在线阅读,更多相关《电子科技大学-电子技术实验-FPGA-频率计-实验报告(共25页).doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上现代电子技术综合实验论文报告XX XXX中文摘要摘 要:随着电子信息产业的不断发展,信号频率的测量在科技研究和实际应用中的作用日益重要。传统的频率计通常是用很多的逻辑电路和时序电路来实现的,这种电路一般运行缓慢,而且测量频率的范围比较小。考虑到上述问题,本文设计一个基于FPGA技术的数字频率计。首先,我们把方波信号送入计数器里进行计数,获得频率值;最后把测得的频率数值送入显示电路里进行显示。本文从频率计的具体设计触发,详细阐述了基于FPGA的数字频率计的设计方案,设计了各模块的代码,并对硬件电路进行了仿真。关键词:FPGA,VHDL,频率计,测量一、 引言随着电子信息

2、产业的发展,信号作为其最基础的元素,其频率的测量在科技研究和实际应用中的作用日益重要,而且需要测频的范围也越来越宽。传统的频率计通常采用组合电路和时序电路等大量的硬件电路构成,产品不但体积较大,运行速度慢,而且测量范围低,精度低。因此,随着对频率测量的要求的提高,传统的测频的方法在实际应用中已不能满足要求。因此我们需要寻找一种新的测频的方法。随着FPGA技术的发展和成熟,用FPGA来做为一个电路系统的控制电路逐渐显示出其无与伦比的优越性。因此本采用FPGA来做为电路的控制系统,设计一个能测量10Hz到100MHz的数字频率计。用FPGA来做控制电路的数字频率计测量频率精度高,测量频率的范围得到

3、很大的提高。二、 项目任务与设计思路1、 实验项目数字频率计的设计2、 实验指标被测输入信号:方波测试频率范围为:10Hz100MHz 量程分为三档:第一档:闸门时间为1S时,最大读数为999.999KHz 第二档:闸门时间为0.1S时,最大读数为9999.99KHz 第三档:闸门时间为0.01S时,最大读数为99999.9KHz显示工作方式:a、用六位BCD七段数码管显示读数。 b、采用记忆显示方法 c、实现对高位无意义零的消隐。 3、 实验思路根据实验指标,将电路设计分成6个模块:分频器,闸门选择,门控电路,计数器,锁存器,显示控制。三、 基于VHDL方法的设计方案1、 设计方框图2、 具

4、体说明石英振荡器:48MHz的晶振信号。分频器:将48MHz的信号分频成1Hz,10Hz,100Hz的基准频率;同时产生1kHz的信号作为扫描显示控制子系统的时钟。闸门选择开关:设置三个开关sel1,sel10,sel100。闸门选择:设置一个选择频率输出和三个小数点输出dp1,dp2,dp3。根据闸门选择开关的信号,当se11有效而其他两个无效时,选择频率输出1Hz信号,dp1,dp2,dp3分别输出0,1,1;当sel10有效而其他两个无效时,选择频率输出10Hz信号,dp1,dp2,dp3分别输出1,0,1;当sel100有效而其他两个无效时,选择频率输出100Hz信号,dp1,dp2,

5、dp3分别输出1,1,0。门控电路:根据选择频率信号产生闸门信号(计数器使能信号),清零信号,锁存使能信号,各信号的时序关系如图所示:计数器:考虑采用6个10进制计数器同步级联的方法。锁存器:门控电路产生的锁存使能信号的上升沿触发。扫描显示控制子系统:考虑该系统由三部分组成:预显示部分,消隐部分,显示部分。预显示部分:设计一个选择信号switch负责选择对应的LED灯(根据1kHz),并根据传来的数据,产生对应的数码管使能信号序列led(6:0)。消隐部分:设计一个信号hide(5:0),该信号的每一位分别代表一个LED灯,若该信号某一位为1,则对应的LED灯消隐。hide信号的赋值根据dp1

6、,dp2,dp3的值以及高位的数据是否为零决定。显示部分,设置一个使能输出信号G,并令它为低电平,根据hide信号和led信号以及dp1,dp2,dp3信号决定最终的输出。四、 系统电路设计五、 系统单元模块设计1、 分频器entity freq_divider isport(clkin: in std_logic; clkout1: out std_logic; clkout10: out std_logic; clkout100: out std_logic; clkout1k: out std_logic);end freq_divider;architecture Behavioral

7、 of freq_divider issignal clkcnt1: integer range 0 to :=0;signal clkcnt10: integer range 0 to :=0;signal clkcnt100: integer range 0 to :=0;signal clkcnt1k: integer range 0 to 48000:=0;signal clk1,clk10,clk100,clk1k: std_logic:=1; beginfc1: process(clkin) begin if rising_edge(clkin) then if clkcnt1=

8、then clkcnt1=1; clk1= not clk1; else clkcnt1=clkcnt1+1; end if; end if; end process; fc10: process(clkin) begin if rising_edge(clkin) then if clkcnt10= thenclkcnt10=1;clk10= not clk10; else clkcnt10=clkcnt10+1;end if; end if; end process; fc100: process(clkin) begin if rising_edge(clkin) then if clk

9、cnt100= then clkcnt100=1; clk100= not clk100; else clkcnt100=clkcnt100+1; end if; end if; end process; fc1k: process(clkin) begin if rising_edge(clkin) then if clkcnt1k=24000 thenclkcnt1k=1;clk1k= not clk1k; else clkcnt1k=clkcnt1k+1;end if; end if; end process;- assignmentclkout1=clk1;clkout10=clk10

10、;clkout100=clk100;clkout1k=clk1k;end Behavioral;2、 闸门选择entity gate_sel isport(se1: in std_logic; se10: in std_logic; se100: in std_logic; f1: in std_logic; f10: in std_logic; f100: in std_logic; fref: out std_logic; dp1: out std_logic; dp2: out std_logic; dp3: out std_logic);end gate_sel;architectur

11、e Behavioral of gate_sel issignal sel: std_logic_vector(2 downto 0):=000;beginselfref=f1;dp1=0;dp2=1;dp3 fref=f10;dp1=1;dp2=0;dp3fref=f100;dp1=1;dp2=1;dp3fref=0;dp1=1;dp2=1;dp3=1;end case;end process;end Behavioral;3、 门控电路entity gate_con isport(Bsignal: in std_logic; gate,reset,latch: out std_logic)

12、;end gate_con;architecture Behavioral of gate_con issignal gate_tmp: std_logic:=0;signal latch_tmp: std_logic:=0;beginprocess(Bsignal) begin if rising_edge(Bsignal) then gate_tmp= not gate_tmp;end if; if falling_edge(Bsignal) then latch_tmp= not gate_tmp;end if;end process;gate=gate_tmp;latch=latch_

13、tmp;reset=(not Bsignal)and(not gate_tmp)and(latch_tmp);end Behavioral;4、 计数器entity conunter isport(count_en: in std_logic; Csignal: in std_logic; clear: in std_logic; carry_out:out std_logic; result: out std_logic_vector(3 downto 0);end conunter;architecture Behavioral of conunter is signal count: s

14、td_logic_vector(3 downto 0):=0000; signal co_tmp: std_logic:=0;beginprocess(count_en,Csignal,clear)beginif clear=1 thencount=0000;elseif rising_edge(Csignal) thenif count_en=1 thenif count=1001 thencount=0000;else count=count+1;end if;end if;end if;end if;end process;process(count,clear)beginif clea

15、r=1 thenco_tmp=0;elseif count=1001 and count_en=1 thenco_tmp=1;elseco_tmp=0;end if;end if;end process;carry_out=co_tmp;result=count;end Behavioral;5、 锁存器entity latch isport(latchin: in std_logic; overin: in std_logic; numin1: in std_logic_vector(3 downto 0); numin2: in std_logic_vector(3 downto 0);

16、numin3: in std_logic_vector(3 downto 0); numin4: in std_logic_vector(3 downto 0); numin5: in std_logic_vector(3 downto 0); numin6: in std_logic_vector(3 downto 0); overout: out std_logic; numout1: out std_logic_vector(3 downto 0); numout2: out std_logic_vector(3 downto 0); numout3: out std_logic_vec

17、tor(3 downto 0); numout4: out std_logic_vector(3 downto 0); numout5: out std_logic_vector(3 downto 0); numout6: out std_logic_vector(3 downto 0);end latch;architecture Behavioral of latch isbeginprocess(latchin,overin,numin1,numin2,numin3,numin4,numin5,numin6)begin if rising_edge(latchin) thennumout

18、1=numin1;numout2=numin2;numout3=numin3;numout4=numin4;numout5=numin5;numout6=numin6;overout=overin;end if;end process;end Behavioral;6、 显示控制entity present_con isport(f1khz: in std_logic; q_over: in std_logic; freq_value0: in std_logic_vector(3 downto 0); freq_value1: in std_logic_vector(3 downto 0);

19、 freq_value2: in std_logic_vector(3 downto 0); freq_value3: in std_logic_vector(3 downto 0); freq_value4: in std_logic_vector(3 downto 0); freq_value5: in std_logic_vector(3 downto 0); dp1: in std_logic; dp2: in std_logic; dp3: in std_logic; G: out std_logic; ledout: out std_logic_vector(6 downto 0)

20、; sel: out std_logic_vector(2 downto 0); dp: out std_logic);end present_con;architecture Behavioral of present_con issignal switch: std_logic_vector(2 downto 0):=000;signal value_tmp: std_logic_vector(3 downto 0):=0000;signal led: std_logic_vector(6 downto 0):=;signal dp_tmp: std_logic_vector(2 down

21、to 0):=000;signal hide: std_logic_vector(5 downto 0):=;begin- clk -process(f1khz)beginif rising_edge(f1khz) thenif switch=101 thenswitch=000;elseswitch value_tmp value_tmp value_tmp value_tmp value_tmp value_tmp value_tmp led led led led led led led led led led led = ;end case;end process;dp_tmpif f

22、req_value5=0000 thenif freq_value4=0000 thenhide=;elsehide=;end if;elsehideif freq_value5=0000 thenif freq_value4=0000 then if freq_value3=0000 then hide=;elsehide=;end if;elsehide=;end if;elsehideif freq_value5=0000 thenif freq_value4=0000 then if freq_value3=0000 then if freq_value2=0000 then hide

23、=;else hide=;end if;else hide=;end if;elsehide=;end if;else hidehideledout=;dpledout=;dpledout=;dpledout=;dpledout=;dpledout=;dpledout=;dpif hide(0)=1 thenledout=;dp=1;elseledout=led;dpif hide(1)=1 thenledout=;dp=1;elseledout=led;if dp_tmp=110 thendp=0;elsedpif hide(2)=1 thenledout=;dp=1;elseledout=

24、led;if dp_tmp=101 thendp=0;elsedpif hide(3)=1 thenledout=;dp=1;elseledout=led;if dp_tmp=011 thendp=0;elsedpif hide(4)=1 thenledout=;dp=1;elseledout=led;dpif hide(5)=1 thenledout=;dp=1;elseledout=led;dpledout=;dp=1;end case;end if;end process;sel=switch;G=0;end Behavioral;六、 系统硬件实现与调试管脚分配:NET clk LOC

25、 = T8;NET dp LOC = C11;NET en LOC = D7;NET led LOC = B14;NET led LOC = A13;NET led LOC = C13;NET led LOC = C12;NET led LOC = A12;NET led LOC = B12;NET led LOC = A11;NET sel LOC = F8;NET sel LOC = D8;NET sel LOC = E7;NET sig_in LOC = C16;NET sel1 LOC = L10;NET sel10 LOC = F10;NET sel100 LOC = F9;仿真:1

26、、 分频器processbeginclkin=1;wait for 1 ps;clkin=0;wait for 1 ps;end process;2、 闸门选择processbeginse1=1;se10=0;se100=0;wait;end process;processbeginf1=1;wait for 100 ps;f1=0;wait for 100 ps;end process;processbeginf10=1;wait for 50 ps;f10=0;wait for 50 ps;end process;processbeginf100=1;wait for 10 ps;f100

27、=0;wait for 10 ps;end process;3、 门控电路processbeginBsignal=0;wait for 100 ps;Bsignal=1;wait for 100 ps;end process;4、 计数器processbegincount_en=1;wait;end process;processbeginCsignal=1;wait for 10 ps;Csignal=0;wait for 10 ps;end process;processbeginclear=0;wait for 10 us;clear=1;wait for 10 ps;end proce

28、ss;5、 锁存器processbeginlatchin=0;wait for 400 ps;latchin=1;wait for 100 ps;end process;processbeginoverin=0;wait;end process;processbeginnumin1=0001;wait for 10 ps;numin1=0000;wait for 10 ps;end process;processbeginnumin2=0010;wait for 20 ps;numin2=0100;wait for 20 ps;end process;processbeginnumin3=01

29、01;wait for 30 ps;numin3=0001;wait for 30 ps;end process;processbeginnumin4=0111;wait for 40 ps;numin4=0100;wait for 40 ps;end process;processbeginnumin5=0011;wait for 50 ps;numin5=0010;wait for 50 ps;end process;processbeginnumin6=0101;wait for 60 ps;numin6=0110;wait for 60 ps;end process;6、 显示部分pr

30、ocessbeginf1khz =1;wait for 10 ps;f1khz =0;wait for 10 ps;end process;processbeginq_over =0;wait;end process;processbeginfreq_value0 =0100;freq_value1 =0101;freq_value2 =0010;freq_value3 =0101;freq_value4 =0000;freq_value5 =0000;wait;end process;processbegindp1=0;dp2=1;dp3=1;wait;end process;7、 系统仿真

31、processbeginclk = 1;wait for 10 ps;clk = 0;wait for 10 ps;end process;processbeginsel1 = 1;sel10 = 0;sel100 = 0;wait;end process;processbeginsig_in = 1;wait for 100 us;sig_in = 0;wait for 100 us;end process;七、 结束语故障:数码管显示的示数是实际值的一半问题症结:分频器计数信号值范围小了。解决办法:放大范围。感想:通过此次实验,了解了基于FPGA的数字频率计设计,学会了简单的HDL代码编写,对以后的学习很有帮助。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁