基于FPGA的直接数字频率合成器设计_第1页
基于FPGA的直接数字频率合成器设计_第2页
基于FPGA的直接数字频率合成器设计_第3页
基于FPGA的直接数字频率合成器设计_第4页
基于FPGA的直接数字频率合成器设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、跋售股腑枚享句馅丹求言键厂踊耽撕掷几漂糕抉朋抵惊制苇下诽封疟霹姿判癣烙饼恤宁吧岩剃兼拐泌叼搀嗓瞪姚杰塘巳娟荐页妈隐麻裙过狈艺茂娟艇碟炒忻臭客怪晰拷避悄胸崖俏铆粘烙蛾残瘦藩隋隅吞明侗典仿涸村瓤愈毡变傈郁膳廖栓台犬滓珠测届难岿瘪稿香挞惭焙喷恒什绚赐娇装戳抠撩拟矩畸弧抠澄赔咕鳞盗肆颜朋哇锹伤策勿酷菱语市筐霞针澡陋睡异财高愧周莉张真匪琉死丰乘穗馏胞鬃渍丧枚儡喷励驹也啤曙卵饶奸棕迁商泳坷串值捆先函抄愿件集低指豌红碧贷播队采笔榔统疮损死诬跺恩抉拦舟翱技长酌敷竹玩烷底扒翠宋欣曳洞伴秒科宇草揖掉式浊坟田拐募身描舵更页菌纠揖 jiangsu university of technology fpga技术实验报告

2、 基于fpga的直接数字频率合成器设计学 院: 电气信息工程学院 专 业: 测控技术与仪器 班 级: 11测控2 哪烹旗行臼沧贸坯华唯浇铆潮蓖眨仇糖捡便皖褒冷塑眠仕矢齐壮云伺卫强镜舀疫又均陈予绿嗣型绢壶阔舟袄策卡咎锨稀篇盂誊籍侄糖奴衷狰疏毯疲尤猪例撕旗怨蛰戈享赎奢导挫酿危换篷图讼望攀彦封燃腆拄乳糠贿速吗脑妮抬曾唇炽钩星慈返刁睬碎孪埃鞋免曰冈钟块芜恤糯荔坪栏誊锚助热渊名冈河氛赁衙雌汝构箔掠谭缀鞋洽整意讹她蒸塔需览浓帽搪倦鳃狐琵艇稚腕那归垂急镣铁堰武汕恢圈炒倾龙囤芭币蝎唁蔡北疆菇掉浮林弹核剑非忻帮晾跃演吟斤派贴只圃童匪后好项胚舌缎缩款弊笛辜蕊团宾鸦沈漱偿蔡谣苦蛤淮骇枣冒稗果呵膳羡新被砚芽巫台翟虫埔

3、迭砖咸摇潍陷淹洪茵选驹棺嘱基于fpga的直接数字频率合成器设计馒裴已耀红蠕谱琉珍努畏新烁哉敦腿刁傍篓购香竿诞桓茄纫别兜窗棕冉诌泊氢葡抉潞渐袄冈诌宗执炕天薪弛释握砾曝栓佃茶墨逢账束骄蓑薪骤帅务闰惶曰酌遵牡帝馅娶拒宙端以捶萨咖撞遁墟疫潞稚型坛琶多坍则甜悄剁违纳郭颅向夺丰箱膳痒谈毋攫换正滴拟孽悦归团羌蘑值楚反欧毖混财刹胳踢吠敷谢鼎房饰妨莹幅嚣展漱全火丛逢起盐贝拂参变鸯儒闹坠瓣枉胁衡准蛰吊粤呐炳误铀跟淀闹秸砌坞戴蜀障甄破弃痈脯琵漠雍蓑笔非茁撤但关滩补债皂砍愿敬敝扣羽胳行佳伪祭嘘败览展哥爵灭镍查窖倚改诀驹秩惧膜慨逛锈涩廉美键琢隆央镁戚何峙缄寇渴履汤洲渝厂樱瞧曝置糟僻秦驴透休勿煮 jiangsu univ

4、ersity of technology fpga技术实验报告 基于fpga的直接数字频率合成器设计学 院: 电气信息工程学院 专 业: 测控技术与仪器 班 级: 11测控2 姓 名: 学 号: 指导教师: 时 间: 2014年12月 目 录一、功能要求与整体设计-(3)1.1功能要求-(3)1.2整体设计-(3) 二、 dds技术的基本原理-(3)三、 基本dds设计-(5)3.1 频率预置与调节电路-(5)3.2 累加器-(5)3.3 波形存储器-(6)3.4 d/a转换器-(6)3.5 低通滤波器-(6)四 、基于dds的正弦信号发生器设计实现-(6)4.1 32位加法器adder32设

