基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

基于FPGA的扩频通信系统设计(附matlab和verilog代码)

导读

在无线通信系统中,普遍使用扩频通信技术,因此扩频技术对通信系统具有重要的现实意义。直接序列扩频技术是应用最广的一种扩频技术,FPGA具备高速度的并行性特点在无线通信系统中的优势日益增强,利用FPGA实现直接序列扩频技术,可增大传输速率,可以使扩频技术有更好的发展与应用。

本篇利用本原多项式产生伪随机序列用作扩频,通过同步模块对扩频后的信号进行捕获,通过直接序列解扩模块进行解扩。本篇给出了编解码、扩频解扩、同步的整体方案,使用Quartus实现功能,并结合Matlab和ModelSim对模块进行调试和测试,实现扩频通信模块的搭建仿真,验证其设计的正确性。首先概述了方案设计与论证、整体方案的设计、各个模块的设计、个别模块的调试与各个模块的仿真验证。本篇主要实现的模块有:汉明编码模块、直接序列扩频模块、量化器模块、同步模块、直接序列解扩模块和汉明译码模块。各位大侠可依据自己的需要进行阅读,参考学习。

第一篇内容摘要:本篇会介绍绪论,包括课题研究背景和发展现状和课题研究意义;还会介绍系统整体设计与方案论证,包括系统设计要求、系统整体架构、软件设计、编码方式方案论证、扩频方式方案论证、同步算法方案论证等相关内容。

引言

扩频技术是通信系统中的重要组成部分,具有低的截获率、信号隐蔽性强、易于组网、多用户随机选址能力强和抗干扰能力强等优点。扩频技术是通过一个独立的码序列、编码及调制的方法来实现的。在接收端利用相同的伪随机序列进行同步和解扩,再进行译码,达到恢复所传信息数据的目的。近年来随着超大规模集成电路和微处理技术的快速发展,使扩频技术在军用及民用领域具有深远的意义。

本篇设计了一种基于FPGA的扩频模块,并设计实现了信息数据的编解码、扩频解扩以及同步等功能。本设计采用汉明编码对信息数据进行编码,编码后加入同步头,为接收端同步做准备。加入同步头的数据与伪随机序列进行异或,达到扩宽信号带宽的目的,再加入噪声送入接收端。接收端产生和发送端相同伪随机序列作为同步的本地参考伪随机序列模板,接收数据与模板进行最小二乘法计算,结果与预设阈值进行比较,小于阈值则被断定为对应的数值,用来实现同步和解扩,再通过汉明译码模块对数据进行译码和纠错,恢复原始信息数据。

 

一、绪论

1.1 课题研究背景和发展现状

扩频系统最早可以追溯到20世纪20年代左右,扩频通信就有了初步的应用。但是一直到20世纪年代中期,扩频系统才真正应用和发展起来。与很多的通信技术类似,扩频技术最初也应用于保密通信和制导系统等军事技术。除了在军事通信中的应用,扩频技术在无线通信领域也有发展。我国主要将扩频技术应用在20世纪70年代后,用于建设军用的航天器,具有较强的链路防护且具有很强的生存能力。建成后扩频技术成为军用航天器的重要组成部分,成为军用航天器正常运行提供重要保障。目前扩频通信技术已经在测距、卫星通信、GPS导航定位、移动通信、电子对抗、跟踪、遥控和蓝牙技术等方面广泛应用。

扩频通信技术具有很多独特的优点:具有抗干扰能力强和截获率低等独特优点,而且具备码分多址(CDMA,Code Divided Multiple Access)或称为扩频多址(SSMA,Spread SpectrumMultiple Access)的能力,因此广泛应用于商业、银行、宾馆、能源和交通业等行业。

因为应用广泛受到世界各国的特别关注,尤其是在近年来随着超大规模的集成电路和微处理技术快速发展,使得扩频技术在各个行业得到更多的发展。随着数字技术的飞速发展,数字扩频技术不仅完成模拟扩频的所有功能,而且在性能和精度方面都有很大的优势,所以数字扩频技术将在未来被更广泛的应用。

1.2 课题研究意义

