基于FPGA的HDB3的编译码系统设计.docx
《基于FPGA的HDB3的编译码系统设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的HDB3的编译码系统设计.docx(17页珍藏版)》请在冰豆网上搜索。
![基于FPGA的HDB3的编译码系统设计.docx](https://file1.bdocx.com/fileroot1/2023-1/5/529f6ff5-64bd-44db-a4ac-ce845cb65eca/529f6ff5-64bd-44db-a4ac-ce845cb65eca1.gif)
基于FPGA的HDB3的编译码系统设计
《数字通信原理》课程设计说明书
基于FPGA的HDB3的编译码系统设计
学院:
学生姓名:
指导教师:
专业:
班 级:
学号:
完成时间:
摘要
一般由信源发出的数字基带信号含有丰富的低频分量,甚至直流分量,这些信号往往不宜直接用于传输,易产生码间干扰进而直接影响传输的可靠性,因而要对其进行编码以便传输。
FPGA(现场可编程门阵列)作为一种新兴的可编程逻辑器件,具有高集成度、成本低、可靠性高、开发周期短、可重复编程等特点,能将编解码电路集成在一片芯片上。
HDB3码(三阶高密度双极性码)具有解码规则简单,无直流,低频成份少,可打破长连0和提取同步方便等优点。
基于上述情况,本文提出了基于FPGA的HDB3编译码设计方案。
本文先对HDB3码、VHDL语言、FPGA器件和EDA技术进行简述。
然后介绍HDB3码的编译码原理以及其特点。
最后,对HDB3码的编译原理进行重点分析,并且以VHDL语言为主,分别对编码器部分和译码器部分的具体实现方法进行说明,给出具体设计的思考方案和程序流程图,并对设计方案进行软件仿真,同时给出仿真结果并对其进行分析,证明设计方案的正确性。
关键词:
HDB3码;FPGA;EDA;VHDL;编译码
1绪论ﻩ1
1.1引言ﻩ1
1.2EDA技术ﻩ1
1.3 FPGA芯片2
1.4VHDL硬件描述语言2
2 HDB3码的介绍和编译码规则3
2.1选择HDB3码的理由ﻩ3
2.2 HDB3码的介绍3
2.2.1单极性不归零码(NRZ-L)3
2.2.2 双极性不归零码(Bi-NRZ)3
2.2.3交替传号极性码(AMI)3
2.2.4三阶高密度双极性码(HDB3)ﻩ4
2.3 HDB3的编译码规则4
2.3.1 单极性不归零码(NRZ-L)的编码规则ﻩ4
2.3.2 AMI码的编码规则4
2.3.3 HDB3码的编译码规则ﻩ5
3HDB3编码器的FPGA实现ﻩ6
3.1 HDB3编码的设计思路ﻩ6
3.2HDB3编码的VHDL语言设计6
3.3HDB3编码的VHDL程序ﻩ7
3.4 HDB3编码的仿真波形ﻩ7
4 HDB3译码器的FPGA实现9
4.1 HDB3码译码的设计思路ﻩ9
4.2HDB3译码的VHDL语言设计9
4.3 HDB3译码的VHDL程序ﻩ9
4.4HDB3译码的仿真波形9
4.5HDB3编译码器测试ﻩ10
4.5.1HDB3编码器和译码器在顶层文件连接ﻩ10
4.5.2HDB3编译码器的仿真波形11
结束语ﻩ12
参考文献ﻩ13
致谢ﻩ14
附录15
附录一HDB3编码程序ﻩ15
附录二 HDB3译码程序18
1 绪论
1.1 引言
信号在信道的传输过程中,如何才能保证信号失真最小且可靠的传输是研究人员一致的目标。
一个完整的通讯系统,当信号经过一定距离的传送后,总要受到干扰、移相和衰减,因而必须要对数字信号进行再生。
从信源输出的信号一般是0、l两种状态的单极性NRZ码,在进行数字信号传输时,必须考虑到传输信道的特点,将信息比特变换为适合于信道传输的数字信号,即进行线路编码。
由模拟信源转换而来的PCM信号,或离散信源产生的符号序列,以及数字源发出的代码,从广义角度,我们均称其为PCM编码.在PCM的基带传输系统中,存在着平衡电路和不平衡电路的变换,及远端的供电电路,这些电路中都存在着变压器,因而含有丰富的直流和低频的基带信号,这些信号就不适宜在信道中传输,否则会造成正常信号的严重畸变。
为了使得终端机编码输出的由0和l组成的单极性数码流适应于传输信道的特性,还必须经过码型变换,即对信号进行编码。
选择码型时一般应该考虑几方面的因素,比如从线路码流中容易提取时钟,线路码型中不宜含有直流分量,高、低频成分应尽量减少,设备应简单,易于实现码型变换和码型反变换的调试等。
基于此,人们又在考虑能不能有一种更好的方法来弥补这一不足之处。
FPGA具有编程灵活的特点,能够在不大改动系统平台的情况下具有改变系统特性和行为的灵活性,因而能完成对实时信号的处理;同时FPGA作为一种新兴的高密度可编程逻辑器件,可以将编码与解码电路集成在一片FPGA芯片上,它的体积小,其结果大大提高了系统的集成度。
HDB3码的具有其译码规则简单,便于时钟的提取,无直流分量,实现的电路也远比采用曼彻斯特编码方式简单等优点。
本文主要就是要研究如何在一片FPGA芯片上实现HDB3编译码的设计。
1.2EDA技术
EDA(ElectronicDesign Automation)即电子设计自动化,它是指利用计算机来完成电子系统的设计。
EDA技术研究的对象是电子设计的全过程,有系统级、电路级和物理级三个层次的设计。
其涉及的电子系统是指从低频、高频到微波,从线性到非线性,从模拟到数字,从通用集成电路到专用集成电路构造的电子系统,因此,EDA技术研究的范畴相当广泛。
从专用集成电路(ASIC)开发与应用角度看,EDA软件系统应当包含以下子模块:
设计输入子模块、设计数据库子模块、分析验证子模块、综合仿真子模块、布局布线子模块等。
在现代电子设计技术领域种,EDA技术已成为主要的设计手段。
EDA技术可把数字通信技术,微电子技术和现在电子设计自动技术结合起来,实现了硬件设计软件化,加速了数字通信系统设计的效率,降低了设计成本。
1.3FPGA芯片
典型的FPGA它通常包含三类编程资源:
可编程逻辑功能块CLB(ConfigurableLogicBlocks),可编程I/O模块IOB(Input/OutputBlock)和可编程内部互连PI(ProgrammableInterconnect)。
CLB是实现逻辑设计的基本单元,它们排列为阵列,散布于整个芯片。
CLB的功能很强,不仅实现了逻辑函数,还可配置为RAM等复杂形式。
IOB作为芯片上逻辑与外部封装引脚的接口,通常围绕着阵列芯片的周围。
PI包括各种长度的连线和一些可编程连接开关,通过它们把各个CLB、IOB按设计要求连接起来,构成特定功能的电路。
FPGA器件的功能由逻辑结构的配置数据决定,工作时,配置数据存放于片内的SRAM或熔丝上。
使用SRAM的FPGA器件,工作前需从芯片外部加载配置数据。
配置数据可存储于片外的EPROM或其他存储体上。
用户可控制加载过程,在现场修改器件逻辑功能,即现场可编程。
1.4VHDL硬件描述语言
VHDL是一种超高速集成电路硬件描述语言,它提供了一个标准的, 从逻辑门级到数字系统级的各抽象级描述硬件的标准文本, 提供了精确的语法和语义,为集成电路及系统设计提供了形式化、层次化和规范化的描述,不仅能有效地用于CAD进行模拟, 而且可作为一种精确的自然语言用于设计者之间的设计交流, 它允许设计者在语言的基本作用范畴之外表示信息,尽管最初的工具在某些级(例如开关级)不能提供模拟。
由于没有限制设计者必须拥有特殊的硬件技术或设计方法,该语言在工业上有着广泛的用途, 它被喻为硬件描述语言中的“FORTRAN”,其性能是其它硬件描述语言无法媲美的。
由此,VHSIC 的硬件描述语言(VHSICHDL)即VHDL便诞生了,并很快被美国电气和电子工程师协会所承认。
VHDL语言描述电路的行为,具有很强的电路功能描述能力,适用于大规模电子系统的设计。
2HDB3码的介绍和编译码规则
2.1选择HDB3码的理由
发送信号设计中一个主要的问题是确定信号的线路编码类型,考虑对直流或低频受限信道,线路编码应不含直流分量;码型变换要保证透明传输,唯一可译,同时可使两端用户方便发送并正确接收原编码序列,而无觉察中间环节的形式转换,即码型选择仅是传输的中间过程;便于从接收码流中提取定时信号;所选码型以及形成波形,应有较大能量,以提高自身抗噪声及干扰的能力;码型具有一定检错能力,能减少误码扩散。
所以选择HDB3码。
2.2 HDB3码的介绍
HDB3码是由基带信号NRZ码对应的传输码AMI码改进而来。
为了解HDB3码的编码规则,我们需要先了解基带信号NRZ码和传输码AMI码。
2.2.1单极性不归零码(NRZ-L)
单极性不归零码(UnipolarNonreturn-to-zero)的0、l码与基带信号的0电位及正电位对应,脉冲无间隔,只适于短距离传输。
缺点:
含有直流(DC)分量;接收判决门限为接收电平的一半,门限不稳,判决易错;不便直接从接收码序列中提取同步信号;传输时信道一端需接地(不平衡传输)。
2.2.2 双极性不归零码(Bi-NRZ)
双极性码的0、l码与基带信号的负、正电位对应。
与单极性相比,双极性不归零码(Bipolar-NRZ)优点为:
从统计平均看,l、0各半,不含直流分量;两种码元极性相反,接收判决电平为0,稳定性高;可在电缆等线路不接地传送(平衡传输)。
因此,Bi-NRZ码比较常用,更适合于速度不高的比特流传输,将单极性转换为双 极性也较简单。
缺点:
不易从中直接提取同步信息;I、0不等概率时仍有直流分量。
2.2.3 交替传号极性码(AMI)
AMI码(AlternativeMarkInversedEncoding)又称双极性方式码(BipolarEncoding)、平衡对称码或传号交替反转码,它属于单极性码的变型,当遇0码时为0电平,当遇l码时则交替转换极性,这样成为确保正负极性个数相等的“伪三进制”码。
优点:
确保无直流,零频附近的低频分量小,便于变量器耦合匹配;有一定检错能力,当发生1位误码时,可按AMI规则发现错误,以ARQ纠错;接收后只要全波整流, 则变为单极性码,如果它是AMI--RZ型,可直接提取同步。
缺点:
码流中当连0过多时,同步不易提取。
2.2.4三阶高密度双极性码(HDB3)
这种码型属于伪三进制码。
HDB3中“3阶”的含义是限制连“0”个数不超过3位.为减少连“0”数,有的做法采取“扰码”,按一定规则将多个连“0”分散,尽量使码序列随机化。
有效的办法是采用HDBn(n=l,2,3),一般多使用n=3。
优点:
译码规则简单、无直流、低频成份少、频带较窄、可打破长连0,提取同步方便、不受信源统计特性的影响。
2.3HDB3的编译码规则
该设计的基带信号码型为单极性不归零码(NRZ-L),传输码型为交替传号极性码(AMI)改进的三阶高密度双极性码(HDB3),所以介绍HDB3的编译码原理前先介绍单极性不归零码(NRZ-L)和传交替传号极性码(AMI)的编译码规则。
2.3.1单极性不归零码(NRZ-L)的编码规则
单极性NRZ码在表示一个码元时,二进制符号“1”和“0”分别对应基带信号的正电平和零电平,在整个码元持续时间,电平保持不变。
如图1所示。
图1单极性NRZ-L码
2.3.2 AMI码的编码规则
AMI码又称为平衡对称码。
这种码的编码规则是:
把码元序列中的―1码变为极性交替变化的传输码1、-1、1、-1、…,而码元序列中的0码保持不变。
如图2所示。
图2 AMI码
由AMI码的编码规则可以看出,由于1和-1各占一半,因此,这种码中无直流分量,且其低频和高频分量也较少,信号的能量主要集中在2Tf处,其中Tf为码元速率。
此外,AMI码编码过程中,将一个二进制符号变成了一个三进制符号,即这种码脉冲有三种电平,因此我们把这种码称为伪三电平码,也称为1B/1T码型。
AMI码除了上述特点外,还有编译码电路简单及便于观察误码情况等优点。
但是AMI码有一个重要的缺陷,就是当码元序列中出现长连0时,会造成提取定时信号的困难,因而实际系统中常采用AMI码的改进型HDB3码。
2.3.3HDB3码的编译码规则
HDB3是三阶高密度双极性码,它是为了克服传输波形中出现长连0码情况而设计的AMI码的改进型。
HDB3码的编码规则是:
1、把码元序列进行AMI编码,然后去检查AMI码中连0的个数,如果没有四个以上(包括四个)连0串时,则这时的AMI码就是HDB3码。
2、如果出现四个以上连0串时,则将每4个连0小段的第4个0变成与其前一个非0码(1或-1)相同的码。
显然,这个码破坏了+―极性交替反转的规则,因而称其为破坏码,用符号V表示。
3、为了使附加V码后的序列中仍不含直流分量,必须保证相邻的V码极性交替。
这一点,当相邻的V码之间有奇数个非0码时,是能得到保证的;但当相邻的V码之间有偶数个非0码时,则得不到保证。
这时再将该连0小段中的第1个0变成B或-B,B的极性与其前一个非0码相反,并让后面的非零码从V码后开始再极性交替变化。
NRZ码:
10 00 0 1 0 000 1 100 00 11
AMI码:
-1 0000+1000 0-1+10 0 0 0 -1+1
HDB3码:
-10 00-V+1000+V-1+1–B00V +1 -1
虽然HDB3 码的编码规则比较复杂,但译码却比较简单。
从编码过程中可以看出,每一个V码总是与其前一个非0码(包括B码在内)同极性,因此从收到的码序列中可以很容易地找到破坏点V码,于是可断定V码及其前3个码都为0码,再将所有的-1变为1后,便可恢复原始信息代码。
HDB3码的特点是明显的,它既保留AMI码无直流分量,便于直接传输的优点,又克服了长连0串(连0的个数最多3个)的出现,HDB3码的频谱中既消除了直流和甚低频分量,又消除了方波中的高频分量,非常适合基带传输系统的特性要求。
因此,HDB3码是目前实际系统中应用最广泛的码型。
3 HDB3编码器的FPGA实现
3.1HDB3编码的设计思路
在数字基带传输系统中,从信号源输出的信号一般是用“0”和“1”两种状态表示的单极性NRZ码。
因此看来,HDB3编码器的主要转换对象就是NRZ码。
由HDB3码的编码规则可知,编码器的主要工作就是按AMI码对信号进行编码,判断是否应该加入破坏符V,V加入后是否应该补B,由于需要检查到四位连“0”才能进行加V补B的操作,这样用于存放数据的移位寄存器就不能少。
这个设计的难点在于加V和补B的判决。
HDB3编码设计框图如图3所示。
图3 HDB3编码设计框图
设计思路如下:
1、对输入为1码元交替翻转编码,即依次在H+和H-端口输出1。
2、对输入为0码元同时在H+和H-端口输出0。
3、当连续输入4个0码元,且与上一个连续0码元之间1码元为奇数个时,第四个0码元改为1码元,且与之前1码元的最后一个1码元同极性,即:
在同端口输出。
4、当连续输入4个0码元,且与上一个连续4个0码元之间1码元为偶数个时,第一个0码元改为1码元,与之前1码元的最后一个1码元反极性,即:
在不同端口输出。
由以上设计思路,一列NRZ码经编码后应该产生的H+、H-如下:
NRZ码:
1000 0100 00 1 1 00000 00 011
HDB3码:
-1000-V+100 0+V-1+1–B0 0-V+B 0 0+V-1 +1
H+:
00 0 0 0 1 0001010 000 1 00101
H-:
-1000-100000-10-10 0-10000-10
3.2 HDB3编码的VHDL语言设计
1、逐位处理输入输出数据,即:
每输入一比特数据就判断处理,并在H+和H-端口同时输出一位比特脉冲。
2、为了能修改含本时钟之前4个时钟周期的输出比特,建立一个4位移位寄存器保存输入数据temp。
3、输出“1”时,确定下次1码元输出端口的确定,即极性是+或-;每输入一个“1”,极性反转一次,记录信息county。
4、检测当前是否为连续“0000”,记当前零个数count0。
5、记录两个连续“0000”之前连续1的个数记数count1,(即奇偶数)。
6、要记录两个连续“0000”之前连续1的个数,需要知道第一个“0000”已经出现,建立第一个“0000”已经出现的标志位count2。
7、更新“B00V”“000V”时,更新信息count0,count1,county。
3.3HDB3编码的VHDL程序
HDB3编码的VHDL程序见附录一。
3.4HDB3编码的仿真波形
HDB3编码的仿真波形图如图4所示。
图4HDB3编码的仿真波形
如图4所示,clkin为占空比为50%的取样时钟;clkout为把输入的clkin输出,给下级的解码做采样时钟;dataouthh为输出的H+;dataouthl为输出的H-。
从datain按采样时钟下降沿读出NRZ码。
如下所示:
NRZ码:
01010111010000 000001100001 0000
NRZ码共30位,前10位(“0101011101”)目的为了验证程序能否对输入为1码元交替翻转编码,依次在H+和H-端口输出1;对输入为0码元同时在H+和H-端口输出0。
第11位到第14位(“0000”)是为了验证程序能否判断第一个“0000”;从NRZ前10位可以读出1的个数为(6偶数),如果程序不能判断第一个“0000”,则产生的HDB3码为“B00V”,而第一个“0000”正确产生的HDB3码为“000V”。
第15位到19位(“0000”)是为了能否判断两个连续“0000”之间“1”的个数为0(偶数)时,输出的HDB3码是否正确。
第22位到25位(“0000”)是为了能否判断两个连续“0000”之间“1”的个数为2(偶数)时,输出的HDB3码是否正确。
第26位到30位(“0000”)是为了能否判断两个连续“0000”之间“1”的个数为1(奇数)时,输出的HDB3码是否正确。
由读出的NRZ,求出理论HDB3码。
如下所示:
理论HDB3码:
0+10-10+1-1+10-1000-1+100+10-1+1 -100-1 +1000+1
从dataouthh按采样时钟下降沿读出H+;从dataouthl按采样时钟下降沿读出H-。
如下所示:
H+:
01000101000000 100100100001 0001
H-:
000100100 10001000001 01001 00000
H+、H-叠加得出实测HDB3码。
如下所示:
实测HDB3码:
0+10-10+1-1+10-1000-1+100+10-1+1-100-1+1000+1
实测HDB3码和理论HDB3码相同,所以HDB3编码的VHDL语言设计成功。
4 HDB3译码器的FPGA实现
4.1 HDB3码译码的设计思路
由编码原理可知,只要将HDB3码中的V、B变成0、1,就可以实现译码。
根据前面的HDB3编码输出“V”码的极性与前面的非“0”码的极性相同,当FPGA检测到相邻2个非“0”符号极性相同时,就可以判断出前非“0”符号为“V”符号。
再判断与“V”码相邻的非零码是“1”还是“B”码。
根据“V”码与它前面的3位的寄存器的值则可以知道,当3位数据都为“0”时,则“V”码前的非零信号为基带信号“1”,如果与“V”码相邻的前面2位寄存器的值为“0”,则“V”码前的非零信号即为补信码“B”。
HDB3译码设计框图如图5所示。
图5HDB3译码设计框图
4.2 HDB3译码的VHDL语言设计
对输入的H+、H-和HDB3[(H+)OR(H-)]分别设立一个五级缓存移位寄存器,判断HDB3[(H+)OR(H-)]寄存器存在“10001”或“1001X”时,H+、H-寄存器是否有且只有一个存在“00000”或“0000X”,如果存在则HDB3[(H+)OR(H-)]寄存器改成“10000”或“0000X”。
再将HDB3[(H+)OR(H-)]寄存器第5位输出。
4.3 HDB3译码的VHDL程序
HDB3编码的VHDL程序见附录二。
4.4HDB3译码的仿真波形
HDB3译码的仿真波形图如图6所示。
图6HDB3译码的仿真波形
如图6所示,clkin为占空比为50%的取样时钟;dataoinhh为输入的H+;datainthl为输入的H-;dataout为输出的NRZ码。
从datainhh按采样时钟下降沿读出H+。
从datainll按采样时钟下降沿读出H-。
如下所示:
H+:
00100 100001 00010100001001 01
H-:
100010000100000 101001000010
H+、H-分别27位,前5位[H+(“00100”)、H-(“10001”)]目的是为了判断当H+寄存器存在“10001”时,程序是否会误判存在“1000V”;第6位到第10位[H+(“10000”)、H-(“00001”)]目的是为了判断当HDB3[(H+)OR(H-)]寄存器存在“10001”时,程序是否会误判存在“1000V”;第11位到第15位[H+(“10001”)、H-(“00000”)]目的是为了判断程序能否正确识别“1000V”;第18位到第21位[H+(“0000”)、H-(“1001”)]和第22位到第25位[H+(“1001”)、H-(“0000”)]目的是为了判断程序能否正确识别“B00V”。
由读出的H+、H-,求出测量的HDB3码,再由理论HDB3码计算得出理论NRZ码。
如下所示:
实测HDB3码:
+10-10+1-1000+1-1000-1+1-1+100+1-100-1 +1-1
理论NRZ码:
1 01111000 1 100001 10000 000011
从dataout按采样时钟下降沿读出NRZ码。
如下所示:
实测NRZ码:
101111000 1 10000 110000000011
实测NRZ码和理论NRZ码相同,所以HDB3译码的VHDL语言设计成功。
4.5 HDB3编译码器测试
4.5.1HDB3编码器和译码器在顶层文件连接
把HDB3编码器程序和HDB3译码器程序生成元器件,新建Block Diagram/SChematicFile文件,在里面对HDB3编码器和HDB3译码器进行连接。
如图7所示。
图7 HDB3编译码器原理图
4.5.2HDB3编译码器的仿真波形
HDB3编译码器的仿真波形图如图8所示。
图8HDB3编译码器仿真波形图
如图8所示,clkin为占空比为50%的取样时钟;datain为输入的NRZ码;
dataout为输出的NRZ码。
从datain按采样时钟下降沿读出NRZ码。
如下所示:
实测输入NRZ码:
10101100011 0000110000000011
观察图8中dataout可以发现,dataout向左移位5个取样时钟频率周期,则和datain完全相同。
实测输出NRZ码如下所示。
实测输出NRZ码:
10101 10001 10000 1100000000 11
实测输入NRZ码和实测输出NRZ码相同,HDB3编译码器设计成功。
结束语
本文主要是用FPGA来实现HDB3码的编码和译码器。
利用EDA技术进行设计,重点在于实现HDB3的编码过程和译码过程的处理,用VHDL对其功能进行描述。
由于HDB3码是双极性码,而FPGA只能处理单极性。