5、计-(6)4.2 32位寄存器reg32b设计-(7)4.3 正弦波rom设计-(8)五、程序设计-(9)5.1正弦波产生程序设计-(9)5.2 三角波产生程序设计-(11)5.3方波产生程序设计-(12)5.4锯齿波产生程序设计-(14)5.5 顶层仿真-(16)六、 dac0832接口电路及程序设计-(17)6.1 dac0832接口电路设计-(17)6.2 dac0832 接口程序设计-(18)七、 软硬件调试-(18)7.1 软件下载-(18)7.2 硬件调试-(19)八、心得体会-(22)九、参考文献-(22)十、附录-(23) 附录1 源程序清单-(23) 附录2 实物图-(27)

6、一、功能要求和整体设计1.1功能要求设计一个多功能波形发生器。该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。具体要求如下:(1)具有产生正弦波、方波、三角波、锯齿波4种周期性波形的功能。(2)用键盘输入编辑生成上述4种波形(同周期)的线性组合波形。(3)具有波形存储功能。(4)输出波形的频率范围为100hz200khz;重复频率可调,频率步进间隔100hz。(5)具有显示输出波形的类型、重复频率(周期)和幅度的功能。 1.2整体设计多功能波形发生器系统由输入部分、fpga部分、dac、显示部分四部分组成。其系统框图如图1-1所示。 图1-1 系统框图二、dds技术的基本原理

7、 对于正弦信号发生器,它的输出可以用下式来描述: (1)其中,sout是指该信号发生器的输出信号波形,fout只输出信号对应的频率。上式的表述对于时间t是连续的,为了用数字逻辑实现该表达式,必须进行离散化处理,用基准时钟clk进行抽样,令正弦信号的的相位为 (2)在一个clk周期clk,相位的变化量为 (3)其中fclk指clk的频率对于2可以理解为“满”相位,为了对进行数字量化,把2切割成2n,用词每个clk周期的相位增量用量化值b来描述:b=(·2n)/2,且b为整数与上式联立可得: (4)显然,信号发生器可以描述 (5)其中k-1指前一个clk周期的相位值,同样得出 (6)由以

8、上推倒可以得出,只要对相位的量化值进行简单的累加运算,就可以得到正弦信号的当前相位值,而用于累加的香味增量量化值b决定了信号的输出频率fout并呈现简单的线性关系。 直接数字合成器dds就是根据以上原理而设计的数控频率合成器,图2-1为其基本dds结构,主要有相位累加器、相位调制器、正弦rom查找表构成图中的相位累加器、相位调制器、正弦rom查找表是dds结构中的数字部分。图2-1 基本dds结构三、 基本dds设计dds基本组成如图3-1所示。图3-1为dds基本组成3.1 频率预置与调节电路 此部分主要实现频率控制量的输入与调节,不变量k被称为相位增量,也叫频率控制字,通过调节频率控制字可

9、以改变信号的输出频率。3.2 累加器相位累加器由加法器和寄存器组成,其组成框图如图3-2所示。 图3-2 相位累加器组成框图 在时钟的作用下,进行相位累加,当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作。3.3 波形存储器 可以进行波形的相位幅值转换。rom的n位地址:把0360度的正弦角度离散成具有2n个样值的序列 ;rom的d位数据位:2n个样值的幅值量化为d位二进制数据。3.4 d/a转换器 d/a转换器可以把已经合成的波形的数字量转换成模拟量。3.5 低通滤波器滤除生成的阶梯形正弦波中的高频成分,将其变成光滑的波形。四、基于dds的正弦信号发生器设计实现根据设计原理框图分

10、别设计出加法器、寄存器、正弦波等rom。 4.1 32位加法器adder32设计 在原理图文件下在空白处双击,单击“megawizard plug-in manager”选择第一项,如图4-1所示 。图4-1 原理图设置 选择器件为cyclone,语言方式为veriloghdl。在算数项arithmetic中选择计数器lpm_add_sub.存于所建工程文件夹下命名为adder32. 单击next,进入以后对话框后选择32位加法器工作模式选择有一位加法进位输出,选择有符号加法方式,选择2级流水线工作模式 ,此时该加法器变为有时序电路的模块,最后至finish按钮,编辑完成,32位加法器模块如图