扩频通信是一种利用比原始信号本身频带宽的信号的通信方式,其全称为扩展频谱通信(Spread Spectrum Communication)。在扩频通信技术中,发送端将原始信号的频带进行扩展,得到扩频信号,然后在接收端通过对信号进行解扩处理,恢复原始信号。根据通信系统产生的扩频方式,可以将扩频通信分为5类:直接序列扩展频谱(Direct Sequence Spread Spectrum Communication Systems)、频率跳变扩频通信系统(Frequecy Hopping Spread Spectrum Communication Systems,FH-SS)、跳时扩频通信系统(Time Hopping Spectrum Communication Systems,TH-SS)、线性脉冲调频系统(chirp)和混合扩频通信系统,扩频技术在未来无线通信技术中,仍是重要部分,很多方面需要继续去探索,因此扩频技术的研究不能停滞不前。而FPGA属于并行器件,具有速度快、灵活性好,处理能力强,易于扩展等特点,因此,研究基于FPGA的扩频技术研究具有重要的意义。

二、系统整体设计与方案论证

2.1 系统设计要求

基于FPGA的扩频模块设计,任务要求在10MHz的系统时钟下,能够具有以下功能:

a. 具有对发送或接收数据进行编码译码功能;

b. 具有对发送或接收数据进行扩频解扩功能;

c. 具有并串之间转换功能;

d. 具有对接收数据同步(比特同步)功能;

e. 数据发送端8bits宽度,数据接收端8bits宽度,采用fifo构成接口(忽略PCM和频带调制);

f. 逻辑资源占用率不超过80%。

2.2 系统整体架构

基于FPGA扩频模块主要由六大模块组成:编码模块、扩频模块、量化器模块、同步模块、解扩模块和译码模块。系统大致流程为:fifo作为接口读取原始信号后送给编码模块,编码模块对数据进行编码,加入同步头送入扩频模块进行并串转换和扩频,将扩频后的信号经过量化器对其进行量化处理,量化后的信号引入一定范围的噪声干扰。接收端接收到数据后,利用同步模块采用相关同步算法或最小二乘法算法进行同步计算后,将同步后的数据信息送入译码模块进行译码得到原始信号,最后通过fifo输出。

整体架构如图2.1所示。 

 

图2.1  整体架构图

2.3 软件设计

软件流程如图2.2所示,首先获取原始数据信号,对原始数据信号进行编码,对编码后的信号进行扩频,扩频后的数据添加同步头,通过并串转换成为单比特数据,量化器将单比特数据变成8bit有符号数据,然后对信号引入噪声,加入噪声的信号利用同步模块进行同步,识别同步头后对信号进行解扩,解扩后利用译码模块对数据进行译码输出原始信号。

图片[1]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图2.2  软件流程设计图

2.4 编码方式方案论证

方案一:编码模块若采用汉明码编码方式。汉明码是一种线性分组码。汉明码是指将数据信息码分成为长度为m的数据段,在每一段数据后面添加n位的校验码,这样编码方式为汉明码;

方案二:编码模块若采用奇偶监督码方式。奇偶监督码分为奇数监督码和偶数监督码两种,两者的原理相同。在偶数监督码中,与数据信息位宽无关,监督位仅1位,当数据中的“1”的数目为偶数时,即满足an-1^an-2^…a0=0,其中a0为监督位;在奇数监督码中,和偶数监督码相似,当数据中的“1”的数目为奇数时,即满足an-1^an-2^…a0=1,其中a0为监督位。

表2.1  编码方式性能对比表

图片[2]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

根据表2.1编码方式性能对比表所述,汉明码编码方式具有纠错能力,而奇偶监督码不具有纠错能力,实践中若出现编码错误,汉明码译码可以将错误信息位改正,综合考虑选择方案一,编码模块采用汉明码编码方式进行编码。

2.5 扩频方式方案论证

方案一:扩频模块若采用直接序列扩频。直接序列扩频,简称直扩扩频(DSSS)。在发送端传送的数据信息需要经过信道编码后,与本原多项式产生的伪噪声序列进行模2加(异或)完成扩频,在接收端用相同的扩伪随机序列对其解扩,解扩后的数据进行译码,达到恢复原始数据信息的目的;

