欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于FPGA的波形发生器的设计.doc

    • 资源ID:88149812       资源大小:288KB        全文页数:10页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于FPGA的波形发生器的设计.doc

    基于FPGA的波形发生器的设计(南华大学 湖南 衡阳 421001)指导老师:摘 要:利用FPGA完成波形发生器的设计,可以产生频率和幅值都可调的正弦波和三角波。首先对标准波形进行采样,然后经过DA转换和滤波输出平滑的波形。采用VHDL硬件描述语言完成波形发生和存储程序编写,并下载到Xilinx公司的Spartan系列目标芯片XC2S2005PQ-208上调试通过,得到的波形好,可达到技术指标。关键词:FPGA,VHDL,采样,正弦波,三角波 Design of Wave-Generator Based on FPGACao Xueke Tian Dandan Tan Xianfeng (Nanhua University HengYang Hunan 421001) Teacher:Wang Yan Abstact:Design the Wave-Generator based on FPGA. It can generate sine wave and triangle wave. First, it samples the standard wave, then generates a smooth wave after DA converter and filter. Using hardware design language VHDL to finish the wave generation and storage and downloading it into the object chip of XC2S2005PQ-208 Spartan,Series, Xilinx, Co. The waves are well done and can reach the technique index. Keywords:FPGA, VHDL, sampleing, sine wave, triangle wave目 录第一章 系统设计11.1 设计要求 .1 1.1.1 基本部分.1 1.1.2 发挥部分.11.2 总体设计方案.1 1.2.1 方案比较.1 1.2.2 系统组成及工作原理.2第二章 单元电路设计.42.1 时钟的设计42.2 状态机的设计.5 2.2.1 状态机设计的优越性5 2.2.2 实现方法.5第三章 软件设计3第四章 系统测试44.1 测试使用的仪器44.4431 频率和幅度测试.5431测试结果.5第五章 结束语5第六章 参考文献5附录.5程序清单.5第一章 系统设计1.1 设计要求1.1.1 基本部分 设计一波形发生器,可以产生频率和幅值都可调的正弦波。1.1.2 发挥部分在产生正弦波的基础上,可产生三角波或其它任意波形。1.2 总体设计方案方案一:采用模拟分立元件或单片机压控函数发生器来完成设计。可产生方波,正弦波,三角波,通过调整外部元件可以改变输出频率,但是采用模拟器件分散性大,产生的频率稳定性较差、精度低、抗干扰能力差、成本也比较高。方案二:由单片机来完成设计。目前,单片机的功能已比较强大,集成度日益增高且其设计和控制比较容易。但是由于在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路,因此整个系统显得十分复杂,随着正弦波或三角波采用数据的增加,需要占用系统很多存储资源,造成其抗干扰性差,在运行过程中容易死机或进入死循环,可靠性降低,而功耗费用增高。方案三:利用FPGA来完成设计。FPGA编程灵活,可以实现三角波和正弦波的数字化处理,将一个周期内的采样点存储起来,生成频率和幅值都可调的正弦波或者三角波,再通过D/A转换和滤波电路便可得到模拟波形。利用该方法,编程简单,实现灵活。综上,选择方案三来完成设计。完整的系统由4个部分组成:波形发生控制电路,波形数据ROM,D/A转换和滤波电路。波形发生控制电路由FPGA来完成,正弦波在一个周期内的波形可以通过数字采样,即用N个幅值离散的等间隔采样点表示。如图1-2-3-1为正弦波和三角波采样的原理,设其周期为T,采样点数为N,采样间隔为t,T=N*t。那么就可以得到图示的数字信号。要改变其频率只需要改变其采样的时间间隔t,由于采样点数N不变,N=t*T,因此,t越小,T就越大,对应的频率就越大。再通过数模转换,便可以得到光滑的正弦波和三角波。 图1-2-3-1 正弦波和三角波采样原理图FPGA波形发生控制电路通过外来控制信号和高速时钟信号,向波形数据ROM发出地址信号,ROM的大小由采样点的个数决定。波形ROM中存有发生器的波形数据,如正弦波或三角波数据。当接受来自FPGA的地址信号后,将从数据线输出相应的波形数据。取出采样点的幅值,这样就可以产生数字化的波形。采样点越多,那么得到的波形就越光滑,但是相应的存储器的容量就需要得越大,因此,需要正确的选择采样点数。 图1-2-3-2 系统工作原理图图1-2-3-2为其系统工作原理框图。D/A转换器负责将ROM输出的数据转换为模拟信号,经滤波电路后输出。输出波形的上限频率和D/A器件的转换速度有重要关系,采用的是DAC0832作为A/D转换器件。第二章 单元电路设计2.1 输入模块设计 输入模块采用普通的按键输入,即通过按键选择输出波形是正弦波还是三角波,同时也通过键盘输入来改变波形的幅值和频率。 波形发生模块的设计 由于波形发生控制器和波形数据ROM都是利用硬件描述语言VHDL编程实现的,所以统称为波形发生模块。波形发生控制器的作用是利用FPGA选择产生正弦波或者三角波,然后再发出地址信号,取ROM中存好的正弦波或三角波的采样数据。波形发生模块包括幅度设置、正弦波/三角波切换和频率设置三个进程。幅度设置模块可以对输出波形的幅度进行设置。可以得到基波幅度的110倍幅度值。正弦波/三角波切换进程的作用是完成通过按键来选择输出三角波或者三角波。频率设置进程主要是对输出的频率进行设置,在前面已经介绍过正弦波发生的原理,基于此原理,在程序设计的时候,只要合适的改变采样点的时间间隔就可完成频率设置。ROM数据存储模块主要是用来存储正弦波或者三角波的数据。当接收来自FPGA的地址信号后,将从数据线输出相应的波形数据,这样便得到数字化的波形。由于所选的D/A转换器一次只能转化8位二进制码,而且模拟波的电压幅度由幅度比例系数决定Vo=(Vr/)*K,所以限定了波形的幅值比例系数为0-255。如果相邻之间的采样点所对应的幅值比例系数是线性变化的,则波形是一个三角波,而如果是非线性变化的,那得到的就是正弦波。对波形采样点数目越多,波形的精准度越高,但随着采样点数的增加,需要的ROM数量也会增加,会消耗系统更多资源,实验证明,只要在一个周期内的取样点数超过32个就可实现较准确的正弦波形。在本系统中,取采样点数为64个。每个采样点都对应了该点的幅值比例系数。每个ROM单元对应一个地址值,FPGA只要向ROM存储器输入相应的地址值就可以确定其幅值。 D/A转换模块的设计 D/A转换器负责将ROM输出的数据转换成模拟信号,经滤波电路后输出。输出波形分频率上限与D/A器件的转换速度由重要关系。采用的是DAC0832作为A/D转换器件。DAC0832是8位D/A转换器,转换周期为1s,其引脚信号可以直接与FPGA目标芯片相接。图2-3-1为其芯片的引脚图。各引脚的说明如下:ILE:数据锁存允许控制信号输入口线,高电平有效;WR1、WR2:写信号1、2,低电平有效;XFER:数据传输控制信号,低电平有效;VREF:基准电压,可正可负,-10V+10V;RFB:反馈电阻端;IOUT1/IOUT2:电流输出端;AGND/DGND:模拟地与数字地。在高速情况下,此二GND地的连接线必须尽可能短,且系统的单点接地点 图2-3-1 DAC0832引脚图须接在此连续的某一点上。程序中的正弦波或者三角波的波形数据由64个点构成,此数据经DAC0832,并经过滤波器后,得到光滑的正弦波。D/A转换量是以电流形式输出的,所以必须将其变为电压信号才能送入滤波电路。 滤波电路模块的设计 滤波电路可考虑采用二阶巴特沃兹低通滤波器或者RC低通滤波器。巴特沃兹滤波器的幅度函数是单调下降的,由于n阶低通巴特沃斯滤波器的前(2n-1)阶导数在=0处为零,所以巴特沃斯滤波器也称为最大平坦幅度滤波器,该方案滤波性能较好,但构造和参数设置比较复杂。价格也比较昂贵。而RC低通滤波器可以消除在信号产生 图2-3-2 RC滤波电路图 过程中有干扰性的高频信号,由于不须运算发大器,参数 计算容易,对系统要求不高。因此在本设计中,利用RC低通滤波器就可以达到要求。第三章 软件设计相关软件采用VHDL硬件描述语言编写。VHDL是用于逻辑设计的硬件描述语言,为IEEE标准。利用它,硬件的功能描述可完全在软件上实现。它支持自顶向下(Top Down)和基于库(Library_Based)的设计方法,支持同步电路、异步电路、FPGA以及等随机电路的设计,范围很广,语言的语法比较严格,给阅读和使用都带来极大好处。软件设计分为三个进程。正弦波/三角波切换进程,频率幅值设置进程,以及波形数据ROM,ROM中存储的是产生波形的采样点数据。如正弦波,分为64个采样点,最高采样点值为255,对应的八位二进制数为11111111,第二个采样点为254,对应的八位二进制数为11111110。如果预置的八位二进制数为11111110,那么时钟跳变一次就产生一个脉冲来让FPGA取出波形数据ROM中的采样点数据,变化比较快,相应的t就比较小,得到的波形频率就高;如果预置的数是11110101,即245,那么就要过10个脉冲才会采样一次,因此t就比较大,得到的波形频率就小。第四章 系统测试示波器:绿扬YB4365,100MHz,江苏扬中电子仪器厂;直流电压源:DF1731SC2A;FPGA实验仪:DP-FPGA,广州致远电子;频率计:SP-1500A等精度频率计,南京盛普电子实业。系统测试在清华TPG_FPGA实验箱上进行,引脚锁定后将程序下载到Xilinx公司的目标芯片Spartan系列的XC2S200-5PQ208上调试通过。可以在示波器上看到平滑的正弦波和三角波波形,切换和频率幅度的设置都可以达到预期的效果。431 频率和幅度测试表1 频率和幅度测试结果频率设置/KHz所测频率/KHz幅度设置/V所测幅度有效值峰峰值3.00432 测试结果 由表中数据可看出,该方法可实现两种正弦波和三角波两种波形的切换,并且得到平滑的频率和幅值都可调的波形。但是在频率高的地方会有一定的误差。第五章 结束语由以上的分析和实验结果可以看出,利用FPGA来完成波形发生器的设计,使其产生频率和幅值可调的正弦波和三角波的方法行之有效。利用VHDL硬件描述语言完成程序的设计,并且下载到Xilinx公司Spartan芯片上调试通过,在示波器上得到的波形和期望值一致。如果修改一下程序还可以得到其他的任意波形,简单易行,利于控制。第六章 参考文献1李冬梅.PLD器件与EDA技术M. 北京:北京光播学院出版社,2000年第一版2赵俊超.集成电路设计VHDL教程M.北京:北京希望电子出版社,2002年第一版4甘历.VHDL应用与开发实践M.北京:科技出版社.2003年 第一版第七章 附录程序清单功能:产生正弦波或三角波信号说明:基于VHDL硬件描述语言在在Xilinx公司的Spartan系列的XC2S2005PQ-208芯片上实现最后修改时间:2003年7月28日library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity sin_rec is Port ( clk ,reset: in std_logic; sinm: in std_logic_vector(3 downto 0); -正弦波或三角波的幅度设置 dataf : in std_logic_vector(7 downto 0);-频率预置 conver: in std_logic_vector(1 downto 0);-正弦波与三角波的设置的切换 dd : out std_logic_vector(8 downto 0); -正弦波输出 ss:out std_logic_vector(8 downto 0); -三角波输出 dd :out integer range 765 downto 0 );end sin_rec;architecture Behavioral of sin_rec is signal q :integer range 63 downto 0 ; -正弦波数据点signal q2: integer range 64 downto 0; -三角波数据点signal n0,n,n2:integer range 1 to 12; -正弦波或三角波的幅度档位 signal dataf0,count8,dataf22,count9,d,s: integer range 255 downto 0 ;-频率设定系数signal fss,fss2 :std_logic;beginprocess(reset,clk) variable count: integer range 0 to 1600;-16000-10KHZ; variable bclk0: std_logic; begin if reset='1' then bclk0:='0'count:=0; elsif clk'event and clk='1' then if count=1 then -16000 bclk0:=not bclk0; count:=0; else count:=count+1; end if;end if; bclk<=bclk0;end process;ctrsinm_recm:process(bclk) -正弦波与三角波切换控制进程begin if bclk'event and bclk='1' then if conver="10" then -调正弦波的频率和幅度 dataf0<=conv_integer(dataf);n<=n0; elsif conver="01" then -调三角波的频率和幅度 dataf22<=conv_integer(dataf);n2<=n0; else null; end if;end if;end process ctrsinm_recm;sinm_pro:process(bclk) -调幅进程 begin if rising_edge(bclk) then case sinm is when "0000" => n0<=1; -输出8位基波(幅度最小,频率可调) when "0001" => n0<=2; -输出两倍基波幅度的波形(正弦波或三角波)when "0010" => n0<=3; -输出3倍基波幅度的波形(正弦波或三角波)when "0011" => n0<=4; -输出4倍基波幅度的波形(正弦波或三角波)when "0100" =>n0<=5; -输出5倍基波幅度的波形(正弦波或三角波)when "0101" =>n0<=6;-输出6倍基波幅度的波形(正弦波或三角波)when "0110" =>n0<=7;-输出7倍基波幅度的波形(正弦波或三角波)when "0111" =>n0<=8;-输出8倍基波幅度的波形(正弦波或三角波)when "1000" =>n0<=9;-输出9倍基波幅度的波形(正弦波或三角波)when "1001" =>n0<=10;-输出10倍基波幅度的波形(正弦波或三角波)when others=>n0<=1;end case;end if;end process sinm_pro; pulse:process(bclk,reset,conver) -调频率进程 begin if reset='1' then fss<='0' elsif rising_edge(clk) then if count8=255 then count8<=dataf0; fss<='1' else count8<=count8+1;fss<='0'end if;end if; end process pulse; process(fss) beginif rising_edge(fss) then -产生64个点 if q=63 then q<=0; else q<=q+1; end if;end if;end process;process(q,n) -正弦波波形存储,分为64个点 begincase q is when 00=> d<=255;when 01=> d<=254; when 02=> d<=252;when 03=> d<=249; when 04=> d<=245;when 05=> d<=239; when 06=> d<=233;when 07=> d<=225; when 08=> d<=217;when 09=> d<=207;when 10=> d<=197; when 11=> d<=186; when 12=> d<=174;when 13=> d<=162; when 14=> d<=150;when 15=> d<=137; when 16=> d<=124;when 17=> d<=112; when 18=> d<=99; when 19=> d<=87; when 20=> d<=75; when 21=> d<=64; when 22=> d<=53; when 23=> d<=43; when 24=> d<=34; when 25=> d<=26; when 26=> d<=19; when 27=> d<=13; when 28=> d<=8; when 29=> d<=4; when 30=> d<=1; when 31=> d<=0; when 32=> d<=0; when 33=> d<=1; when 34=> d<=4; when 35=> d<=8; when 36=> d<=13; when 37=> d<=19; when 38=> d<=26; when 39=> d<=34; when 40=> d<=43; when 41=> d<=53; when 42=> d<=64; when 43=> d<=75; when 44=> d<=87; when 45=> d<=99; when 46=> d<=112;when 47=> d<=124; when 48=> d<=137;when 49=> d<=150; when 50=> d<=162;when 51=> d<=174; when 52=> d<=186;when 53=> d<=197; when 54=> d<=207;when 55=> d<=217; when 56=> d<=225;when 57=> d<=233; when 58=> d<=239;when 59=> d<=245; when 60=> d<=249;when 61=> d<=252; when 62=> d<=254;when 63=> d<=255; when others => null; end case; end process; -以上是正弦波发生,以下是三角波发生 pulse2:process(bclk,reset,conver) -三角波调频进程 begin if reset='1' then fss2<='0' elsif rising_edge(bclk) then if count9=255 then count9<=dataf22; fss2<='1' else count9<=count9+1;fss2<='0' end if;end if; end process pulse2; process(fss2) begin if rising_edge(fss2) then if q2=64 then q2<=0; -产生65个点else q2<=q2+1; end if;end if; end process; process(q2,n2) -三角波波形存储,分为65个点begin case q2 iswhen 00=> s<=0; when 01=> s<=8; when 02=> s<=16; when 03=> s<=24;when 04=> s<=32; when 05=> s<=40; when 06=> s<=48; when 07=> s<=56; when 08=> s<=64; when 09=> s<=72; when 10=> s<=80; when 11=> s<=88;when 12=> s<=96; when 13=> s<=104;when 14=> s<=112;when 15=> s<=120;when 16=> s<=128;when 17=> s<=136;when 18=> s<=144;when 19=> s<=152;when 20=> s<=160;when 21=> s<=168;when 22=> s<=176;when 23=> s<=184;when 24=> s<=192;when 25=> s<=200;when 26=> s<=208;when 27=> s<=216;when 28=> s<=224;when 29=>s<=232; when 30=> s<=240;when 31=> s<=248;when 32=> s<=255;when 33=> s<=248;when 34=>s<=240; when 35=> s<=232;when 36=> s<=224;when 37=> s<=216;when 38=> s<=208;when 39=> s<=200;when 40=> s<=192;when 41=> s<=184;when 42=> s<=176;when 43=> s<=168;when 44=> s<=160;when 45=> s<=152;when 46=> s<=144;when 47=> s<=136;when 48=> s<=128;when 49=> s<=120;when 50=> s<=112;when 51=> s<=104;when 52=> s<=96; when 53=> s<=88; when 54=> s<=80; when 55=> s<=72;when 56=> s<=64; when 57=> s<=56; when 58=> s<=48; when 59=> s<=40;when 60=> s<=32; when 61=> s<=24; when 62=> s<=16; when 63=> s<=8;when 64=> s<=0; when others => null; end case;end process;ss<=conv_std_logic_vector(s*n2,9); -将十进制的三角波波形量转换成12位二进制输出 dd<=conv_std_logic_vector(d*n,9); -将十进制的正弦波形量转换成12位二进制输出end Behavioral; 附图1 三角波仿真波形附图2 正弦波仿真波形

    注意事项

    本文(基于FPGA的波形发生器的设计.doc)为本站会员(e****s)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开