基于FPGA的曼切斯特编码的设计(共60页)_第1页
基于FPGA的曼切斯特编码的设计(共60页)_第2页
基于FPGA的曼切斯特编码的设计(共60页)_第3页
基于FPGA的曼切斯特编码的设计(共60页)_第4页
基于FPGA的曼切斯特编码的设计(共60页)_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上东北大学毕业设计(论文) 东北大学继续教育学院教务处 毕业设计(论 文) GRADUATE DESIGN (THESIS) 设计(论文)题目 基于FPGA的曼切斯特编码的设计 学 生 学习中心 专 业 电气工程及其自动化 指导教师 二一七年 三 月 二 日专心-专注-专业摘 要在电信领域,曼彻斯特码是一种数据通讯线性码,它的每一个数据比特都是由至少一次电压转换的形式所表示的。它是一种超越传统数字传输的信道编码技术,同时被认为是一种自定时码。自定时就意味着完全可以实现数据流的精确同步。每一个比特都准确的在一个预先定义时期的时间中被传送。曼彻斯特编码已经被许多高效率且被广

2、泛使用的电信标准所采用,例如以太网电讯标准。曼彻斯特编码具有隐含时钟、去除了零频率信号的特性,使得它在石油勘探测井中得到广泛的应用1。本文对曼彻斯特编码相关原理和FPGA进行概述,介绍了其编解码规则。对其特点和应用范围进行了说明。提出了曼彻斯特编解码方案,重点运用Verilog HDL语言对其编解码的描述。最后讲述该系统在Quartus 软件下的运行和仿真。关键词:FPGA;曼彻斯特编解码;Verilog HDL语言目 录1.曼彻斯特码概述1.1 曼彻斯特码简介在电信领域,曼彻斯特码 (也称作相位码或者PE)是一种数据通讯线性码,它的每一个数据比特都是由至少一次电压转换的形式所表示。曼彻斯特编

3、码因此被认为是一种自定时码。自定时意味着是可以实现数据流的精确同步。每一个比特都准确的在一预先定义时间时期的时间中被传送2。曼彻斯特码又称双向码。它是对每个二进制代码分别利用两个具有两个不同相位的二进制新码去取代的码。双向码的特点是只用两个电平。与用高、低电平表示0, 1的非归零二进制码相比,在连0或连1的情况下,更易于提取同步时钟信息,又无直流漂移,编、译码过程比较简单,且有强的抗干扰能力。1.2 曼彻斯特码原理曼彻斯特码是一种常用的用于数字基带传输的码型。它是一种用跳变沿(而非电平)来表示要传输的二进制信息(0或1),一般规定在位元中间用向下跳变表示“1”,用向上跳变表示“0”。曼彻斯特编

4、码提供了一种简单的方法在长时间段内没有电平跳变的情况下,仍然能够对任意的二进制序列进行编码,并且防止低通模拟电路中低频直流飘移所引起的比特错误以及防止在这种情况下同步时钟信号的丢失3。如果保证传送的编码交流信号的直流分量为零并且能够防止中继信号的基线漂移,那么很容易实现信号的恢复和防止能量的浪费。所以曼彻斯特码具有丰富的位定时信息。同时,有许许多多的复杂的编码方法中,在达到同等目的情况下只需要减少带宽负荷并且只有减少的同步信号相位。二进制码与曼彻斯特码波形的对比关系如图1-1。图1-1 二进制码与曼彻斯特码波形1.3曼彻斯特编解码本次论文曼彻斯特编解码由编码模块和解码模块二个部分组成。编码模块

5、提供时钟源,并且对输入的待传送原码进行编码,将其转换成曼彻斯特码并发送。解码模块用则是将曼彻斯特码整形后利用同步时钟模块提供的同步信号把它转换成原码输出。二个相对独立的模块相互协同工作共同完成曼彻斯特编解码工作。1.3.1 编码是一种自同步的编码方式,即信号就隐藏在数据波形中。曼彻斯特编码电平跳变的规则是:低电平的中间时刻跳变表示为0,用高电平中间时刻的跳变表示为1,如下图1-2所示。因而这样防止的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误,在这个技术下,实际上的二进制数据被传输通过这个电缆,不是作为一个序列的逻辑1或0来发送的。它具有自同步能力和良好的抗干扰性能。但每一个码元都被调成两

