基于FPGA的FSK调制与解调有详细代码和注释毕业论文.doc_第1页
基于FPGA的FSK调制与解调有详细代码和注释毕业论文.doc_第2页
基于FPGA的FSK调制与解调有详细代码和注释毕业论文.doc_第3页
基于FPGA的FSK调制与解调有详细代码和注释毕业论文.doc_第4页
基于FPGA的FSK调制与解调有详细代码和注释毕业论文.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

基于FPGA的FSK调制与解调有详细代码和注释毕业论文目 录摘 要IAbstractII第一章 绪论1第二章EDA技术简介32.1、Quartus II简介32.1.1、QuartusII开发系统的特点32.2、VHDL语言简介42.2.1、VHDL 语言的特点42.2.2、VHDL语言的基本结构52.3、本章小结6第三章 2FSK调制解调基本原理73.1、2FSK的调制原理73.2、2FSK的解调原理83.3、本章小结9第四章 基于VHDL语言的2FSK调制解调设计104.1、2FSK调制器设计104.1.1、基于VHDL语言的调制程序104.2、2FSK解调器设计124.2.1、基于VHDL语言的解调程序124.3、分频器与信号发生器设计174.3.1、基于VHDL语言的分频程序174.3.2基于VHDL语言的信号发生器程序184.4、本章小结20第五章 基于VHDL语言的2FSK调制解调的仿真215.1、2FSK调制器波形仿真215.2、2FSK解调器波形仿真225.3、分频器与信号发生器波形仿真235.3.1、分频器波形仿真235.3.2、信号发生器波形仿真235.4、本章小结23第六章 上机测试256.1、程序下载256.2、波形测试256.3、本章小结27总结28参考文献29致谢30I华南理工大学广州学院本科毕业设计(论文)说明书第一章 绪论在当今高度信息化的社会,信息和通信已成为现代社会的“命脉”。 信息作为一种资源,只有通过广泛地传播与交流,才能产生利用价值,促进社会成员之间的合作,推动社会生产力的发展,创造出巨大的经济效益。而通信作为传输信息的手段或方式,与计算机技术相互融合,已成为21世纪国际社会和世界经济发展的强大推动力。通信的目的就是从一方向另一方传送信息,给对方以信息,但是消息的传送一般都不是直接的,它必须借助于一定形式的信号才能便于远距离快速传输和进行各种处理。虽然基带信号可以直接传输,但是目前大多数信道不适合传输基带信号。现有通信网的主体为传输模拟信号而设计的,基带数字信号不能直接进入这样的通信网。基带信号一般都包含有频率较低,甚至是直流的分量,很难通过有限尺寸的天线得到有效辐射,因而无法利用无线信道来直接传播。对于大量有线信道,由于线路中多半串接有电容器或并接有变压器等隔直流元件,低频或直流分量就会受到很大限制。因此,为了使基带信号能利用这些信道进行传输,必须使代表信息的原始信号经过一种变换得到另一种新信号,这种变换就是调制。在无线通信中和其他大多数场合,调制一词均指载波调制。载波调制,就是用调制信号去控制载波参数的过程,使载波的某一个或某几个参数按照调制信号的规律而变化。调制信号是指来自信源的消息信号(基带信号),这些信号可以是模拟的,也可以是数字的。未受调制的周期性振荡信号称为已调信号,它可以是正弦波,也可以是非正弦波(如周期性脉冲序列)。载波调制后称为已调信号,它包含有调制信号的全部特征。而解调(也称检波)则是调制的逆过程,其作用是将已调信号中的调制信号恢复出来。二进制数字调制所用调制信号由代表“0”“1”的数字信号脉冲序列组成。因此,数字调制信号也称为键控信号。二进制振幅调制、频率调制和相位调制分别称为振幅键控(ASK)、频移键控(FSK)、相移键控(PSK)。数字调制产生模拟信号,其载波参量的离散状态是与数字数据相对应的,这种信号适宜于在带通型的模拟信道上传输。频移键控是利用载波的频率变化来传输信息的,其中最简单的一种方式是二进制频移键控(2FSK)调制,它是继振幅键控信号之后出现比较早的一种调制方式。由于它的抗衰减性能优于ASK,设备又不算复杂,实现也比较容易,所以一直在很多场合,例如在中低速数据传输,尤其在有衰减的无线信道中广泛应用。二进制频移键控(2FSK)用靠近在载波的两个不同频率表示两个二进制数。FSK信号有两种产生方法:载波调频法和频率选择法。载波调频法产生的是相位连续的FSK信号,相位连续FSK信号一般由一个振荡器产生,用基带信号改变振荡器的参数,使震荡频率发生变化,这时相位是连续的。频率选择法一般是相位不连续的FSK信号,相位不连续的FSK信号一般由两个不同频率的振荡器长生,由基带信号控制着两个频率信号的输出。由于这两个振荡器是相互独立的因此在转换或相反的过程中,不能保证相位的连续。传统的FSK调制解调器采用“集成电路+连线”的硬件实现方式进行设计,集成块多、连线复杂且体积较大,特别是相干解调需要提取载波,设备相对比较复杂,成本高。本文基于FPGA芯片,采用VHDL语言,利用层次化、模块化设计方法,提出了一种2FSK调制解调器的实现方法。VHDL语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,支持从系统级到门级所有层的设计。进行逻辑电路设计时,不需考虑特定电路制造工艺的影响,其设计覆盖所有的逻辑电路形式。从而有效的缩小了系统体积,提高了可靠性,并具有良好的可移植性。29第二章EDA技术简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。应用可编程逻辑器件(Programmable Logic Device, PLD)实现数字系统设计和单片系统的设计2,是目前利用EDA技术设计数字系统的潮流。这种设计方法以数字系统设计软件为工具,将传统数字系统设计中的搭建调试用软件仿真取代,对计算机上建立的系统模型,用测试码或测试序列测试验证后,将系统实现在PLD芯片或专用集成电路上,这样最大程度地缩短了设计和开发时间,降低了成本,提高了系统的可靠性。利用EDA技术进行电子系统的设计,具有以下几个特点:(1) 用软件的方式设计硬件;(2) 用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;(3) 设计过程中可用有关软件进行各种仿真;(4) 系统可现场编程,在线升级;(5) 整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。因此,EDA技术是现代电子设计的发展趋势。2.1、Quartus II简介Quartus II是Altera公司自行设计的CAE软件平台,提供了完整的多平台设计环境,能满足各种特定设计的要求,是单片可编程系统(SOPC)设计的综合环境性环境和SOPC开发的基本设计工具,并为Altera DSP开发包进行系统模块设计提供了集成综合环境。QuartusII可以在多钟平台上运行,其图形界面丰富,加上完整的、可即时访问的在线文档,使设计人员可以轻松地掌握软件的使用。2.1.1、QuartusII开发系统的特点(1)、界面开放Quartus II虽然是Altera公司设计的EDA软件,但它可以与其他工业便准的设计输入、综合与校验工具想连接,设计人员可以使用Altera或标准EDA工具设计输入工具来建立逻辑设计,用Quartus II编译器(Compiler)对Altera器件设计进行编译,并使用Altera或其他EDA校验工具进行器件或扳级仿真。目前,Quartus II支持与Candence、Exemplarlogic、Metro Graphics、Synopsys等公司所提供的EDA工具接口。(2)、与结构无关Quartus II系统的核心编译器支持Altera公司的FLEX10K、FLEX8000、FLEX6000、MAX9000、MAX7000、Classic、Stratix II等可编程逻辑器件系列,提供了与结构无关的可编程逻辑环境。Quartus II的编译器还提供了强大的逻辑综合与优化功能,使用户可以容易地把设计集成到器件中。(3)、丰富的设计库Quartus II提供丰富的库单元供设计者调用,其中包括74系列的全部器件和其他多种逻辑功能部件,调用库元件进行设计,可以大大减轻设计人员的工作量,缩短设计周期。此外,Quartus II含有许多用来构建复杂系统的参数化宏功能模块和LPM模块,它们可以与QuartusII普通设计文件一起使用,使非专业设计人员完成SOPC设计成为可能。(4)、模块化工具 设计人员可以从各种设计输入、处理和校验选项中进行选择,从而使Quartus II可以满足不同用户的需要,根据需要,还可以添加新功能。2.2、VHDL语言简介数字系统的设计输入方式有多种,通常是由线信号和表示基本设计单元的符号连在一起组成线路图,符号取自器件库,通过信号(或线条)连接在一起,信号使符号互连,这样设计的系统形成的设计文件是若干张电路元结构图,在图中详细标注了各逻辑单元、器件的名称和相互间的信号连接关系。对于小系统,这种原理电路图只要几十至几百张。但如果系统比较大,这样的原理电路图可能要几千张、几万张甚至更多。因此,人们考虑使用硬件描述语言进行硬件电路设计。VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。1987年底,VHDL被IEEE代了原有的非标准的硬件描述语言和美国国防部确认为标准硬件描述语言。其语句结构上吸取了Fortran和C等计算机高级语言的语句,只要具备高级语言编程技能和数字逻辑电路的设计基础,就可以在较短时间内学会VHDL语言。2.2.1、VHDL 语言的特点(1)VHDL 语言功能强大,设计方式多样 VHDL 语言具有强大的语言结构,只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。同时,它还具有多层次的电路设计描述功能。此外,VHDL 语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。VHDL 语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法; 既支持模块化设计方法,也支持层次化设计方法。 (2)VHDL 语言具有强大的硬件描述能力 VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。同时,VHDL 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL 语言的强大描述能力还体现在它具有丰富的数据类型。VHDL 语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。 (3)VHDL 语言具有很强的移植能力 VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。 (4)VHDL 语言的设计描述与器件无关 采用 VHDL 语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。当硬件电路的设计描述完成以后,VHDL 语言允许采用多种不同的器件结构来实现。 (5)VHDL 语言程序易于共享和复用 VHDL 语言采用基于库 ( library) 的设计方法。在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。2.2.2、VHDL语言的基本结构一个VHDL语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个CPU。一般情况下,一个完整的VHDL语言程序至少要包含实体、结构体和程序包三个部分。第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录为IEEE的程序包库中。第二部分是程序实体,实体给出电路单元的外部输入/输出接口信号和引脚信息,程序的实体名称是任意取的,但必须与VHDL程序的文件名称相同。实体的标识符是entity,实体以entity开头,以end结束。第三部分是程序的结构体,具体描述电路内部结构和逻辑功能。结构体有三种描述方式,分别是行为(BEHAVIOR)描述方式、数据流(DATAFLOW)描述方式和结构(STRUCTURE)描述方式。结构体以标识符architecture开头,以end结尾。结构体的名称是任意取的。2.3、本章小结 随着EDA技术的普及,硬件设计开发变得越来越方便、快捷。所以了解并掌握EDA技术的理论和熟练使用相应的设计工具,更显得必不可少。本人通过翻阅各种资料,如:机械工业出版社出版的EDA与数字系统设计一书,详细的了解了EDA技术的发展过程并知道了目前较为流行的设计工具有哪些,为本次毕业设计做好了必要准备,并初步制定了设计方案。第三章 2FSK调制解调基本原理3.1、2FSK的调制原理频移键控是利用载波的频率变化来传递数字信息。在2FSK中,载波的频率随二进制基带信号在和两个频率点间变化。“1”对应于载波频率,“0”对应载波频率,但是它们的振幅和初始相位不变化。其表达式为1: (3-1)其波形图如下:图31 2FSK调制2FSK信号的产生方法主要有两种。一种可以常采用模拟调频电路来实现;另一种可以采用键控法来实现,既在二进制基带矩形脉冲序列的控制下通过开关电路对两个不同的独立频率源进行选通,使其在每一个码元周期Ts输出f1或f2两个载波之一。这两种方法产生的2FSK信号的差异在于:由调频法产生的2FSK信号在相邻码元之间的相位是连续变化的。而键控法产生的2FSK信号,是由电子开关在两个独立的频率源之间转换形成,故相邻码元之间的相位不一定连续。图32 键控法产生2FSK信号原理图3.2、2FSK的解调原理数字频率键控(FSK)信号常用的解调方法有很多种如:(1)、同步(相干)解调法在同步解调器中,有上、下两个支路,输入的 FSK信号经过和两个带通滤波器后变成了上、下两路ASK信号,之后其解调原理与ASK类似,但判决需对上、下两支路比较来进行。假设上支路低通滤波器输出为x1,下支路低通滤波器输出为x2,则判决准则是: (32)图33 相干解调法原理框图接收信号经过并联的两路带通滤波器进行滤波与本地相干载波相乘和包络检波后,进行抽样判决,判决的准则是比较两路信号包络的大小。假设上支路低通滤波器输出为,下支路低通滤波器输出为,则判决准则是:如果上支的信号包络较大,则判决为“1”;反之,判决为收到为“0”。 (2)、2FSK滤波非相干解调 输入的FSK中频信号分别经过中心频为、的带通滤波器,然后分别经过包络检波,包络检波的输出在t=kTb时抽样(其中k为整数),并且将这些值进行比较。根据包络检波器输出的大小,比较器判决数据比特是1还是0。图34 滤波非相干解调原理框图3.3、本章小结 FSK是数字通信中不可或缺的一种调试方式。其优点是抗干扰能力较强,不受信道参数变化的影响,因此FSK特别适合应用于衰落信道;缺点是占用频带较宽,频带利用率较低。目前,调频体制主要应用于中、低速数据传输中。随着新技术的应用,一些新型调制系统(如QAM)也随之出现,同时FSK的实现方法也有所革新,或许今后我们会迎来软件无线电的时代。第四章 基于VHDL语言的2FSK调制解调设计 图41为本调制解调设计的系统顶层。其中实体DIV为分频器,将频率为f的时钟信号clk,分为频率为1/2f的信号f1,与频率为1/12f的信号f2。实体signal1是一个信号发生器,循环产生110的数字信号。实体FSKmod是2FSK信号的调制器,通过信号发生器的date基带信号将频率为f1和f2的载波调制成2FSK信号。实体FSKdemod是2FSK信号的解调器,将收到的2FSK信号解调为基带信号。图41 调制解调系统框图 4.1、2FSK调制器设计4.1.1、基于VHDL语言的调制程序library ieee; -IEEE标准库use ieee.std_logic_arith.all;程序包 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity FSKmod is - FSKmod是实体名称port(clk :in std_logic; -系统时钟(输入) start :in std_logic; -复位信号(输入) x :in std_logic; -基带信号(输入) f1 :in std_logic; -载波信号f1(输入) f2 :in std_logic; -载波信号f2(输入) fsk :out std_logic); -已调信号(输出)end FSKmod;architecture behav of FSKmod is - behav是结构体名begin -此进程完成对基带信号的FSK调制process(clk,x) beginif clkevent and clk=1 then -下列操作都在时钟上升沿进行if start=0 then fsk=0; -当start1时fsk开始输出信号 elsif x=0 then fsk=f1; -当输入的基带信号x=0时,输出的调制信号y为f1 else fsk=f2; -当输入的基带信号x=1时,输出的调制信号y为f2 end if;end if;end process;end behav;此程序完成FSK信号的调制过程,实体共有6个端口,其中输入端口有5个,分别为:时钟输入clk、复位信号输入start、基带数据信号输入x、载波f1输入和载波f2输入。输出端口只有1个,为已调信号的输出端fsk。程序逻辑为:当且仅当start为1时,实体开始工作,否则信号输出端输出0。实体开始工作后,每当检测到一个时钟上升沿时,判断输入的基带数据信号,当信号为0时,将载波信号f1输出到输出端口fsk,当信号为1时,将载波信号f2输出到端口fsk。4.2、2FSK解调器设计4.2.1、基于VHDL语言的解调程序library ieee; -IEEE标准库程序包 use ieee.std_logic_arith.all; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity FSKdemod is - FSKdemod是实体名称generic-全局常量声明(PulseNum_TH : integer := 5;-已调信号判决值CntNum_Bclk: integer :=11;-滑窗计数器最大值);port(clk :in std_logic; -系统时钟(输入) start :in std_logic; -复位信号(输入) x : in std_logic; -接收到的已调信号(输入) y : out std_logic; -解调后信号(输出) b_clk : out std_logic -数据时钟(输出),分析时用 ); end FSKdemod;architecture behav of FSKdemod is - behav是结构体名signal q :integer range 0 to CntNum_Bclk; -滑窗控制计数器signal q1:integer range 0 to CntNum_Bclk; -滑窗计数器1signal q2:integer range 0 to CntNum_Bclk; -滑窗计数器2signal q3:integer range 0 to CntNum_Bclk; -滑窗计数器3signal q12:integer range 0 to CntNum_Bclk;-滑窗计数器12signal m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12 :integer range 0 to 15;-已调信号脉冲计数器m1至m12,计数范围0至15signal y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12 :std_logic; -滑窗计数器q1至q12对应的解调输出、y1至y12signal x_dly1,x_dly2: std_logic; -信号延时寄存器beginprocess(clk) -此程序完成滑窗控制计数器0至11的循环计数,及数据时钟的输出beginif clkevent and clk=1 then -下列操作都在时钟上升沿进行 if start=0 then q=0;-当start1时计数器,q开始计数elsif q=11 then q=0;-当q=11时,计数器清零 else q=q+1;-其余时候计数器1end if; end if; if q= 5 then -当q= 5时,b_clk输出为1否则为0 b_clk =1; else b_clk = 0; end if;end process;process(clk,q,start)-此程序使滑窗计数器q1至q12分别进行循环计数beginif start=0 then q1=0; q2=0; q3=0; q4=0; q5=0; q6=0; q7=0; q8=0; q9=0; q10=0; q11=0; q12=0;-当start=0时,计数器清零elsif clkevent and clk=1 then-下列操作都在时钟上升沿进行if(q=0)thenq1 = 0;-当滑窗控制计数器为0时,滑窗计数else 器q1清零q1=q1+1;-其它时候进行1计数end if;if(q=1)thenq2=0;- x2=x;-当滑窗控制计数器为1时,滑窗计数else 器q2清零q2=q2+1;-其它时候进行1计数end if; 省略部分与前后相同,既完成滑窗计数器q3至q11的分别循环计数if(q=11)thenq12 = 0; -当滑窗控制计数器为11时,滑窗计数else 器q12清零q12=q12+1; -其它时候进行1计数end if;end if;end process;process(x,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12) begin -此进程完成各个滑窗的判决输出,既解调if start=0 then -当start=0将判决计数器m1至m12清零m1=0; m2=0; m3=0; m4=0; m5=0; m6=0; m7=0; m8=0; m9=0; m10=0; m11=0; m12=0;elsif clkevent and clk=1 then-下列操作都在时钟上升沿进行x_dly1 = x;-将接收到的已调信号赋值给x_dly1x_dly2 =x_dly1;-将x_dly1赋值给x_dly2if x_dly1 =1 and x_dly2 =0 -如果x_dly1 =1且x_dly2 =0,既采到的是上升沿or x_dly1 =0 and x_dly2 =1-或x_dly1 =0且x_dly2 =1,既采到then 的是下降沿m1 = m1 +1;-都将对判决计数器m1至m12加1操作m2 = m2 +1;m3 = m3 +1; m11 = m11 +1;m12 = m12 +1;end if;if q1=10 then -当q1=10时 if m1=PulseNum_TH then y1=1; -通过m1大小,来判决y1的else y1=0; 输出电平,m1小于5时判为1end if; 否则为0elsif q1 =11 then m1=0;-当q1 =11时m1计数器清零end if;if q2=10 then -当q2=10时if m2=PulseNum_TH then y2=1; -通过m2大小,来判决y2的平else y2=0;输出电平,m2小于5时判为1end if; 否则为0elsif q2=11 then m2=0;-当q2 =11时m2计数器清零end if; 省略部分与上下相同,完成滑窗q3至q11的判决输出if q12=10 then -当q12=10时if m12=PulseNum_TH then y12=1; -通过m12大小,来判决y12的else y12=0;输出电平,m12小于5时判为1end if; 否则为0elsif q12=11 then m12 y y y y y end case;end if;end process;end behav;此程序完成FSK信号的解调过程,实体共有5个端口,其中输入端口有3个,分别为:时钟输入clk、复位信号输入start、已调信号输入x。输出端口有2个,为解调信号输出端y、数据时钟输出端b_clk。程序逻辑为:当start为1时,实体开始工作。实体共有1个滑窗控制计数器q和12个滑窗计数器q1至q12,滑窗控制计数器控制滑窗计数器依次清零,例如:滑窗计数器q1在滑窗控制计数器q0时清零,而q2则在q=1时清零,目的是使滑窗计数器依次延时一个时钟周期开始计数。与12个滑窗计数器对应的是12路的解调输出y1至y12。其解调原理为通过统计12个时钟周期(一个码元周期)内所收到的已调信号上升沿与下降沿的个数,然后判决在这段时间内收到的信号是高频还是低频,既收到的是1还是0。例如:当滑窗计数器q1=10时,查看判决计数器m1,若m1=5,则判该码元周期内收到的信号为1,y1输出高电平,反之输出高电平。当q1=11时,将判决计数器m1清零,并重新开始计数。最后需将这12路输出整合为一路输出,当q=1时,输出值为y1,当q=2时,输出值为y2,以此类推。使12路解调信号依次在一个码元周期内输出,构成一个码元的完整解调信号。这样做的目的是避免在连续收到0101已调信号或信号收到干扰时,单一判决器判决异常,此现象在后续仿真章节中会给予说明。4.3、分频器与信号发生器设计4.3.1、基于VHDL语言的分频程序library ieee; -IEEE标准库程序包 use ieee.std_logic_arith.all; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity DIV is- DIV是实体名称port(clk :in std_logic; -系统时钟(输入) start :in std_logic; -复位信号(输入) clk_out2 :out std_logic;-2分频载波信号(输出) clk_out12 :out std_logic-12分频载波信号(输出) ); end DIV;architecture behav of DIV issignal q2:integer range 0 to 11; -载波信号f2的分频计数器,低频signal q1:integer range 0 to 3; -载波信号f1的分频计数器,高频signal f1,f2:std_logic; -载波信号f1,f2beginprocess(clk) -此进程通过对系统时钟clk的分频,得到begin 载波f2,频率为clk的1/12,低频if clkevent and clk=1 then -下列操作都在时钟上升沿进行 if start=0 then q2=0; elsif q2=5 then f2=1;q2=q2+1; -改变q1后面的数字可以改变,载波f1的占空比 elsif q2=11 then f2=0;q2=0; -改变q1后面的数字可以改变,载波f1的频率 else f2=0;q2=q2+1; end if;end if;end process;process(clk) -此进程通过对系统时钟clk的分频,得到载波f1,为clk的1/2,高频.beginif clkevent and clk=1 then -下列操作都在时钟上升沿进行 if start=0 then q1=0; elsif q1=0 then f1=1;q1=q1+1; -当q1=0时,f1为高电平,q11 elsif q1=1 then f1=0;q1=0; -当q=1时,f1为低电平,q1清零 else f1=0;q1=q1+1; end if;end if;end process;process(f1,f2) -此进程完成载波信号的输出beginclk_out2=f1;-将f1输出至clk_out2端口clk_out12=f2;-将f2输出至clk_out12端口end process;end behav;此程序完成clk信号的分频过程,实体共有4个端口,其中输入端口有2个,分别为:时钟输入、复位信号输入。输出端口有2个,为二分频信号clk_out2的输出端和十二分频信号clk_out12输出端。 程序逻辑为:当start为1时,实体开始工作。实体有两个分频计数器q1和q2,q1在0与1之间循环计数,当q1等于0时,f1为高电平,当q1等于1时f1为低电平,既f1的周期为两个时钟周期,从而达到二分频的目的。而q2在0与11之间循环计数,当q2小于等于5时,f2为高电平,当q2大于等于6且小于等于11时,f2为低电平,f2的周期为12个时钟周期,从而达到十二分频的目的。4.3.2基于VHDL语言的信号发生器程序library ieee; -IEEE标准库程序包 use ieee.std_logic_arith.all; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity signal1 is- signal1是实体名称port(clk :in std_logic; -系统时钟(输入) start :in std_logic; -复位信号(输入) date :out std_logic); -基带信号(输出)end signal1;architecture behav of signal1 issignal q:integer range 0 to 35;-数据时钟计数器begin process(clk)-此进程实现数据时钟计数器0至35的循环计数beginif clkevent and clk=1 then -下列操作都在时钟上升沿进行if start=0 then q=0;elsif q=35 then q=0;-当计数器q=35时,计数器清零else q=q+1;-其余时候计数器做1计数end if;end if;end process;process (q)-此进程完成码元周期为12个时钟周期的110基带信号产生beginif clkevent and clk=1 then -下列操作都在时钟上升沿进行if start=0 then date=0 and q=23 then date=1; -当q大于等于0和小于等于23时,else date=0; date输出为1,否则为0end if;end if;end process;end behav;此程序完成基带信号的产生,实体共有3个端口,其中输入端口有2个,分别为:时钟输入、复位信号输入。输出端口有1个,为基带信号date输出端。程序逻辑为:当start为1时,实体开始工作。实体有一个数据时钟计数器,计数器周期为36个时钟周期,既3个码元周期(1个码元周期为12个时钟周期),用于实现基带信号110的循环输出。4.4、本章小结VHDL语言的编写可以说是本次毕业设计最核心的部分,通过实际动手操作,将理论上2FSK调制解调的方法,转换成实际的VHDL语言逻辑,确实是一件有趣且富有挑战的工作。当然,在实际的编写过程中,也少不了摸索和尝试,必要的时候也会去请教一些熟悉这方面工作的高手。虽然以前我也接触过Quartus II这款软件,但这还是我第一次使用Quartus II应用模块化的方式编写VHDL语句,既:工程的顶层是一个原理图文件,然后通过具体编写各个功能模块的代码,实现其功能。最终将所有功能模块组合起来,形成一个完成的调制解调系统。具体的VHDL语句的编写,加深了我对FPGA芯片时序逻辑的认识,如:同步逻辑和异步逻辑的关系和编写方法。熟悉了各种变量、常量和基本语句的区别和适用场合,如:在快速判断,并使信号输出时使用case-when语句要比if-else语句所产生的信号波形要好。总之,这个过程让我体会到编写VHDL语句的严谨性和严格的时序性。第五章 基于VHDL语言的2FSK调制解调的仿真工程编译通过后,须对其功能和时序性能进行仿真测试,以验证设计结果是否满足设计要求。整个时序仿真测试流程一般有建立波形文件、输入信号节点、设置波形参数、编辑输入信号、波形文件存盘、运行仿真器和分析方针波形等步骤。5.1、2FSK调制器波形仿真图51为调制器仿真波形,其中时钟周期clk为1ms,载波f1周期为2ms,载波f2周期为12ms,码元周期date为12ms。图51 调制仿真波形 由上图可以看出当start由低电平跳转为高电平后,实体开始接收并处理基带信号110和载波信号f1与f2,并将其调制成2FSK已调信号,从端口FKS_mod输出,输出延迟一个时钟周期。当基带信号date为1时,调制器输出的是低频载波信号f2,当基带信号date为0时,调制器输出的是高频载波信号f1。5.2、2FSK解调器波形仿真图52为解调器仿真波形,其中时钟周期clk为1ms,解调出的码元长度demod为12ms。图52 解调仿真波形由上图可以看出当start由低电平跳转为高电平后,实体开始接收并解调已调信号,当收到的是低频信号时,解调出的码元为1,既高电平,当收到的是高频信号时,解调出的码元为0,既低电平。图53与图54为解调器内部数据,既12路的滑窗判决输出,用于说明解调器内部数据的变化情况。其中时钟周期clk为1ms,码元长度为12ms。图53 12路滑窗判决输出(情况1)图54 12路滑窗判决输出(情况2) 对比图54及图54可以看出,当收到的已调信号不为连续的1010时,12路的滑窗判决输出与整合后的输出端demod基本保持一致(除了延时)。当收到的已调信号为连续的1010时,由图54可以看出,滑窗判输出y9与滑窗判决输出y10均发生异常,出现错解调的现象。如果信道中存在噪声干扰,错解调情况则会更严重,这就是本设计要采用12路滑窗判决器解调的原因。5.3、分频器与信号发生器波形仿真5.3.1、分频器波形仿真图55为解调器仿真波形,其中时钟clk周期为1ms,载波f1周期为1ms,载波f2周期为12ms。图55 分频器输出波形由上图可以看出,时钟信号clk被分频为两路输出f1和f2,作为调制器的载波信号。5.3.2、信号发生器波形仿真图56为信号发生器仿真波形,其中时钟clk周期为1ms,码元长度为12ms。图56 信号发生器波形由上图可以看出,码元长度与载波f2的周期相同,为12ms。固定输出数据为110。5.4、本章小结Quartus II自带的时序模拟器是一个功能十分强大的工具,其仿真结果与实际芯片内部的工作情况几乎完全吻合。所以,善于利用仿真工具能给你带来很多便利。我们知道在编译时,Quartus II的联合编译器会自动找出设计者的语法错误,但与实际设计目的不符的逻辑错误是电脑无法自动检出的,这时候就要靠时序分析来找出。波形仿真器不仅能仿真出芯片引脚处的波形,还能将芯片内部每一个变量的变化情况仿真出来。仿真波形前,需将起始时刻和结束时刻设置好,更重要的是根据实际编写情况,确定好输入信号的先后逻辑顺序,避免因为手动设置输入信号的误差造成仿真出错。在这次设计中,我就曾用波形仿真器将解调器的变量及输出从头到尾核对了一次,并从中找到了不少VHDL语句编写上的错误。例如:在编写滑

温馨提示

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

评论

0/150

提交评论