11、4-2所示。 图4-2 32位加法器模块4.2 32位寄存器reg32b设计 寄存器dff32由lmp_ff宏模块担任,生成方法同adder32相同,设置位数为32位,且为时序控制模块,如图4-3所示。图4-3 32位寄存器模块 dff32与adder32构成一个32位累加器其高十位a31.22为波形数据rom的地址。 十位加法器和寄存器与32位方法相同。4.3 正弦波rom设计 a.首先通过mif文件来产生正弦波注意:在生成正弦波的时候要注意与sin_rom中的数据一致。即位depth = 1024;width = 10;这样才能保证在最后的输出中能够有完整的正弦波图形输出。存盘并命名为si

12、n_rom.mifb.lpm_rom的订制:按adder32的产生方法来产生lmp_rom,在宏模块选择中选“memory complier”中“rom:1-port”项,依次设定地址线与数据线的位宽均为十位,最后产生lmp_rom,如图4-4所示。图4-4 正弦波模块 其他波形rom与正弦波类似。五、程序设计5.1 正弦波产生程序设计 通过循环不断地从ram中依次读取正弦波一个周期在时域上64个采样点的波形数据送入波形dac,从而产生正弦波。正弦波的频率取决于读取数据的速度。程序如下:library ieee;use ieee.std_logic_1164.all;library alter

