




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
jiangsu university 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设计-(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)一、功能要求和整体设计1.1功能要求设计一个多功能波形发生器。该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。具体要求如下:(1)具有产生正弦波、方波、三角波、锯齿波4种周期性波形的功能。(2)用键盘输入编辑生成上述4种波形(同周期)的线性组合波形。(3)具有波形存储功能。(4)输出波形的频率范围为100hz200khz;重复频率可调,频率步进间隔100hz。(5)具有显示输出波形的类型、重复频率(周期)和幅度的功能。 1.2整体设计多功能波形发生器系统由输入部分、fpga部分、dac、显示部分四部分组成。其系统框图如图1-1所示。 图1-1 系统框图二、dds技术的基本原理 对于正弦信号发生器,它的输出可以用下式来描述: (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)由以上推倒可以得出,只要对相位的量化值进行简单的累加运算,就可以得到正弦信号的当前相位值,而用于累加的香味增量量化值b决定了信号的输出频率fout并呈现简单的线性关系。 直接数字合成器dds就是根据以上原理而设计的数控频率合成器,图2-1为其基本dds结构,主要有相位累加器、相位调制器、正弦rom查找表构成图中的相位累加器、相位调制器、正弦rom查找表是dds结构中的数字部分。图2-1 基本dds结构三、 基本dds设计dds基本组成如图3-1所示。图3-1为dds基本组成3.1 频率预置与调节电路 此部分主要实现频率控制量的输入与调节,不变量k被称为相位增量,也叫频率控制字,通过调节频率控制字可以改变信号的输出频率。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的正弦信号发生器设计实现根据设计原理框图分别设计出加法器、寄存器、正弦波等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位加法器模块如图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;这样才能保证在最后的输出中能够有完整的正弦波图形输出。存盘并命名为sin_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 altera_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;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: 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 bypass,clock_enable_output_a = bypass,init_file = 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_block_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_unsigned.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=0then -复位信号设置tmp:=00000000;elsif rising_edge(clk) then -捕捉时钟信号上升沿if a=0then -a=0时依次输出三角波上升沿if tmp=11111110thentmp:=11111111;a:=1;else tmp:=tmp+1; end if;else -a=1时依次输出三角波下降沿if tmp=00000001thentmp:=00000000;a:=0;else tmp:=tmp-1; 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_vector(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=0thena=0; elsif rising_edge(clk) thenif tmp=11111111thentmp:=00000000;else tmp:=tmp+1;end if;if tmp=10000000thena=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就可。 程序如下: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);component 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: 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 bypass,clock_enable_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 = 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的仿真波形频率控制字为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所示。图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中的ep2c5t144c8器件,在“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,四种波形频率与理论值基本一致,但每个波形都有一定的误差。 图7-3 控制字为0ch的四种波形 根据公式,求得输出频率为292.968hz,四种波形频率与理论值基本一致,但每个波形都有一定的误差。图7-4 控制字为0dh的四种波形 根据公式,求得输出频率为390.625hz四种波形频率与理论值基本一致,但每个波形都有一定的误差。八、心得体会 两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。 课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础 通过这次fpga课程设计,本人在多方面都有所提高。通过这次设计,综合运用本专业所学课程的理论和知识进行设计工作的实际训练从而培养和提高学生独立工作能力,巩固课程所学的内容,掌握设计的方法和步骤,掌握设计的基本的技能懂得了怎样分析,怎样确定方案,了解基本结构,提高了计算能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。在这次设计过程中,体现出自己单独设计的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。在此感谢我们的老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次设计的每个实验细节和每个数据,都离不开老师您的细心指导。同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。 由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。九、参考文献1朱小斌电子测量仪器 北京:电子工业出版社,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_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:out 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 component; 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_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_vector(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_logic_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); 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 p10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 双语产品目录翻译与认证补充协议
- 离婚协议强制执行司法拍卖与财产分配协议
- 桥梁施工临时检测员职责要求与聘用协议
- 高效能低碳钢盘螺建筑原材料集中采购框架合同
- 线上教育平台服务补充协议
- 宠物医院宠物医院医院运营管理与委托管理全面合作协议
- 医疗机构医务人员廉洁自律规范合同
- 专业音响设备国际展会特装展位搭建及音响系统维护合同
- 集体土地上小产权房流转及土地征收补偿合同
- 金融机构不良资产债务清偿期限调整与处置协议
- 医院死亡证明培训课件
- 第一套太极功夫扇扇谱
- 毒蛇咬伤完整版本
- 展位评估报告
- 家庭分家协议书15篇
- 幼儿足球训练课件
- 机插水稻育秧技术
- 分子气动力学及气体流动的直接模拟
- 30题南京天加贸易供应链管理岗位常见面试问题含HR问题考察点及参考回答
- 量子芯片集成
- 大面积脑梗死护理查房
评论
0/150
提交评论