方案二:扩频模块若采用跳频扩频。跳频扩频通信系统简称跳频通信,它是利用伪随机序列去控制载波振荡器的频率,导致发送端的频率发生变化。跳频通信载波频率可随机进行选择,伪随机序列对此可以控制载波频率的输出。接收端频率可按照相同频率跳变,产生参考本振信号,经混频后得到固定的中频信号,可实现解跳过程;

方案三:扩频模块采用跳时扩频。时间跳变是一种扩频技术,简称TDMA,与跳频系统相似,跳时是使发射信号在时间轴上离散地跳变。将时间轴分成许多时隙(时片),若干个时片组合成跳时时间帧,扩频码序列决定哪个时隙进行发送数据信息。在接收端,当接收数据信号同步后,通过开关按时的进行解跳,就能够正确恢复原始数据。

表2.2  扩频方式性能对比表

图片[3]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

根据表2.2扩频方式性能对比表所述,直接序列扩频方式比其他两个方式实现较容易、抗干扰能力较强且可以独立使用,综合优缺点考虑,选择方案一,扩频模块采用直接序列扩频方式进行扩频。

2.6 同步算法方案论证

方案一:同步模块若采用最小二乘法。最小二乘法是一种数学优化技术。它通过最小化误差的平方来和数据进行匹配。它可以简便地求得接收信号,并使得这些接收信号与伪随机序列之间误差的平方和为最小。利用接收的数据信号与模板进行最小二乘法算法进行计算与预先设定的阈值比较,已达到同步的目的;

方案二:同步模块若采用线性相关法。线性相关法利用起始位置不确定范围的PN码信号捕获,使本地PN码信号与其同步。接收信号与模板进行计算,获得二者的相似程度,并与阈值进行比较,用来判断是否为信号的帧头,确定为有用信号后,开始对信号进行继续捕获。

表2.3  同步算法性能对比表

图片[4]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

根据表2.3同步算法性能对比表所述,最小二乘法比线性相关法能够接受更大的误差范围,能够更准确的判断接收信号数值,综合考虑,选择方案一,同步模块采用最小二乘法进行同步。


三、软件开发平台及软件模块设计

3.1 FPGA芯片

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物,通过提高密度、降低功耗和成本等手段,FPGA已经披靡传统ASIC领域,在众多新兴应用领域加速渗透。如今FPGA在通信、图像处理和控制方面也有发展,在未来具有很好的发展前景。

本论文设计采用的FPGA芯片是altera公司的CycloneⅡ系列EP2C70F896C6芯片,该芯片具有4个锁相环,150个内嵌乘法器、622个I/O引脚、48416个寄存器和68416个逻辑单元,其中拥有专用的乘法器,可以大幅度有效地提高系统的整体性能,同时也可以提高系统的整体稳定性。

3.2 设计和仿真验证平台

3.2.1 Quartus设计软件平台

Quartus II 11.0 是 Altera 公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、Verilog等多种设计形式,自带有综合器和仿真器,支持IP核,包含宏功能模块库,使用户可以充分利用成熟的模块,简化了设计流程,加快了设计速度。该平台支持一个工作环境下的设计要求,其中包括支持基于Internet的协作设计,可以在XP、Linux和Unix上使用。

3.2.2 ModelSim仿真验证软件平台

ModelSim 5.5是Mentor公司的HDL语言仿真软件,是业界唯一的单内核支持VHD和Verilog混合编程仿真器。编译仿真速度快,编译代码与平台无关,有利于IP核的保护,ModelSim 5.5具有以下特点:RTL和门级优化、本地编译结构、编译仿真速度快和跨平台跨版本仿真;集成了性能分析、波形比较和代码覆盖等。选用ModelSim 5.5作为本设计的各个模块的功能及仿真波形验证软件。

3.2.3 Matlab仿真验证软件平台

Matlab是MATrix LABoratory的缩写,是一款由美国The MathWorks公司出品的商业数学软件。Matlab是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。利用Matlab r2011b软件所带库函数,有利于部分功能仿真。

3.3 汉明码编码模块设计

3.3.1 汉明编码原理

在香农的时代,二战结束的那段时候,贝尔实验室聚集了很多人才,他们那时的工作对我们今天数字世界的影响非常重要,如图基(John Tukey)创始了现代统计学,汉明(Richard Wesley Hamming)成功的进行了纠错码研究,他们的成果恩泽天下。