6、个电平,所以只有调制速率的1/2。图1-2 曼彻斯特编码下面是一段数据串行信号“”,在上图中可以看出曼彻斯特编码信号的跳变都发生在中间时刻,它按照曼彻斯特的编码规则,可以表示“”,如图3-3所示。 图3-3 信号的曼彻斯特编码曼彻斯特编码,常用于局域网传输。在曼彻斯特编码中,编码简单的二进制序列时,长周期没有转换级别因而导致时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误,根据这样的情况,曼彻斯特编码提供了一个简单的方式。而在这中技术下,二进制数据被传输通过这个电缆,不是作为一个序列的逻辑1或0来发送的。相反地,这些位被转换为一个稍微不同的格式,这样使用直接的二进制编码有很多的优点。

7、在曼彻斯特编码中,用电压跳变的相位不同来区分1和0,即用正的电压跳变表示0,用负的电压跳变表示1。因此,这种编码也称为相应编码。由于跳变都发生在每一个码元的中间,接收端可以方便地利用它作为位同步时钟,因此,这种编码也称为自同步编码。所以,每一位的中间有一跳变,位中间的跳变既作为,又作为数据信号;从高到向低跳变表示“1”,从低到向高跳变表示“0”。还有一种是,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示“0”或“1”,有跳变为“0”,无跳变为“1”。曼彻斯特码由于其特殊的性能,被广泛应用于小功率无线传输系统中4。曼彻斯特编码最大的优点是:数据和同步时钟统一编码,曼码中含有丰富的时钟信

8、号,直流分量基本为零,接收器能够比较容易恢复同步时钟,并同步解调出信号,具有很好的抗干扰性能,这使他更适合信道传输。1.3.2 解码解码器需要将收到的曼彻斯特码解码,得出16位并行数据,并给出各种校验结果。解码过程为:1、同步头检测,当检测到同步头后触发整个解码过程开始,并给出同步头类型。2、检测到同步头后,计数器cnt开始计数,在cnt的控制下进行解码。包括码型转换与移位操作,同步头类型输出、曼彻斯特码型校验、奇偶校验、字连续性校验等。3、当码的串并转换以及各种校验都完成后,给出并行数据和校验结果信号,在cnt的控制下最终给出数据有效信号read。协议模块可在该信号有效(高电平)时检测其他校

9、验信号,并决定是否取走并行数据。解码器一直监视数据输入线,当接收到有效的同步头和两个有效的曼彻斯特码数据位后,便开始输出。2.曼彻斯特编解码实现方法比较2.1 集成方法实现集成方法实现曼彻斯特数据的编解码功能,一般采用专用的曼彻斯特编码译码器,如HD15530或HD6408,数据的串并转换与信号合成都通过数字电路完成。但这种方法存在许多不足之处:第一,在利用集成芯片方法实现曼彻斯特编解码传输时,对编解码器时序要求很高,使得上下位机同步比较困难;第二,这种方法会导致硬件电路过于庞大、复杂,而且也增加了系统调试的难度5。2.2 软件编解码 软件方法实现曼彻斯特编解码主要有高速单片机实现和FPGA/

10、CPLD实现两种。2.2.1单片机实现单片机实现曼彻斯特编解码功能,是比较常见的。一般AVR单片机实现曼彻斯特编解码中接受监视器的单片机程序需要完成数据接收、曼彻斯特编解码、数据处理、显示、异常情况报警等任务。在接收数据时,因为小功率无线传输通道干扰比较严重,单片机又对所有的ICP1引脚跳变沿都响应,它的中断级别又比较高。这些都很大程度上加大了单片机的负担,严重时会造成单片机的其它任务得不到执行。而且在利用单片机或专用芯片进行编解码时,对传输的数据只能进行奇偶校验,在条件比较恶劣的场合,特别是在无线通信,数据极易出错,奇偶校验不能检测出这类突发性错误;再者单片机的串口通信和专用芯片在传输速率和

