FPGA1-99MHZ数字频率计可测量占空比.doc_第1页
FPGA1-99MHZ数字频率计可测量占空比.doc_第2页
FPGA1-99MHZ数字频率计可测量占空比.doc_第3页
FPGA1-99MHZ数字频率计可测量占空比.doc_第4页
FPGA1-99MHZ数字频率计可测量占空比.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

物理与机电工程学院课程设计报告课程名称: 电子系统设计 专业班级:2009级电子信息工程(2)班学生姓名: 吴仁路 学 号: 2009041636 指导教师: 赖义汉 完成时间: 2012年9月28日 报告成绩: 评阅意见: 评阅教师 日期 21目录一、设计任务与要求1二、方案设计与论证1方案一1方案二2三、硬件电路设计2四、软件电路设计31分频器模块32十进制计数器模块33. 占空比测量模块44. 扫描显示锁存模块45显示译码器模块46. 3线8线译码器模块4五、仿真过程与仿真结果51、十进制计数模块的仿真结果。52、分频模块的仿真结果53、占空比模块的仿真结果54、3-8译码模块的仿真结果65、显示模块的仿真结果66、顶层模块的仿真结果6六、安装与调试7七、结论与心得9八、参考文献10附录一:VHDL源程序10附录二:原理图及PCB19基于FPGA数字频率计一、设计任务与要求1、设计一个能测量方波信号频率的频率计。2、测量的频率范围是1Hz5MHz。3、结果用十进制数显示。 4、扩展部分:测量输入方波信号的占空比并显示出来。二、方案设计与论证频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。闸门时间可以根据需要取值,大于或小于1 s都可以。闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。一般取1 s作为闸门时间,此测量方法称为直接测频法。由于闸门时间通常不是待测信号的整数倍,这种方法的计数值也会产生最大为1个脉冲误差。进一步分析测量准确度:设待测信号脉冲周期为Tx,频率为Fx,当测量时间为T=1s时,测量相对误差为Tx/T=Tx=1/Fx。由此可知直接测频法的测量准确度与信号的频率有关:当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。方案一:系统采用可编程逻辑器件(CycloneII,如EP2C8Q208C7)作为信号处理及系统控制核心,完成包括分频、计数、锁存、显示等一系列工作。该方案利用了CycloneII的可编程和大规模集成的特点,使电路大为简化。其原理设计框图如图2.1所示。基准时钟复位信号分频十进制计数器数据锁存动态显示译码显示FPGA图2.1 可编程逻辑器件的原理设计框图方案二:采用中小规模数字集成电路,完成频率计测量功能。原理设计框图如图2.2所示。该方案的特点是中小规模集成电路应用技术成熟,能可靠的完成频率计的基本功能,但由于系统功能要求较高,所以电路过于复杂。.通道放大主门计数、锁存、显示电源门控晶体振荡源分频图2.2 数字集成电路的原理设计框图综合以上两种方案,用FPGA来制作会简单一些,所以最终我们选择方案一作为我们此次课程设计的方案。三、硬件电路设计此次课程设计采用的是EP2C8Q208C7芯片的开发板模块,该模块的扩展功能较多,而且有利于我们此次的课程实训设计。该芯片模块是Altera CycloneII系列,其采用PQ208表贴封装;支持EPCS1和EPCS4;8M Byte 高速SDRAM;一片2M*16Bit SDRAM,最高166MHz 读写速度;4M Byte 快速FLASH;一片4M*8Bit 或者 2M*16Bit Flash 读写速度为90ns;灵活的页面方式,可以用来存储FPGA配置文件或者操作系统镜像文件;有9针RS-232串口,可用与计算机的数据通讯;有辅助调试功能和输出端口,包括PS/2鼠标,键盘接口和1602型LCD接口。由于采用现成的开发板,所以此次设计的电路主要是外围数码管显示部份,直接将8位数码管的段选和位选连接到FPGA的I/O口,这样可以减少外围电路的复杂度,并将其用两排双排针直接引出以便于插上EP2C8Q208C7芯片的开发板,这样可以使整体设计更加美观。此次程序设计共分为五个模块和一个顶层模块。其中模块有:十进制计数器模块、分频器模块、占空比模块、扫描显示锁存模块、3线8线译码器模块和显示译码模块。四、软件电路设计1分频器模块通过对50MHZ的晶振时钟进行50M的分频,等到一个1HZ信号。再通过此信号,通过2分频,得到一个0.5HZ的信号,从而得到高电平为1秒的闸门控制信号en来控制计数器的计数时间.再通过对en求反,等到锁存信号load.而清零信号clr则通过en与1HZ信号共同产生.同时对50MHZ信号进行500分频,一个三位的std_logic_vector(2 downto 0)信号在分频信号的驱动下不断加1,等到“000”、“001”、“010”、“011”、“100”、“101”、“110 、“111”八种片选信号,对应8个数码管,从而驱动数码管的动态扫描显示。程序见附页分频器模块。2十进制计数器模块在待测时钟上升沿到来的时候,使用语句“计数器clk1,reset=e4,en=e1,dout=do1,c=c1); u1: counter10 port map( clk=c1,reset=e4,en=e1,dout=do2,c=c2); u2: counter10 port map( clk=c2,reset=e4,en=e1,dout=do3,c=c3); u3: counter10 port map( clk=c3,reset=e4,en=e1,dout=do4,c=c4); u4: counter10 port map( clk=c4,reset=e4,en=e1,dout=do5,c=c5); u5: counter10 port map( clk=c5,reset=e4,en=e1,dout=do6,c=c6); u6: counter10 port map( clk=c6,reset=e4,en=e1,dout=do7,c=c7); u7: counter10 port map( clk=c7,reset=e4,en=e1,dout=do11,c=h); u8: clock port map( clk0=clk,load=e3,clk05hz=e1,clr=e4,clk10k=e2); u9: zhankong port map( clkshu=clk,clkche=clk1,t1=do8,t2=do9); u10: seltime port map( clk=e2,suo=e3,k1=K1,din1=do1,din2=do2,din3=do3,din4=do4,din5=do5,din6=do6,din7=do7,din8=do8,din9=do9,din11=do11,dp=dp,sel=y,daout=do10); u11: display port map(num=do10,led=ledout); u12: weixuan port map(num1=y,wei=weiout); a=ledout(6);b=ledout(5);c=ledout(4);d=ledout(3); e=ledout(2);f=ledout(1);g=ledout(0); s4=weiout(0); s3=weiout(1); s2=weiout(2); s1=weiout(3); s8=weiout(4); s7=weiout(5); s6=weiout(6);s5=weiout(7);end Behavioral;-十进制计数器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter10 is Port ( clk : in std_logic; reset : in std_logic; en: in std_logic; dout : out std_logic_vector(3 downto 0); c:out std_logic);end counter10;architecture Behavioral of counter10 is signal count : std_logic_vector(3 downto 0);begin dout = count; process(clk,reset) begin if reset=1then count=0000; c=0; elsif rising_edge(clk) then if en=1then if count = 1001 then count = 0000; c=1; else count = count+1; c=0; end if; end if;end if; end process;end Behavioral;-分频器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clock isport( clk0:in std_logic; load,clk05hz,clr,clk10k:out std_logic );end entity clock;architecture run of clock issignal en1hz,en05hz,en10khz ,en: std_logic;beginonehz:process(clk0) -产生1HZ信号variable cnt:integer range 0 to 50000000;variable x:std_logic;beginif(clk0event and clk0=1) then if(cnt24999999) then cnt:=cnt+1; else cnt:=0; x:=not x; end if;en1hz=x;end if;end process onehz;zreo5hz:process(en1hz) -产生0.5HZ信号beginif(en1hzevent and en1hz=1) then en05hz= not en05hz;end if;clk05hz=en05hz;end process ;locks:process(en05hz) -对en05hz信号进行取反,得到锁存信号loadbeginload=not en05hz;end process ;clr1:process(en1hz,en05hz) -由en信号与1HZ信号共同产生清零信号clrbeginif(en1hz=0and en05hz=0) thenclr=1;else clr=0;end if;end process ;tenkhz:process(clk0) -对50MHZ信号进行500分频variable cnt1:integer range 0 to 50000000;variable x1:std_logic;beginif(clk0event and clk0=1) then if(cnt1250) then cnt1:=cnt1+1; else cnt1:=0; x1:=not x1; end if;clk10k0) thenx2:=x;x10) theny2:=y;y1=y2;y:=0;end if;end if;end process;q2:process(x1,y1) -求出占空比,并且通过乘以100得到整数形式variable z1:integer range 0 to 100;beginz1:=(x1*100)/(x1+y1);zr1:=0000;when 1=r1:=0001;when 2=r1:=0010;when 3=r1:=0011;when 4=r1:=0100;when 5=r1:=0101;when 6=r1:=0110;when 7=r1:=0111;when 8=r1:=1000;when 9=r1:=1001;when others=r1:=1111;end case;case u10 is -十位译码when 0=r2:=0000;when 1=r2:=0001;when 2=r2:=0010;when 3=r2:=0011;when 4=r2:=0100;when 5=r2:=0101;when 6=r2:=0110;when 7=r2:=0111;when 8=r2:=1000;when 9=r2:=1001;when others=r2:=1111;end case;t1=r1; -传送到译码显示电路t2ledledledledledledledledledledled=0000000; end case; end process;end Behavioral;-扫描显示锁存模块library ieee;use ieee.std_lo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论