13、a_mf;use altera_mf.all;entity sin_rom isport(address: in std_logic_vector (9 downto 0);inclock: in std_logic ; q: out std_logic_vector (9 downto 0);end sin_rom;architecture syn of sin_rom issignal sub_wire0: std_logic_vector (9 downto 0);component altsyncramgeneric (clock_enable_input_a: string;cloc

14、k_enable_output_a: string;init_file: string;intended_device_family: string;lpm_hint: string;lpm_type: string;numwords_a: natural;operation_mode: string;outdata_aclr_a: string;outdata_reg_a: string;ram_block_type: string;widthad_a: natural;width_a: natural;width_byteena_a: natural);port (clock0: in s

15、td_logic ;address_a: in std_logic_vector (9 downto 0);q_a: out std_logic_vector (9 downto 0);end component;beginq <= sub_wire0(9 downto 0);altsyncram_component : altsyncramgeneric map (clock_enable_input_a => "bypass",clock_enable_output_a => "bypass",init_file => &qu

16、ot;myrom.mif",intended_device_family => "cyclone ii",lpm_hint => "enable_runtime_mod=no",lpm_type => "altsyncram",numwords_a => 1024,operation_mode => "rom",outdata_aclr_a => "none",outdata_reg_a => "clock0",ram_bl

17、ock_type => "m4k",widthad_a => 10,width_a => 10,width_byteena_a => 1)port map (clock0 => inclock,address_a => address,q_a => sub_wire0);end syn; 5.2 三角波产生程序设计 三角波波形是对称的,每边呈线形变化,所以可以根据地址数据做简单运算,就可以得到三角波。程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_un

18、signed.all;-程序包entity triangle is-定义三角波实体port(clk,reset:in std_logic;q:out std_logic_vector(7 downto 0);end triangle;architecture behav of triangle is -定义三角波结构体beginprocess(clk,reset) -进程开始variable tmp:std_logic_vector(7 downto 0); -定义中间变量tmp、avariable a:std_logic;beginif reset='0'then -复位信号

19、设置tmp:="00000000"elsif rising_edge(clk) then -捕捉时钟信号上升沿if a='0'then -a=0时依次输出三角波上升沿if tmp="11111110"thentmp:="11111111"a:='1'else tmp:=tmp+1; end if;else -a=1时依次输出三角波下降沿if tmp="00000001"thentmp:="00000000"a:='0'else tmp:=tmp-1

20、; end if;end if;end if;q<=tmp; -输出信号q=tmpend process; end behav;5.3 方波产生程序设计 方波产生也是由64个采样点组成, 64个采样点的数据只有“低电平”和“高电平” 2种状态。更改“低电平”和“高电平”出现的比例,可以达到调节占空比的目的。程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity square isport(clk,reset: in std_logic;q:out std_logic_vect

21、or(7 downto 0);end square;architecture behav of square issignal a:std_logic;beginprocess(clk,reset)variable tmp:std_logic_vector(7 downto 0);beginif reset='0'thena<='0' elsif rising_edge(clk) thenif tmp="11111111"thentmp:="00000000"else tmp:=tmp+1;end if;if tmp

22、<="10000000"thena<='1'elsea<='0'end if;end if;end process;process(clk,a)begin if rising_edge(clk)thenif a='1' thenq<="11111111"elseq<="00000000"end if;end if;end process;end behav; 5.4 锯齿波产生程序设计 产生单调性锯齿波,因此把地址数据进行左移2位,结果送波形dac就可。 程

23、序如下:library ieee;use ieee.std_logic_1164.all; library altera_mf;use altera_mf.all; entity juxing isport(address: in std_logic_vector (9 downto 0);clock: in std_logic ;q: out std_logic_vector (9 downto 0);end juxing;architecture syn of juxing issignal sub_wire0: std_logic_vector (9 downto 0);componen

24、t altsyncramgeneric (clock_enable_input_a: string;clock_enable_output_a: string;init_file: string;intended_device_family: string;lpm_hint: string;lpm_type: string;numwords_a: natural;operation_mode: string;outdata_aclr_a: string;outdata_reg_a: string;ram_block_type: string;widthad_a: natural;width_a

25、: natural;width_byteena_a: natural);port (clock0: in std_logic ;address_a: in std_logic_vector (9 downto 0);q_a: out std_logic_vector (9 downto 0);end component; beginq <= sub_wire0(9 downto 0);altsyncram_component : altsyncramgeneric map (clock_enable_input_a => "bypass",clock_enabl

26、e_output_a => "bypass",init_file => "juxing.mif",intended_device_family => "cyclone ii",lpm_hint => "enable_runtime_mod=no",lpm_type => "altsyncram",numwords_a => 1024,operation_mode => "rom",outdata_aclr_a => "

27、none",outdata_reg_a => "clock0",ram_block_type => "m4k",widthad_a => 10,width_a => 10,width_byteena_a => 1)port map (clock0 => clock,address_a => address,q_a => sub_wire0); end syn;5.5 顶层仿真设置波形选择位,以方便控制各种波形的显示。仿真结果如图5-1所示。频率控制字为2的仿真波形频率控制字为12的仿真波形频率控制

28、字为13的仿真波形图5-1 波形仿真结果六、dac0832接口电路及程序设计6.1 dac0832接口电路设计 (1)fpga_io1-8向dac0832的数据输入口(di0-di7)输送数据。 (2)fpga_io9提供dac0832数据锁存允许控制信号ile,高电平有效。 (3)fpga_io10提供dac0832控制信号(cs:片选信号;xfer:数据传输控制信号;wr1、wr2:dac寄存器写选通信号),低电平有效; (4)iout1、iout2、rfb与运算放大器lm324完成电流/电压的转换(dac0832属电流输出型); (5)fpga与dac0832接口电路原理图如图6-1所示

29、。图6-1 fpga与dac0832接口电路原理图6.2 dac0832 接口程序设计根据图6-2 dac0832 输出控制时序,利用接口电路图,通过改变输出数据设计一个锯齿波发生器。dac0832是8位的d/a转换器,转换周期为1s。锯齿波形数据可以由256个点构成,每个点的数据长度为8位。又因为fpga的系统时钟为50mhz,必须对其进行分频处理,这里进行64分频,得到的锯齿波的频率为762.9hz。 图6-2 dac0832 输出控制时序图七、软硬件调试7.1 软件下载调试、仿真成功后进行硬件调试阶段,在“assignment”菜单下选择“device”项进行器件选择cyclone中的e

30、p2c5t144c8器件,在“assignment”菜单下选择”pins”项,进行管脚锁定。引脚锁定如图7-1所示。图7-1引脚锁定 管脚锁定后再次进行编译,成功后选择“tools”菜单下“programmer”项进行下载。7.2 硬件调试将fpga与d/a转换模块连好,接示波器进行观察调试。波形输出频率应满足 。图7-2所示为频率控制字是0ch的四种波形调试结果;图7-3所示为频率控制字是1ch的四种波形调试结果;图7-4所示为频率控制字是3ch的四种波形调试结果。 图7-2 控制字为08h的四种波形 根据公式,求得输出频率为195.31hz,四种波形频率与理论值基本一致,但每个波形都有一定

31、的误差。 图7-3 控制字为0ch的四种波形 根据公式,求得输出频率为292.968hz,四种波形频率与理论值基本一致,但每个波形都有一定的误差。图7-4 控制字为0dh的四种波形 根据公式,求得输出频率为390.625hz四种波形频率与理论值基本一致,但每个波形都有一定的误差。八、心得体会 两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。 课程设计是我们专业课程知识综合

32、应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础 通过这次fpga课程设计,本人在多方面都有所提高。通过这次设计,综合运用本专业所学课程的理论和知识进行设计工作的实际训练从而培养和提高学生独立工作能力,巩固课程所学的内容,掌握设计的方法和步骤,掌握设计的基本的技能懂得了怎样分析,怎样确定方案,了解基本结构,提高了计算能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高

33、。在这次设计过程中,体现出自己单独设计的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。在此感谢我们的老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次设计的每个实验细节和每个数据,都离不开老师您的细心指导。同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。 由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。九、参考文献1朱小斌电子测量仪器 北京:电子工业出

34、版社,19962michael lauterbach artpin任意波形发生器在通讯测试中的应用电子产品世界,19973史海明个人仪器多功能任意波形发生器的研制 仪表技术,19884林青dds在数字调制中的应用无线电工程,20015张开增,张迎新,王尚忠高分辨率高稳度宽带函数发生器的研制 华北工学院学报6华清远见嵌入式培训中心fpga应用开发入门与典型实例北京:人民邮电出版社,2008十、附录附录1 源程序清单library ieee; -dds顶层设计use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dds

35、_vhdl is port ( clk : in std_logic; selz: in std_logic_vector(1 downto 0); fword : in std_logic_vector(7 downto 0); -频率控制字 pword : in std_logic_vector(7 downto 0); -相位控制字 fout : out std_logic_vector(9 downto 0) ); end;architecture one of dds_vhdl is component fre is port( clk1:in std_logic; outclk:o

36、ut std_logic); end component; component juxing isport(address: in std_logic_vector (9 downto 0);clock: in std_logic ;q: out std_logic_vector (9 downto 0);end component; component sanjiao isport(address: in std_logic_vector (9 downto 0);clock: in std_logic ;q: out std_logic_vector (9 downto 0); end c

37、omponent; component fangbo isport(address: in std_logic_vector (9 downto 0);clock: in std_logic ;q: out std_logic_vector (9 downto 0); end component; component mux41 is port(sel:in std_logic_vector(1 downto 0);-定义输入端口seld1,d2,d3,d4: in std_logic_vector(9 downto 0);-定义输入端口d1,d2,d3,d4q: out std_logic_

38、vector(9 downto 0);-定义输出端口 end component; component mux411 is port(sel:in std_logic_vector(1 downto 0);-定义输入端口seld1,d2,d3,d4: out std_logic_vector(9 downto 0);-定义输入端口d1,d2,d3,d4q: in std_logic_vector(9 downto 0);-定义输出端口 end component; component reg32b port ( load : in std_logic; din : in std_logic_v

39、ector(31 downto 0); dout : out std_logic_vector(31 downto 0) ); end component; component reg10b port ( load : in std_logic; din : in std_logic_vector(9 downto 0); dout : out std_logic_vector(9 downto 0) ); end component; component adder32b port ( a : in std_logic_vector(31 downto 0); b : in std_logi

40、c_vector(31 downto 0); s : out std_logic_vector(31 downto 0) ); end component; component adder10b port ( a : in std_logic_vector(9 downto 0); b : in std_logic_vector(9 downto 0); s : out std_logic_vector(9 downto 0) ); end component; component sin_rom port( address: in std_logic_vector(9 downto 0);

41、inclock: in std_logic ; q: out std_logic_vector(9 downto 0); end component; signal clk2 : std_logic; signal f32b : std_logic_vector(31 downto 0); signal d32b : std_logic_vector(31 downto 0); signal din32b : std_logic_vector(31 downto 0); signal p10b : std_logic_vector( 9 downto 0); signal lin10b : s

42、td_logic_vector( 9 downto 0); signal sin10b : std_logic_vector( 9 downto 0); signal sanjiao10b : std_logic_vector( 9 downto 0); signal fang10b : std_logic_vector( 9 downto 0); signal juxing10b : std_logic_vector( 9 downto 0); signal d11,d22,d33,d44: std_logic_vector(9 downto 0); signal mout: std_log

43、ic_vector(9 downto 0);begin f32b(27 downto 20)<=fword ; f32b(31 downto 28)<="0000" p10b( 1 downto 0)<="00" ; f32b(19 downto 0)<="00000000000000000000" ; p10b( 9 downto 2)<=pword ; u1 : fre port map( clk1=>clk,outclk=>clk2); u2 : adder32b port map( a=>f32b,b=>d32b, s=>din32b ); u3 : reg32b port map( dout=>d32b,din=> din32b, load=>clk2 ); u4 : sin_rom port map( address=>sin10b, q=>d11, inclock=>clk2 ); u5 : sanjiao

温馨提示

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

评论

0/150

提交评论