AS - 001基于FPGA的HDB3编译码的建模与实现 - 图文

更新时间:2024-03-02 01:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于FPGA的HDB3编译码的建模与实现

吴英发

(吉首大学物理科学与信息工程学院,湖南 吉首 416000)

摘 要

本文以FPGA为硬件平台,基于EDA工具QUARTUSⅡ为软件平台上对HDB3编/译码进行实现。由于在EDA的软件平台QUARTUSⅡ上不能处理双极性的信号,因此对HDB3码的编/译码的实现分为:软件部分和硬件部分。软件部分是基于QUARTUSⅡ的平台上对输入的码元进行编码和译码,通过系统仿真,验证了HDB3码的编译码的正确性;硬件部分采用CD74HC4052双四选一的数模选择器实现单极性到双极性的转换;采用AD790和SE5539实现双极性到单极性的转换。最后,通过仿真,验证了方案的正确性。

关键词:HDB3;建模;VHDL;编/译码;QUARTUSⅡ

The Modeling and Realization of the HDB3 Encoding and

Decoding Based on FPGA

Wu Yingfa

(College of Physics Science and Information Engineering,Jishou University,Jishou,Hunan 416000)

Abstract

The HDB3 encoding and decoding are realized based on taking FPGA as hardware platform and taking QUARTUSⅡ,a kind of EDA tool,as the software platform. Because QUARTUSⅡ can not deal with the bipolar of signal,the realization of HDB3’s encoding/decoding function is divided into two parts: software and hardware part. In the software part: the encoding/decoding of HDB3 are realized based on QUARTUSⅡ, and the simulation result that the realization is correct. In the hardware part: the CD74HC4052 are used to realize unipolar /bipolar transformation, at the same time, the AD790 and SE5539 are used to realize bipolar/unipolar transformation. At last, the efficiency of the above method is proved by the simulation results.

Key words: HDB3;Modeling;VHDL;Encoding/Decoding;QUARTUSⅡ

I

目 录

第一章 绪 论 ······················································································································ 1 第二章 EDA辅助设计工具的介绍 ·················································································· 3 2.1 FPGA的介绍 ············································································································· 3 2.1.1 PLD的介绍 ······································································································· 3 2.1.2 FPGA的系统介绍 ···························································································· 3 2.2 VHDL语言和QUARTUSⅡ ···················································································· 4 2.2.1 VHDL语言 ········································································································ 4 2.2.2 EDA工具QUARTUSⅡ ··················································································· 5 第三章 HDB3码编码器的建模与实现 ············································································ 6 3.1 HDB3码的编码规则 ································································································· 6 3.2 基于VHDL的编码器的建模及实现 ···································································· 6 3.2.1 编码器的VHDL建模及难点分析 ································································· 7 3.2.2 基于VHDL编码器的实现 ············································································· 7 3.3编码中单/双极性转换的实现 ················································································ 12 3.3.1单/双极性转换的流程图 ··············································································· 12 3.3.2单/双极性变换的VHDL实现 ······································································ 14 3.3.3单/双极性变换的硬件实现 ··········································································· 15 3.4 HDB3码编码器的波形仿真及分析 ······································································ 17 3.5 小结 ························································································································· 18 第四章 HDB3码译码器的建模与实现 ·········································································· 19 4.1 HDB3码的译码规则及建模 ·················································································· 19 4.2 译码中双/单极性的实现 ······················································································· 19 4.3 基于VHDL译码器的实现 ···················································································· 20 4.3.1基于VHDL译码器的流程图 ········································································ 20 4.3.2 HDB3码译码器的程序设计 ·········································································· 20 4.4 HDB3码译码器的波形仿真及分析 ······································································ 23 4.5 小结 ························································································································· 24 第五章 结束语 ·················································································································· 26 参考文献 ···························································································································· 26 致谢 ···································································································································· 26 附录一 ································································································································ 29 附录二 ································································································································ 34

基于FPGA的HDB3编译码的建模与实现 绪论

第一章 绪 论

数字基带信号的传输是数字通信系统的重要组成部分之一。特别是HDB3(High Density Bipolar-3 Coding,三阶高密度双极性码)码的使用,其不但保持AMI(Alternation mark Inversion,交替反转码)码的优点外,更使连0串的个数减到至多0个的优点,而且还克服了AMI码的关于可能出现长连0串而造成提取定时信号困难的缺点。基于上述的特点HDB3码在通信传输领域应用很广泛,因此其作为CCITT推荐使用的码型之一[1]。

本毕业设计是采用EDA工具实现HDB3码的仿真和校验,从而使系统的实现具有很大的灵活性。EDA(Electronics Design Automation,电子设计自动化)就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件方式设计的电子系统到硬件系统的编辑逻辑、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至对于特定芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统[2.4]。

本毕业设计的主要工作是HDB3码的编译码的建模与实现,对于HDB3编译码模块,一般以硬件的方式来实现的。但它具有产品更新慢、设计灵活性差、不可重配置及现场升级性能缺乏等缺点。因此拟采用可编程逻辑电路来实现。可编程逻辑电路是EDA的一个重要技术基础,主要包括FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)和CPLD(Complex Programmable Logic Devices,复杂可编程逻辑器件),它们具有丰富的可重配置逻辑资源,既包含有大量实现组合逻辑的资源;还包含有相当数量的触发器,因此采用EDA技术进行电子系统的设计有以下优点:

? 系统可现场编程,在线升级; ? 用软件的方式设计硬件;

? 整个系统可集成在一个芯片上,体积小、功耗低、可靠性高;

? 用软件方式设计的硬件系统的转换是由有关的开发软件自动完成,降低了系统设计的难度。

对于HDB3编译码器的实现,本毕业设计采用硬件描述语言VHDL来实现。用VHDL语言设计分别设计一个完善的HDB3码编码器和译码器。本设计是从HDB3原理出发,采用“从顶到底(TOP-DOWN)”设计方法,以EDA工具QUARTUSⅡ5.1为软件平台,输入HDB3的代码并对其进行编译、综合和仿真,经过功能测试、验证,最终实现基于FPGA的HDB3码的编码和译码功能。

