资源描述
基于FPGA的HDB3编解码器设计摘 要:在数字通信系统中,数字基带信号由信源发出,但是夹杂着低频分量和直流分量,在传输信号时会容易产生码间的干扰从而严重影响了传输的可靠性,因而要对其进行编码再进行传输。FPGA(现场可编程门阵列)作为21世纪兴起的一种可编程器件,要比传统的可编程器件的集成度要高,且编码电路直接集成在了FPGA芯片上。利用HDB3码(三阶高密度双极性码)在传输过程中可打破长连“0”、不含直流、码谱位于高频段和提取同步信号方便这一特点,本文提出了基于FPGA的HDB3编解码器设计,基于顶层设计原理,首先介绍了FPGA的开发基础和HDB3编解码的原理,其次设计HDB3编解码模块,再者通过集成了FPGA设计环境的Quartus软件中完成编解码器的编译与仿真等过程,分别对编码模块和解码模块进行仿真,最后进行了编解码模块的合成仿真,得到了与预期相符合的波形。最终结果表明,本次设计的基于FPGA的HDB3编解码器具有编解码简单、程序灵活、工作可靠性高的特点,相比其他的可编程器件而言,基于FPGA的HDB3编解码器的集成度更高,体积更小。关键词:FPGA;HDB3码;VHDL语言;编解码器The Design of HDB3 Encoder and Decoder Based on FPGAAbstract:In digital communication system,digital baseband signal is issued by the signal source with low frequency component and the dc component. This is easy to produce the interference in the process of transmission signal which can seriously affect the reliability of transmission.Therefore,it is necessary to encode before the transmission. As the rise of a programmable device of the 21st century, FPGA(field programmable gate array) have a higher level of integration than traditional programmable device, and encoding circuit is directly integrated in the FPGA chip. In the process of transmission, HDB3 code (third-order high density bipolar codes) have the characteristics of break long 0, not including dc, code spectrum at high frequencies, and easy to extract the sync signal. Use of these advantages, this paper puts forward the HDB3 encoder and decoder design based on FPGA. Based on the principle of top design, this paper firstly introduces the development foundation of FPGA and the principle of HDB3 encoder and decoder. Secondly, design HDB3 encoder and decoder module.Through Quartus software which integrationed of the FPGA design environment, complete the process of compilation and simulation of encoder and decoder. Finally,has carried on the synthesis simulation of encoder and decoder module, and expectations of the wave are obtained. Final results show that the design of HDB3 encoder and decoder based on FPGA has the characteristics of simple and flexible in application and high working reliability.Compared with other programmable devices, HDB3 encoder and decoder based on the FPGA is more integrated and smaller.Key Words: FPGA; HDB3 code; VHDL language; codecs目 录1. 概述11.1 课题的意义11.2 课题的研究背景11.3 课题的主要研究工作21.4 现代数字系统的设计方法31.5 论文结构32. FPGA开发基础42.1 Quartus II简介42.2 可编程逻辑器件简介52.3 硬件描述语言简介72.4 FPGA开发流程92.5 FPGA器件选型123. HDB3编解码原理133.1 基本码型简介133.2 HDB3码的编解码规则164. HDB3编解码器的设计与实现184.1 总体设计构思184.2 HDB3编码器的FPGA实现184.2.1 插“V”模块194.2.2 插“B”模块194.2.3 极性变换模块204.2.3 HDB3编码器的仿真214.3 HDB3解码器的FPGA实现224.3.1 +V、V码的检测244.3.2 扣V扣B模块建模244.3.3 HDB3解码器的仿真254.4 HDB3编解码器合成及验证255. 总结和展望27参考文献28致 谢29附 录30 附录1:基于VHDL语言的HDB3编解码器源程序31 附录2:系统顶层设计原理图34 附录3:HDB3编码器RTL视图35 附录4:HDB3解码器RTL视图36基于FPGA的HDB3编解码器设计1. 概述1.1 课题的意义相对于传统的AMI码来说,可以自检出传输中的编码错误,频谱能量主要在基波频率中段,其功率谱中没有直流分量,但是当信息代码在传输的过程中出现4连“0”码时,这时的AMI码就不具备了定时提取的功能,这也就是AMI的缺陷。为了克服这种编码的缺陷,人们改进了传统的AMI码,并得到一种全新的双极性归零码HDB3码,由于HDB3码是一种三阶高密度双极性码,相比于AMI码而言,它的频谱能量主要集中在基波频率的高频段,且占用较窄的频带,具有编码规则简单、便于时钟信号的提取、无直流分量、频带较窄的优点,实现的电路的结构层次也要比采用AMI码编码方式简单,是标准ITUTG.703推荐的PCM终端设备基群、二次群和三次群的标准数字传输接口码型。本文设计了基于FPGA的HDB3编解码器,运用EDA所学的设计方法,结合VHDL语言编程,最后进行系统编解码功能的时序仿真。仿真结果表明,最终设计的HDB3编解码器具有较强的抗扰动性能,且改变参数就可调整编解码器的功能,还具有软件开发简单、造价低、应变能力快、互动性强、便于改动等特点。1.2 课题的研究背景EDA(Electrical Design Automation,电子设计自动化)技术不仅是现代集成电路的基础,还是数字电子技术电路设计要用到的关键平台,作为21世纪科技创新和产业发展的关键部分,EDA技术的设计是基于大规模的可编程器件,如FPGA,表达方式有很多种,但其中最方便使用的是VHDL语言,VHDL语言是一种硬件描述语言,主要功能是实现系统硬件逻辑描述。EDA技术在开发使用中用到了很多工具,其中有计算机、大规模可编程逻辑器件,还有为其配套开发的软件以及实验系统,EDA技术最大的功能是实现电子系统向硬件系统的转变,我们可以在EDA的平台上进行软件的逻辑编译、逻辑化简与逻辑仿真,EDA也会自动完成对于FPGA芯片的适配编译、逻辑映射与编程下载等过程,这就是现代数字电路中常用的一种方法,也是一门新技术。现代集成电路技术发展迅猛,已经进入了一个全新的阶段,不管是从工艺上还是集成电路的复杂程度上,都比过去提升了很多。电子系统电路之所以成为现在发展热门的一种技术,就是由于它所使用的集成电路高度的集成化,使得电子系统成为一个复杂的系统。所以说,离开EDA技术,电子系统的设计是很困难的。21世纪是人才竞争的世纪,高素质的电子科技人才是需要培养的,一个重要的途径就是EDA教学,这也成为了IC从业人员提升自我的一个重要手段。由于EDA技术的迅猛发展,对我们国家高校的传统教学形成了无形的挑战,冲击着传统的电子技术教学,需要提升高校的教师教学水平,在革新教学思路与创新教学方法上多下功夫。近年来,国内许多高校更加注重高等人才的培养,积极探索更加适应新世纪的教学方法,电子技术的快速发展需要更多的优秀人才,高校引入并消化吸收形成了完善的电子技术教学模式,比如开设电子技术课程,注重学生的实验能力,在电子技术有独特优势的高校在获得国家重点项目支持资金后建立起了先进的实验室,有的是国家级,有的是省级。总起起来,国内高校不管是从硬件上还是从软件上都开展了一系列电子技术教学创新,借助于EDA这一现代教学方法就更加方便了教学,学生可以方便地使用EDA软件进行电子技术设计与仿真等。电子系统的设计主要依靠EDA技术来完成,一般有系统级、电路级和物理级三个层次的电路设计。EDA技术可以设计的电子电路的频段不再受局限,从低频到高频甚至更高频率的微波都在EDA设计的范畴。更重要的是,电路的线性与非线性、种类、复杂程度等也都在EDA的考虑范围内,因此,EDA所研究的对象是非常广泛的。我们试着从其他角度来看EDA的发展,比如专用集成电路(ASIC)的开发与应用角度,一个完整的电子系统的设计至少应包括以下5个子模块:设计输入子模块、设计数据库子模块、分析验证子模块、综合仿真子模块、布局布线子模块。 由此可见,EDA技术已经成为现在数字电子技术设计的有力工具。1.3 课题的主要研究工作本课题主要研究的内容是利用FPGA芯片,选择合适的一种码型对信号进行编码,设计信号传输过程中的编码器和解码器,最终进行仿真验证。本次设计采用的是HDB3码对信号进行编码,这是由于HDB3码相比较于传统的AMI码而言可以打破4连“0”,在解码环节便于同步提取,HDB3码的的各项指标都比较符合设计所需,比如在频率、频带上。鉴于HDB3码的优越特点,PCM系统的基群到三次群通常采用HDB3码作为标准接口码型,课题的主要工作是以下几点:a) 用Quartus软件实现基于FPGA的HDB3编解码;b) 在Quartus环境下构建系统总体及编解码原理图设计;c) 对系统进行时序仿真;d) 验证编解码器的功能;e) 对本次的设计进行一个总结。1.4 现代数字系统的设计方法传统设计数字系统电路的方法就是自上而下的设计方法,利用现有的元器件焊接好电路板,借助电路板来做出数字系统。设计人员在设计之初的首要工作就是选择合适的元器件,选取元器件时要注意器件的各项参数指标是否能达到要求。其次就是把我们用到的各种元器件焊接到电路板上,并用仿真软件检查电路的电气可靠性能。EDA技术的出现催生出了新的设计理论和设计方法,并且也促进了可编程逻辑器件的新发。由于可编程器件具有编写程序很灵活的特点,又利用现代EDA技术设计输入,已经成为了数字系统设计的主要方法。可编程逻辑器件在器件内部通过硬件描述语言来完成各个功能模块设计,最终实现系统整体的功能设计。设计者按照系统的需求完成内部逻辑和定义相应的功能管脚,在芯片内设计就可以完成电路板设计的大量工作,在芯片内设计灵活的组合内部功能块定义管脚等来实现数字系统的逻辑功能,可以有效的减轻电路板以及电路设计的工作量和难度,极大的提高工作效率。采用可编程逻辑器件作为芯片的设计方法,设计人员可以反复设计编程,修改错误,方便灵活研发周期短,便于更快的开发产品抢占市场,而且缩小了系统的体积,减少了芯片的使用数量,可以提高系统的可靠性能。 利用EDA软件和可编程逻辑器件芯片,可以形成专业从事IP模块生产的无芯片EDA公司,也可以形成无生产线的集成电路设计公司,设计时调用IP核减少开发量。可以说,可编程逻辑器件和EDA设计工具在现代的数字系统设计也越来越重要了。 1.5 论文结构本文主要研究的是如何搭建好一个仿真平台,首先就是对系统的整体设计进行规划,然后设计各个子模块,最后在搭建好的平台上进行模块仿真,具体章节安排如下:第一章是概述,这章介绍了本论文选题的背景及意义,以及可编程逻辑器件的发展历程和现代数字系统的设计理论与方法。第二章是EDA技术和FPGA开发基础,详细介绍了EDA技术和FPGA开发的基本原理,探析了FPGA芯片的种类和选型。第三章详细说明了HDB3编解码器的原理,首先介绍NRZ码、AMI码和HDB3码这三种基本码型及其编解码规则,其次分别介绍了HDB3编码器和解码器的编解码规则。第四章是基于FPGA芯片来实现HDB3编解码器的设计,首先画出了HDB3编解码器设计的总体框图,然后分别设计了编码器模块和解码器模块,在仿真软件中得到时序仿真波形图,然后将编码器解码器合成仿真,最终完成整体系统的时序仿真验证。第五章是全文总结,从总体上概括本次设计,写出了这次设计的成果和不足之处。2. FPGA开发基础2.1 Quartus II简介Altera公司在之前开发出了一综合性仿真平台软件,它就是Quartus II集成开发软件,该软件支持多种输入方式,自带仿真器,能自动完成硬件系统到软件的PLD设计。Quartus II同时也支持多种可操作的系统,设计流程不仅可以帮助我们直观地浏览RTL视图,它的设计方式也非常多样化,支持友好的用户界面。它的显著特点就是运行稳定、界面友好、易于初学者掌握。在Quartus II内部提供了一系列的调试查看工具,包括Technology Map、RTL Viewer、Chip Planner和TimeQuest等,并且集成了总线接口和软核,提供最新型的研发工具,载入到设计的硬件系统中,可以编写源程序以及Test bench程序。不仅如此,Quartus II可以和DSP直接连接,还可以支持DSP操作系统。另外,片上开发系统也离不开Quartus II软件的支持,可以在Quartus II平台上开发相应的系统,系统整体设计和编程开发整合在一起,因此Quartus II是一个综合性的平台。在使用Quartus II软件进行电路设计时,我们可以采用图形或者HDL编辑器进行编辑,因为这个软件本身就是模块化的编译器。一个系统整个设计过程的第一步是进行设计的输入,第二步是编写我们所能实现电路的程序,第三步是进行仿真验证。等仿真验证的结果没有问题后我们才画元器件的布局与布线图,随后在Quartus II软件中生成可下载的源文件,Quartus II软件的设计流程如图2-1所示。图2-1 Quartus II设计流程图Quartus II自带IP内核,包含模块库里面的宏功能,模块功能强大,便于用户利用,设计精简了复杂度,从而优化了设计。同时多方面支持EDA系统工具,使用户对整个设计流程都熟悉。不仅如此,Quartus II可以和DSP无缝对接,支持DSP应用系统,另外片上可编程系统也离不开Quartus II的支持,可以在Quartus II平台上开发相应的系统,系统整体设计和编程开发整合在一起,因此Quartus II是一个综合性的平台。2.2 可编程逻辑器件简介数字集成电路在最近的几十年里得到了快速的发展,从小规模的集成电路到中规模集成电路再到大规模集成电路和超大规模集成电路,这一过程也说明了数字电子技术本身迅猛的发展。此过程出现了各种类型的数字集成电路,但大体上分为以下三种。a) 标准逻辑器件。之所以称为标准器件就是因为它是中小规模集成电路,基于TTL工作原理的计数器、多路转换器、译码器、触发器等都是比较典型的逻辑器件。标准器件的特点就是产量大、价格低廉、便于编译。由于具有完整的功能,在设计标准器件时更注重提高产品的性能,因此标准器件的工作速度很快,几乎没有延迟。典型数字系统设计就要使用到标准器件,但是标准器件也有一些不足之处,那就是它的集成度不太高,在进行系统设计时,消耗的能量多,而且在印制排版时比较复杂,不容易焊接,这样对用户来说就很不方便,不方便修改,导致整个系统的可靠性能大大地降低。另外,当设计的电路中一个元器件改变,就要重新设计电路板,这就严重影响了我们的设计工作。b) 集成电路器件。21世纪电子技术的迅猛发展造就了基于软件的集成电路器件,最著名的就是单片机和PLC等。与传统的标准器件相比较而言,这类元器件实现了很多之前传统器件不能实现的复杂功能。其特点是整个电路有很高的集成度,可以在自身的平台上进行逻辑的实现,使得我们设计的整个系统更加方便可靠。但是它也有一些缺点,就是这类器件的工作速度也不高,尤其是需要高速逻辑器件的场合更加不适合使用。再者就是这类电路的组成也很复杂,这是因为它在工作时需要外围电路的帮助才能正常可靠的工作。c) ASIC集成电路。为了克服以上器件的缺点,ASIC集成电路应运而生,ASIC电路是具有实现某种特定功能的一个芯片,有了ASIC电路,我们减小了设计电路的大小,更提高了工作的稳定性。现在标准的ASIC电路分为三种,分别是全定制产品、半定制产品和可编程逻辑器件。全定制产品是指根据具体的要求设计制造,全定制电路的使用条件就是产能需求很大。半定制产品是指为了简化设计、缩短研发时间和提高产能,半定制产品就是这样一种方式。可编程逻辑器件克服了很多的问题,而且还可以再次编写程序,为设计和研发提供了方便,可以作为我们设计电路的理想器件。现代的可编程逻辑器件在实现的功能上可分为两类,一种是简单PLD,另一种是复杂PLD,两种PLD在原理上相近,使用的场合不尽相同,图2-2是PLD的分类图。图2-2 PLD的分类图对比之下,FPGA和CPLD在目前的应用更为广泛些,这是由于这些可编程器件本身的功能更为强大、集成度很高,从而能实现更为复杂、较大规模的电路设计做基础,对于二次开发更为有好处,FPGA和CPLD的区别如表2-1所示。表2-1 FPGA与CPLD的区别示意图参数指标FPGACPLD程序存储SRAM,外挂EEPROM内部的EEPROM资源类型触发器种类繁多电路组合形式多样集成度很高比较低使用场合大规模集成电路中小规模集成电路速度很快比较慢其他资源EAB无2.3 硬件描述语言简介EDA技术可以采用多种灵活的编程语言,目前应用比较广泛的就是VHDL和VerilogHDL这两种硬件描述语言。本次设计根据课题开题报告中的要求采用VHDL语言编程,故以下重点介绍这一硬件描述语言。VHDL(VeryHighSpeed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言),VHDL语言是基于门级的逻辑设计语言,诞生于 1982 年,以后的几十年里得到了迅猛的发展,现在已经是数字系统电路的开发必不可少的工具。VHDL语言主要用于数字系统的设计和仿真,它表述了很多的结构或者开发行为,内含了一些接口模式。VHDL语言不仅具有普通编程语言的基本硬件特征外,它还能像高级语言一样,用于我们设计数字系统。在进行数字系统的硬件电路设计时,我们之前采取的办法就是首先选取合适的元器件,然后做好基于这些元器件的原理图。这种方法是先设计好系统的顶层,再设计各个子系统,这样就基本做好了系统的硬件电路结构,设计从最基本的电路原理图着手,然后一层一层逐层往上设计,最终得到想要的波形文件。VHDL语言的语法严格,描述方法对于不同的模块也会不太一样。对于不同的描述方法要采用不同的编码模块才行。因此,VHDL语言学习起来不是很简单,需要首先学习简单的语句和语法,然后认识一些典型的编程案例,进行分析,这样才能发挥出VHDL语言的强大功能。但是对于专业用户而言,VHDL是非常有用的编程语言。为了快速地研发大规模集成电路,提高生产效率,并对研发成果保护以及增加成果的可复制性,各个大规模集成电路厂家都有自己的硬件描述语言。VHDL正式由于这种强大的需求才发展起来的,VHDL以形式化方式描述电路结构,并且和高级的描述方法结合起来,可以描述硬件电路的功能,比电路的原理图更直接地显示电路关系。VHDL语言具有高级程序语言的一些特点,他的主要目的就是用来编写电路的逻辑关系,电路的性质决定了VHDL设计的逻辑模型。VHDL语言以其鲜明的特点获得了社会的认同,并广泛用于现在的大规模数字系统设计层次上,作为类似于计算机高级语言的一种编程语言,VHDL语言具有强大的功能,且用户体验效果好,可以方便地在用户之间进行交流,VHDL语言具有以下几个特点:a) 电路设计形式多样。VDHL语言可以支持灵活多样的设计方法,很多的逻辑电路都可以使用VHDL语言来实现,现在EDA软件支持很多种硬件描述语言,VHDL语言就在其中;b) 电路设计层次多样。VHDL语言对电路的功能进行逐层扫描,甚至到门级电路的标准,并且VHDL还支持更多层次系统描述的能力。此外,不同层次的结构描述语言可以和与之对应的行为描述语言一起使用;c) 实现有关工艺编程。在采用VHDL语言设计的数字系统时,我们往往使用相应的工具进行使用前的仿真验证,从而可以更方便地描述电路所显现的功能。当设计需求发生改变时,我们只需要改动相应的验证工具就可使得电路的功能发生改变,这对我们的设计是很方便的;d) 易于共享和复用。VHDL语言作为标准的硬件描述语言,以其严格的语句及语法得到了广泛的应用。当我们设计一个大规模的数字系统时,不可能像设计中小规模数字系统一样,从门级电路开始设计,而是应该首先设计出相应的子模块,通过模块的累加从而达到设计电路的要求。并且由于VHDL语言是一种基于仿真平台的综合语言,所以用VHDL语言设计出来的成果方便了用户之间的交流,从而为设计者减少了压力并大大地缩短了一个产品的研发周期。 VHDL语言主要用于描述数字电路结构上,所涉及的电路一般有以下五个层次:系统级、算法级、寄存器传输级、门级和电路级。VHDL语言不仅有描述硬件电路性质的语言,更重要的是它的语句类似于计算机的C语言。VHDL语言的特点是将一个数字电路工程分成外部和内部两个部分,在对一个实体定义了外部界面后,一旦其内部开发完成后,其他的设计就会直接调用这个实体。VHDL语言可以支持自顶向下和基于库的设计方法,还支持同步电路、异步电路、FPGA以及其他随机电路的设计,但是VHDL语言不具备描述模拟电路的能力。2.4 FPGA开发流程现代集成电路设计的主要方式是基于硬件描述语言VHDL,经过综合布线与布局,下载到FPGA中进行软件合法性测试,从而实现了基本的门电路,比如与门、或门、与非门等,更加复杂的译码器也可以得到。大多数的FPGA包含触发器,是一种记忆元件,或是一种记忆块。FPGA基于逻辑单元阵列LCA(Logic Cell Array),内部集成配置逻辑模块CLB、输入输出模块IOB和内部连线三个部分。FPGA是可编程器件,相比之前的PAL或者GAL而言,FPGA的内部结构做了很大的改动。FPGA实现组合逻辑的方法是利用查表法,每个表端指向一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间可以利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。FPGA作为一种可编程逻辑器件的出现不是偶然的,而是可编程逻辑器件发展的必然结果,FPGA的出现同时也促进了可编程逻辑的发展。上个世纪60年代,FPGA得到了大力发展,用FPGA设计的数字系统完全颠覆了以往的设计理念,用它设计的电路工作的可靠性非常高。FPGA内部的逻辑块可以被人为的连接,就像芯片里集成了一块电路实验板一样。成品的FPGA可以根据人们的意愿改变,所以FPGA具有强大的可编写功能。FPGA虽说是专用集成电路的一部分,但是它要比专用集成电路慢,想要实现同样的功能,要比专用集成电路占用的电路面积要小很多。FPGA也有很多优点,比如从设计到成品的时间非常短,自带的程序可擦除再覆盖,具有良好的可执行性。FPGA的设计流程一般是顶层设计、模块设计、编译仿真和现场调试。可编程逻辑器件的设计过程是利用EDA开发软件和编程工具对器件进行开发的过程。可编程逻辑器件的一般设计流程如图2-3所示,包括设计准备,设计输入,功能仿真,设计处理,时序仿真和器件编程及测试等七个步骤。图2-3 可编程逻辑器件的一般设计流程a) 设计准备。设计一个系统我们首先要做的就是要进行方案论证,然后选择系统所需的元器件。根据设计的难易程度,比如系统达到的功能或是复杂程度、工作的可靠性以及综合布线等进行考量,选择好我们的方案。一般而言,设计系统我们采用的是自上而下的方法。b) 设计输入。在确定好设计的要求后将电路以VHDL语言的形式表达出来,下载到计算机中,这就是设计的输入阶段,设计输入通常有以下几种形式:原理图输入方式。设计描述方式最直接的一种方法就是原理图,软件系统中的元件库可以调用元件,然后再画出原理图。这对从业人员的要求就很高,需要掌握很多的专业方面知识。原理图的主要优点就是可以方便地仿真,偏于设计人员观察信号,并作出相应的电路原理图调整。但也有缺点,就是需要人为地进行改动,从而大大降低了效率。硬件描述语言输入方式。硬件描述语言描述设计的方法是文本方式,它有两种,一种是普通硬件描述语言,另一种是行为描述语言。普通硬件描述语言有ABEL、CUR和LFM等,它们支持逻辑方程。行为描述语言是常用的顶级描述语言,主要有VHDL和VerilogHDL两个IEEE标准。其优点是:编程语言基于系统顶层原理图,设计人员利用逻辑验证确立方案的可行性;VHDL语言可移植性强,便于系统设计;逻辑描述和仿真功能强大,可以随意在输入库之间转换。波形输入方式。波形输入方式主要是用来建立和编辑波形设计文件,以及输入仿真向量和功能测试向量。c) 功能仿真。所谓功能仿真就是对电路的实现功能进行验证,仿真的结果并没有延时,仅验证电路功能。在开始仿真前,首先用VHDL语言编程,然后输入到波形编辑器中建立文件,仿真会产生一些信号脉冲,观察信号的变化与逻辑验证相比较,再做出一些修改。d) 设计处理。系统设计中的核心环节就是设计处理。编译软件将对设计输入文件进行逻辑化简、综合优化和适配,最后产生编程用的编程文件。设计处理过程如下:语法和设计规则检查;逻辑优化;配和分割;布局和布线。e) 时序仿真。另外一种带延时的仿真叫时序仿真,但是器件的延时取决于电路的布局与布线,因此在设计处理过程中,在对电路仿真前首先分析电路的时序和工作的可靠性,以及检查并消除冒险竞争等是很重要的。f) 编程测试。开始时序仿真后,编程就开始调用软件的数据。对FPGA来说,编程后产生了位数据库文件,然后自动完成编程数据下载到FPGA这一过程。在满足了编程所需的电压、时序和算法后,器件编程才能成功。一般的FPGA器件编程需要专门设计的编程器来完成,但是基于高速闪存的FPGA可以由可擦写的存储元件修改,这样就进行了编程测试。2.5 FPGA器件选型传统的可编辑器件存在着很多缺陷,因此导致了FPGA的诞生。FPGA(FieldProgrammable Gate Array)即现场可编程门阵列,属于大规模集成电路中的一种,同时也是一种半加工电路,克服了加工电路本身的缺陷,同时还增加了自身逻辑门电路的数量,并提高了工作效率。现代集成电路设计的主要方式是基于硬件描述语言VHDL,经过综合布局,下载到FPGA中进行软件合法性测试,从而实现了基本的门电路,比如与门、或门、与非门等,大多数的FPGA包含触发器,是一种记忆元件,或是一种记忆块。FPGA内部的逻辑块可以被人为的连接,就像芯片里集成了一块电路实验板一样。成品的FPGA可以根据人们的意愿改变,所以FPGA具有强大的可编写功能。FPGA虽说是专用集成电路的一部分,但是它要比专用集成电路慢,想要实现同样的功能,专用集成电路占用的电路面积要小很多。但是优点也有很多,比如从设计到成品的时间非常短,自带的程序可擦除再覆盖,具有良好的可执行性。FPGA技术设计的原理来自于基本的逻辑单元阵列组合,通过组合达到实现的功能。FPGA内部集成了很多的模块,有逻辑模块、控制模块和总线模块。FPGA能实现组合设计的原因是它内部集成了查表算法,从一个表端到另一个表端进行了特定的指向,最终指向D触发器的输入端,通过触发器的触发功能完成系统输入与输出接口的驱动,这样构成的功能模块实现的功能就很强大了,既可以实现功能仿真又可以实现时序仿真,模块与模块之间的连接通过可靠的金属线。FPGA的工作原理是通过内置的模块编译来实现的,存储单元的大小决定了电路实现功能的复杂程度,由于编译软件的灵活性,FPGA受到了很多用户的欢迎。整个系统设计的最重要部分就是FPGA的选型,选型应该根据很多因素来决定,型号如果选择不好就会对整个设计系统的运行不利,因此,合理的选型可以节省了设计时间,优化了设计结构。本次设计选用的FPGA芯片是Altera公司的Cyclone系列的EP2C35F672C8。该芯片拥有的逻辑单元多达33216个,并且自带484K片内RAM,可以很好的完成本设计任务,其余的资源可供后期开发应用。3. HDB3编解码原理3.1 基本码型简介在用HDB3码设计编解码器设计之前要首先了解传输信号的基本码型,所以首先介绍NRZ码、AMI码和HDB3码。NRZ码的全称是Non-Return to Zero,NRZ码的编码规则如下:信道传输来的信号的1是有脉冲的,而0是没有脉冲的,NRZ码的信号占空比是1。但是NRZ码的一个缺点就是含有太大的直流分量,而且频率主要集中在高频段。NRZ码分为单极性NRZ码和双极性NRZ码两种,单极性NRZ码表示一个信道时,二进制的1和0分别对应着基带信号的正电平和负电平,在整个信号的传输过程中,基带信号的电平的极性保持不变,如图3-1所示。图3-1 单极性NRZ码示意图在NRZ和双极性非归零编码过程中,二进制的1和0也分别对应着基带信号的正负电平脉冲,如图3-2所示。双极性非归零NRZ吗的特点是滤去了直流分量、电压门槛低、工作频率稳定,因此在传输信号时的抗干扰性能强,甚至在铺设电缆时可以不用铺设屏蔽线就能直接传输,双极性的NRZ码如图3-2所示。图3-2 双极性NRZ码示意图现在一般使用双极性归零码也就是AMI码来进行信号的传输,下面介绍AMI码。AMI码传输的是交替的信号,根据传输代码中出现0或者1来进行编码。当代码中传输的是0信号时,传输码仍然为0保持不变,而当代码中传输的是1信号时则变为+1、1这样极性相互交替的脉冲。AMI码并没有直流成分信号,且信号基本为低频信号,在上述过程进行后,这样在信道传输的过程中信号不容易失真,保证了传输的可靠性。AMI码优点在于编码电路相对比较简单,误码状况很容易观察出来,但是没有对长的连串0进行判断,过长的0序列也会造成对另一端的解码工作的影响。但是AMI的缺点就是提取定时信号比较困难,可能在传输过程中出现3个及3个以上的长连0数据串,图3-3是AMI码的示意图。图3-3 AMI码示意图HDB3码之所以被称为三阶高密度双极性码时因为它在传统AMI码上做了很大的改进,从而得到了一种新型的NRZ码,也就是单极性归零码。数据在传输过程中没有出现4个及4个以上含0字符的时,此时HDB3码就是AMI码,也就是替代了原先的马克反演码,是一种正负交替的信号。当信号传输过程中出现四个以上或含0的四个字符,首先对字符按照AMI编码规则进行编码,然后再进行以下的操作,最后的一位0将由破坏性脉冲信号V码的正负性来替换,但是考虑到AMI码正负性的交替,只要保证其正负交替的极性与原来非0的极性相同即可。同时,两个相邻的V码的标志交替变换极性,以确保代码没有直流组件。在上述过程进行开始后,两个相邻的V码为了严格保证没有直流组件,其极性需要正负交替。在本次设计中,插入V码后的数据串被称为破坏性序列。当V码和相邻V码间的0的个数是奇数的时候,最终编译产生的便是我们想要的HDB3编码。从另一个方面说,在上述过程进行后,破坏性序列的首位0应该被插B信号的正负信号所取代,至于B码的正负极性判定就要用到前面的非0信号来判定,它与非0信号之间应该是相反的,而且非0信号紧挨着V码,这样就完成了整个编码的工作,它的转换步骤见表3-1。表3-1 HDB3编码的格式表二进制序列 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1AMI码 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1编码的第一步 1 1 1 0 0 0 V 1 0 0 0 V 0 0 0 V 1编码的第二步 1 1 1 0 0 0 V 1 0 0 0 V B 0 0 V 1设定信息码为0000 0110 0001 0000,那么对应的NRZ码、AMI码、HDB3码的波形如图3-4所示。图3-4 NRZ、AMI、HDB3码波形图由图3-4我们可以知道,不管是传统的AMI码还是改进的HDB3码,它们都是连续的信号,没有离散,信号对应着基本的NRZ波形,通过编译工作,NRZ码就可以进行直接的传输。在设计过程中,本文将原始信号转换为AMI码,然后再转换成HDB3码,当AMI码中不出现4连0信号时,此时HDB3码就是AMI码,但是只要出现4连0码,HDB3码就需要重新进行编码了。3.2 HDB3码的编解码规则a) HDB3码的编码规则:在传输信号的接收端所接受到的HDB3码并不能直接使用,还要将其再还原成AMI码才能使用。AMI在传输过程中不会改变0的极性,但是会改变1的极性,使得1的极性正负交替,在把AMI码变换为HDB3码的过程中就要考虑AMI中的4连0情况了,当AMI中没有4连0时,此时的HDB3码就是AMI码,但是AMI中有了4连0时,此时就需要将连0数据串的最后一位0替换成V码的正负极性信号,用V和V来表示。然后对比观察两个V符号出现的位置,记录下这个位置,数位置之间的非0符号的个数,如果数出来的非0个数是整数个的话就需要将出现V符号位置的前一个非0符号的首位0改成+B或者B字母,此时根据前面非0信号的极性来判定B的极性,简单的说,B的极性与前面的非0信号极性相反。HDB3码的基带信号含有很少的低频率,并且无直流要素,为了提取同步信号信息,设计考虑的只是在连0数据串只有3个的情况下的信号传输。综上所述归纳总结HDB3码的特点:基带信号的所含的频率很低,并且滤去了直流要素;为了利于提取定时信息,连0串符号最多只有3个;编码规则相比较而言复杂,信号的传输可靠性提高。b) HDB3码的解码规则:从HDB3码的编码规则中可以推断出来,在HDB3码的每一个V码前面必须有一个与其极性相同的非0码。因此,解码器的工作原理如下:如果两个相邻的非零的HDB3码序列中的代码都是相同的极性,则第二个必须是V,那么就将其之前的所有三个代码转换成0000序列,然后把所有剩下的的 1序列转换成1序列,0序列仍然是0序列。与其他的解码器相比,这种设计实现的解码器最大的优点在于它有解码功能以及错误检测和纠正功能,当输入的HDB3码有一些错误时,它可以在解码之前先纠正它们。根据HDB3码的编码规则可知,HDB3码谱序列中的错误一定是以下三种情况之一造成的:同极性的两个相邻的非0码的个数超过2;相邻的0序列码的个数超过3;极性相同的两个相邻的非0代码间的0序列的个数小于2。当发生错误时,编码器将根据一定的原则首先纠正错误的代码,这个原则便是最大化修改后的每个解码步骤的结果中包含0的个数,考虑到NRZ序列码转换成为HDB3码并被传输的其中一个特点就是它包含很长的连续的0序列。其修改过程如下,当错误代码为0,首先要看它是否能够取代一个它之前的与第一个非0的代码相同的极性的非0代码。如果答案是否定的,那么取代它的极性相反的非0代码。当错误的代码是非0,首先要看它是否可以被0所取代。如果答案是否定的,然后由它取代极性相反的非0代码。关于这个设计提出来的修改建议中,这是所有可能中唯一的。当错误的HDB3码序列在这一原则的基础上纠正之后,解码结果将会有更多的0序列。经过更正的错误的代码,它会被立刻解码。当输入HDB3码没有错误,它就会被直接解码。4. HDB3编解码器的设计与实现4.1 总体设计构思本研究的主要目的就是利用FPGA完成HDB3编解码器的设计,本课题主要研究的内容是利用FPGA芯片,选择合适的一种码型对信号进行编码,设计信号传输过程中的编码器和解码器,最终仿真验证成果。本次设计采用的是HDB3码对信号进行编码,这是由于HDB3码相比较于传统的AMI码而言可以打破4连“0”,在解码环节便于同步提取,HDB3码的的各项指标都基本符合设计的预期效果,比如在频率、频带上。图4-1为系统总体设计框图,表明了总体上设计需要的模块以及各个子模块之间的关系。图4-1 HDB3编解码框图HDB3编码器模块是将AMI码变换为HDB3码,通过相关的功能模块传送到HDB3解码器模块,在解码模块检测解码后的信号与AMI信号是否一致,一致则证明编解码器设计成功,否则就要重新设计。4.2 HDB3编码器的FPGA实现本次设计的基本内容就是在原始信号的基础上,利用HDB3编解码规则来实现系统所要实现的功能,由于加入了外围的模块电路,最终实现了传输信号的单双极性变换过程,HDB3编码模块如图4-2所示。图4-2 HDB3编码框图本次设计的HDB3编码器模块按照功能划分为三个组成部分:插“V”模块、插“B”模块以及极性变换模块。由于采用各个模块之间采用了频率一样的时钟上升沿信号,这就保证了各个模块工作的一致,也为仿真创造了一致的时序,设计的编码器为了清除异步信号还带有清零端口,下面分别介绍各个组成模块。4.2.1 插“V”模块建立好一个插“V”模块就是当传输信号中出现四连“0”的时候对其进行检测,从而得到其位置,把最后一个“0”替换为“V”模块中的V码,V码可以是上升沿有效的高电平,在其他原则条件下,就保证了传输信号的解码输出。为了后续工作的方便开展,我们用“11”来代表插入的信号,“01”来代表“1”,“00”来代表“0”。事实上,插“V”模块的设计并不难,我们首先检测传送到来的原始信源,如果信源中出现了0码,找出与之相邻的0码的个数,如果查到的个数不小于3个时,我们就用V码来替换原始信源。如果没有出现0码,原始信源就会继续传送,这就实现了插“V”模块的设计。在前面得设计中插“V”模块的设计用到了4位选择器,用来标出插“V”的具体位置。在程序的编译过程中,我们编写了VHDL语句来实现插“V”的编码功能。可以采用状态机的方式控制,为了简化这里使用流程来控制,将条件判断语句(if语句)嵌套在选择语句(case语句)中,这样控制来实现功能。(详细程序见附录一)当输入了一序列消息代码后,在完成插入“V”符号操作后,对比输入信息代码与插入“V”之间的关系如表4-1所示:表4-1 代码与插“V”关系表代码 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0插“V”后01 00 00 00 11 01 00 00 00 11 01 01 00 00 00 114.2.2 插“B”模块HDB3编解码时并无直流产生的原因就是信码极性的相互交替,在加入了插“V”模块后可能会对极性的交替产生影响,所以就引入了插“B”模块,插“B”模块可以很好的解决极性交替失常的问题。插“B”模块的工作原理是:当两个V码之间的非“0”符号的个数不是奇数时,就在含有非“0”数据串的第一位用“B”符号来替换,这就是插“B”模块的基本实现原理。上图中的插“B”模块最大的难点就是状态不确定因素如何解决,这里面有一个状态机的时序问题。其中还有如何确定是“1”,还是“V”的问题。解决这个难点的方法是:我们首先应把经过插“V”模块操作的信号移出寄存器的寄存地址,由于采用了一样的时钟频率,就保证了插“B”模块的顺利进行。此时再把“V”符号替换为“B”符号,本次设计采用的这两个独立模块要调用前面提到的数据库,D触发器的输出会有一个延迟,在后面的仿真图中我们可以清晰的看出来。在做好了各个独立模块之后,下面要做的就是在元件库中把各个模块连接起来,在原理图中把接口引出,定义实体作为元件库中的一个元件,然后通过VHDL语言编程下载到软件中跟原理图中的接口相连接,这样设计的元件库中的元件属于比较低的设计层次,还需要顶层原理的设计,已经设计好的子模块可以在后面的仿真中用到。VHDL语言引用的是实体元件,它可以很好地完成系统的顶层设计。在进行插“B”模块的设计之前,我们首先应该找出插“V”模块后的V码的具体位置,前面已经提到,“11”代表“V”的位置,“01”代表“1”,“00”代表“0”,双极性编码就可以准确找出V码的位置。按照这种方式,输入代码与插“B” 及插“V”后的信号关系如表4-2所示:表4-2 代码插入模块示意图代 码1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1插“V”后01 00 00 00 11 01 00 00 00 11 01 01 00 00 00 11 01 01插“B”后01 00 00 00 11 01 00 00 00 11 01 01 10 00 00 11 01 014.2.3 极性变换模块 根据上面的码型对比图可以知道,两个相邻位置的V符号在正负号之间不断进行极性交替变换,这种编码的方式同时也保证了V码的极性和首位不是0码的极性是相同的。我们用“11”、“10”和“01”来分别代替“V”、“B”和“1”,这就是双相码标识的方法。经过进一步的分析与讨论可以知道,V码的极性应与第一位非“0”信号的极性一致,B码的极性应与第一位非“0”信号的极性相反。因为我们用“11”来代替信号“V”码,从而可以很清晰地看出信号之间的区别,只要将V码进行适度的极性变换就可以让1码和B码一块地变换极性,上述过程就是HDB3的编码过程,这就实现了单极性到双极性的变换。在QUARTUS 软件中急需解决这样一个问题,就是这个软件本身并不能自动识别“1”,因为不管是功能仿真还是时序仿真都只能识别“1”和“0”。故在本次设计中采用两相码来解决这个问题,在软件设计中加入四选一数据选择开关完成两相码的定义,我们用“00”、“01”、“11”分别取代“0”、“+1”、“1”,这样QUARTUS 软件就可以自动地识别和转换了。根据以上的设计想法首先编写好源程序,在QUARTUS 软件中生成可执行的文件,下载到目标芯片中就可以看到仿真的结果。对比发现波形的变化并不太平稳,因此在选择器的地址编码上采用数组的校验方法,这样就得到了符合设计要求的波形。4.2.4 HDB3编码器的仿真在完成了电路结构的搭建并写好VHDL程序后,下一步就是在仿真软件中进行仿真了,仿真有着严格的思路,要遵循一定的步骤,在仿真之前还应该把搭建好的电路检查一下,并且对程序进行逐一检查。按照上述思路编写好程序,然后将其生成可下载文件,下载到FPGA中,但其输出结果发现是单极性双电平信号,并不是像“+1”、“1”、“0” 这样多种电平变化的波形,事实上,采用数据选择器实现四选一功能,从而可以得到如图4-3所示符合规则的“+1”、“1”、“0”在输出端输出变化的波形。图4-3 HDB3编码器仿真波形下面是波形分析:图4-3是编码器在仿真软件中得到的仿真波形,从图中我们可以清晰地看出来,主要有4路信号波形能反应出编码的仿真,分别是输入波形、输出波形、时钟上升沿、V码波形,传输信号经过了前面编码器设计的插“V”模块和补“B”模块后,得到的一个输出波形的时序仿真图,经过对比测取波形的偏移量后发现,输出波形相比较于输入波形来说,是有一定的延迟的,经过认真的对比后发现大约有5个周期的延迟,用时钟脉冲的上升沿来保证所有模块的工作频率一致,这就为查看波形提供了极大的方便。图中DATAIN表示码元输入,CLOCK表示时钟输入,DATAOUT表示插“V”后二进制数码输出,VCNT表示插“B”后的二进制数码输出,“000”表示“0”,“010”表示“1”,“110”表示“+1”,“011”“V”表示,“111”表示“+V”,“001”表示“B”,“101”表示“+B”。4.3 HDB3解码器的FPGA实现本次设计中解码器的设计利用了各个模块的组合来实现的,因为之前设计了编码器,所以有些模块是根据了编码模块来进行的解码设计,本次设计的解码器共有4大模块,分别是整流模块、V码检测模块、时钟提取模块和扣V模块,模块与模块之间通过严谨的逻辑关系连接起来构成了这样的一个解码器,设计中还用到了两个相加电路,用于V码的计算,图4-4是HDB3解码器框图。图4-4 HDB3解码框图正如图中所示的一样,HDB3码传输过来之后经过了两个整流电路,一个是正整流电路,一个是负整流电路,这样就分别整流成了带有正负极性的信号。接下来要经过“+V”码和“V”码的检测电路,这个电路的工作原理是:当信号中没有含V码脉冲时,这时信号脉冲“1”的极性会交替变换;当出现两个含“+1”或“1”信号时,我们根据前面的
展开阅读全文