欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    FPGA课程设计基于VHDL的2FSK的信号发生器.doc

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

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

    FPGA课程设计基于VHDL的2FSK的信号发生器.doc

    FPGA原理及应用结课论文题目基于VHDL的2FSK的信号发生器 专业名称通信工程班级学号学生姓名提交时间2012年12月13日设计题目:基于VHDL的2FSK的信号发生器一、设计实验条件Quartus II开发环境二、设计目标1. 通过练习,能够较为熟练的运用Quartus II软件,同时对VHDL语言掌握更加熟悉;2. 基于Quartus II开发环境,利用VHDL硬件描述语言,自上而下地逐层完成相应的描述、综合、优化、仿真与验证,直到生成器件2FSK信号发生器;三、设计报告的内容1. 前言(绪论)(设计的目的、意义等)2. 设计主体(原理、步骤、程序或原理图、结果等)3. 对仿真结果进行分析4. 参考资料一前言在通信领域中,为了传送信息,一般都将原始的信号进行某种变换变成适合于通信传输的信号形式。在数字通信系统中,一般将原始信号(图像、声音等)经过量化编码变成二进制码流,称为基带信号。 但数字基带信号一般不适合于直接传输。例如,通过公共电话网络传输数字信号时,由于电话网络的带宽为4 kHz以下,因此数字信号不能直接在其上传输。此时可将数字信号进行调制,2FSK即为一种常用的数字调制方式。2FSK,即二进制频移键控方法简单,易于实现,解调不需恢复本地载波,支持异步传输,抗噪声和抗衰落性能也较强。因此2FSK调制技术在通信行业得到了广泛的应用,并且主要适用于低、中速数据传输。由于微电子技术的迅猛发展,使得VHDL的性能指标,例如规模、功能、时间等性能也越来越好。VHDL在数字系统设计中占据了越来越重要的位置。而随着器件的发展,开发环境也进一步得到优化。VHDL程序的设计可用Altera公司的Quartus II软件开发系统来实现,它为用户提供了良好的开发环境,包含有丰富的库资源,很容易实现各种电路设计,它支持多种输入方式,并有极强的仿真系统。故利用FPGA 这一新的技术手段来研究数字调制技术有重要的现实意义。设计采用FPGA现场可编程技术, 运用自顶向下的设计思想设计2FSK信号发生器。避免了硬件电路的焊接与调试, 而且由于FPGA 的I/ O 端口丰富, 内部逻辑可随意更改, 使得2FSK信号发生器的实现较为方便。二设计主体1、2FSK信号产生原理数字频率调制又称频移键控(FSK),二进制频移键控记作2FSK。数字频移键控是用载波的频率来传送数字消息,即用所传送的数字消息控制载波的频率。2FSK信号便是符号“1”对应于载频,而符号“0”对应于载频(与不同的另一载频)的已调波形,而且与之间的改变是瞬间完成的。2FSK调制的波形如图1示。从原理上讲,数字调频可用模拟调频法来实现,也可用键控法来实现。模拟调频法是利用一个矩形脉冲序列对一个载波进行调频,是频移键控通信方式早期采用的实现方法。2FSK键控法则是利用受矩形脉冲序列控制的开关电路对两个不同的独立频率源进行选通。键控法的特点是转换速度快、波形好、稳定度高且易于实现,故应用广泛。2FSK信号的产生方法如图1所示。图中为代表信息的二进制矩形脉冲序列,即使2FSK信号。s(t) 模拟调频器 s(t) 0 1 0 0 1 0图1 2FSK产生方法2、设计原理及原理图由于FSK为模拟信号,而FPGA只能产生数字信号,因此需对正弦信号采样并经模数变换来得到所需的FSK信号。本例由FPGA产生正弦信号的采样值。FSK信号发生器框图如图2所示,整个系统共分为分频器、m序列产生器、跳变检测、2:1数据选择器、正弦波信号产生器和DAC数模变换器等6部分,其中前5部分由FPGA器件完成。图2 2FSK调制信号发生器框图(1)分频器本实例中数据速率为1.2 kHz,要求产生1.2 kHz和2.4 kHz两个正弦信号。对正弦信号每周期取100个采样点,因此要求能产生3个时钟信号:1.2 kHz(数据速率)、120 kHz(产生1.2 kHz正弦信号的输入时钟)和240 kHz(产生2.4 kHz正弦信号的输入时钟)。基准时钟由一个12 MHz的晶振提供。设计中要求一个50分频(产生240 kHz信号),再2分频(产生120 kHz信号)和100分频(产生1.2 kHz信号),共有三个分频值。(2)m序列产生器m序列是伪随机序列的一种,它的显著特点是:随机特性,预先可确定性,循环特性。正因为这些特性,使得m序列产生器在通信领域得到了广泛的应用。这里用一种带有两个反馈抽头的3级反馈移位寄存器,得到一串“1110010”循环序列,并采取措施防止进入全“0”状态。通过更换时钟频率可以方便地改变输入码元的速率。m序列产生器的电路结构如图3所示。图3 m序列产生器m序列产生器电路结构(3)跳变检测将跳变检测引入正弦波的产生中,可以使每次基带码元上升沿或下降沿到来时,对应输出波形位于正弦波形的sin0处。引入跳变检测主要是为了便于观察,确保示波器上显示为一个连续的波形。基带信号的跳变检测可以有很多方法,图4为一种便于在可编程逻辑器件中实现的方案。图4 信号跳变检测电路(4)2:1数据选择器2:1数据选择器用于选择正弦波产生器的两个输入时钟。一个时钟的频率为120 kHz,此时正弦波产生器产生一个1.2 kHz的正弦波,代表数字信号“0”;另一个时钟的频率为240 kHz,此时产生一个2.4 kHz的正弦波信号,代表数字信号“1”。(5)正弦信号的产生用数字电路和DAC变换器可以产生要求的模拟信号。根据抽样定理可知,当用模拟信号最大频率两倍以上的速率对该模拟信号采样时,便可将原模拟信号不失真地恢复出来。本例要求得到的是两个不同频率的正弦信号,实验中对正弦波每个周期采样100个点,即采样速率为原正弦信号频率的100倍,因此完全可以在接收端将原正弦信号不失真地恢复出来,从而可以在接收端对FSK信号正确地解调。经DAC转换后,可以在示波器上观察到比较理想的波形。本设计中每个采样点采用8位量化编码,即8位分辨率。采样点的个数与分辨率的大小主要取决于CPLD/FPGA器件的容量,其中分辨率的高低还与DAC的位数有关。实验表明,采用8位分辨率和每周期100个采样点可以达到相当不错的效果。具体的正弦信号产生器可以用状态机来实现。按前面的设计思路,本实现方案共需100个状态,分别为s1s100。同时设计一个异步复位端,保证当每个“1”或“0”到来时其调制信号正好位于坐标原点,即sin0处。状态机共有8位输出(Q7Q0),经DAC变换为模拟信号输出。为得到一个纯正弦波形,应在DAC的输出端加上一个低通滤波器,由于本设计仅观察FSK信号,因此省去了低通滤波器。本设计中,数字基带信号与FSK调制信号的对应关系为“0”对应1.2 kHz,“1”对应2.4 kHz,此二载波的频率可以方便地通过软件修改。3、对仿真结果进行分析2FSK的总体波形如图5所示,其中CLOCK为正弦波发生器时钟MODE表示0:2FSK;1:2PSK,CLK120为用于产生一个1.2KHz的正弦波信号,CLK240为用于产生一个2.4KHz的正弦波信号,VALUE为正弦波的采样点峰值,M_MODE为输出m序列。图5 2FSK仿真波形图下图6所示为产生的2FSK波形,可以明显地看到在M_MODE跳变前后VALUE的码元宽度相差一倍,实现了2FSK的频率变化来传递数字信息,即120KHz表示信号“0”,240KHz表示信号“1”。图6 2FSK仿真波形图下图3-6可以看出传递信号“1”的波形密度明显比传递信号“0”的波形密度高。 图7 2FSK仿真波形图2FSK的信号传递频率从下图8中可以看出为240KHz,信号“1”和“0”的跳变是通过相位的改变来实现的。图8 2FSK仿真波形图4、具体程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;USE IEEE.std_logic_unsigned.all;USE IEEE.std_logic_arith.all;ENTITY PSKFSK ISPORT(CLOCK:IN STD_LOGIC; -正弦波发生器时钟 MODE:IN STD_LOGIC; -0:FSK;1:PSK CLK240: buffer STD_LOGIC; -用于产生一个2.4KHz的正弦波信号 CLK120: buffer STD_LOGIC; -用于产生一个1.2KHz的正弦波信号 VALUE: out std_logic_vector (7 DOWNTO 0); -正弦波的采样点峰值 M_CODE:BUFFER STD_LOGIC); -输出m序列END PSKFSK;ARCHITECTURE PSKFSK_ARCH OF PSKFSK IS SIGNAL COUNT100:INTEGER RANGE 0 TO 99; -记录100个状态 SIGNAL COUNT50: INTEGER RANGE 0 TO 49; -记录50个状态 SIGNAL COUNT: INTEGER RANGE 1 TO 10; -记录10个状态,实现12M分频到240KHz得到CLK240时钟信号 SIGNAL SINCLK,CODERATE: STD_LOGIC; -正弦波信号的频率以及随机序列的编码速率 SIGNAL TEMP,JUMP_HIGH,JUMP_LOW: STD_LOGIC; -0,1跳变标志 SIGNAL M: std_logic_vector (2 DOWNTO 0); -m序列BEGINPROCESS(CLOCK) -分频为240KHz的CLK240信号 BEGIN IF (CLOCK'EVENT AND CLOCK = '1') THEN IF (COUNT = 10) THEN COUNT<=1; -计数满时计数回复初值 CLK240<=NOT CLK240; -输出时钟翻转一次 ELSIF (COUNT=5) THEN COUNT<=COUNT+1; CLK240 <= NOT CLK240;-输出时钟翻转一次 ELSE COUNT<=COUNT+1; END IF; END IF;END PROCESS;PROCESS(CLK240) -分频为120KHz的CLK120信号 BEGIN IF (CLK240'EVENT AND CLK240 = '1') THEN CLK120<=NOT CLK120; END IF;END PROCESS;PROCESS(CLK120) -LOAD_CLK1 100分频得到CODERATE码元速率1.2KHzBEGIN IF (CLK120'EVENT AND CLK120= '1') THEN IF(COUNT50=49) THEN COUNT50<=0; CODERATE<=NOT CODERATE; ELSE COUNT50<=COUNT50+1; END IF; END IF;END PROCESS;M_SEQUENCE_FORM: -产生"1110010"m序列PROCESS(CODERATE)BEGIN IF(CODERATE'EVENT AND CODERATE= '1') THEN M(0)<=M(1); -实现移位功能 M(1)<=M(2); END IF;END PROCESS;PROCESS(CODERATE)BEGIN IF(CODERATE'EVENT AND CODERATE= '1') THEN M(2)<=(M(1) XOR M(0) OR (NOT (M(0) OR M(1) OR M(2); -逻辑表达式跟上面的移位功能产生m的随机序列“1110010” END IF;END PROCESS;M_CODE<=M(0);PROCESS(MODE,CLK240,CLK120,M_CODE)BEGIN IF (MODE='0' AND M_CODE='0') THEN SINCLK<=CLK120; ELSE SINCLK<=CLK240; -选择正弦信号波产生器的时钟频率 END IF;END PROCESS;JUMP_HIGH<=(NOT TEMP) AND M_CODE; -0到1跳变JUMP_LOW<=(NOT M_CODE) AND TEMP; -1到0跳变PROCESS(SINCLK) -2FSK与2PSK对跳变的不同处理BEGIN IF(SINCLK'EVENT AND SINCLK= '1') THEN TEMP<=M_CODE; IF(COUNT100=99) OR (JUMP_HIGH='1') THEN COUNT100<=0; -波形输出 ELSIF(JUMP_LOW='1') AND (MODE='1') THEN COUNT100<=50; ELSE COUNT100<=COUNT100+1; END IF; END IF;END PROCESS;PROCESS(COUNT100) -产生sin周期波形的1个周期内的100个样点值BEGIN CASE COUNT100 IS when 0=>value<="01111111" when 1=>value<="10000111" when 2=>value<="10001111" when 3=>value<="10010111" when 4=>value<="10011111" when 5=>value<="10100110" when 6=>value<="10101110" when 7=>value<="10110101" when 8=>value<="10111100" when 9=>value<="11000011" when 10=>value<="11001010" when 11=>value<="11010000" when 12=>value<="11010110" when 13=>value<="11011100" when 14=>value<="11100001" when 15=>value<="11100110" when 16=>value<="11101011" when 17=>value<="11101111" when 18=>value<="11110010" when 19=>value<="11110110" when 20=>value<="11111000" when 21=>value<="11111010" when 22=>value<="11111100" when 23=>value<="11111101" when 24=>value<="11111110" when 25=>value<="11111111" when 26=>value<="11111110" when 27=>value<="11111101" when 28=>value<="11111100" when 29=>value<="11111010" when 30=>value<="11111000" when 31=>value<="11110110" when 32=>value<="11110010" when 33=>value<="11101111" when 34=>value<="11101011" when 35=>value<="11100110" when 36=>value<="11100001" when 37=>value<="11011100" when 38=>value<="11010110" when 39=>value<="11010000" when 40=>value<="11001010" when 41=>value<="11000011" when 42=>value<="10111100" when 43=>value<="10110101" when 44=>value<="10101110" when 45=>value<="10100110" when 46=>value<="10011111" when 47=>value<="10010111" when 48=>value<="10001111" when 49=>value<="10000111" when 50=>value<="01111111" when 51=>value<="01110111" when 52=>value<="01101111" when 53=>value<="01100111" when 54=>value<="01011111" when 55=>value<="01011000" when 56=>value<="01010000" when 57=>value<="01001001" when 58=>value<="01000010" when 59=>value<="00111011" when 60=>value<="00110100" when 61=>value<="00101110" when 62=>value<="00101000" when 63=>value<="00100010" when 64=>value<="00011101" when 65=>value<="00011000" when 66=>value<="00010011" when 67=>value<="00001111" when 68=>value<="00001100" when 69=>value<="00001000" when 70=>value<="00000110" when 71=>value<="00000100" when 72=>value<="00000010" when 73=>value<="00000001" when 74=>value<="00000000" when 75=>value<="00000000" when 76=>value<="00000000" when 77=>value<="00000001" when 78=>value<="00000010" when 79=>value<="00000100" when 80=>value<="00000110" when 81=>value<="00001000" when 82=>value<="00001100" when 83=>value<="00001111" when 84=>value<="00010011" when 85=>value<="00011000" when 86=>value<="00011101" when 87=>value<="00100010" when 88=>value<="00101000" when 89=>value<="00101110" when 90=>value<="00110100" when 91=>value<="00111011" when 92=>value<="01000010" when 93=>value<="01001001" when 94=>value<="01010000" when 95=>value<="01011000" when 96=>value<="01011111" when 97=>value<="01100111" when 98=>value<="01101111" when 99=>value<="01110111" when others=>NULL; END CASE;END PROCESS;END PSKFSK_ARCH;5、参考资料1 褚振勇,齐亮FPGA设计及应用M 西安:西安电子科技大学出版社,2006

    注意事项

    本文(FPGA课程设计基于VHDL的2FSK的信号发生器.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开