本文对章节的安排如下:

第二章对FPGA、VHDL(Very-High-Speed Integrated Circuit Hardware Description

1

基于FPGA的HDB3编译码的建模与实现 绪论

Language,甚高速硬件描述性语言)和QUARTUSⅡ等进行简介,并选定FPGA和QUARTUSⅡ作为系统的开发环境。

第三章介绍HDB3码的编码原理,并基于FPGA对HDB3码编码部分进行建模及实现,通过波形仿真,校验编码模块的正确性。

第四章介绍HDB3码的译码原理,并基于FPGA对HDB3码译码部分进行建模及实现,通过波形仿真,校验译码模块的正确性。

第五章对全文进行总结。

2

基于FPGA的HDB3编译码的建模与实现 EDA辅助设计工具的介绍

第二章 EDA辅助设计工具的介绍

2.1 FPGA的介绍

2.1.1 PLD的介绍[2.4]

PLD(Programmable Logic Devices,可编程逻辑器件)是一种由用户编程以实现某种逻辑功能的新型逻辑器件。它诞生于20世纪70年代,在20世纪80年代以后,随着集成电路技术和计算机技术的发展而迅速发展。自问世以来,PLD经历了从PROM(Programmable Read-Only Memory,可编程序的只读存储器)、PLA(Programmable Logic Array,可编程序逻辑阵列)、PAL(Programmable Array Logic,可编程阵列逻辑)、GAL(Generic Array Logic,通用阵列逻辑)到FPGA、ispLSI(in system programmable Large Scale Integration,在系统可编程大规模集成电路)等高密度PLD的发展过程。在此期间,PLD的集成度、速度不断提高,功能不断增强,结构趋于更合理,使用起来灵活方便。PLD的出现,打破了由中小规模通用型集成电路和大规模专用集成电路;垄断的局面。与中小型规模通用型集成电路相比,用PLD实现数字系统,有集成度高、速度快、功耗小、可靠性高等优点。与大规模专用集成电路相比,用PLD实现数字系统,有研制周期短、先期投资少、无风险、修改逻辑设计方便、小批量生产成本低等优势。

最早的可编程逻辑器件出现在20世纪70年代初,主要是PROM和PAL。随后出现了PAL、GAL、EPLD(Erasable Programmable Logic Devices,可擦除可编程逻辑器件)和CPLD、PFGA、ispLSI。 2.1.2 FPGA的系统介绍

FPGA是20世纪80年代中期,美国Altera公司推出一种现场可编程门阵列,其结构主要分为三部分:可编程逻辑单元,可编程输入输出单元和可编程连线部分。FPGA器件采用逻辑单元阵列结构和静态随机存取存储器工艺,设计灵活,集成度高,可利用计算机辅助设计,绘出实现用户逻辑原理图、编辑布尔方程或用硬件描述语言等方式设计输入;然后经一系列转换程序、自动布局布线、模拟仿真的过程;最后生成配置FPGA器件的数据文件,对FPGA器件初始化。这样实现了满足用户要求的专用集成电路,真正达到了用户自行设计、自行研制和自行生产集成电路的目的。

概括来说,FPGA器件具有下列优点:高密度、高效率、系列化、标准化、小型化、多功能、低功耗、低成本、设计灵活方便,可无限次反复编程,并可现场

3

基于FPGA的HDB3编译码的建模与实现 EDA辅助设计工具的介绍

模拟调试验证。使得使用FPGA器件,一般可在几天到几周内完成一个电子系统的设计和制作,可以缩短研制周期,达到快速上市和进一步降低成本要求。 基于上述的优点,本毕业设计采用FPGA芯片作为平台,这样可以把整个系统下载到一块芯片之中,实现了所谓的片上系统,从而大大缩小了体积,便于工程人员的管理和屏蔽外界干扰。

2.2 VHDL语言和QUARTUSⅡ

2.2.1 VHDL语言[2]

常用的硬件描述性语言有VHDL、Verilog和ABEL语言。VHDL语言起源于美国国防部的VHSIC,VHDL是一种高级描述语言,适用于行为级和RTL级的描述相对与Verilog语言和ABEL语言这些较低一级的适合描述门级电路的描述性语言而言,其具有以下的优点: ⒈设计方法灵活、支持广泛

VHDL语言可以支持自顶至下(Top-Down)和基于库(Library-Based)的设计方

法,而且还支持同步电路、异步电路、FPGA以及其他随机电路的设计。其范围之广是其它方法所不能比拟的。目前大多数EDA工具几乎都支持VHDL语言。这给VHDL语言进一步推广和应用创造了良好的环境。 ⒉系统硬件描述能力强

VHDL语言具有多层次描述系统硬件功能的能力,可以从系统的框图直到门

级电路。另外,高层次的行为描述可以与低层次的RTL描述和结构描述混合使用。其他HDL语言如UDL/I、Verilog等对系统级的功能描述能力较弱。

⒊VHDL语言描述与工艺不发生关系

在用VHDL语言设计系统硬件时,没有嵌入工艺信息。采用VHDL语言的设

计,当门级或门级以上层次的描述通过仿真检验以后,再用相应的工具将设计映射成不同的工艺(如MOS, CMOS等)。这样,在工艺变更时,只要改变相应的映射工具就行了。由此可见,修改电路和改变工艺之间的相关性较小。

⒋VHDL语言标准、规范,易于共享和复用

由于VHDL语言已成为一种IEEE的工业标准,这样,设计成果便于复用和

交流,反过来也更进一步推动VHDL语言的推广及完善。

基于上述的特点,可知VHDL语言可读性好,又能被计算机识别。VHDL语言中设计实体、程序包、设计库,为设计人员重复利用已有的设计提供了诸多技术手段。可重复利用他人的IP(Intelligence Property)模块和软核(Soft Core)也是VHDL的另一特色许多设计不必每次都从头再来,只要在更高层次上把IP模块组合起来,就能达到事半功倍的效果。这样,设计人员自行开发的IP模块在集成电