本文中的汉明编码模块采用汉明(7,4)码,全部码长是7位:C6~C0,其中4位是原始信息位D,3位是奇偶效验位P,通过如下表3.1方式组成:

表3.1  汉明码组成表

图片[5]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

由表3.1可知,汉明码具有纠正错码的能力,在后续章节3.5.1节详细介绍。

 

3.3.2 汉明编码设计

根据表3.1可知,校验位P为对应的原始信息码异或得到,其它位直接输出即可,因此设计得到如图3.1的设计模型:

图片[6]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.1  汉明码编码设计模型
 

如图3.2为汉明编码模块在总设计中的设计模型。首先利用控制模块h_fsm的h_load信号控制输入数据的更新,当完成8bits数据编码后才更新输入数据。由于数据是8bits而汉明码每次编码对象数据为4bits,因此利用控制模块h_fsm的hm_sel信号控制数据高4位或低4位进行汉明编码,利用h_fifo模块(fifo)对数据进行缓存,通过对fifo空标志信号m_empty高电平有效进行判断,如信号m_empty有效则置fifo读操作使能信号m_rdreq高电平进行读取编码后的数据,其他情况为低电平。设计模型对应Verilog代码详见附录A。

图片[7]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.2  汉明编码模块总设计模型

3.4 直接序列扩频模块设计

3.4.1 直接序列扩频原理

直接序列扩频是用待传输的数据信息与伪随机序列异或,用来扩展传输信号的带宽。原理如图3.3所示。传输信号不经过扩频直接传输,受到信道的噪声干扰,导致信号失真。若经过扩频后传输,可以提高抗噪声能力。

图片[8]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.3  直接序列扩频原理图

在3.1香农定理公式中,C是信道容量,单位为比特每秒(bps);B是信道带宽,单位是Hz,S/N是信噪比。

图片[9]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug(3.1)

根据3.1香农定理公式可知,当信道容量C不变时,增加带宽B,则可以容许信噪比减小;或者说,在信道的信噪比很小时(如无线通信中噪声很大情况下)为了保证正常的通信,则需要增大带宽B。很多情况下,基带(原始数据)信号的带宽不足以满足上式,直接用这样的基带信号经过调制后进行通信,经常会受到噪声的干扰,甚至无法进行正常通信,因此使用直接序列进行扩频。

伪随机序列是最长线性移位寄存器序列的简称,它是由多级移位寄存器或其延迟元件通过线性反馈产生最长的码序列,在移位寄存器里,若移位寄存器级数为n,则能产生2n个状态,除去一个全“0”状态,则还剩2n-1个状态。因此n级移位寄存器能产生的最大长度的码序列为2n-1。

本文采用本原多项式产生伪随机序列,利用伪随机序列与原始信号异或得到扩频后的信号。本原多项式an-i、…a1、a0为一组N位移位寄存器,在每个时钟下,该移位寄存器的每一位发送变化,每一位ai的变化是由其输入信号决定,该输入信号则是后级电路与系数C层次异或的结果决定的,原理图如图3.4所示。

图片[10]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.4  伪随机序列原理图

 

3.4.2 直接序列扩频模块设计

要产生所需的伪随机序列,需要先确定序列级数r,确定级数相当于确定了伪随机序列的长度,本文采用5相多项式:X5+X2+1,对应有31个伪随机数,原理图如图3.5所示:

图片[11]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.5  5相伪随机序列原理图

5相多项式的初始状态为a4a3a2a1a0=00001,a4为a0和a3异或得到的,其余的为上一级得到。每到来一个时钟上升沿按上图移位一次,从a0产生输出(1个bit宽度的串行输出,5位变量最多可产生31种组合),不同的初始值对应不同的输出序列,输出的序列都为31bits,对应输出序列如表3.2所示:

表3.2  伪随机序列表

图片[12]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

根据表3.2可得出本原多项式具有以下9点特性:

1. 无论设置的初始值是什么,序列仅是开始位置变化,序列本身并无变化;

2. 伪随机数PRN是伪随机序列从置位开始后的头5个比特;

