数字通信同步技术的MATLAB与FPGA实现:Altera/Verilog版(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第1版前言

为什么要写这本书

为什么要写这本书呢?或者说为什么要写数字通信技术的MATLAB与FPGA实现相关内容的书呢?记得在电子工业出版社出版《数字滤波器的MATLAB与FPGA实现》时,我在前言中提到写作的原因主要有三条:其一是FPGA在电子通信领域得到了越来越广泛的应用,并已逐渐成为电子产品实现的首选方案;其二是国内市场上专门讨论如何采用FPGA实现数字通信技术的书籍相对欠缺;其三是数字通信技术本身十分复杂,关键技术较多,在一本书中全面介绍数字通信技术的FPGA实现时难免有所遗漏,且内容难以翔实。因此,根据自己从业经验,将数字通信的关键技术大致分为滤波器技术、同步技术和调制解调技术三种,并尝试着先写滤波器技术,再逐步完成其他两种技术的写作。在广大读者的支持和鼓励下,先后又出版了《数字通信同步技术的MATLAB与FPGA实现》和《数字调制解调技术的MATLAB与FPGA实现》。这样,关于数字通信技术的MATLAB与FPGA实现的系列著作总算得以完成,多年前的构想总算成为现实!

自数字通信技术的MATLAB与FPGA实现的系列著作出版后,陆续通过邮件或博客的方式收到广大读者的反馈意见。一些读者直接通过邮件告知书中的内容对工作的帮助;一些读者提出了很多中肯的、有建设性的意见和建议;更多的读者通过邮件交流书中的相关设计问题。《数字滤波器的MATLAB与FPGA实现》采用Xilinx公司的FPGA和VHDL作为开发平台(Xilinx/VHDL版),该书出版后,不少读者建议出版采用Verilog HDL作为开发平台的版本。这是个很好的建议。在Xilinx/VHDL版顺利出版之后,终于可以开始Altera/Verilog版的写作了,以满足不同读者的需求。

本书的内容安排

第1章对数字通信同步技术的概念及FPGA基础知识进行简要介绍。通信技术的实现方法和平台很多。其中,FPGA因其强大的运算能力,以及灵活方便的应用特性,在现代通信、数字信号处理等领域得到越来越广泛的应用,并大有替代DSP等传统数字信号处理平台的趋势。为了更好地理解本书后续章节的内容,本章简要介绍了Altera公司的FPGA,以及Quartus II开发环境、MATLAB软件等内容。如果读者已经具备一定的FPGA设计经验,也可以跳过本章,直接阅读后续章节的内容。

第2章介绍FPGA中数的表示方法、数的运算、有限字长效应及常用的数字信号处理模块。在FPGA等硬件系统中实现数字信号时,因受寄存器长度的限制,不可避免地会产生有效字长效应。工程师必须了解字长效应对数字系统可能带来的影响,并在实际设计中通过仿真来确定最终的量化位宽、寄存器长度等内容。本章还对几种常用的运算模块IP核进行介绍,详细阐述各IP核控制参数的设置方法。IP核在FPGA设计中应用得十分普遍,尤其在数字信号处理领域,采用设计工具提供的IP核进行设计,不仅可以提高设计效率,还可以保证设计的性能。因此,在进行FPGA设计时,工程师可以先浏览一下选定的目标器件所能提供的IP核,以便通过使用IP核来减少设计的工作量并提高系统的性能。当然,工程师也可以从设计需要出发,根据是否具有相应的IP核来选择目标器件。本章介绍的都是一些非常基础的知识,但正因为基础,所以显得尤其重要。其中有效数据位运算,以及有效字长效应等内容在后续的工程实例讲解中都会多次涉及,建议读者不要急于阅读后续章节的工程实例讲解,先切实练好基本功,才可以达到事半功倍的效果。

第3章主要讨论锁相环技术的基本理论,这也是本书阅读起来最为乏味的章节。本章有一大堆理论和公式,很容易让人感到厌烦。对于数字通信技术来说,锁相环技术的工作原理大概是最难以弄清的知识点之一。但是,要想设计出完美的同步环路,对理论的透彻理解是必须具备的能力,而且一旦理解透了,在工程设计时就会有得心应手的感觉。本章从工程应用的角度,全面介绍锁相环的原理、组成及工程应用中需要经常使用的公式和参数设计方法。建议读者先耐心地对本章所介绍的内容进行深入的推敲理解,因为在后续章节讲解同步技术的FPGA实现时,可能会需要反复翻阅本章的内容。通过在工程设计实践中反复体会锁相环技术的原理及工作过程,当读者真正理解锁相环技术的基本理论及分析方法后,就会发现设计出性能优良的锁相环也不是一件多么困难的事。

第4章讨论载波同步技术的FPGA实现。这一章仍然有一些概念及工作原理的介绍,主要目的是讲清楚数字化载波锁相环的参数设计及计算方法。实现数字锁相环的关键步骤在于构造合适的数字化实现结构及模型。本章以一个完整的载波同步环工程设计实例,详细讲解数字载波锁相环系统的设计步骤、方法,并进行全面的性能仿真测试。载波同步环的数字化设计与实现比较复杂,初学者往往难以理解数字化模型与模拟电路之间的对应关系。数字化实现方法中各组成部件、参数的设计比较灵活。本章最后对载波同步环的一般设计步骤、环路参数对系统性能的影响进行归纳整理。读者可以完全按照本章所讨论的流程进行系统的设计及仿真,并反复理解载波同步技术的数字化实现方法,以及Verilog HDL编程的思路,必要时可以重复阅读第3章的内容,切实掌握锁相环技术的工作原理及实现过程。同时,本章用较大的篇幅详细讲解工程设计时的仿真测试步骤,读者尤其要切实掌握Quartus II与MATLAB联合应用的方法,以便提高设计效率。

第5章首先简要介绍三种抑制载波同步环的工作原理,随后对三种同步环的FPGA设计方法、结构、仿真测试过程进行详细讨论。从抑制载波同步环的FPGA实现过程中可以看出,设计三种同步环时所采用的环路模型、参数设计方式均十分相似,其中的环路滤波器只需简单修改即可通用。平方环与同相正交环的性能是等价的,但同相正交环(Costas环)在解调BPSK等抑制载波调制信号时更具优势。判决反馈环比其他两种环路的噪声性能更好,环路锁定后的稳态相差更小,但载波同步环需要以位同步作为前提条件,位同步会影响环路的稳定性。因此,对于抑制载波调制信号来讲,工程上通常采用同相正交环来实现信号的载波同步及数字解调。

第6章首先介绍自动频率控制的基本概念,然后分别对最大似然频差估计及基于FFT载波频率估计两种算法的原理、MATLAB仿真进行讨论,并详细阐述基于FFT载波频率估计算法的FPGA实现方法。FSK是数字通信中常用的一种调制方式,本章对频率调制的原理及信号特征进行介绍,并采用MATLAB对FSK信号进行仿真。FSK信号的解调方法很多,非相干解调法因为实现简单,性能优良而得到更为广泛的应用。为了便于读者更好地理解锁相环与AFC环的差别,本章将对常规二阶锁相环无法实现FSK信号解调的原因进行分析,并采用与锁相环类似的分析方法,对AFC环的模型进行讨论。这也进一步说明,读者在进行FPGA工程设计之前,必须充分理解系统的工作原理等理论知识,才能更好地把握FPGA实现过程中的参数设计、数据截位、时序控制等工程设计细节。本章最后详细阐述采用相乘微分型AFC环实现FSK解调的原理、方法、步骤及仿真测试过程。

第7章主要讨论采用数字锁相环实现位同步的原理、方法、步骤及仿真测试过程。数字锁相法实现位同步是数字通信中使用最为广泛的方法,其基本工作原理与载波同步环类似,均是通过鉴相器提取输入信号与本地位同步信号的相差,并据此对本地同步信号的相位进行调整。微分型位同步环是最简单的数字锁相环,其他位同步环均是在其基础上进行改进和完善的,以增加抗干扰性能及稳定性能。本章以工程实例讲解的方法,对微分型、积分型和改进型位同步环的各个功能部件进行详细的讨论,尤其对环路各节点的信号波形进行了说明。读者在阅读本章时,需要切实弄清各环路、各节点波形的时序关系。当完全理解环路的工作过程及实现方法后,采用Verilog HDL进行实现就比较容易了。读者可以将本章所讨论的实例作为独立的模块嵌入前面章节的实例中,以完成基带信号解调后的位同步功能。

第8章首先介绍同步传输及异步传输的概念,并对两种传输方式的同步原理、方法、步骤及仿真测试过程进行详细讨论。异步传输的速率及效率都比较低,典型的应用是串口通信。本章对RS-232-C串口传输进行FPGA实现,RS-232-C串口传输协议定义了较多的握手信号,有兴趣的读者可以在例8-1的基础上对串口通信进行完善。本章的重点是帧同步系统的FPGA实现,完整的帧同步包括搜索、校核和同步等状态。一个看似复杂的系统,只要合理划分功能模块,在编写程序之前厘清编程思路,最终的代码实现反而会变得比较简单。读者在阅读帧同步系统的程序代码时,重点在于理解各模块之间的接口关系,以及接口信号之间的时序关系,进而深刻理解程序的编写思路和方法,以提高复杂系统的Verilog HDL的编程水平。

本书的目标

作为一名电子通信领域的技术人员,在从业之初都会遇到类似的困惑:如何将教材中所学的理论与实际中的工程设计结合起来?如何能够将这些教材中的理论转换成实际的应用?绝大多数数字通信类教材对通信的原理讲解得十分透彻,但理论与实践之间显然需要有一座可以顺利通过的桥梁。一个常用的方法是通过MATLAB等进行仿真来加深对理论的理解,但更好的方法是直接参与工程的设计与实现。FPGA因其快速的并行运算能力,以及独特的组成结构,在电子通信领域已成为必不可少的实现平台之一。本书的目的正是架起这样一座桥梁,通过具体的设计实例,详细讲解从理论到工程实现的方法、步骤和过程,以便于工程技术人员尽快掌握和利用FPGA平台实现数字通信同步技术的方法。

目前,市场上已有很多介绍ISE、QuartusⅡ等FPGA开发环境,以及VHDL、Verilog HDL等硬件描述语言的书籍。如果仅仅使用FPGA来实现一些数字逻辑电路,或者理论性不强的控制电路设计,那么掌握FPGA开发工具及Verilog HDL的语法就可以工作了。数字通信同步技术的理论性要强得多,采用FPGA平台实现数字通信同步技术的前提条件是对理论知识要有深刻的理解。在理解理论知识的基础上,关键的问题是根据这些理论知识,利用FPGA的特点,找到合适的算法,厘清工程实现的思路,并采用Verilog HDL等硬件描述语言进行正确的实现。显然,要想读懂本书,掌握FPGA实现数字通信同步技术的知识和技能,读者还需要对FPGA的开发环境和设计语言有一定的了解。

在写作过程中,本书兼顾数字通信同步技术的理论,以及工程设计过程的完整性,重点突出FPGA设计方法、结构、实现细节,以及仿真测试方法。在讲解理论知识时,重点从工程应用的角度介绍工程设计时必须掌握和理解的知识点,并且结合FPGA的特点进行讨论,以便读者尽快地找到理论与工程实现之间的结合点。在讲解实例的FPGA实现时,绝大多数实例都给出了完整的Verilog HDL实现代码,从思路和结构上对每段代码进行了详细的分析和说明。作者针对一些似是而非的概念,结合工程实例的仿真测试加以阐述,希望能够对读者提供更多有用的参考。相信读者在按照书中讲解的步骤完成一个个工程实例时,会逐步感觉到理论与工程实现之间完美结合的畅快。随着读者掌握的工程实现技能的提高,对理论知识的理解也必将越来越深刻。如果重新阅读以前学过的理论知识,就会比较容易构建起理论与工程实现之间的桥梁。

关于FPGA开发环境的说明

众所周知,目前两大厂商Xilinx和Altera的产品占据了全球约90%的FPGA市场。可以说,在一定程度上正是由于两家FPGA公司相互竞争的态势,才有力地推动了FPGA的不断发展。虽然HDL的编译及综合环境可以采用第三方公司所开发的产品,如ModelSim、Synplify等,但FPGA的物理实现必须采用各自公司开发的软件平台,无法通用。Xilinx公司目前的主流开发平台是ISE,Altera公司目前的主流开发平台是QuartusⅡ。与FPGA开发平台类似,HDL也存在两种难以取舍的选择,即VHDL和Verilog HDL。

如何选择开发平台以及HDL呢?其实,对于有志于从事FPGA技术开发的技术人员,选择哪种平台及HDL语言并不重要,因为两种平台具有很多相似的地方,精通一种HDL后,再学习另一种HDL也不是一件困难的事。通常来讲,可以根据周围同事、朋友、同学或公司的主要使用情况进行选择,这样在学习的过程中就可以很方便地找到能够给你指点迷津的专业人士,从而加快学习的进度。

本书采用Altera公司的FPGA作为开发平台,采用Quartus II 12.1作为开发环境,采用Verilog HDL作为实现手段。由于Verilog HDL并不依赖于某家公司的FPGA,因此本书的Verilog HDL程序可以很方便地移植到Xilinx公司的FPGA上。如果程序中应用了IP核,两家公司的IP核通常是不能通用的,这就需要根据IP核的功能参数,在另外一个平台上重新生成IP核,或编写Verilog HDL代码来实现。

如何使用本书

本书讨论的是数字通信同步技术的MATLAB与FPGA实现。相信大部分工科院校的学生和电子通信领域的从业人员对MATLAB都有一个基本的了解。由于MATLAB的易用性及强大的功能,已经成为数学分析、信号仿真、数字处理必不可少的工具。MATLAB具有大量专门针对数字信号处理的函数,如滤波器函数、傅里叶分析函数等,这些函数十分有利于对一些通信的概念及信号进行功能性仿真,因此,在具体讲解某个实例时,通常会采用MATLAB作为仿真验证工具。虽然书中的MATLAB程序相对比较简单,主要应用一些数字信号处理函数进行仿真验证,但如果读者没有MATLAB的基础知识,还是要先简单学习一下MATLAB的编程概念及基本语法。

在讲解具体的FPGA工程应用实例时,通常会先采用MATLAB对所设计的工程进行仿真,一方面仿真算法过程及结果,另一方面生成FPGA仿真所需要的测试数据。然后在Quartus II上编写Verilog HDL代码对实例进行设计和实现。为了便于讲述,通常会先讨论程序的设计思路,或者先给出程序清单,再对程序代码进行分析说明。完成程序编写后,还需要编写TestBench文件,根据所需产生输入信号的种类,可以直接在TestBench文件中编写代码来产生输入信号,也可以通过读取外部文本文件的方式来产生输入信号。最后采用ModelSim工具对Verilog VHDL程序进行时序或行为仿真,查看ModelSim仿真波形结果,并根据需要将仿真数据写入外部文本文件中,通常还会对仿真波形进行分析,分析仿真结果是否满足要求;如果ModelSim波形不便于精确分析测试结果,则需要再次编写MATLAB程序,对ModelSim仿真结果数据进行分析处理,最终验证FPGA设计的正确性。

本书主要以工程实例的方式讲解数字通信同步技术的原理及FPGA实现方法和步骤。本书的大部分工程实例均给出了完整的程序清单,但限于篇幅,不同工程实例中的一些重复或相似的代码没有完全列出,本书配套资料中收录了本书所有工程实例的源程序及工程设计资源,并按章节序号存放。本书在编写工程实例时,程序文件均放置在“D:\SyncPrograms”文件夹下,读者可以先在本地硬盘下建立“D:\SyncPrograms”文件夹,而后将本书配套资料中的程序压缩包解压至该文件夹下,大部分程序均可直接运行。需要说明的是,在大部分工程实例中,需要由MATLAB产生FPGA测试所需的数据文件,或者由MATLAB读取外部文件进行数据分析,同时FPGA仿真所需的TestBench文件通常也需要从指定的路径下读取,或将仿真结果输出到指定的路径下。文本文件的路径均指定为绝对路径,如“fid=fopen('D:\SyncPrograms\ Chapter_4\E4_1_DirectCarrier\Sn0dB_in.txt','w')”,因此读者运行实例程序时,需要将程序文件中指定文件绝对路径的代码进行修改,以确保仿真测试程序在正确的路径下对文件进行读/写操作。

致谢

有人说,每个人都有他存在的使命,如果他迷失自己的使命,就失去了存在的价值。不只是每个人,每件物品也都有其存在的使命。对于一本书来讲,其存在的使命就是被阅读,并给阅读者带来收获。数字通信的MATLAB与FPGA设计系列图书,能够对读者在工作及学习中有所帮助,是作者莫大的欣慰。

作者在写作本书的过程中查阅了大量的资料,在此对资料的作者及提供者表示衷心的感谢。由于写作本书的缘故,作者在重新阅读一些经典的数字通信理论著作时,再次深刻感受到了前辈们严谨的治学态度和细致的写作作风。

在此,感谢父母,几年来一直陪伴在我的身边,由于他们的默默支持,才让我能够在家里专心致志地写作。感谢我的妻子刘帝英女士,她不仅是一位尽心尽职的母亲,也是一位严谨细致的科技工作者,同时也是本书的第一位读者,在工作之余对本书进行了详尽而细致的校对。时间过得很快,我的女儿已经上小学四年级了,她最爱看书和画画,最近迷上了《西游记》,以前的儿童简化版已满足不了她的要求了,周末陪她去书店买了一本原著,她常常被书中的情节逗得哈哈大笑,还常常要推荐给我看一些精彩的章节。

FPGA技术博大精深,数字通信技术种类繁多且实现难度大,虽然本书尽量详细讨论了数字通信同步技术的FPGA实现相关内容,仍感觉到难以详尽叙述工程实现的所有细节。相信读者在实际工程应用中经过不断实践、思考及总结,一定可以快速掌握数字通信同步技术的工程设计方法,提高FPGA的工程设计能力。

由于作者水平有限,不足之处在所难免,敬请读者批评指正。欢迎大家就相关技术问题进行交流,或对本书提出改进意见及建议。请读者访问网址http://duyongcn.blog.163.com以获得与本书相关的资料及信息,也可以发邮件至duyongcn@sina.cn与作者进行交流。

杜勇
2015年3月