4

基于FPGA的HDB3编译码的建模与实现 EDA辅助设计工具的介绍

路设计中占有重要的地位。因此本毕业设计采用VHDL语言设计一个完善的HDB3码编、译码器。

2.2.2 EDA工具QUARTUSⅡ[2.5]

QUARTUSⅡ软件是美国Altera公司为SOPC(System on a Programmable Chip,系统级可编程芯片) 提供最全面的设计平台。它具有比起其他的编译软件,具有以下的优点:

⒈开放的界面

QUARTUS II软件可与其它EDA厂家的设计输入、综合、验证工具相连接。设计人员可使用ALTERA或标准EDA设计输入工具建立电路设计,使用QUARTUSII编译器(Compiler)对ALTERA的器件进行编译,然后使用ALTERA或其他标准EDA验证工具进行验证。目前,QUARTUS II支持与Cadence、Exemplarlogic、Mentor Graphics、 Synopsys、Synplicity、Viewlogic等公司的EDA工具接口。

⒉与结构无关

QUARTUS II系统的核心——编译器(Compiler)支持ALTERA公司的FLEX10K,FLEX8000, FLEX6000, MAX9000, MAX7000, MAX5000和Classic等可编程逻辑器件系列,提供了业界,除了MAXPLUS II以外惟一真正与结构无关的可编程逻辑设计环境。QUARTUSⅡ的编译器还提供了强大的逻辑综合与优化功能,使设计人员能比较容易地将其设计集成到可编程逻辑器件中。 ⒊多平台

QUARTUS II软件可在多种PC机和工作站的操作系统中运行。 ⒋完全集成化

QUARTUS II的设计输入、处理、验证、器件编程等功能全部集成在统一的开发环境下,可以使用户进行动态调试,加快开发进程。 ⒌丰富的设计库

QUARTUS II提供丰富的库单元供设计者使用,其中包括74系列的全部器件和多种特殊的逻辑宏功能(Macro-Function)以及新型的参数——化兆功能(Mega-Function) 。

⒍接受高级描述语言

QUARTUS II接受多种硬件描述语言,包括VHDL、AHDL、C、C++等语言。 ⒎良好的人机界面

QUARTUSⅡ具有比MAXPLUSⅡ更加人性化的人机界面,方便工程人员的操作。基于上述的特点,本文采用QUARTUSⅡ软件对HDB3编、译码的仿真验证。

5

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

第三章 HDB3码编码器的建模与实现

3.1 HDB3码的编码规则

在现实的通信系统中,为了满足基带传输的要求,单极性脉冲序列必须经过

适当的基带编码,以保证传输码型中无直流分量,有一定的自检能力和适应不同信源的统计特性的能力。在基带传输中,常用的码型有AMI码、HDB3码、4B/3T码、CMI码、以及双相码等。其中,AMI码是将输入单极性波形的所有正脉冲变为适合于在信道传输的正负极性交替的脉冲,而HDB3码则是在AMI码基础上改进的一种双极性归零码,它除具有AMI码功率谱中无直流分量,可进行差错自检等优点外,还克服了AMI码当信息中出现连“0” 码时定时提取困难的缺点,同时HDB3码频谱能量主要集中在基波频率以下,占用频带较窄,因此被广泛用作PCM(Pulse Code Modulation,脉冲编码调制)线路传输码型,因此要了解HDB3码的编码规则,首先要知道AMI码的构成规则,AMI码就是把单极性脉冲序列中相邻的“1”码(即正脉冲)变为极性交替的正、负脉冲。将“0”码保持不变,把“1”码变为+1、-1交替的脉冲。如:

信息序列:10011010111100001 AMI码:+100-1+10-10+1-1+1-10000+1

HDB3码是一种AMI码的改进型,它的编码过程为:

①没有4个或4个连“0”串时,HDB3编码规律与AMI码相同,即“1”码变为“+1”、 “-1”交替脉冲。

②当代码序列中出现4个或4个以上连“0”串时,则将每4个连“0”小段即“0000”的第4个0变换成与前一非“0”符号(+1或-1)同极性的符号,用破坏符号V表示(即+1记为+V,-1记为-V)。

③为了使附加V符号后的序列不破坏“极性交替反转”造成的无直流特性,还必须保证相邻V符号也应极性交替。这一点,当相邻V符号之间有奇数个非0符号时,则是能得到保证,当有偶数个非0符号时,则就得不到保证,这时再将该小段的第一个0变换成+B或-B,B符号的极性与前一非0符号的极性相反,并让后面的非0符号从V符号开始再交替变换[2.4]。

3.2 基于VHDL的编码器的建模及实现

6

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

3.2.1 编码器的VHDL建模及难点分析

从编码规则来分析,HDB3码的编码器的设计的难点是在于如何判决是否应该添加符号“B”,因为这涉及到有现在事件的状态决定过去事件状态的问题。按照实时信号处理的理论,这是无法实现的。但是在实际的电路中,可以考虑用寄存器的方法,首先把信码寄存在寄存器里,同时设置一个计数器计算两个“V”之间“1”的个数,经过4个码元时间后,有一个判偶电路来给寄存器发送是否添加符号“B”的判决信号,从而实现添加符号“B”功能。

为了减少资源的消耗和电路的复杂度,在对信号进行HDB3码编码时,先依据HDB3码的编码规则进行添加破坏符号“V”然后进行添加符号“B”操作,最后才进行单极性信号变成双极性信号的转换。HDB3码的编码模型如图3.1所示。

图 3.1 HDB3码编码器模型

如图所示:整个HDB3码的编码器包括3个功能部分:添加破坏符号“V”、添加符号“B”和单极性码转变成双极性码,各部分之间采用同步时钟作用,并且带有一个异步的复位(清零)端口。