3. 每一个相邻的伪随机序列,其相位差一拍;

3. 每31个时钟周期循环一次;

4. PRN中没有0;

5. 在一个伪随机序列周期内,PRN随机分布(被洗牌);

7. 序列名与ms序列头5比特为镜像对称;

8. 前一个为下一个的向左循环移位;

9. 1的个数比0的个数多1个。

本设计主时钟信号clk为10MHz,设计模型如图3.6所示。首先,编码后的信号经过接口m_interface模块接收到数据信号。其次,将接收到的数据信号通过并串转换模块变成单比特数据,利用计数器counter模块控制伪随机序列与单比特数据进行异或操作,最后达到扩频的目的,设计模型对应Verilog代码详见附录A。

图片[13]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.6  扩频模块设计图

3.5 量化器模块设计

在实际传输过程中,需要用D/A转换芯片将数字信号转换为模拟信号进行发送,在传输过程会引入噪声,量化器的模块主要是模拟此过程,将单比特的信号变为8bits有符号数,也为后续引入噪声做准备。在模块设计中,利用选择器即可实现此操作,设计模型如图3.7所示,对应Verilog代码详见附录A。

图片[14]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.7  量化器模块设计图

 

3.6 同步模块设计

3.6.1 同步原理

同步的作用就是在时间不确定的情况下,捕获到有用的伪随机序列,使本地的伪随机序列与数据同步,因此在解调前必须对数据进行同步处理。如图3.8所示,接收端无法知道序列中起始位置,无法保证接收序列的开始位与发送序列的开始位一致,同时为避免丢失发送数据和保证正确恢复数据位,所以在发送数据前需加同步头,能够起到接收端接收数据的同步作用。

图片[15]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.8  接收端信号接收示意图

同步头需要加到发送端数据信号起始位置,同步头Frame_Head为14bits,数据信号为8bits位宽。具体如表3.3所示:

表3.3  字边界和帧边界定义表

图片[16]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

在检测到同步头之前,首先接收端应与同步头扩频后的数据进行对齐,由于接收端采到某位同步头数据的不定位置,所以要用31个不同伪随机序列模板对采集到的31bits数据进行最小二乘法(3.3.2节进行介绍)计算。以进行判定与哪个序列模板最吻合,判定的方法是将累加器的初始值设定为0,利用累加器对最小二乘法运算的结果进行累加,与阈值进行比较,经过多次实验,最终判定阈值为50000。

3.6.2 最小二乘法原理

最小二乘法(least square)由德国数学家高斯发明,其基本思想就是多维空间的点距问题,由此可以解决数学中的相关分析和拟合等问题。

1801年,由于谷神星运行至太阳背后,失去了谷神星的轨迹,奥地利天文学家海因里希·奥尔伯斯根据高斯计算出来的轨道,重新发现了谷神星。高斯计算的轨道,看成是多维空间的一个点,原观察轨道亦为另一个点,将这两点的距离趋于最小化,即是当时高斯所做的一切,这就是最小二乘法的来源。

直接序列同步利用最小二乘法来比对31bits数据与模板之间的相似程度,通过与阈值进行比较,确定是否捕获到有用信号,如果为有用信号,则进行相应的延时处理,已达到能够与同步头数据对齐的目的,尽最大可能地正确还原数据信息。

3.6.3 同步设计

设计模型如图3.9所示,首先,在接收端生成与发送端相同的伪随机数,其次用计数器控制输入31bits数据,输入数据分别与31个模板进行最小二乘法计算,用来比对相似度,通过得到的计算值与阈值进行比较,该模块会判断出输入数据为对应的伪随机数,从而判断出对齐帧头需要多少个系统时钟周期。最后,位置信息输出后利用计数器进行计数,相当于延时操作,当计数值达到所需延时时间后,说明已对齐同步头中的某一位,设计模型对应Verilog代码详见附录A。

图片[17]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.9  同步头位置判断模块

 

3.7 直接序列解扩模块设计