11、每帧的有效数据位数等方面都作了严格的限制。因此,还有在要求高速传输速率的场合,单片机和专用芯片都难以实现6。2.2.2 FPGA/CPLD实现在现代电子设计领域,VHDL和现场可编程逻辑器件的广泛应用使数字系统设计更为灵活,大大缩短了开发周期。现场可编程逻辑门阵列(Field Programmable Gate Array: FPGA)是新型的高密度可编程逻辑器件。它是可编程阵列逻辑(PAL),门阵列逻辑(GAL)等逻辑器件的基础上发展起来的,同以往的PAL,GAL想比较,FPGA的规模较大,适合于时序、组合等逻辑电路应用场合,它可以替代几十甚至上百块通用ASIC芯片,这种芯片具有可编程性和实

12、现方案可重构的特点。FPGA器件的主要优点:功能集成度高,系统设计快,设计灵活,可靠性高,费用低。2.2.3 方案选择综上所述,本设计采用基于FPGA的设计方案,充分利用FPGA功能集成度高,系统设计快,设计灵活等优越性,大大提高设计的周期,减少PCB面积。3.FPGA原理及平台简介目前以硬件描述语言(Verilog HDL或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。这些可编辑器件可以被用来实现一些基本的逻辑门(比如AND、OR、XOR、NOT)或者更复杂一些的功能电路,比如解码器或数学方程式。在大多数的FPGA

13、里面,这些可编辑的元件里也包含记忆元件例如(Flipflop)或者其他更加完整的记忆块。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)模型,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分7,图3-1是FPGA的结构图。图3 -1 FPGA结构图3.1 FPGA原理与特点大部分FPGA器件采用了查找表结构,查找表的原理类似于ROM,其物理结构是静态储存器(SRAM),N个输入项的逻辑函数可以由一个2N位容量的SRAM来实现,函数值存放在

14、SRAM中,SRMA的地址线起输入线作用,地址即输入变量值,SRMA的输出为逻辑函数值,由连线开过实现与其他功能的连接。而实际上FPGA器件的查找表的输入项一般不超过5个,多于5个输入变量的逻辑函数由多个查找表组合或级联实现。FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及

15、各模块之间或模块与I/O间的连接方式,并最终决定了FPGA所能实现的功能,FPGA可以进行数十万次的编程。用户可对FPGA内部的逻辑模块和I/O模块重新配置,以实现用户的逻辑,因而也被用于对CPU的模拟。用户对FPGA的编程数据放在Flash芯片中,通过上电加载到FPGA中,对其进行初始化。也可在线对其编程,实现系统在线重构,这一特性可以构建一个根据计算任务不同而实时定制的CPU,这是当今研究的热门领域。和其他可编程逻辑器件一样,FPGA也由未完成的逻辑阵列所组成,通过将这些逻辑阵列连接到一起来完成一定的功能。像PAL一样,各个阵列单元之间的互连是可以编程的。FPGA采用了逻辑单元阵列结构,内

16、部包括可配置逻辑模块CLB、输出输入模块IOB和内部连线三个部分。FPGA的基本特点主要有: 1、采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 2、FPGA可做其它全定制或半定制ASIC电路的中试样片。3、FPGA内部有丰富的触发器和I/O引脚。 4、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 5、FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EE

17、PROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。这样,同一片FPGA不同的编程数据可以产生不同的电路功能,因此FPGA的使用非常灵活。 FPGA提供了一种"自顶向下"的全新的设计方法。这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计,再对图表进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统级进行验证。然后用综合优化工具生成具体门电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的,这不仅

18、有利于早期发现结构设计上的错误,避免设计工作的浪费,而且也减少了逻辑功能仿真的工作量,有效降低设计风险。 3.2 Quartus II及HDL语言Quartus II 是的CPLD/FPGA集成开发软件,具有完善的可视化设计环境,并具有标准的EDA工具接口。它支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程9。3.2.1 基于Quartus II的FPGA设计Quartus II为硬件电路的设计提供了很大的方便。FPG