不过,信号处理的顺序不能像编码规则那样:首先把代码串变换成为AMI码,完成添加破坏符号“V”、添加符号“B”工作之后,其后的“+1”和“-1”的极性还要依据编码规则的规定变换。这样做需要大量的寄存器,同时电路结构也变得复杂。因此本设计在此处把信号处理的顺序变换一下:首先完成添加破坏符号“V”工作,接着执行添加符号“B”功能,最后实现单极性变双极性的信号输出。这样做的好处是输入进来的信号和添加破坏符号“V”、添加符号“B”功能电路中处理的信号都是单极性信号,且需要的寄存器的数目可以很少。

另外,如何准备识别电路中的“1”、“V”和“B”,这也是一个难点,因为“V”和“B”符号是人为标识的符号,但在电路中最终的表示形式还是逻辑电平“1”,同时QUARTUSⅡ软件也不能像HDB3码的编码规则那样把代码串变换成AMI码,这是因为QUARTUSⅡ软件不能处理带负号的信号,因此在软件中本设计还是利用双相码来表示。双相码的编码规则如下:对每个二进制代码分别利用两个不同相位的二进制代码去取代。例如: 信息序列: 110010 双相码: 101001011001

7

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

通过字节替代方法解决了识别“1”、“V”和“B”的问题。 3.2.2 基于VHDL编码器的实现 1. 添加破坏符号“V”的实现

添加破坏符号“V”模块的功能实际上就是对消息代码里的四个连0串的检测,

即当出现四个连0串的时候,把第四个“0”变换成符号“V”(“V”可以是逻辑电平“1”),而在其他的情况下,则保持消息代码的原样输出,同时为了区别代码“1”、 “V”和“0”,在添加破坏符号“V”时,用“11”标识符号“V”,用“01”标识符号“1”,用“00”标识符号“0”。因此,添加破坏符号“V”的设计思想如下:首先判断输入的代码是什么,如果输入的符号是“0”码,则接着判断这是第几个“0”码,如果是第四个“0”码,则把这个“0”码变换成“V”码。在其他的情况下,让原码照常输出。程序流程图如图3.2所示:

其中:

①COUNT0是作为连0的计数器。

② COUNT0_S是四个连“0”状态寄存器。1表示遇到四个连0,0表示未遇到四个连0的状态

③在本程序中用“01”标识“1”。 ④在本程序中用“00”标识“0”。 ⑤在本程序中用“11”标识“V”。

图3.2 添加破坏符号“V”符号流程图

根据图3.2的思想,完成HDB3码编码的程序实现添加破坏符号“V”功能的程序,以下给出实现添加破坏符号“V”功能的关键代码,具体程序见附录一。

8

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

ADD_V: PROCESS(CLK,CLR) --添加破坏符号V程序 BEGIN

