资源描述
昆 明 学 院 2013 届毕业论文(设计)论文(设计)题目 基于FPGA的HDB3码的编码器 与译码器设计(软件设计) 子课题题目 姓 名 周艳 学 号 201004090147 所属院系 自动控制与机械工程学院 专业年级 2010级通信技术1班 指导教师 任杰 2013年 5月摘 要HDB3码是基带传输码型之一,因为它具有无直流分量、低频分量少、连0数不超过3个这些特点,所以有利于信号的恢复和检验,所以HDB3码被广泛应用到井下电缆遥传系统以及高速长距离书记通信中等。FPGA具有成本低、可靠性高、开发周期短、可重复编程等特点。利用EDA技术,可对其实现硬件设计软件化,加速了数字系统设计的效率,降低了设计成本。本文先对HDB3码,FPGA器件和EDA技术的发展背景进行简述。接着阐述EDA技术中常用的VHDL语言的发展与优点,并以VHDL为核心,简要说明硬件电路的设计的方法步骤。然后介绍HDB3码的编译码原理以及其特点。最后,对HDB3码的编译原理进行重点分析,并且以VHDL语言为主,分别对编码器部分和译码器部分的具体实现方法进行说明,给出具体设计的思考方案和程序流程图,并对设计方案进行软件仿真,同时给出仿真结果并对其进行分析,证明设计方案的正确性。关键词:HDB3码;FPGA;EDA;VHDL;编译码Abstract HDB3 code is one of codes used in the transmission system. It has no DC components and a few of LF components. Moreover, it has continuous zeros no more than three. The features of HDB3 code help the signal to be rebuilt and be checked for error easily, so HDB3 code is the commonly used code in the transmission system. Low cost, dependability, short design cycle and repeated program ability are the features of FPGA. You can design hardware of digital circuits by using software as a result of using FPGA with EDA. It will construct the digital system quickly system quickly and reduce the cost of design. This paper first introduces the development and background of HDB3.FPGA and EDA, and then expands VHDL. which is commonly used as design-entry language for EDA.A summary of digital circuits design by using VHDL is provided. Moreover, the principle and decoder is designed by using VHDL. Finally, the plan of design, the flow of software design and the simulated waveform of HDB3 encoder and decoder is presented, showing correctness of the design.Keywords: HDB3 code; FPGA ; EDA ; VHDL; Encoder and Decoder目录第一章 概述11.1 HDB3码的简述11.2 FPGA简介21.2.1 FPGA的发展历程21.2.2 FPGA基本结构及其特点31.3 EDA技术41.4 VHDL硬件描述语言41.4.1 简介41.4.2 VHDL具有的特点51.4.3 VHDL的优点71.4.4 VHDL设计硬件电路的方法7第二章 HDB3码的编译规则102.1主要的基带传输码型102.1.1 NRZ码的编码规则102.1.2 AMI码的编码规则102.2 HDB3码的编码规则112.3 HDB3码的译码规则122.4 HDB3码的检错能力12第三章 HDB3编码器的FPGA实现133.1 HDB3码编码器的实现分析133.2 HDB3码编码器的设计思路133.2.1 4连0的检出加V及判1极性133.2.2 取代节的选取133.3设计建模143.3.1插“V”码模块设计及仿真153.3.2插“B”码模块设计及仿真173.3.3 HDB3编码器的极性转换模块设计及仿真20第四章 HDB3译码器的FPGA实现244.1 译码器的实现分析244.2 HDB3译码器的设计思路244.3 V的检测254.4 扣V扣B254.5 设计建模254.5.1扣V扣B的实现264.6 软件仿真26第五章 结论28参考文献29附录30谢辞38第一章 概述1.1 HDB3码的简述 HDB3(High Density Bipolar of order 3code)码的全称是三阶高密度双极性码,又称为四连“0”取代码,它是一种AMI码的改进,保持了AMI码的优点而克服其缺点。 HDB3码因具有无直流成分,低频成分和连0个数最多不超过三个等明显优点,对定时信号的恢复十分有利,而成为普遍使用的基带传输码型之一。在数字传输系统中,其传输对象通常是二元数字信息。一般使用有限的离散的波形来表示数字信息。这些离散波形可以是未经调制的不同电平信号,也可以是调制后的信号形式。由于未经调制的电平脉冲信号所占据的频带通常从直流和低频开始,因而成为数字基带信号。数字基带信号是数字信息的电脉冲表示,不同形式的数字基带信号(又称为码型)具有不同的频谱结构,合理地设计数字基带信号以使数字信息变换为适合给定信道传输特性的频谱结构,是基带传输首要考虑的问题。实际上,在数字设备内部用导线连接起来的各器件之间就是用一些最简单的数字基带信号来传送定时和信息的。当数字信号进行行距离传输时,高频分量的衰减随距离的增大而增大,电缆中线对之间的电磁辐射也随着频率的增高而加剧,从而限制信号的传输距离和传输质量,同时信道中往往还存在隔直流电容和耦合变压器,他们不能传输直流分量及对低频分量有较大的衰减,因此对于一般信道高频和低频部分均是受限的。对于以上信道,要求所使用传输码型的频谱不含直流分量,并且低频分量和高频分量都很少。传输码型中应含有定时时钟信息,以利于接收端提取定时时钟,在基带传输系统中,定时信息是在接收端恢复原始信息所必需的。在一般传输系统中为了节省频带从而不传输定时信息,必须在接收端从相应的基带信号中加以提取。实际传输中希望能及时监视误码,如果传输码型有一定的规律性,那么就可以根据这一规律性来检测传输的质量,以便做到自动监测,因此,传输码型应具有一定的误码检测能力。当然,对传输码型的选择还需要编码和译码设备尽量简单等要求,但以上的几点是最主要的额考虑因素。HDB3码又叫三阶高密度双极性码(High Density Bipolar),是在AMI码的基础上改进的一种双极性归零码,它除具有AMI码功率谱中无直流分量,可进行差错自检等优点外,还克服了AMI码当信息中出现连“0”码时定时提取困难的缺点,而且HDB3码频谱能量主要集中在基波频率以下,占用频带较窄,是ITU-TG.703推荐的PCM基群、二次群和三次群的数字传输接口码型,因此HDB3码的编解码就显得极为重要了。1.2 FPGA简介1.2.1 FPGA的发展历程作为一种可编程逻辑器件,现场可编程门阵列(Filed Programmable Gate Array)的出现是可编程逻辑器件发展变化的必然,它的出现推动着可编程逻辑器件的进一步发展。因此说,了解了可编程逻辑器件的发展历程,也就了解了FPGA的发展历程。可编程逻辑器件是20世纪70年代发展起来的一种新型器件。它的应用不仅简化了电路设计,降低了成本,提高了系统的可靠性,而且给数字系统的设计方式带来了革命性的变化。可编程逻辑器件的发展是以微电子制作技术的不断进步为基础的,其结构和工艺的变化经历了一个不断发展变革的过程。20世纪70年代,早期的可编程逻辑器件只有可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和可电可擦除只读存储器(EEPROM)3种。随后,出现了一类结构稍微复杂的可编程芯片,即可编程逻辑阵列,(Programmable Logic Array,PLA)。PLA在结构上是由一个可编程的与阵列和可编程的或阵列构成,阵列规模小,编程过程复杂繁琐。PLA既有现场可编程的,也有掩膜可编程的。在这之后出现了可编程阵列逻辑PLA器件,它由一个可编程的“与”平面和一个固定的“或”平面构成,是现场可编程的。它的实现工艺有反熔丝技术、EPROM技术和EEPROM技术3种。在PLA的基础上,又发展出了一种通用阵列逻辑(Generic Array Logic, GAL),如果GAL16V8、GAL22V10等。它采用了输出逻辑宏单元结构和EEPROM工艺,因而其设计具有很强的灵活性,至今仍有很多应用。这些早期的PLD器件的一个共同的特点就是可以实现速度特性较好的逻辑功能,但是由于其结构过于简单,因此只能用于实现较小规模的电路设计。为了填补这一缺陷,20世纪80年代中期,著名的可编程逻辑器件厂商Alter和Xilinx分别推出了扩展型的复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)和类似于标准门阵列的现场可编程门阵列FPGA。CPLD和FPGA的功能基本相同,只是芯片内部原理和结构有些差别。这两种器件兼容了PAL和GAL器件的优点,可用于实现较大规模的电路设计,编程也很灵活,所以,被广泛应用于产品的原型设计和小批量生产之中。几乎所有使用PLA、GAL和中小规模通用数字集成电路的场合均可应用CPLD和FPGA器件。如今,FPGA器件已成为当前主流的可编程逻辑器件之一,经过近20年的发展,可编程逻辑器件已经取得长足的进步,资源更加丰富,使用越来越方便。将来的可编程逻辑器件,密度会更高、速度会更快、功耗会更低,同时还会增加更多新的功能,向着集成了可编程逻辑、CPU、存储器等组件的可编程单片系统(System On Programmable Chip,SOPC)方向发展。1.2.2 FPGA基本结构及其特点基本结构: 典型的FPGA它通常包含三类编程资源:可编程逻辑功能块CLB(Configurable Logic Blocks),可编程I/O模块IOB(Input/Output Block)和可编程内部互连PI(Programmable Interconnect)。CLB是实现逻辑设计的基本单元,它们排列为阵列,散布于整个芯片。CLB的功能很强,不仅实现了逻辑函数,还可配置为RAM等复杂形式。IOB作为芯片上逻辑与外部封装引脚的接口,通常围绕着阵列芯片的周围。PI包括各种长度的连线和一些可编程连接开关,通过它们把各个CLB、IOB按设计要求连接起来,构成特定功能的电路。FPGA器件的功能由逻辑结构的配置数据决定,工作时,配置数据存放于片内的SRAM或熔丝上。使用SRAM的FPGA器件,工作前需从芯片外部加载配置数据。配置数据可存储于片外的EPROM或其他存储体上。用户可控制加载过程,在现场修改器件逻辑功能,即现场可编程。特点: (1)FPGA的逻辑单元从功能上而言,比CPLD的组合乘积项及宏单元要简单的多,但是它可由逻辑单元的级联来创建很大的函数功能; (2)PLD适合于复杂组合逻辑,FPGA适合于设计复杂的时序逻辑。 (3)FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,可达上万个,而PLD一般只能做到512个逻辑单元,因此FPGA的平均逻辑单元成本大大低于PLD。(4)在CPLD器件内可以通过逻辑阵列将大型函数在一级逻辑中实现,具有较高的系统运行速度,并且其易于确定的时序参数也有助于逻辑分析工作,但是它的寄存器资源相对FPGA较少。 (5)FPGA器件具有较小的基本逻辑单元,适合实现流水线结构的设计,也可以利用逻辑单元的线连来实现较长的数据通路。 (6)FPGA的逻辑单元阵列可以将设计功能进行更细的划分,可充分地利用单元内的各种资源,但同时也加大了逻辑优化和时序分析地难度。1.3 EDA技术EDA(Electronic Design Automation)即电子设计自动化,它是指利用计算机来完成电子系统的设计。EDA技术研究的对象是电子设计的全过程,有系统级、电路级和物理级三个层次的设计。其涉及的电子系统是指从低频、高频到微波,从线性到非线性,从模拟到数字,从通用集成电路到专用集成电路构造的电子系统,因此,EDA技术研究的范畴相当广泛。从专用集成电路(ASIC)开发与应用角度看,EDA软件系统应当包含以下子模块:设计输入子模块、设计数据库子模块、分析验证子模块、综合仿真子模块、布局布线子模块等。在现代电子设计技术领域种,EDA技术已成为主要的设计手段。EDA技术可把数字通信技术,微电子技术和现在电子设计自动技术结合起来,实现了硬件设计软件化,加速了数字通信系统设计的效率,降低了设计成本。利用EDA技术进行电子系统的设计,具有以下几个特点: (1)用软件的方式设计硬件; (2)用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;(3)设计过程中可用有关软件进行各种仿真;(4)系统可现场编程,在线升级;(5)整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。因此,EDA技术是现代电子设计的发展趋势。1.4 VHDL硬件描述语言1.4.1 简介VHDL 是一种超高速集成电路硬件描述语言, 它提供了一个标准的, 从逻辑门级到数字系统级的各抽象级描述硬件的标准文本, 提供了精确的语法和语义, 为集成电路及系统设计提供了形式化、 层次化和规范化的描述, 不仅能有效地用于CAD 进行模拟, 而且可作为一种精确的自然语言用于设计者之间的设计交流, 它允许设计者在语言的基本作用范畴之外表示信息,尽管最初的工具在某些级( 例如开关级) 不能提供模拟。由于没有限制设计者必须拥有特殊的硬件技术或设计方法, 该语言在工业上有着广泛的用途, 它被喻为 硬件描述语言中的“FORTRAN”, 其性能是其它硬件描述语言无法媲美的。由此,VHSIC 的硬件描述语言(VHSIC HDL)即VHDL便诞生了,并很快被美国电气和电子工程师协会所承认。VHDL语言描述电路的行为,具有很强的电路功能描述能力,适用于大规模电子系统的设计。1.4.2 VHDL具有的特点(1) 具有程序包的特点VHDL 是第一个包含了程序包概念的硬件描述语言( HDLS) , 这一特点是源于 Ada语言, 由它提供了封装定义和应用函数的技术。这一特点特别适用于硬件描述, 因为它提供了把工艺技术依赖性等收集进存储单元的手段。VHDL 的程序包中包含了许多说明, 这些说明可以某种方式和设计者的思想相联系, 这个程序也可用作一个具有通用性的标准程序包。在一个程序包中, 可以出现不同类型的说明, 包括类型和子类型说明、属性说明、 常数和别名的说明及子程序的说明,但其中不允许信号变量说明, 也不允许接口描述存在。一旦定义了一个程序包, 它就可以被任何的描述所参考。VHDL 语言中还拥有一个标准程序包, 它包括了所有的预定义类型、 属性和函数, 不能为设计者们所更改。为了方便设计者, 在设计库中也提供了其它预定义程序包, 比如: 预定义的 MEA?SURE 包含了许多通用的物理类型说明( 象距离、 电压、 效率等) 。 ( 2) 引入了设计实体 原来的 HDLS 倾向于集中在对某个设计的描述技术上, 而忽略了在设计全过程中所具有的许多级上描述的事实。VHDL 对许多接口的分开描述和对一个接口的相互联系的多重描述提供了从上至下和从下至上的设计工具。一个设计实体能够模拟复杂性不一的硬件, 如可模拟逻辑门、 触发器、 控制单元甚至一个计算机系统。一个设计实体由一个接口和一个或多个可变体构成。接口中含有可变体的公共说明的集合, 这些说明抓住了硬件实体的外部特点, 表明了设计实体和外部环境传输信息的通道。设计者分析硬件实体的途径不受限制, 同一硬件实体的可变结构的实现能被模拟用来评估成本及速度因素, 类似硬件实体的功能、 物理的结构也能被模拟, 各个与同一接口相联系的可变体, 可以使用接口中提供的所有说明。( 3) 具有属性和类属的特点 属性提供了一种通常的联系, 是对性质和数值的描述, 其它系统均可以使用。类属增加了设计实体重新使用的可能性, 例如: 工艺可靠性, 诸如噪声系数或功率消耗可以聚集在类属中。使用设计实体时, 可通过提供需要的类属值确定一个特殊的工艺。( 4) 数据消除功能 此功能使得用户能自定义。当冲突源同时出现时, 对于一个给定的信号, 将发生什么情况; 在大多数语言中, 解决此类冲突的算法是预定义的, 不为用户所控制, 而 VHDL 可将这种定义交给用户定义。( 5) 传输和惯性延迟 VHDL 在信号赋值语句中提供了两种延时方式: 传输延迟是保证不管如何排列, 所有的变化都能通过设计向前传输; 惯性延迟则是消除所有比某些定义宽度还窄的脉冲。因此阻止了它们在设计中的传输。( 6) 用户自定义类型 VHDL 允许用户自定义类型来定义模拟值, 就是定义使用本语言预定义的对用户手头工作来说不能不适合的模拟值的性质。( 7) 并行和时序混合的性质 VHDL 可以使一个信号属性不仅包括时序还包括并行的码。某些 HDLS 需要把这些结构严格地区分开, 有的仅提供了一种。在VHDL 中, 过程( 时序特性的) 语句可以放在块( 并行特性) 语句的任何所希望的地方,并允许写成整体上是并行的, 但其中某些段是被描述为时序的。( 8) 性能和结构的混合 VHDL 通过作为一类并行语句( 称之器件例示语句) 而提供了结构描述。由于联在一起的器件总是同时工作的,所以以上的语句中有实际硬件的语义。因此, 结构语句完成了具有并行特性的情况, 而大多数别的硬件描述语言则把结构描述看成语义上区别于并行特性的语句。( 9) 物理描述能力 VHDL 语言是第一种能定义所有硬件描述中所必需的物理单位的HDL, 物理单位的使用和有效的类型检查提供了硬件的精确物理描述, 使用 VHDL 甚至能描述机械学、热力学和硬件设计的可靠性。( 10) 设计的多级描述能力 VHDL 可支持设计的多级描述:在性能范畴内, VHDL 使用户能用块语句( 并行时间特性) 和过程语句( 时序时间特性) 来定义性能。从算法级到电路级的所有级都可以用这种方式来定义。% 在结构范畴内, VHDL 使用户能描述逻辑的和物理的分割与联结, 用接口和器件说明、 器件例子说明及配置体语句, 从结构级到电路级的所有级都可以进行描述。& 在物理范畴内, 当不具有指定的物理类型的描述, 某种 VHDL 特性( 特别的属性)能描述诸如方位、 时间、 功率、 范围等物理信息。当然, VHDL 也有一些不足之处, 如; 缺少 WAIT 语句, 不能等待时序, 不能处理动态结构, 但 VHDL 的许多优点给硬件设计者带来了方便, 可为广大用户所接受。1.4.3 VHDL的优点VHDL迅速普及主要因为的是他的强大的自身功能和特点,主要优点如下:(1)覆盖面积广,有强大的系统硬件描述能力 VHDL可以覆盖行为描述、寄存器传输级描述、门描述、电路描述和物理描参数描述(包括延时、功耗、频率、几何尺寸等)。 VHDL还具有丰富的数据类型。即可以支持预定义的数据类型,也可以自己定义数据类型。这样便给硬件描述带来了较大的自由度,使设计人员能够方便地使用VHDL创建高层次的系统模型。 (2)可读性好、易于修改在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构模块化,所以易于修改设计。(3)独立于器件的设计,与工艺无关 用VHDL进行硬件电路设计时,并不需要首先考虑选择完成设计的器件,也就是说,VHDL并没有嵌入具体的技术和工艺约定,设计人员可以集中精力进行设计的优化,不需要考虑其他问题。当一个设计描述完成以后,可以用多种不同的器件结构来实现其功能。 (4)易于移植和设计资源共享 由于VHDL是一种国际标准化的硬件描述语言,对于一个设计描述,他可以移植到符合相同标准的任意系统或平台上运行。对于一些较大的通用性硬件电路,目前已经有专门的IP核出售,因此,能实现设计资源的有偿使用,可大大缩短设计周期,加快设计产品的上是速度,1.4.4 VHDL设计硬件电路的方法VHDL是IEEE所确认的一种标准化硬件描述语言,它在设计描述的过程中有一定的设计流程可以遵循。一般来讲,VHDL的设计流程主要包括以下几个步骤: (1)设计规范的定义采用VHDL进行设计的描述之前,首要对电子系统的设计目的和设计要求有一个明确的、清晰的认识,然后形成整体设计规范的定义,这一 步骤对以后的设计来说是非常重要的。设计规范的定义将对后面的设计步骤起到提纲挈领的作用,它相当于系统设计的总体方案。 (2)采用VHDL进行设计的描述采用VHDL进行设计描述主要包括设计规范和程序编写两个步骤。设计规划的主要任务是进行设计方式的选择以及是否进行模块划分。通常,设计中采用的设计方式包括直接设计,自顶向下设计和自底向上的设计,一般采用自顶向下的设计方法。模块划分是设计过程中一个非常重要的步骤。模块划分的好坏将会直接影响到最终的电路设计,因此在这一步应该花费一定的时间,从而保证模块划分的最优化。进行完成设计规划后,就可以按照模块划分来编写各个模块的VHDL 程序,然后将各个模块的VHDL程序组合在一起,从而完成整个设计的VHDL描述。 (3)VHDL程序仿真 在设计流程中,综合,优化和装配(或者布局线)等后续操作往往需花费大量的时间。一旦在后续工作中发现设计错误,往往需要修改VHDL描述,然后再重新进行综合、化和装配等后续操作,如此反反复复,将会浪费大量的时间和人力物力。因此,设计人常常在完成编码后采用仿真器对VHDL设计描 述进行仿真,这样可以提早发现设计错误,节省时间,缩短开发周期。 (4)综合、优化和装配综合是指将较高层次的抽象描述转化到较低级别的抽象的一种方法,也就是将设计的描述转化成底层电路表示。但是,通常综合的结果就一个网表或者就是一组逻辑方程。优化是指将设计的时延缩短到最小和有效地利用资源。几乎所有高级VHDL综合工具都可以使用约束条件对设计进行优化。其中约束条件的设置主要包括时间约束和面积约束。 对设计描述进行完综合和优化操作后,EDA工具需要将综合和优化的逻辑结果分配到一个逻辑器件中。通常,装配用来描述对一定的CPLD的资源进行分配的过程;布局则是将综合和优化后生成的逻辑规划到一个FPGA的逻辑结构中,然后将各逻辑单元放置到相应优化的位置,最后在逻辑元胞之间、逻辑元胞和I/O口之间进行布线。 (5)装配(或布局布线)后的仿真 与VHDL程序仿真不同,装配后的仿真不仅对设计描述的逻辑功能进行验证,而且还要对设计描述的时序功能进行验证。如果时序不能满足,那么需要回到前面的步骤重新进行操作。通常,装配后的仿真有时候被称为后仿真。 (6)器件编程器件编程就是将设计描述经过翻译、综合、优化和装配后的结果。经过一定的映射转化成器件编程所需要的数据文件格式,然后通过烧片器或者下载电缆将数据文件下载到器件中的过程。 第二章 HDB3码的编译规则2.1主要的基带传输码型 了解NRZ码和AMI码的编码规则是了解HDB3码的编码规则的前提,NRZ码的全称是Non-Return to Zero,NRZ码的编码规则就是信号1有脉冲,信号0无脉冲,占空比100%。为克服NRZ信号存在直流分量以及丰富的高频分量。一般采用双极性归零码AMI(Alternate Mark Inversion);0信号依然是无脉冲的,1信号采用两种交替极性的脉冲传输,占空比为50%。AMI码不存在直流分量,且高频分量较NRZ要少。然而在实际应用中,人们发现0信号占有较大的比重,而连续的0信号对系统的同步以及时钟频率的提取较为不利,而采用HDB3码是解决这一问题的方法之一。2.1.1 NRZ码的编码规则 NRZ码分为单极性NRZ码和双极性NRZ码,单极性NRZ码在表示一个码元时,二进制符号“1”和“0”分别对应基带信号的正电平和零电平,在整个码元持续时间,电平保持不变。如图2.1所示图2.1单极性NRZ码在NRZ双极性非归零编码中,“1”和“0”分别对应正、负电平,如图2.2所示,双极性非归零NRZ码具有直流分量小、接收端判决门限为0,容易设置并且稳定,因此抗干扰能力强、可以在电缆等无接地线上传输。 图2.2双极性NRZ码2.1.2 AMI码的编码规则 AMI码的全称是传号交替反转码。此方式是单极性方式的变形,即把单极性方式中的“0”码仍与零电平对应,而“1”码对应发送极性交替的正、负电平,如图2.3所示。AMI码实际上是把二进制脉冲序列变为三电平的符号序列,AMI码具有在“1”、“0”码不等的概率情况下,也无直流成分,且零频附近低频分量小。因此,对具有变压器或其他交流耦合的传输信道来说,不易受隔直特性的影响;若接收端收到的码元极性与发送的码元极性完全相反,也能正确判决;便于观察误码的情况;此外,AMI码还有编译码电路简单等优点,是一种基本的线路码,得到广泛应用;AMI码有一个重要缺点就是当它用来获取定时信息时,由于它可能出现长的连0串,因而会造成提取定时信息的困难。图2.3 AMI码2.2 HDB3码的编码规则 HDB3码是一种AMI码的改进型,它的编码原理可简述为,在消息的二进制代码序列中:(1)当连“0”码的个数不大于3时,HDB3编码规律与AMI码相同,即“1”码变为“+1”、“-1”交替脉冲; (2)当代码序列中出现4个连“0”码或超过4个连“0”码时,把连“0”段按4个“0”分节,即“0000”,并使第4个“0”码变为码“1”,用V脉冲表示。这样可以消除长连“0”现象。为了便于识别V脉冲,使V脉冲极性与前一个“1”脉冲极性相同。这样就破坏了AMI码极性交替的规律,所以V脉冲为破坏脉冲,把V脉冲和前3个连“0”称为破坏节“000V”; (3)为了使脉冲序列仍不含直流分量,则必须使相邻的破坏点V脉冲极性交替; (4)为了保证前面两条件成立,必须使相邻的破坏点之间有奇数个“1”码。如果原序列中破坏点之间的“1”码为偶数,则必须补为奇数,即将破坏节中的第一个“0”码变为“1”,用B脉冲表示。这时破坏节变为“B00V”形式。B脉冲极性与前一“1”脉冲极性相反,而B脉冲极性和V脉冲极性相同。如: NRZ码:1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1 AMI码:-1 0 0 0 0 +1 0 0 0 0 -1 +1 0 0 0 0 -1 +1 HDB3码:-1 0 0 0 -V +1 0 0 0+V-1 +1B 0 0 V +1 -1 2.3 HDB3码的译码规则 HDB3码的译码是编码的逆过程,其译码相对于编码较简单。从其编码的原理可知,每一个破坏符号V总是与前一个非0符号同极性,因此,在HDB3码序列中,容易识别V符号,同时也肯定V符号及其前面的3个符号必是连0符号,这样就恢复成了4个连0码,然后再将所有的-1变成+1后便得到了原消息代码。举例如表2.1所示:表2.1 HDB3码的译码规则HDB3+10-10+1-1000-1+100+1-10+1破坏符V,B1-V+B+V译码01011000000001012.4 HDB3码的检错能力HDB3码具有较强的检错能力,当数据序列用HDB3码传输时,若传输过程中出现单个误码,其极性交替变化规律将受到破坏,因而在接收端根据HDB3码这一独特规律特性,可检出错误并纠正错误,同时HDB3码方便提取位定时信息。因而HDB3码作为数据传输的一种码型,应用广泛,成为ITU推荐使用的码型之一。第三章 HDB3编码器的FPGA实现3.1 HDB3码编码器的实现分析在数字基带传输系统中,从信号源输出的信号一般是用“0”和“1”两种状态表示的单极性NRZ码。因此看来,HDB3编码器的主要转换对象就是NRZ码。由HDB3码的编码规则可知,编码器的主要工作就是按AMI码对信号进行编码,判断是否应该加入破坏符V,V加入后是否应该补B,由于需要检查到四位连“0”才能进行加V补B的操作,这样用于存放数据的移位寄存器就不能少。这个设计的难点在于加V和补B的判决。3.2 HDB3码编码器的设计思路3.2.1 4连0的检出加V及判1极性当输入遇到4连“0”时,按编码规则,须以000V或B00V取代。因此需要先有一个4连“0”检出模块。该模块检出4连“0”时,产生一个加V信号,把V取代最后一个“0”,同时根据前一个“1”的极性判断下一个V的极性。当输入为“1”时,就按AMI码判断其极性。3.2.2 取代节的选取 当检出4连“0”时,除了加V外,还须考虑是要用B取代第一个“0”,还是保持第一个“0”不变地输出。可以在加入的两个V之间去判断“1”的个数是奇数个还是偶数个,去判断加B还是保持“0”码。若须要加B,则进行加B的操作,同时判断B的极性。其极性可根据B00V来决定,因为B00V中B跟V是同极性的而与前一个“1”极性是相反的。整体思路原理框图如图3.1所示 图3.1 HDB3编码器实现原理框图加B00V还是000V,可根据如下表3.1所示的相关极性关系进行判断表3.1 取代节极性判决V的前一个“1”的极性+-+-V的极性+-+-两个V之间“1”奇偶个的数的判断偶数个偶数个奇数个奇数个取代节 B00V -BOO-V 000V 000-V3.3设计建模 由于HDB3码是双极性的,而FPGA只能进行单极性处理。因此须把HDB3码的双极性变换为单极性,以便FPGA器件对其进行处理。将HDB3码的“+1”、“0”、“-1”用数字信号1,0重新编码,用01编码“+1”,用00编码“0”,用11编码“-1”。如表3.1所示,其中低位与其本来数值相符,高位则以0来标识“+”,用1来标识“-”。 表3.1 HDB3的码元重新编码 HDB3码元自定单极性标识+101000-111 因此在最后,还须接外部电路,把单极性转换为双极性输出。比如利用一个四选一的数据选择器CC4052(其功能如表3.2所示),二维数组作为CC4052的的选择地址,在输出端out可以得到符合规则的“+1”、“-1”、“0”变化波形 表3.2 CC4052功能表输入导通通道INHA1A0LLL/O/ILLH/O/ILHL/O/ILHH/O/IHXX无把得到的两个输出的分别接到A1,A0作地址控制端,便可使其输出相应电平。3.3.1插“V”码模块设计及仿真插“V”码实际就是对消息代码里的的连0串进行检测,当出现四个连0串的第四个“0”码变换成“V”码,其它码元保持消息代码的原样输出。由于信号插“V”之后不仅有“0”、“1”还有破坏符“V”,因此需要两个比特位来进行编码,在本模块中用“00”表示码元“0”,用“01”表示码元“1”,“10”表示“V”信码。图3.2 插“V”码模块连接图以下给出实现添加破坏符号“V”功能的源程序代码Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity hdb3plusv isPort(clk :in std_logic; -系统时钟输入 Datain :in std_logic; -基带信号输入 Plusvout :out std_logic_vector(1 downto 0); -插“V”处理后输出End hdb3plusv;Architecture behave of hdb3plusv is Signal plusvregh : std_logic_vector(3 downto 0); Signal plusvreg1 : std_logic_vector(3 downto 0); Signal dataregn : std_logic_vector(2 downto 0);BeginProcess(clk)Begin If clkevent and clk=1 then If datain=1 then Dataregn=0 & dataregn(2 downto 1); ElseDataregn=1 & dataregn(2 downto 1); End if; End process; Process(clk) Begin If cldevent and clk=1 then -在编码中,基带信号的“0”,用“00”来表示 -基带信号的“1”,用“01”来表示 -插“V”符号,用“10”来表示 -检测到4个连0,则转化为“10” If (datain=0) and (dataregn=”111”) and (plusvregh(3 downto 1)=”000” then Plusvregh=1 & plusvregh(3 downto 1); Plusvreg1=0 & plusvregh(3 downto 1);-否则,如果是“1”,则转化为“01” Elsif datain=1 then Plusvregh=0 & plusvregh(3 downto 1); Plusvreg1=1 & plusvreg1(3 downto 1);-如果是“0”,则转化为“00” Elsif datain=0 then Plusvregh=0 & plusvregh(3 downto 1); Plusvreg1=0 & plusvreg1(3 downto 1);End if;End if;End process;-插“V”输出进程Process(clk)Begin If clkevent and clk=1 then Plusvout=plusvregh(0) & plusvreg1(0); End if;End process;End behave;仿真结果图图3.3插“V”符号仿真波形图在上图3.3中可以看出,当datain为0且datain出现4个连续的“0”时,plusvout信号为“10”代表“V”,HDB3编码的插“V”操作得到验证,否则,当datain为“1”时,plusvout信号为“01”,当datain为“0”时,plusvout信号为“00”。3.3.2插“B”码模块设计及仿真HDB3编码器的插“B”码就是对HDB3编码器的插“V”码模块的输出信号plusvout进行判决,如果相邻的两个“V”码之间的“1”的个数为偶数个,则把最后一个“V”码前的第1个0变换成一个“B”码;否则保持plusvout的码型不变。由于码元“B”相对于“V”是过去的信息,因此,必须对当前码元进行存储,使用FPGA中的移位寄存器来实现,定义2个五位寄存器,寄存器从高往低移位,如果寄存器的第4位判断出需要进行插“B”码时,同时改变寄存器的第1位的值,达到以现在的情况改变过去的值。码元“B”用“11”表示。图3.4为插“B”模块连接图。图3.4插“B”模块连接图以下给出添加符号“B”模块的源程序代码Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity hdb3plusb isPort(clk : in std_logic; -系统时钟输入 Plusvin : in std_logic_vector(1 downto 0);-插“V”信号输入 Plusbout : out std_logic_vector(1 downto 0);-插“B”信号输入 End hdb3plusb; Architecture behave of hdb3plusb is Signal parity : std_logic; Signal startflag : std_logic_vector(2 downto 0); Signal hdb3plusbregh : std_logic_vector(4 downto 0); Signal hdb3plusbreg1 : std_logic_vector(4 downto 0); Begin -对两个连续“V”之间的非“0”符号进行奇偶判断-parity为“0”表示两个连续“V”之间的非“0”符号位偶数个,需要进行插“V”操作- parity为“1”表示两个连续“V”之间的非“0”符号位奇数个,不需要进行插“V”操作Process(clk)BeginIf clkevent and clk=1 then If plusvin=”10” then Parity=0;Elsif plusvin=”01” then Parity=not parity;End if;End if;End process;-当两个连续“V”之间的非“0”符号为偶数个,进行插“B”操作-符号“B”由“11”来表示Process(clk)Begin If clkevent and clk=1 then If(plusvin=”10”) and (parity=0) then; Hdb3plusbregh(4)=1; Hdb3plusbregh(3)= hdb3plusbregh(4) Hdb3plusbregh(2)= hdb3plusbregh(3) Hdb3plusbregh(1)=1;-如果需要插“B”,则改变去过第1位的值 Hdb3plusbregh(0)= hdb3plusbregh(1) Hdb3plusbreg1(4)=0; Hdb3plusbreg1(3)= hdb3plusbreg1(4); Hdb3plusbreg1(2)= hdb3plusbreg1(3); Hdb3plusbreg1(1)=1;-如果需要插“B”,则改变去过第1位的值 Hdb3plusbreg1(0)= hdb3plusbreg1(1); Else Hdb3plusbregh=plusvin(1) & hdb3plusbregh(4 downto 1); Hdb3plusbregl=plusvin(0) & hdb3plusbregl(4 downto 1);End if;End if;End process;Process(clk)Begin If clkevent and clk=1 then Plusbout(1)=hdb3plusbregh(0); Plusbout(0)=hdb3plusbregl(0); End if;End process;End process;仿真结果图图3.5插B符号仿真波形图由图3.5波形图中可以看出,当两个连续的“V”之间的非“0”符号为偶数个,进行插“B”的操作,“B”用11表示,插“B”操作得到验证。3.3.3 HDB3编码器的极性转换模块设计及仿真HDB3编码输出的“1”码和“V”码具有正负交替的特性,但FPGA的输出引脚只能输出正电平,没有负电平,因此必须将前面插“B”码后的信号plusbout进行极性转换才能得到真正的HDB3信号。这就需要两路信号来表示,一路表示整电平,一路表示负电平。然后根据HDB3编码规则,把插“B”模块输出的信号,转化为正/负电平的两路信号,当插“B”模块输出的“01”信号,正/负电平信号交替出现高电平,当插“B”模块输出的“10”信号,高电平出现原来的高电平信号上,当插“B”模块输出的“11”信号与当插“B”模块输出的“01”信号情况相同。图3.6 HDB3双单极性转化模块连接图以下是实现单双极性变换控制功能的源程序代码 Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity hdb3poled2s isPort(clk : in std_logic; Plusbin : in std_logic_vector(1 downt0 0);Plusout : out std_logic;Minusout : out std_logic) End hdb3poled2s; Architecture behave of hdb3poled2s is Signal parity :std_logic; Signal com : std_logic_vector(2 downto 0); Begin Com Plusout=0; Minusout=1; Parity Plusout=1; Minusout=0; Parity Plusout=1; Minusout=0; Parity Plusout=0; Minusout=1; Parity Plusout=1 Minusout=1; Parity=not parity;-出现
展开阅读全文