19、A之所以能够广泛应用于电路设计中,就是因为它们有使用相当方便的开发软件工具包,通过编程工具和软件的配合使用,对器件芯片可以进行流畅的开发、校验。FPGA特别适用于正向设计,即从电路原理图或各种硬件描述语言到芯片成品的设计,在这些设计流程中,设计人员对特别底层的硬件知识并不需要特别的了解和掌握,完全可以从功能应用出发,根据任务需求,自顶向下地进行电路设计,图3-2为 Quartus II设计开发流程图,具体如下:1、设计输入(Design Entry) 运用电路原理图输入、HDL文本输入等方式,表达设计思想,指定所用HIGA器件的型号,分配其外部管脚。包括原理图输入、HDL文本输入、EDIF网表

20、输入及波形输入等几种方式。2、编译(Compilation) 先根据设计要求设定编译方式和编译策略,如器件选择、逻辑综合方式的选择等。然后根据设定的参数和策略对设计项目进行网表提取、逻辑综合、器件适配,并产生报告文件、延时信息文件以及编程文件,供分析、仿真和编程使用。3、仿真(Simulation)仿真包括功能仿真、时序仿真和定时分析,用以验证设计项目的逻辑功能和时序关系的正确性。功能仿真验证电路功能是否符合设计要求;时序仿真包含了延时信息,能较好反映芯片的实际工作情况。仿真一般按如下步骤进行:(1)新建波形编辑文件;(2)设置仿真时间区域;保存文件;(3)导入欲观察的信号节点;编辑激励信号;

21、(4)设置数据格式;设置仿真器参数;(5)启动仿真和观察仿真结果。4、编程与验证(Program and Verification)成功编译后,将生成的编程文件下载到目标FPGA系统中调试;调试成功后,烧写到FPGA的配置芯片中。用得到的编程文件通过编程电缆配置PLD,加入实际激励,进行在线测试。设计过程中,如果出现错误,这需要重新回到设计输入阶段,改正错误或调整电路后重复上述过程。图3-2 Quartus II设计开发流程3.2.2 Verilog HDL简介Verilog HDL是在用途极为广泛的C语言的基础上发展起来的一种硬件描述语言,它是由GDA(Gateway Design Auto

22、mation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。1989年Cadence公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。1990年CADENCE公司公开发表了Verilog HDL,并成立LVI组织以促进Verilog HDL成为IEEE标准,即IEEE Standard 1364-1995.Verilog HDL的最大特点就是易学易用,如果有C语言

23、的编程经验,可以在一个较短的时间内很快的学习和掌握。Verilog HDL主要特性:l 基本逻辑门,例如and、or和nand等都内置在语言中。开关级基本结构模型,例如PMOS和NMOS等也被内置在语言中。l 用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。l 时延描述:提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。l 描述方式:可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式使用过程化结构建模;数据流方式使用连续赋值语句方式建模;结构化方式使用门和模块实例语句描述建模。在行为级描述中, Verilog

24、HDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。同时,Verilog HDL 支持混合方式建模,即在一个设计中每个模块均可以在不同设计层次上建模。l 数据类型:Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。l 层次设计:能够描述层次设计,可使用模块实例结构描述任何层次,设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级,能够使用内置开关级原语在开关级对设计完整建模。能够使用门和模块实例化语句在结构级进行结构描述。Ve

25、rilog HDL不再是某些公司的专有语言而是IEEE标准。设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。l 功能扩展:Verilog HDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。PLI是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。l 测试仿真:可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。4.系统总体设计基于现场可编程门阵列(FPGA),研究曼彻

26、斯特编解码器的实现,采用Verilog HDL硬件描述语言进行电路建模并测试。本设计包含编码和解码两个模块。曼彻斯特的编码一次发送11位数据,其中编码头3位,为111,8位有效数据,奇校验1位;曼彻斯特解码一次接收11位数据,其中编码头3位,为111,有效码8位,奇校验位1位。4.1 编码器编码过程可分为三部分:1)检测编码周期是否开始,产生同步字头;2)进行输入数据的曼彻斯特编码;3)产生奇偶校验位并对其进行编码,编码周期结束。下面是曼彻斯特编码结构图。由于曼彻斯特编码是将NRZ 普通二进制数据与其位率时钟信号相异或而得,因此,首先要产生位率时钟信号,同时,要解决位率时钟与NRZ 码的同步问