IF(CLK'EVENT AND CLK='1')THEN IF(CLR='1')THEN CODEOUTV<=\ COUNT0<=0; ELSE

CASE CODEIN IS

WHEN '1'=>CODEOUTV<=\ --01表示1 COUNT0<=0; WHEN '0'=>

IF(COUNT0=3)THEN COUNT0_S<='1'; CODEOUTV<=\ COUNT0<=0; ???????????? END PROCESS ADD_V; S0(0)<=CODEOUTV(0); S1(0)<=CODEOUTV(1);

此添加破坏符号“V”功能程序设计了一个计数器COUNT0,用来作为应添加破坏符号“V”符号的标志。例如在程序代码中当CODEIN=1表示输入的信号为“1”COUNT0不计数,代码输出为CODEOUTV<=“01”,当CODEIN=0时表示输入的代码为“0”,此时判断COUNT0的状态,如果为“3”,则COUNT0_S=1,CODEOUTV=11,计“0”计数器COUNT0清0,即代码:COUNT0_S<='1'; CODEOUTV<=“11”;COUNT0<=0;这都是在进程PROCESS中,通过条件控制语句CASE完成添加破坏符号“V”功能。

假设输入某信息序列,根据设计思想,输入代码一添加破坏符号“V”后的关系如下:

信息序列: 10000100001100011

添加破坏符号V后:0100000011010000001101010000000101

2.添加符号“B”的实现

根据HDB3码的编码规则可知:添加破坏符号“V”模块的功能是为了保证

9

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

附加“V”符号后的序列不破坏“极性交替反转”造成的无直流特性,即当相邻“V”符号之间有偶数个非0符号的时候,把后一小段的第一个“0”变换成一个非破坏符号——“B”符号。如图3.3所示。

其中:

① FIRSTV作为前面是否出现“11”即符号“V”的标志位,其中0表示前面没有出现V,1表示前面已经出现过符号V。

② COUNT1作为记非0符号的奇偶数,其中0表示为偶数,1表示为奇数。 ③ FIRST_1遇1状态寄存器,1表示前面遇到过1,0表示没有遇到过。 ④ 在本程序中用“10”来标识符号“B”。 ⑤ 在本程序中用“01”来标识符号“1”。 ⑥ 在本程序中用“00”来标识符号“0”。 ⑦ 在本程序中用“11”来标识符号“V”。 代码 标识符

0 00 1 01 V 11 B 10

图3.3 添加符号“B”符号流程图

如图3.3所示可知,此添加符号“B”模块涉及到一个有现在事件的状态决定过去事件状态的问题,其次还有如何确定是“1”,还是“V”的问题,是本毕业设计所遇到的第一个难点。本程序处理难点的思路是:先把码元(经过添加破坏符号“V”处理过的)放入一个四位的移位寄存器中,在同步脉冲(时钟信号)

10

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

的作用下,同时进行是否添加符号“B”的判决,等到码元从移位寄存器里出来的时候,就可以决定是应该变换成“B”符号,还是照原码输出。因此,在程序的结构中进行元件声明(Component Declaration),调用库里的D触发来实现延迟作用。为了使程序的流程更加清晰,用了四个元件例化语句(Component Instantiation)——DFFX:DFF PORT MAP(),来说明信号的流向。

所谓元件例化就是引入一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定的端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。在此程序中,当前的设计实体相当于一个较大的电路系统,所定义的例化元件相当于一个要插在这个电路系统板上的芯片,而当前设计实体中所指定的端口则相当于这块电路板准备接收此芯片的一个插座。元件例化是使VHDL设计实体构成自上而下层次化设计的一种重要途径。 以下给出添加符号“B”模块的部分程序,完整的程序见附录一。

DS11: DFF PORT MAP(S1(0),CLK,S1(1)); DS01: DFF PORT MAP(S0(0),CLK,S0(1)); DS12: DFF PORT MAP(S1(1),CLK,S1(2)); DS02: DFF PORT MAP(S0(1),CLK,S0(2)); DS13: DFF PORT MAP(S1(2),CLK,S1(3));

DS03: DFF PORT MAP(S0(2),CLK,S0(3)); --调元件DFF,即D触发器 BCLK: CLKB<=NOT CLK; ADD_B: PROCESS(CLKB) BEGIN

IF(CLKB'EVENT AND CLKB='1')THEN IF(CODEOUTV=\ ?????????? ELSIF(CODEOUTV=\

IF(COUNT1=0)THEN

FIRST_1<='1';

COUNT1<=1; S1(4)<=S1(3); S0(4)<=S0(3); ELSE

S1(4)<=S1(3);

S0(4)<=S0(3); END IF;

11

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

ELSE

COUNT1<=COUNT1; S1(4)<=S1(3); S0(4)<=S0(3); END IF; END IF;

END PROCESS ADD_B; CODEOUTB<=S1(4)&S0(4);

在此添加“B”的功能模块中,例如程序代码为:

(CODEOUTV=\

IF(COUNT1=0)THEN

FIRST_1<='1';

COUNT1<=1; S1(4)<=S1(3);

S0(4)<=S0(3);

表示当输入的代码CODEOUTV=01即1时,判断计“1”计数器COUNT1的状态,当为0时,即V之间的非0符号为偶数时,对遇一寄存器FIRST_1赋1,计“1”计数器COUNT1赋1,移位寄存器里的数值分别向高位移一位。

3.3编码中单/双极性转换的实现

3.3.1单/双极性转换的流程图

根据HDB3码的编码规则,可知 “V”的极性是正负交替变换的,而余下的“1”和“B”本毕业设计把其看成为一体且是正负交替变换的,同时满足“V”的极性与前面的非零码极性一致。由此本毕业设计就把“1”和“B”看成一组,而“V”单独作为一组来做正负交替变换。同时,从3.2.2节中的第2小节的代码中可知,“1”、 “V”,“B”已经分别用双相码“01”,“11”,“10”标识,所以对“1”,“V”, “B”的正负交替变换很容易实现。由此可得到程序流程图如图3.4、图3.5、图3.6所示。

12

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

图3.4 单双极性变换控制的程序流程图—“01”和“10”部分

图3.5 单双极性变换控制的程序流程图—“11”部分

图3.6单双极性变换控制的程序流程图--“00”部分

13

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

其中在图中:①以01表示+1。②以11表示-1。③以00表示0。 3.3.2单/双极性变换的VHDL实现

以下是部分实现单双极性变换控制功能的关键代码,具体程序见附录一。

IF(CLK'EVENT AND CLK='1')THEN

IF((CODEOUTB=\ --1/B IF(FLAGOB=0)THEN IF(FLAGOV=0)THEN CODEOUT<=\ FLAGOB<=1;

ELSIF(FLAGOV=1)THEN CODEOUT<=\ FLAGOB<=2;

ELSIF(FLAGOV=2)THEN CODEOUT<=\ END IF;

ELSIF(FLAGOB=1)THEN CODEOUT<=\ FLAGOB<=2;

ELSIF(FLAGOB=2)THEN CODEOUT<=\

FLAGOB<=1; --判01/10

END IF;

ELSIF(CODEOUTB=\ IF(FLAGOV=0)THEN ???????????? ELSIF(FLAGOV=1)THEN ELSIF(FLAGOV=2)THEN CODEOUT<=\

FLAGOV<=1; --判V

--FLAGOV/FLAGOB:0表示还未遇到V/B,1表示遇到奇数个V/B,2表示遇到偶数个V/B ELSE

CODEOUT<=\ FLAGOB<=FLAGOB;

14

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

FLAGOV<=FLAGOV; END IF; END IF; END PROCESS OUTPUT;

END ARCHITECTURE RTL;

本单/双极性的变换,由于EDA软件不能处理双极性的数值,实际上是把单相码变换成双相码后再使用硬件电路来把其转换成双极性的信号,如本单/双极性变换的模块中,使用了FLAGOV,FLAGOB两个输出控制寄存器控制HDB3码的输出,其控制的方式——当FLAGOB/FLAGOV为0时表示还未遇到V/B,为1时表示遇到奇数个V/B,为2时表示遇到偶数个V/B,例如当代码为:

ELSIF(CODEOUTB=\ IF(FLAGOV=0)THEN IF(FLAGOB=0)THEN CODEOUT<=\ FLAGOV<=1;

表示输入的信号为11时,当FLAGOV=0和FLAGOB=0,即在前面的输入数据中均未遇到V或B,所以输出的代码为CODEOUTB=“11”,由于在3.2.2节中可知“11”表示破坏符号V,所以还要对FLAGOV赋值说明此处遇到符号V。 3.3.3单/双极性变换的硬件实现

由3.3.2分析可知,上述的程序下载到FPGA中最终的输出结果并不是“-1”,

“+1”,“0”的多电平变化波形,而是单极性双电平的信号。在本设计中采用的单双极性变换的芯片是双四选一数模选择器CD74HC4052。其中芯片的特性如下:

图3.7 CD74HC4052引脚图

15

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

表3.1 CD74HC4052的DA转换特性图

由表3.1得出把单极性转换成双极性的电路图,如图3.8所示:

U1-5R1711500 Ohm+5R21416500 Ohm109X1VDDVEEX3XYY3Y2Y1Y01334251HDB3_OUTCODEOUT0CODEOUT1ABX0EN1260CD74HC4052

图3.8 单双极性转换电路框图

其中CODEOUT0和CODEOUT1是来自FPGA芯片EPF10K20TC144-4输出的两个引脚,CODEOUT1为高位,CODEOUT0为低位。如图3.8所示,当输入CODEOUT0=0,CODEOUT1=0,选通X0,即把X0引脚上的输入电压通过引脚X输出;同理,当输入CODEOUT0=1,CODEOUT1=0,X输出为引脚X1上的电压;输入为CODEOUT0=1,CODEOUT1=1,X输出为引脚X3上的电压。

16

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

3.4 HDB3码编码器的波形仿真及分析

图3.9 输入全 “0”时编码输出

图3.10 输入全“1”时编码输出

图3.11 输入“000000000000001000000……”时编码输出

17

基于FPGA的HDB3编译码的建模与实现 HDB3码编码器的建模与实现

图3.12 输入“100001000011000011000010” 时编码输出

由仿真波形可以得出:

CODEIN: 00000000000000000000??

CODEOUT:0100000111000011010000011100001101000001?? CODEIN: 11111111111111111111??

CODEOUT:0111011101110111011101110111011101110111?? CODEIN: 00000000000001000000??

CODEOUT:01000001110000110100000100110000000110100?? CODEIN: 100001000011000011000010

CODEOUT:010000000111000000110111010000011101110000110100 从图3.9~图3.12可知,其输出的代码与根据HDB3码编码原理算出来的代码完全一致,从码元的输入到编码输出的延迟为913.2ms,满足实时通信对延迟的要求。同时从QUARTUSⅡ上可以看出,编码器系统占用了75个逻辑单元,逻辑单元的占用率为7%,利用了5个芯片引脚,引脚的占用率为5%,对于存储单元的占用率为0,由此可知,此编码器的方案可行,系统资源的占用率低,有利以后为系统进行升级优化。

3.5 小结

本章主要介绍了HDB3码编码的建模和实现的方法,并基于VHDL语言采用模块化的设计方法进行了实现,对于HDB3码的实现本章使用了三个模块:添加破坏点V模块,添加B模块,单/双极性变换模块,由于在EDA的平台上不能处理负信号的缘故,本文对HDB3码极性变换采用硬件电路来实现,取得了较好的效果。

对编码进行了仿真,以仿真结果来看编码过程是正确的。从实现的过程来看,基于EDA平台上采用模块化的设计的优点是在于工作的过程中,可以把编辑的代码下载到硬件平台上直接校验其正确性从而节省了系统的开发时间,同时采用模块化的设计便于查找出在编译系统是发生的错误,便于以后对系统进行升级优化。

18

基于FPGA的HDB3编译码的建模与实现 HDB3码译码器的建模与实现

第四章 HDB3码译码器的建模与实现

4.1 HDB3码的译码规则及建模

根据HDB3码的编码规则,V脉冲的极性必然和前面非0脉冲的极性一致。而当无V脉冲时,HDB3码的脉冲是“+1”和“-1”交替变换出现的。而当连续出现两个“+1”或“-1”时,若无误码时,则可知后一个一定是V脉冲。因而可从所接收的信码中找到V码,然后根据加取代节的原则,在V码前面的三位代码必然是取代码,在译码时,需要全部复原为四个连“0”。只要找到V码,不管V码前面两个码元是“0”码,还是3个“0”码,只要把它们一律清零,就完成了扣V和扣B的功能,进而得到原来的二元信码序列。

因此可实现HDB3码译码的模型如图4.1所示:

HDB3 双相码 NRZ 检测V和扣V扣B 双/单极性变换 图4.1 HDB3码译码器模型

如图4.1所示,HDB3码的译码器模型中,是由单双极性变换电路和V检测扣V扣B两个模块组成。单双极性变换电路实现代码的双单极性的变换,而扣V和扣B电路在时钟的控制下,完成扣B和扣V的 功能的。

由前面分析可知,EDA软件QUARTUSⅡ是不能在波形仿真中处理双/单极性变换的,因此,本文采用一个外部硬件电路来实现双/单极性的变换。

4.2 译码中双/单极性的实现

在本论文设计中,HDB3码的双单极性的变换是以AD790和SE5539为核心芯片组成的硬件电路;AD790是一种低功耗、低偏置电压双通道的电压比较器,还是一种高精度的电压比较器,AD790在双极性时的工作电压的范围是-16.5V~+16.5V。SE5539是一种高频率的集成运放电路。如图4.2所示,此双/单极性变换是由AD790和SE5539为核心来实现双单极性的变换,图中输入信号HDB3_IN来自编码模块的HDB3_OUT端口,由图4.2可知,其上半部分在未接反相器74LS04与后面的部分电路时,电路是一个双限比较器(窗口比较器),当+5>HDB3_IN>+1时输出为低电平,其余的情况输出全部为高电平,然后经过反相器输出,从而达到

19

基于FPGA的HDB3编译码的建模与实现 HDB3码译码器的建模与实现

检测出“+1”信号的目的,图的下半部分是一个高精度整流电路,当HDB3_IN>0或HDB3_IN=0时,必然使8引脚输出为低电平,从而导致D2截止D1导通,R10中的电流为0,则最终DEHDB3_OUT_H输出为0,同理,可以推出当HDB3_IN<0时,DEHDB3_OUT_H输出为1,达到检测“-1”的目的,整合电路,最终得到检测“+1”和“-1”的功能。由此可知当输入“+1”输出的是01,输入“-1”时输出的是10,输入“0”时输出的是00。

+5VC11K+5VR214+5V47KHDB3_IN+5VU2AD7903+1V1KR4+5V2C2R510 Ohm-5V1U3A274LS04D41N4148DEHDB3_OUT_L581436KR101-5VR536K141R6150 Ohm+5VD11N4007D3D28U4SE553911N40072DEHDB3_OUT_H1N41482103图4.2 译码的硬件实现部分

4.3 基于VHDL译码器的实现

4.3.1基于VHDL译码器的流程图

根据译码器的译码原理,可以得到实现译码的程序流程如图4.3所示。 根据图示可以看出,HDB3码的译码器比较的简单,在其程序模块中,只有计“+1”计数器COUNT01,计“-1”计数器COUNT10和一个5位的移位寄存器所组成。

4.3.2 HDB3码译码器的程序设计

依据图4.3可知,译码器的程序设计的难点是在于设计一个五位的移位寄存器,本程序中的移位寄存器是采用标准逻辑量来实现的,与前面的编码器是采用D

20

+2--+U1AD79030.1uF758R10.1uF7-5V-+

基于FPGA的HDB3编译码的建模与实现 HDB3码译码器的建模与实现

图4.3 HDB3码译码器程序流程图

触发器来实现的略有不同,现给出HDB3码译码器的部分代码,完整的代码请参见附录二。

PROCESS(CLK,CLR) BEGIN

IF(CLK'EVENT AND CLK='1')THEN IF(CLR='1')THEN COUNT01<=0; COUNT10<=0; REG0<='0'; REG1<='0'; REG2<='0'; REG3<='0'; REG4<='0'; ELSE

IF(HDB3_DATA=\ --+1

21

基于FPGA的HDB3编译码的建模与实现 HDB3码译码器的建模与实现

IF(COUNT01=1)THEN --10>-1 ???????????? END IF;

ELSIF(HDB3_DATA=\ ---1 IF(COUNT10=1)THEN COUNT01<=0; COUNT10<=0; ????????

REG4<=REG3; --V ELSE

COUNT01<=0;

COUNT10<=1;

REG0<='1'; REG1<=REG0; REG2<=REG1; REG3<=REG2;

REG4<=REG3; ---1 END IF; ELSE

COUNT01<=COUNT01; COUNT10<=COUNT10; REG0<='0'; ?????? END IF; END IF; END IF; END PROCESS; DEHDB3<=REG4;

END ARCHITECTURE BEHAV;

在本译码程序中,由于需要根据现在状态决定过去状态的事件,为了实现这一个结果,本程序中设计了一个五位移位寄存器来寄存过去的状态即将输出的状态,为了输入的是“+1”还是“-1”和达到扣V扣B的功能,在本译码程序中设计了一个计“+1”计数器COUNT01和一个计“-1”计数器COUNT10来对输入的信号进行计数判断,最终达到对HDB3码进行译码的目的。例如在模块中的代码:

22

基于FPGA的HDB3编译码的建模与实现 HDB3码译码器的建模与实现

IF(HDB3_DATA=\ --+1 IF(COUNT01=1)THEN --10>-1 COUNT01<=0; COUNT10<=0; REG0<='0'; REG1<='0'; REG2<='0'; REG3<='0'; REG4<=REG3;

当输入代码为01时,判断计“+1”计数器是COUNT01否为2,即为偶数,此段代码前面计数器COUNT01计数到有奇数个“+1”,则再加上这个“+1”则为偶数,所以此时对所有寄存器清0,并把移位寄存器的最高位赋值给输出缓冲寄存器REG4。

4.4 HDB3码译码器的波形仿真及分析

根据前面HDB3码的编码器仿真出来的波形和代码,把其输入到译码器的输入端口,仿真,比较最终输出的是否与第三章在编码器仿真时输入的代码一致,一致则译码正确,否则错误。不同输入序列译码时仿真波形如图4.4~4.6所示。

图4.4“10000011100001101000001110000110100000111000011”时译码输出

23

基于FPGA的HDB3编译码的建模与实现 HDB3码译码器的建模与实现

图4.5“1100110011001100110……”时译码输出

图4.6 “10000000110000000100110010000011001100000100100” 时译码输出

由仿真波形可以得出:

HDB3_DATA:010000011100001101000001110000110100000111…… DEHDB3: 000000000000000000000000000000000000000000?? HDB3_DATA:01100110011001100110…… DEHDB3: 11111111111111111111……

HDB3_DATA:010000000110000000100110010000011001100000100100 DEHDB3: 010000000110000000100110010000011001100000100100 从图4.4~图4.6可知,其输出的波形与根据HDB3译码规则算出的代码一致;从码元的输入到译码的输出的延迟为913.2ms,满足实时通信对延迟的要求。并且从QUARTUSⅡ的编译时可知,此译码模块的占用逻辑单元为10,对逻辑单元的占用率小于1%,占用引脚为5,这与编码器引脚的占用一致,而对于存储单元的占用为0,可知此译码器的资源的占用相当少,便于以后的系统升级与优化。

4.5 小结

本章主要介绍HDB3码译码的建模与实现,由于HDB3码的译码比较简单,在其译码系统中并没有采用模块化的设计,又由于在EDA的平台上并不能处理负信号,因此,在整个HDB3码的译码系统中只有两部分:HDB3码译码的硬件部分和

24

基于FPGA的HDB3编译码的建模与实现 HDB3码译码器的建模与实现

HDB3码的软件部分。从仿真结果来看,正确实现了HDB3码的译码过程。

25

基于FPGA的HDB3编译码的建模与实现 结束语

第五章 结束语

本毕业设计采用FPGA芯片EPF10K20TC144-4为硬件平台,以美国Altera公司的QUARTUSⅡ为软件平台,根据HDB3码的编译码原理,基于VHDL硬件描述性语言,采用“至顶向下”的方法来对HDB3码进行建模。此种设计方法就是把一个复杂的系统分成几个部分,再把每部分划分成若干子模块,各模块独立进行设计,采用这种模块化设计,有利于提高工作效率。同时在系统仿真校验时,若发现不符合要求,只要查找出有问题的模块,修改一次,则使该系统有问题的模块得到更正,从而解决了由此模块产生的系统错误。

对于HDB3编/译码实现部分,在其编码模块的硬件电路中,本毕业设计采用CD74HC4052四选一数模选择器来实现,对于其译码模块的硬件电路中,为了能够满足实时通信的要求,本毕业设计采用了AD790和SE5539这两种高速的电压比较器来实现;在HDB3码编/译码的软件部分,使用EDA的硬件描述性语言VHDL对HDB3码进行代码的编译和仿真,从仿真的结果来看,其建模是正确的。

在本毕业设计开发过程中由于采用高级硬件编程语言下载到编程器件的设计实现过程,相对于在DSP平台或硬件电路来实现代码的编译码,大大缩短了开发周期,增强了硬件设计的灵活性和可移植性,也避免了专用集成电路设计的高风险。采用时序仿真的验证方法,基本可以保证设计的可靠性。

本毕业设计采用以FPGA为硬件平台,基于VHDL语言对HDB3码的编/译码的实现具有如下的优势:

① 使用VHDL语言对HDB3码的编译码,相对于采用硬件电路来实现,可以对其采用模块化的设计,简化了系统设计的难度,降低了工程人员的工作强度。

② 可以在VHDL的软件QUARTUSⅡ上对HDB3码的编译码代码进行调试,正确后才下载到硬件平台上,节省了系统开发的成本。

③ 现在电子技术发展的速度非常迅速,从而导致了在现实中系统的更新换代的速度很快,而采用以FPGA为硬件平台的设计的系统性能优越,功能紧凑,扩展性好,对于系统的升级,只需对芯片中的程序代码进行更新。本文基于FPGA的HDB3编/译码的建模与实现方法具有一定的通用性,可以用到其它基带码型的编/译码实现场合。

26

基于FPGA的HDB3编译码的建模与实现 参考文献

参考文献

[1] 樊昌信,张甫翎,徐炳祥,吴成柯.通信原理[M].北京:国防工业出版社,2005.5,96~

100.

[2] 谭会生,张昌凡.EDA技术及应用[M].西安:西安科技大学出版社,2004.4,1~90. [3] 丁明威,黄培中.用自顶向下方法设计复接分接器[J].通信技术,2000,(8): 107~109. [4] 曾烈光.复接系统定时的数字提取技术及其性能[J].通信学报,1999.6(12): 91~93. [6] 段吉海,黄智伟.基于CPLD/FPGA的数字通信系统建模与实现[M].北京:电子工业出

版社,2004.5,72~106.

[7] 陈波.EDA技术在电子设计中的应用[J].电力学报,2002,25(6):71~73.

[8] 劳有兰.基于FPGA时分复用数字基带通信系统的设计[J].广西工学院学报,2003,6(9):

34~37.

[9] 王乐毅.EDA设计技术与方法PLD与 EDA工具[J].青岛:青岛化工学院学报,2001,

54(23): 339~343.

[10] 林敏,方颖立.VHDL数字系统设计与高层次综合[J].信息时代,2002,5(6): 122~130. [11] 童诗白,华成英.模拟电子技术基础[M].北京:高等教育出版社,2003.4,417~425,

440~442.

[12] 孙占华,吴靖.NRZ 伪随机码序列同步时钟提取[J].数字通信,1999,1(4): 1~3. [13] 张少锋.基于单片FPGA的数字复接系统设计[J].现代电子技术,2005,25(22):1~3.

27

基于FPGA的HDB3编译码的建模与实现 致谢

致 谢

在本论文完成之际,首先要感谢杨老师在本论文的写作期间给我的悉心指导和大力支持。杨老师那严谨的治学态度,求实的科学精神和一丝不苟的工作作风令我终生难忘。感谢在大学本科期间,所有曾经帮助、培养过我的老师,衷心感谢他们在我大学四年之中,指导我的学习,教会我做人的道理。

衷心感谢百忙之中抽出时间评阅我的论文的各位老师,感谢他们评阅本文付出的辛勤劳动。

特别感谢我的同学对我的支持、理解和鼓励,感谢我的朋友对我的关怀和帮助,是你们的友情始终支持着我。

28

基于FPGA的HDB3编译码的建模与实现 附录二

附录二 HDB3码译码器完整源程序

--0表示没有,1表示有1个 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DEHDB3 IS

PORT(HDB3_DATA: IN STD_LOGIC_VECTOR(1 DOWNTO 0); CLK: IN STD_LOGIC; CLR: IN STD_LOGIC; DEHDB3: OUT STD_LOGIC); END ENTITY DEHDB3;

ARCHITECTURE BEHAV OF DEHDB3 IS

SIGNAL REG0,REG1,REG2,REG3,REG4: STD_LOGIC;

SIGNAL COUNT01: INTEGER RANGE 1 DOWNTO 0; SIGNAL COUNT10: INTEGER RANGE 1 DOWNTO 0; BEGIN

PROCESS(CLK,CLR) BEGIN

IF(CLK'EVENT AND CLK='1')THEN IF(CLR='1')THEN COUNT01<=0; COUNT10<=0; REG0<='0'; REG1<='0'; REG2<='0'; REG3<='0'; REG4<='0';

ELSE IF(HDB3_DATA=\ --+1 IF(COUNT01=1)THEN --10>-1 COUNT01<=0; COUNT10<=0; REG0<='0'; REG1<='0'; REG2<='0'; REG3<='0'; REG4<=REG3; ELSE

COUNT01<=1; COUNT10<=0; REG0<='1';

34

--1>HIGH,0>LOW --+1 ---1 UOH UOH 基于FPGA的HDB3编译码的建模与实现 附录二

REG1<=REG0; REG2<=REG1; REG3<=REG2;

REG4<=REG3; --V END IF;

ELSIF(HDB3_DATA=\ ---1 IF(COUNT10=1)THEN COUNT01<=0; COUNT10<=0; REG0<='0'; REG1<='0'; REG2<='0'; REG3<='0';

REG4<=REG3; ELSE

COUNT01<=0; COUNT10<=1; REG0<='1'; REG1<=REG0; REG2<=REG1; REG3<=REG2;

REG4<=REG3; END IF; ELSE

COUNT01<=COUNT01; COUNT10<=COUNT10; REG0<='0'; REG1<=REG0; REG2<=REG1; REG3<=REG2; REG4<=REG3; END IF; END IF; END IF; END PROCESS; DEHDB3<=REG4;

END ARCHITECTURE BEHAV;

--V ---1 35

本文来源:https://www.bwwdw.com/article/7kda.html

Top