设计模块如图3.10所示。在同步头对齐后,对于直接序列解扩模块与同步模块相似,首先,利用本地时钟生成与发送端相同的伪随机序列,m_leastsouare模块是对数据“0”和“1”扩频后的伪随机序列模板与对齐后31bits数据进行最小二乘法计算,计算值进行比较大小,计算值小的对应解扩为“0”或“1”,通过判断连续几个“1”后并且判断出“0”,说明同步头结束,下一位则是发送端发送的数据信息,将数据信息解扩后输出送给串并转换及汉明译码模块。设计模型对应Verilog代码详见附录A。

图片[18]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.10  直接序列解扩模块设计图

 

3.8 汉明译码模块设计

3.8.1 汉明译码原理

由本文3.1节说明了编码模块编码原理,根据表3.1汉明码组成结构,可以知道P0P1P2为校验字节,C0为D3D1D0P0异或得到,C1为D3D2D0P1异或得到,C2为D3D2D1P2异或得到。如果由附加位C0和C1为“1”,C2为“0”,因此可以推断D0发生错误;如果由附加位C1和C2为“1”,C0为“0”,则可以判断D2发生错误;如果附加位C0、C1和C2均为“1”,则可以判断D3发生错误;如果仅C0为“1”,则可以判断校验位P0发生错误。

以此类推,通过判断哪个区域发生共同错误,来判断具体哪一位发生错误,如图3.11所示:

图片[19]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图3.11  汉明纠错码原理图

3.8.2 汉明译码设计

设计模型如图3.12所示。首先,通过inteface模块对数据信息进行串并转换将串行信号转换为并行信号。其次,利用start1_mk模块对haming_decoder模块进行使能控制,当使能信号start高电平有效时,haming_decoder模块对数据进行译码和纠错。haming_decoder模块输出数据位4bits,通过start_mk模块的信号lh进行控制输出信号为数据的高四位还是低四位。counter模块用来辅助inteface模块和haming_decoder模块,对数据比特位置进行判断。最后输出信号为8bits位宽。设计模型对应Verilog代码详见附录A。 

 

图3.12  汉明译码模块设计图


四、分析调试

4.1 汉明编解码模块调试

首先利用Matlab该模块进行调试,利用随机函数生成10个随机数,通过74汉明码编码函数对10个随机函数进行编码,随机数分别为4’h0、4’hb、4’h6、4’h1、4’h3、4’h9、4’h7、4’h9、4’h7和4’hd,编码后分别为7’h00、7’h4b、7’h46、7’h51、7’h23、7’h39、7’h17、7’h39、7’h17和7’h0d。具体如图4.1所示,对应Matlab代码详见附录A。

图片[20]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图4.1  汉明码编码Matlab仿真图

利用Matlab的随机函数生成10个随机数,通过74汉明码编码函数对10个随机函数进行编码,编码后引入噪声如图4.2所示:

图片[21]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图4.2  编码后与加入噪声后对比图

通过译码函数进行译码,如下图4.3所示:

图片[22]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图4.3  编码前与译码后对比图

根据图4.3可知,当发生一位码值错误时,汉明译码模块可以正确纠错;当发生一位以上码值错误时,汉明译码模块不能正确纠错,导致译码错误。利用Matlab可知汉明译码模块具有译码能力和一位码值的纠错能力。

利用Verilog对汉明码编码模块和汉明译码模块进行编写,然后一同进行调试,在两个模块中间加一噪声模块,保证编码后数据任意一位发生错误,通过译码模块后,判断是否能够进行正确纠错,编码前数据与编码后的数据是否一致,判断两个模块的正确性,调试模型如图4.4所示:

 

图4.4  断言调试模型

ModelSim仿真波形截图如图4.5所示:

图片[23]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图4.5  汉明编解码模块仿真波形图

利用断言的仿真方式打印报告如图4.6所示,通过确认编解码前后数据一致,也证明汉明编码模块和汉明译码模块正确性。

图片[24]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图4.6  打印结果图

4.2 直接序列扩频模块调试

利用Matlab对该模块进行调试,利用Matlab伪随机函数生成伪随机数,通过设置初始值来与3.4.2节表3.2的结果进行对比,通过对比可以确定生成伪随机序列满足要求,为采用Verilog设计打好坚实的基础。如图4.7为Matlab生成的伪随机数,对应Matlab代码详见附录A。

图片[25]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图4.7  Matlab生成伪随机数图

 