27、题,保证NRZ 每个码元宽度占用一个周期的位率时钟信号,并且保证NRZ 码元输入时,立即产生位率时钟,这样就可以保证位率时钟与NRZ 码的同步。保证了位率时钟与NRZ 码同步, 然后将NRZ 码与位率时钟异或,便可以得到最终的曼彻斯特编码。本设计是在第一个位率时钟下降沿开始产生曼彻斯特编码, 在位率时钟出现下降沿时,将NRZ 码与位率时钟异或,相当于与“0”异或,在位率时钟出项上升沿时,将NRZ 码与位率时钟异或,相当于与“1”,输入8 位NRZ 码,产生16 位曼彻斯特编码,最终输出转换完成标志位10。图4-1 曼彻斯特编码编码过程包含了发送信号电平沿检测模块、曼彻斯特编码模块、时钟分频模块

28、和数据位发送技术模块。编码电路模块提供时钟源,并且对输入的待传送原码进行编码,将其转换成曼彻斯特码并发送。       发送信号电平沿检测模块主要功能就是检测mfs信号上升沿,当检测到mfs上升沿后使能时钟信号clk1x_en。程序如下:always (posedge clk16x or negedge rst) begin if(!rst) begin mfs1 <= 1'b0; mfs2 <= 1'b0; end else begin mfs2 <= mfs1; mfs1 <= mfs; e

29、nd end时钟分频模块,当检测到mfs上升沿后使能时钟信号clk1x_en;当数据发送完成时,失能clk1x_en。其中含有16位时钟分频,将clk16x经16分频得单倍时钟clk1x。在复杂时序电路设计中通过引入时钟使能信号可减少设计中的时钟信号,提高电路的可靠性。程序如下:always (posedge clk16x or negedge rst) begin if(!rst) clk1x_en <= 1'b0; else if(mfs1=1'b1&&mfs2=1'b0) /检测到mfs上升沿时,使能clk1x_en clk1x_en <

30、;= 1'b1; else if(bit_cont=4'b1011) /当数据发送完成时,失能clk1x_en clk1x_en <= 1'b0;end/16时钟分频always (posedge clk16x or negedge rst) begin if(!rst) clkdiv <= 4'b0000; else if(clk1x_en=1'b1) clkdiv <=clkdiv + 1'b1; /16分频计数 else clkdiv <= 4'b0000;endassign clk1x = clkdiv3;

31、 /clk16x经16分频得单倍时钟clk1x 数据位发送计数模块根据时钟信号发送数据给编码器,达到同步,并同时进行计数。图4-2 编码器RTL模块图曼彻斯特编码模块,当检测到mfs上升沿时将mdata数据送mbuf缓存。一次发送11位数据,其中编码头3位,为111,8位有效数据,奇校验位1位,再进行曼彻斯特的数据编码。程序见附录。4.2解码器曼彻斯特解码是分曼彻斯特信号电平沿检测模块、时钟分频模块和曼彻斯特解码模块三个模块组成的。时钟分频模块的作用是将时钟信号分频后,产生一个与曼彻斯特码新号同频的时钟信号和一个16倍曼彻斯特码信号频率的时钟信号。这两个时钟信号被分别送入解码器,其中同步时钟信

32、号的控制信号由解码器产生。解码器的作用是检测数据,根据曼彻斯特码的特点判断数据的同步头和数据位,并产生控制信号来控制分频器同步时钟信号的输出11。图4-3 曼彻斯特解码整个程序的设计思路是解码器以很高的频率对曼彻斯特码信号进行采样,如果发现当前采样值与前一个采样值不同,即检测到曼彻斯特码的跳变边沿,则通知分频器开始同步时钟,同时开始判断数据的同步头。如果在之后的1.5T12时间内,没有检测到曼彻斯特码的跳变边沿,则判断为同步头,当同步头被检测到后,则开始监测数据。曼彻斯特解码,一次接收11位数据,其中编码头3位,为111,有效码8位,奇校验位1位module manch_rxd( input

33、rst, /复位 input clk16x, /16倍时钟 input min, /曼彻斯特接收端 output reg rdy, /接收完毕标志 output 7:0 mdata /接收解码数据并行输出端);wire clk1x; /单倍时钟 reg clk1x_en; /时钟使能,高电平有效reg 3:0 clkdiv; /时钟分频计数器,将16倍时钟分为单倍时钟reg mjs1; /状态寄存器reg mjs2; /状态寄存器reg odd; /奇校验位reg nrz; /曼彻斯特解码二进制码reg 7:0 mbuf; /数据接收缓存reg 3:0 next; /下一个状态标志reg 3:

34、0 current; /当前状态标志reg ztj1; /状态机标志reg ztj2; /状态机标志wire cyd; /检测标志曼彻斯特信号电平沿检查模块该模块始终检测同步头,并给出同步头类型。/检测min上升沿always (posedge clk16x or negedge rst) begin if(!rst) begin mjs2 <= 1'b0; mjs1 <= 1'b0; end else begin mjs2 <= mjs1; mjs1 <= min; endend 4.3时钟模块该模块将曼彻斯特码自带的时钟信号分离,得到clk

35、2_en,并在该信号有效(高电平)时采样,经过三级寄存器保持输出的曼彻斯特码信号rx_data_reg_2。采样时刻总出现在每个码元正负电平的中点处,而这也是曼彻斯特码采样的最佳时刻。收到的曼彻斯特码rx_data为异步信号,通过DFF1,DFF2,DFF3三级采样保持电路可消除亚稳态。edge_ check在每个曼码电平跳变后产生一个脉冲,该信号将对cnt_clk2和clk2_en同步清零,以达到调整相位的目的。cnt_clk2是一个6进制计数器,当计数到1时通过比较器给出同步置位脉冲set,它将对clk2_en同步置1。 曼彻斯特解码模块该电路将检测并输出同步头类型、奇偶校验结果、曼彻斯特

36、码检测结果、字连续性检测结果。程序见附录。  计数器cnt是一个40进制计数器,在cnt的控制下完成整个解码过程。当收到同步头有效信号sync_1时,将计数器使能信号cnt_enb置为有效(高电平),并在其控制下开始计数。图4-4 解码器RTL模块图5.系统测试与仿真5.1 曼彻斯特编码仿真在Quartus平台下新建一个工程为"mancst",如图5-1所示。 单击“Finish”按钮完成“encode”工程的新建。新建完工程文件后,就建立并串转换模块。选择"File""New"命令或是单击新建图标,在弹出的&qu

37、ot;New"对话框中选择"Verilog File"选项,单击"OK"按钮,如图5-2所示。新建完Verilog文件以后就开始Verilog代码,在quartus中,如图5-3所示.图5-1 新建工程文件mancst 图5-2新建编码Verilog文件 在输入完代码以后,就保存当前文件,点保存快捷方式,命名为“manch_txd”文件名。下一步就是开始编译,在编译前要在“project navigator” 框中点击manch_txd的右键“set as top-level Entity”。接下来就是对并串转换进行编译。可以在quartus中

38、直接点击编译快捷方式。结果如图5-4所示。工程编译成功后,必须对其功能和时序特性进行仿真测试,以了解设计结果是否满足原设计要求。Quartus II提供的波形文件为“Vector Waveform File”,即VWF。新建波形文件进行仿真,选择“File”“New”命令或是单击新建图标,选择“Vector Waveform File”项。如图5-5所示。图5-3 编码Verilog代码输入图5-4 并串转换编译结果图 5-5 新建编码的波形文件在向量波形文件的“Name”下方的空白处,双击鼠标左键,弹出“Insert Node or Bus”对话框如图5-6所示,单击“Node Finder

39、”按钮,弹出“Node Finder”对话框,如图5-7所示。图5-6 添加端口对话框图5-7 Node Finder选择对话框在弹出的图5-7框中点击“list”按钮,再点击按钮,最后点“OK”按钮。这波形文件的端口都已经添加进去了。然后就是设置端口的波形。在mdata端口中输入“”8位二进制,显示为十六进制“55”。rdy和mfs军事高电平出发。分别对其进行设置,目的是让rdy出发后mfs再开始。在编译之后就是对模块进行仿真,在quartus”软件中点击processing”菜单中的“simulator tool”。然后加载之前创建的波形文件“manch_txd”。在图5-8所示图中点“g

40、enerate function simulation netlist”按钮。创建完网表文件之后就可以点击“start”按钮。图5-8 编码 simulator tool在图5-8所示的图中,仿真运行之后就可以点击report按钮。结果如图5-9所示。图5-9 曼彻斯特编码仿真结果5.1.1 编码分析从图5-9 中的结果可以看到在mdata端口中输入“”8位二进制,当时钟使能后开始编码。5-10 编码仿真分析图从5-10编码仿真分析图是可以看出对一个简单的8位二进制码进行编码,得到了一个16位曼彻斯特码。图中还是可以看出输出的曼彻斯特特码“0”。其中还存在一些毛刺,但是设计出曼彻斯特编码器还是

41、满足曼彻斯特编码的要求。如图5-11 是编码器RTL View图。5-11 编码器RTL View5.2 曼彻斯特解码仿真在同一个工程文件下,建立曼彻斯特解码模块。选择“File”“New”命令或是单击新建图标,在弹出的“New”对话框中选择“Verilog HDL File”选项,单击“OK”按钮。在输入完代码以后,就保存当前文件,点保存快捷方式,命名为“encode”文件名。下一步就是开始编译。在编译成功后,必须对其功能和时序特性进行仿真测试,以了解设计结果是否满足原设计要求。新建波形文件进行仿真,然后就是添加输入端口和按照要求对输入信号进行编辑。仿真结果如图5-12所示。5-12 曼彻斯

42、特解码仿真5.2.1 解码分析从5-12解码仿真分析图是可以看出在对“0”16位曼码进行解码,得到16进制数码55,表示为二进制即为“” ,见图5-13 解码仿真分析。设计出曼彻斯特编码器还是满足曼彻斯特编码的要求。图5-14解码器RTL View。5-13 曼彻斯特解码仿真分析图5-14解码器RTL View。6.结论及展望 本次设计实现了任务书中规定的要求,实现了曼彻斯特编码器。本人学习这门课程也才半年的时间,但是在本次毕业设计中学到了很多知识。在毕设的过程中,我参考了很多教材和网上的资料。我相信对我以后的继续深造会有很大影响。本论文讨论了曼彻斯特编解码器的设计与实现。在数字通信中,同步问

43、题是一个研究的重点。在测井通信系统中,复杂多变的外界环境,对通信的性能提出了更高的要求,所以在通信系统中,良好的位同步的实现对于解码以及整个通信系统的正常工作的意义重大。为了达到设计要求,设计了曼切斯特编解码器。讨论了曼彻斯特编解码器的实现方案,就其各方面进行分析比较,确定了实现方案,然后重点介绍了同步时钟信号提取仿真及实现。参考文献1 吴爱平. 基于FPGA的等精度频率计的设计.石油仪器,2005,4:17192 武 鹏,毕君懿.1553B总线中曼彻斯特编解码器的设计J. 现代电子技术,2011,34(4):61-64.3 李 刚. 基于FPGA的曼彻斯特码数据解码系统设计M .科技创新导报

44、,2009ND.294 熊晓东数控测井微型地面系统M石油工业出版社,2002(11)5 胡亚平.1553B 远程终端的设计J. 安徽电子信息职业技术学院学报,2008,7(4):55-56.6 曹素芝,张善从.光纤通道与MIL-STD-1553B协议的兼容性设计J. 计算机测量与控制,2010,18(7):1624-1626.7 任爱锋基于FPGA的嵌入式系统设计M西安电子科技大学出版社,2004(1)8 Cyclone Device Handbook 20039 孙 涛,张华春. 基于1553B 协议的总线控制器和远程终端的FPGA 实现J. 中国科学院研究生院学报,2010,27(4):5

45、23-529.10 牛 茜, 靳 鸿. 基于有限状态机的1553B总线解码器设计J. 电子测试,2010(12):74-78.11 张 飞, 王焕玉, 徐玉朋等. 基于FPGA控制实现的1553B总线通讯设计J. 航天控制,2010,28(6):67-71.12 HD15530 DatasheetDB/0Lhttp:/www21iccorn结束语本次能够顺利的完成毕业设计以及论文,首先要感谢我的导师杨珺老师。他在我学习期间给了作者悉心指导和大力支持,在做论文期间,给我提供了很多建议,给予了相当多的指导,使我的论文得以顺利地完成。导师的学风严谨求实,工作作风实事求是的,专业知识渊博,为人随和,给

46、了我深深的教诲和启迪,是我今后工作和学习的楷模。我愿借此机会向这位良师益友表示衷心的感谢!也向所有我的任课老师们表示感谢!我会在未来的工作过程中,以更加优秀的成绩来答谢这些关心、帮助和支持我的所有老师、家人、同学和朋友们。感谢在百忙之中对我的论文进行评审并提出宝贵意见的老师们。附 录1、编码程序/*程序名:manch_txd *描 述:曼彻斯特编码程序 *功 能:曼彻斯特编码,一次发送11位数据, * 其中编码头3位,为111,8位有效数据 * 奇校验位1位*/module manch_txd( input rst, /复位 input clk16x, /16倍时钟 input mfs, /发

47、送控制信号,上升沿有效 input 7:0 mdata, /发送数据 output rdy, /发送结束信号,高电平有效 output mout /曼彻斯特发送端);wire clk1x; /单倍时钟 reg 3:0 clkdiv; /时钟分频计数器,将16倍时钟分为单倍时钟reg clk1x_en; /时钟使能,高电平有效reg mfs1; /状态寄存器reg mfs2; /状态寄存器reg odd; /奇校验位reg 3:0 bit_cont; /数据发送计数器reg 7:0 mbuf; /数据缓存器reg 11:0 din; /数据发送移位寄存器/检测mfs信号上升沿always (po

48、sedge clk16x or negedge rst)begin if(!rst) begin mfs1 <= 1'b0; mfs2 <= 1'b0; end else begin mfs2 <= mfs1; mfs1 <= mfs; end end/当检测到mfs上升沿后使能时钟信号clk1x_enalways (posedge clk16x or negedge rst)begin if(!rst) clk1x_en <= 1'b0; else if(mfs1=1'b1&&mfs2=1'b0) /检测到

49、mfs上升沿时,使能clk1x_en clk1x_en <= 1'b1; else if(bit_cont=4'b1011) /当数据发送完成时,失能clk1x_en clk1x_en <= 1'b0;endassign rdy = !clk1x_en; /发送完成标志/16时钟分频always (posedge clk16x or negedge rst) begin if(!rst) clkdiv <= 4'b0000; else if(clk1x_en=1'b1) clkdiv <=clkdiv + 1'b1; /1

50、6分频计数 else clkdiv <= 4'b0000;endassign clk1x = clkdiv3; /clk16x经16分频得单倍时钟clk1x/数据发送位计数always (posedge clk1x or negedge rst) begin if(!rst) bit_cont <= 4'b0000; else if(clk1x_en=1'b1) bit_cont <= bit_cont + 1'b1; else if(clk1x_en=1'b0) bit_cont <= 4'b0000;end/当检测到m

51、fs上升沿时将mdata数据送mbuf缓存always (posedge clk16x or negedge rst) begin if(!rst) mbuf <= 8'h0; else if(mfs1=1'b1&&mfs2=1'b0) begin mbuf <= mdata; odd <= mdata; endend/11位移位寄存器always (posedge clk1x or negedge rst)begin if(!rst) din <= 12'h0; else if(bit_cont=4'b0001)

52、 din <= 3'b000,mbuf,odd; else if(bit_cont>=4'b0010&&bit_cont<=4'b1011) begin din11:1 <= din10:0; din0 <= 1'b0; end end/曼彻斯特编码assign mout = (bit_cont>=4'b0010&&bit_cont<=4'b1011)?din11clk1x:1'b0; /generate manchestendmodule 2、解码程序/*程序名:manch_rxd *描 述:曼彻斯特解码程序 *功 能:曼彻斯特解码,一次接收11位数据, * 其中编码头3位,为111,有效码8位 * 奇校验位1位*/module manch_rxd( input rst, /复位 input clk16x, /16倍时钟 input min, /曼彻斯特接收端 output reg rdy, /接收完毕标志 output 7:0 mdata /接收解码数据并行输出端);wire clk1x; /单倍时钟 reg clk1x_en; /时钟使能,高电平有效reg 3:0 clkdiv; /时钟分频计数器,将16倍时钟分为单倍时钟re

温馨提示

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

评论

0/150

提交评论