4.3 同步模块调试

在进行同步调试时出现对不齐同步头的问题,例如计算所延时时间应为29个系统时钟周期,即计数器仅需要延时29个时钟周期,因为计数器是从“0”开始进行计数,当计数值等于延时时间-1时,模块可以进行同步头解扩处理,由于没有对齐同步头,导致利用最小二乘法计算结果均大于预设阈值,系统无法进行下去。仿真波形截图如图4.8所示:

 

图4.8  同步错误情况仿真波形图

根据仿真波形结合设计代码最终找到原因,由于同步模块对延时时间信号进行捕获也需要一个系统时钟周期,所以计数器的计数值应该等于延时时间-2,模块才可以进行同步头解扩处理,仿真波形截图如图4.9所示:

图片[26]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图4.9  同步修改正确仿真波形图

 

4.4 整体设计资源占用率

在设计完成后,在如图4.10所示,该整体设计共使用3735个组合逻辑,占5%;使用1782个寄存器,占3%;使用39个I/O引脚,占6%;使用5888个存储器,约占1%;使用2个9bit嵌入式硬件乘法器,约占1%。

图片[27]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图4.10  FPGA资源占用率

 

4.5 整体设计RTL视图

由于例化的原因导致与整体设计框图不一致,因为例化对其整体设计功能无影响。所以设计整体RTL视图如图4.11所示:

 

图4.11  设计整体RTL图

 

五、系统测试

对整体系统设计进行测试,通过发送端到接收端的各个模块逐级进行测试,确保每个环节的正确性。

5.1 汉明编码模块模块测试

利用Verilog进行汉明码编码模块进行编写。在testbench测试文件总输入数据初始化为8’h55,通过时钟上升沿到来进行取反,所以数据依次为8’h55、8’haa、8’h55…8’haa等,接口采用同步fifo进行数据缓冲,如图5.1所示,在测试文件中通过判断t_full信号高有效来判断fifo是否为满状态,若不是满状态,则置写操作的使能信号t_wrreq高电平有效,对fifo进行写操作,否则不进行写操作。汉明码编码模块通过判断h_empty信号来判断fifo是否为空状态,若不为空,则置读操作使能信号h_rdreq高电平有效对fifo进行读操作,否则不进行读操作。

图片[28]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.1  fifo接口图

通过汉明码编码模块对数据进行汉明码编码,如图5.2所示,信号ha_data为对应编码结果。4’h5编码为7’h2d,4’ha编码为7’h52,如图5.2表明,汉明编码模块能够正确编码。

图片[29]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.2  汉明码编码模块ModelSim仿真波形图

5.2 直接序列扩频模块测试

利用Verilog进行伪随机数模块编写,初始值为5’b00001,生成序列为如图5.3所示。信号m_bit为伪随机数,在进行编码数据信号进行扩频之前,应将数据信息加上帧头14’b11111111111110,信号m_data为汉明编码模块编码后的7bits数据信息,信号s_bit为帧头或编码数据信息并串转换后的信号,信号bc控制信号s_bit哪个数据位于信号m_bit相异或,得到的结果为输出信号q_data,从而实现直接序列扩频的功能。如图5.3表明,直接序列扩频模块能够正确完成扩频。

图片[30]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图片[31]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.3  直接序列扩频模块ModelSim仿真波形图

 

5.3 量化器模块测试

量化器模块将单比特的信号变为8bits有符号数,仿真波形截图如图5.4所示,可以确定量化器模块能够正确进行对信号量化。

图片[32]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.4  量化器模块ModelSim仿真波形图

 

5.4 同步模块测试

为了模拟实际传输过程,扩频信号再进入同步模块前引入±46的噪声,实际输入值信号line如图5.5所示:

图片[33]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.5  加入噪声后ModelSim仿真波形图

利用最小二乘法对输入信号与31个模板进行计算,得到小于阈值的唯一的延时数据信号xx如图5.6所示,模板2满足要求,信号xx计算值为29,因此要进行29拍解扩时钟周期的延时,来对齐同步头。

图片[34]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图片[35]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图片[36]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.6  计算延时ModelSim仿真波形图

通过延时达到对齐同步头的目的,对齐使能信号en_m为高电平,说明已对齐。如图5.7所示:

图片[37]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.7  同步头对齐ModelSim仿真波形图

对齐后将数据信号每31bits与模板“0”模板“1”进行最小二乘法计算,如图5.8所示:

图片[38]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.8  同步头解扩ModelSim仿真波形图

信号data_tm为判断出的信号数据,当检测到同步头最后一位的“0”数据信息后,说明同步头已结束,同步功能已实现。如图5.9所示,同步模块能够正确实现同步。

图片[39]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.9  同步头识别ModelSim仿真波形图

5.5 直接序列解扩模块测试

当检测到最后一位为“0”后,进入数据信号解扩过程,与同步头解扩相类似,只是把解扩后的数据利用计数器的计数值,写到寄存器对应的位置,同时进行串并转换功能,信号bc为计数器,信号hdata_reg1为串并转换后存储数据的寄存器。如图5.10所示,直接序列解扩模块能够正确实现解扩。

图片[40]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图片[41]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.10  数据信息解扩ModelSim仿真波形图

5.6 汉明译码模块测试

利用Verilog对汉明译码模块进行编写。通过直接序列解扩模块后的数据经过汉明译码模块后,如图5.11所示:

图片[42]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.11  汉明译码ModelSim仿真波形图

信号data_reg被译码正确后通过对fifo的满标志信号H_full高电平进行判断,若为高电平则不进行写操作,若为低电平则将fifo的写使能信号置高进行写操作,将译码后的数据写入fifo中。如图5.12所示,汉明译码模块能够对数据进行正确译码。

图片[43]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.12  数据输出端口仿真截图

5.7 系统整体测试

通过打印信息确认,原始数据与译码后的数据一致,能够确认系统整体设计正确,如图5.13所示:

图片[44]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

图5.13  打印结果截图

引用2.1节设计要求,总结系统整体设计完成对应功能情况,如表5.1所示:

表5.1  系统功能测试表

图片[45]-基于FPGA的扩频通信系统设计(附matlab和verilog代码)-Altera-Intel社区-FPGA CPLD-ChipDebug

结  论

直接序列扩频是主流的扩频通信之一,有着许多重要特点与优点,本篇利用FPGA的处理速度和并行运行等特点,设计完成了一个基于FPGA扩频模块设计。在利用Quartus II、Matlab和ModelSim对直接序列扩频模块进行了仿真分析。利用伪随机序列进行扩频,是扩频模块获得高抗噪声性能和抗干扰性能的关键。

本文首先对直接序列扩频模块一般原理进行介绍,然后重点分析直接序列扩频解扩,合理分配功能模块、准确掌握各个模块之间的控制和被控制的关系,以及整体时序关系。通过从接口fifo读取数据后,采用汉明编码模块,完成了对数据的编码,在完成编码后加入同步头,为同步做准备。利用本原多项式产生伪随机数,伪随机数与编码后的数据进行异或处理,已达到扩频的目的,扩频后的数据进行量化且引入噪声送入同步模块。同步模块利用31个伪随机数的模板,采用最小二乘法对数据进行计算,计算值小于预定阈值,则该数据对应的信息为接收端需要进行延拍的个数,对齐后利用2个伪随机数的模板对数据进行“0”和“1”的判断,当同步头数据值出现“0”后,代表下一位开始为数据信息,直接序列解扩模块开始进行解扩处理,和同步模块同理,将数据与2个伪随机进行最小二乘法的计算,从而达到解扩的目的。解扩后的数据通过汉明译码模块进行译码后写入接口fifo,再通过fifo输出。经过验证该整体模块达到扩频的目的,提高了抗噪声的能力,各个模块能够正确完成对应功能。

 

附录部分源代码

伪随机数Matlab代码:

 

汉明码编码译码Matlab代码:

 

汉明码编码Verilog代码:

 

伪随机数产生Verilog代码:

 

伪随机序列与数据信息异或处理Verilog代码:

 

量化器模块Verilog代码:

 

最小二乘法Verilog代码:

 

同步模块Verilog部分代码:

 

直接序列解扩模块部分Verilog代码:

 

汉明码译码Verilog代码:

 

 

请登录后发表评论