基于CPLD-FPGA的数字通信系统建模与设计第 4 章_第1页
基于CPLD-FPGA的数字通信系统建模与设计第 4 章_第2页
基于CPLD-FPGA的数字通信系统建模与设计第 4 章_第3页
基于CPLD-FPGA的数字通信系统建模与设计第 4 章_第4页
基于CPLD-FPGA的数字通信系统建模与设计第 4 章_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

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

文档简介

第4章

基带信号的编、译码建模与设计

内容提要

本章首先介绍了AMI码、数字双相码、CMI码和nBmB码的编码规则,以及HDB3码的编、译码规则。然后重点对HDB3编码器和译码器的设计提供了创新的建模思想和方法。书中从两种建模思路提出实现HDB3编码器的具体设计方案,并分别给出了程序设计流程图模型和具体VHDL源程序以及时序仿真波形;另对HDB3译码器的建模与VHDL程序设计作了详细的介绍。除此之外,还简单阐述了其他编码形式的建模方法。知识要点

1.AMI码、数字双相码、CMI码和nBmB码的编码规则;2.HDB3码的编、译码规则以及HDB3码的特点;3.HDB3编码器的建模方法与程序设计;4.HDB3译码器的建模方法与程序设计;5.AMI码、数字双相码、CMI码和nBmB码的建模方法。教学建议1.要求复习《通信原理》中与本章相关的知识;2.重点理解插V插B的建模思路,最好能寻找其它新的建模与设计方案;3.分析和理解HDB3译码器的扣V扣B的原理和译码器的设计方法;4.建议学时数为6~8学时。5.本章介绍的其它基带信号的建模方法可作为学生进行相关课程设计或上机练习的基础。

4.1引言数字基带信号的传输是数字通信系统的重要组成部分之一。在数字通信中,有些场合可不经过载波调制和解调过程,而对基带信号进行直接传输。为使基带信号能适合在基带信道中传输,通常要经过基带信号变换,这种变换过程事实上就是编码过程。于是,出现了各种各样的常用码型。不同码型有不同的特点和不同的用途。例如AMI码的传号交替反转,且这种基带信号无直流成分和很小的低频成分,利于在一般的基带信道中传输,但它可能出现四连零现象,不利于接收端的定时信号提取。HDB3码因具有无直流成份,低频成份少和连0个数最多不超过三个等明显的优点,对定时信号的恢复十分有利,而成为CCITT协会推荐使用的基带传输码型之一。本章将简单介绍几种常用的基带传输的码型,将对HDB3的编、译码规则进行重点讲解。以HDB3码为例,着重讲解它的VHDL建模方法和如何进行VHDL程序设计,并给出访真结果。4.2关于基带信号的编码作为传输用的基带信号归纳起来有如下几点主要要求:(1)希望将原始信息符号编制成适合于传输用的码型;(2)对所选码型的电波形,希望电波形适宜于在信道中传输。可进行基带传输的码型较多。本节主要介绍几种常用的码型。1.AMI码AMI码称为传号交替反转码。其编码规则如下:代码中的0仍为传输码0,而把代码中的1交替地变换为传输码的+1-1+1-1,…。举例如下:

消息代码:0

11

10010…AMI

码:0+1

–1

+100-10…或0-1

+1

–100+10…上例用波形表示如图4-1所示。图中,(a)为单极性非归零码,(b)和(c)为AMI码。图4-1AMI码波形示意图图4-2双相码波形示意图图4-3CMI码波形示意图AMI码的特点:(1)无直流成分且低频成分很小,因而在信道传输中不易造成信号失真。(2)编码电路简单;便于观察误码状况。(3)由于它可能出现长的连0串,因而不利于接收端的定时信号的提取。2.数字双相码(DigitalDiphaseCode)数字双相码又称为分相码(Split-phaseCode)或曼彻斯特码(ManchesterCode)。它的编码规则之一是:用分别持续半个码元周期的正、负电平组合表示信码“1”;用分别持续半个码元周期的负、正电平组合表示信码“0”。其编码关系如表4-1所示。

数字双相码的波形举例如图4-2所示。图4-2(a)为单极性非归零码,图4-2(b)、(c)为数字双相码。双相码的主要特点是:双相码为双电平码,可提供足够的定时分量,又无直流分量,利于定时信息的提取,而且编码简单。上述介绍的双相码是绝对双相码,还有另一种双相码,称为差分双相码。其编码规则是:先将原二进制代码变成差分码,然后再按照绝对双相码的编码规则进行编码,则可得到差分双相码。数字双相码主要用于本地局域网。3.CMI码CMI码称为传号反转码,是一种二电平码。其编码规则是:“1”码交替地用“11”和“00”表示;“0”码用“01”表示。编码举例如表4-2所示。CMI码在光纤传输中用作线路传输码。CMI码的波形举例如图4-3所示。图4-3(a)为单极性非归零码,图4-3(b)、(c)为CMI码。

4nBmB码这种是一种分组码,它的功能是把原信息代码中的n位二进制码分为一组,再变换成m位二进制码形成一种新的码组(其中m>n)。这样做的好处是,从新的码组中选取一部分有利码组作为许用码组,而其余的为禁用码组,以获得好的特性。例如,在光纤数字传输系统中,常选,取5B6B码型作为三次群或四次群的线路传输码型。5HDB3码这种码型在数字通信中用得很多,是本章将要介绍的重点内容,从下节开始介绍。4.3

HDB3码的编、译码规则

4.3.1

HDB3码的编码规则1.

HDB3码的编码规则HDB3码是AMI码的改进型,称为三阶高密度双极性码。它克服了AMI码的长连0串现象。HDB3码的编码规则:第一步是将消息代码变换成AMI码;第二步是检查AMI码中的连0情况,当4个或4个以上的连0串时,则保持AMI的形式不变;若出现4个或4个以上连0串时,则将1后的第4个0变为与前一非0符号(+1或-1)同极性的符号,用V表示(+1记为+V,-1记为-V)。第三步是检查相邻V符号间的非0符号的个数是否为偶数,若为偶数,则再将当前的V符号的前一非0符号后的第1个0变为+B或-B符号,且B的极性与前一非0符号的极性相反,并使后面的非0符号从V符号开始再交替变化。举例如表4-3所示。表4-3的HDB3编码举例用波形表示如图4-4所示。图中,(a)表示单极性非归零码;(b)和(c)表示HDB3码。

2.

HDB3码的特点(1)基带信号无直流成分,且只有很小的低频成分;(2)连0串符号最多只有3个,利于定时信息的提取;(3)不受信源统计特性的影响。4.3.2

HDB3码的译码HDB3码的译码是编码的逆过程,其译码相对于编码较简单。从其编码原理可知,每一个破坏符号V总是与前一非0符号同极性,因此,从收到的HDB3码序列中,容易识别V符号,同时也肯定V符号及其前面的3个符号必是连0符号,于是可恢复成4个连0码,然后再将所有的-1变成+1后便得到原消息代码。举例如表4-4所示。4.4

HDB3编码器的VHDL建模与程序设计(1)

4.4.1HDB3码的VHDL建模思想从编码规则来分析,这个设计的难点之一是:如何判决是否应该插“B”。

另外一个难点是:如何准确识别电路中的“1”、“V”和“B”。因为“V”和“B”符号是人为标识的符号,但在电路中最终的表现形式还是逻辑电平“1”。解决的方法是利用了双相码,将其用二进制代码分别表示。

双相码的编码规则:它是对每个二进制代码分别利用两个具有2个不同相位的二进制码去取代的码。例如:代码:1

1

0

0

1

0双相码:10

10

01

01

10

01这样就可以识别电路中的“1”、“V”、“B”。也可以人为地加入一个标识符(其最终目的也是选择输出“1”的极性),控制一个选择开关,使输出“1”的极性能按照编码规则进行变化。4.4.2基于VHDL硬件描述语言的建模及程序设计本设计的思想并不像前面HDB3编码原理介绍的那样首先把消息代码变换成为AMI码,然后进行V符号和B符号的变换,而是在消息代码的基础上,依据HDB3编码规则进行插入“V”符号和插入“B”符号的操作,最后完成单极性信号变成双极性信号的转换。

HDB3码的编码器模型框图如图4-5所示。图4-5HDB3编码器模型整个HDB3编码器包含三个功能部分:插“V”、插“B”和单极性码转变成双极性码。各部分之间采用同步时钟作用,并且带有一个异步的复位(清零)端口。接下来,详细介绍各个部分的设计流程、编辑的源程序及用软件模拟仿真的波形图。1.插“V”模块的实现(1)插“V”模块的建模

插“V”模块的功能实际上就是对消息代码里的四连0串的检测,即当出现四个连0串的时候,把第四个“0”变换成为符号“V”(“V”可以是逻辑“1”——高电平),而在其他情况下,则保持消息代码的原样输出。同时为了减少后面工作的麻烦,在进行插“V”时,用“11”标识之,“1”用“01”标识,“0”用“00”标识。图4-6所示为插“V”符号的流程图。图4-6插“v”流程图(2)插“V”模块的程序设计以下程序是依据上述流程图,完成HDB3编码的程序中实现插“V”功能的部分程序。BEGINadd_v:PROCESS(clk,clr)--插VBEGINIF(RISING_EDGE(clk))THENIF(clr='1')THENcodeoutv<="00";count0<=0;ELSECASEcodeinISWHEN'1'=>codeoutv<="01";--01代表1

count0<=0;WHEN'0'=>IF(count0=3)THEN--四连0插Vcodeoutv<="11";count0<=0;ELSEcount0<=count0+1;codeoutv<="00";ENDIF;WHENOTHERS=>codeoutv<="00";count0<=count0;ENDCASE;ENDIF;ENDIF;ENDPROCESSadd_v;这个程序设计了一个计数器(count0),用来作为应插“V”符号的标志。在进程(PROCESS)中,通过条件控制开关(CASE语句)完成插“V”功能。这里使用了一个技巧来实现流程的控制,即在选择语句(CASE语句)中嵌套了条件判断语句(IF语句)来控制双重条件判断的执行结果。假设输入一串代码,根据设计思想,输入代码与插入“V”符号之后的关系应该是这样的:代码:10

0

0

0

1

0

0

0

0

1

1

0

0

0

0

1

1插V后:0100000011

01000000

11

0101000000

11

01012.插“B”模块的实现(1)建模

插“B”模块的功能是保证附加“V”符号后的序列不破坏“极性交替反转”造成的无直流特性,即当相邻“V”符号之间有偶数个非0符号的时候,把后一小段的第1个“0”变换成一个非破坏符号——“B”符号。图4-7所示为实现插“B”功能的流程图。图4-7插“B”符号流程图图中:“11”——符号“V”;“01”——“1”码;“00”——“0”码;“10”——符号“B”插“B”模块是这个设计遇到的第一个难点,因为它涉及到一个由现在事件的状态决定过去事件状态的问题。其次还有如何确定是“1”,还是“V”的问题。从下列功能程序中可以分析如何解决这一难题。

(2)程序设计————实现编码中插“B”功能的程序部分s0(0)<=codeoutv(0);s1(0)<=codeoutv(1);ds11:DFFPORTMAP(s1(0),clk,s1(1));――例化ds01:DFFPORTMAP(s0(0),clk,s0(1));――例化ds12:DFFPORTMAP(s1(1),clk,s1(2));――例化ds02:DFFPORTMAP(s0(1),clk,s0(2));――例化ds13:DFFPORTMAP(s1(2),clk,s1(3));――例化ds03:DFFPORTMAP(s0(2),clk,s0(3));――例化ds14:DFFPORTMAP(s1(3),clk,s1(4));――例化ds04:DFFPORTMAP(s0(3),clk,s0(4));――例化ds15:DFFPORTMAP(s1(4),clk,s1(5));――例化ds05:DFFPORTMAP(s0(4),clk,s0(5));――例化bclk:clkb<=NOTclk;――时钟clk倒相add_b:PROCESS(clkb)――进程敏感信号clkbBEGINIF(RISING_EDGE(clkb))THEN――时钟clkb的上升沿触发IF(codeoutv="11")THENIF(firstv=0)THENcount1<=0;firstv<=1;s1(4)<=s1(3);s0(4)<=s0(3);ELSEIF(count1=0)THENs1(4)<='1';s0(4)<='0';count1<=0;ELSEs1(4)<=s1(3);s0(4)<=s0(3);count1<=0;ENDIF;ENDIF;ELSIF(codeoutv="01")THENcount1<=count1+1;s1(4)<=s1(3);s0(4)<=s0(3);ELSEs1(4)<=s1(3);s0(4)<=s0(3);count1<=count1;ENDIF;ENDIF;ENDPROCESSadd_b;codeoutb<=s1(4)&s0(4);处理难点的思路是:首先把码元(经插“V”处理过的)放入一个4位的移位寄存器里,在同步时钟的作用下,同时进行是否插“B”的判决,等到码元从移位寄存器里出来的时候,就可以决定是应该变换成“B”符号,还是照原码输出。因此,在程序的结构中进行元件声明(ComponentDeclaration),调用库里的D触发器来实现延迟作用。为了使程序更清晰,用了四个元件例化语句(CompomemtInstantiation)——“dffx:dffPORTMAP()”,来说明信号的流向。所谓元件例化就是引入一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。在这里,当前设计实体相当于一个较大的电路系统,所定义的例化元件相当于一个要插在这个电路系统板上芯片,而当前设计实体中指定的端口则相当于这块电路板上准备接收此芯片的一个插座。元件例化是使VHDL设计实体构成自上而下层次化设计的一种重要途径。要进行插“B”判决,首先要知道哪一个是“V”,从前面的程序中我们了解到,“V”已经用“11”代替,“1”用“01”取代,从这里就表现出采用双相码的优点,它轻易地解决了“V”和“1”的差别。根据这个设计思想,输入代码与插“V”及插“B”后的代码的关系如下:代码:100001000011000011插V后:010000001101000000110101000000110101插B后:010000001101000000110101100000

1101013.单极性变双极性的实现(1)建模根据HDB3的编码规则,我们可以知道,“V”的极性是正负交替的,余下的“1”和“B”看成为一体且是正负交替的,同时满足“V”的极性与前面的非零码极性一致。由此我们可以将其分别进行极性变换来实现。从前面的程序我们知道,“V”、“B”、“1”已经分别用双相码“11”、“10”、“01”标识之,“0”用“00”标识,所以通过以下的程序我们可以很容易实现。图4-8是所示为实现极性变换功能的流程图。根据编码规则:“B”符号的极性与前一非零符号相反,“V”极性符号与前一非零符号一致。因此将“V”单独拿出来进行极性变换(由前面已知“V”已经由“11”标识,所以很好与其它的代码区别),余下的“1”和“B”看成一体进行正负交替,这样就完成了HDB3的编码。这个部分遇到的难点在于:在MAX+PLUSII软件仿真过程中,它无法识别“-1”,在它的波形仿真中只有“1”和“0”。因此在这里我采用了双相码来分别表示“-1”、“+1”、“0”。要得到所需要的结果,仅仅在最后加一个硬件(如四选一数字开关CC4052)就可以将程序中所定义的“00”、“01”、“11”分别转换成0、+1、-1,从而达到设计所需结果。图4-8单/双极性变换控制流程图(2)程序设计以下程序是实现单极性变双极性控制功能的程序。————实现单极性变双极性功能output:PROCESS(clk)--输出BEGINIF(RISING_EDGE(clk))THENIF((codeoutb="01")OR(codeoutb="10"))THEN--1或BIF(flag1b=1)THENcodeout<="01";flag1b<=0;ELSEcodeout<="11";flag1b<=1;ENDIF;ELSIF(codeoutb="11")THEN--VIF(flag1b=1)THENcodeout<="11";ELSEcodeout<="01";ENDIF;ELSEcodeout<="00";flag1b<=flag1b;ENDIF;ENDIF;4.实现单/双极性变换的硬件部分简介由上述的程序下载到FPGA或CPLD中,其输出结果并不是“+1”、“-1”、“0”的多电平变化波形,而是单极性双电平信号。事实上,上面的程序输出的是给单/双变换器的硬件电路地址信号。利用一个四选一的数据选择器CC4052(其功能表如表4-5所示),二维数组作为CC4052的选择地址,在输出端out可以得到符合规则的“+1”、“-1”、“0”变化波形。4.4.3编码器模块的总程序VHDL语言描述使用了三个层次。包括库(LIBRARY)说明,实体(ENTITY)说明,结构体(ARCHITECTURE)说明。以下程序hdb3.vhd为整个设计模块,只是将前三个程序用结构描述方式组装起来。注:由于程序太长,参见教材P83-854.2.4编码器模块的时序仿真

其仿真波形如图4-9所示。仿真波形的最后输出结果“out1”并不是“+1”、“-1”、“0”的多电平变化波形。它实际上是一组地址控制码。为了实现真正意义上的HDB3码输出,即可用示波器观察,还需要增加外围电路,如前面介绍的cc4052数据选择器等。用“out1”输出的地址码控制数据选择器来选择“+1”、“-1”和“0”三种电平。图4-9编码器模块仿真波形4.5

HDB3编码器的VHDL建模与程序设计(2)上一节介绍了实现HDB3编码的一种VHDL建模方法,本节这种就插“V”和插“B”,介绍另一种实现HDB3编码的VHDL建模方法,并给出对应的程序设计和波形仿真。4.5.1设计模型HDB3编码器的整体模型如图4-10所示。它包括了“1”码极性形成及插“V”、补“B”、输出控制码和外围硬件电路cc4052数据选择器等几部分。

图4-10HDB3编码器的整体模型1.插V模块的实现(1)建模该模块实现的功能其实不仅仅是插V及其极性,还包括1码的极性形成。这是非常关键的一部分,尤其是1码的极性判断,它不仅关系到1码本身的极性确定,更关系到下面补B的判断。插"V"符号的设计思想很简单:首先判断输入的信码是什么,如果输入的是0码,则接着判断这是第几个0码,如果是第四个0码,则把这一位码元变换成为V码。在其他条件情况下,让原代码照常输出。“1”码及V码的极性是这样确定的:用两个信号(flag1和flag0)分别标识V的极性和非零码(包括“1”和V)的极性。若flag1/flag0等于0,表示前一“V”/非“0”码极性为负,若等于“1”则表示其极性为正。对于输入的码流检测,可能出现两种情况:第一种,若第一个四连0之前有“1”码,第一个“1”码的极性由非零码的标识位flag0的初始值确定,后边“1”码的极性随之确定,第一个V的极性由前“-1”码的极性决定,由于V码的极性是自行交替的,所以后面V码的极性均可确定。第二种,若第一个四连0前没有“1”码,则第一个V码的极性由它的标识信号的初始值确定。后边出现的“1”码和V码的极性均由第一个V的极性确定。输出均由三位码表示。图4-11是实现插V功能的具体流程图。图中:codeoutv——表示插V后的码元;cnt0——记连0个数;flag0——标识前一非0码的极性;flag1——标识前一V码的极性“010”——表示-1;“110”——表示+1;“011”——表示-V;“111”——表示+V;fiestv——第1个“V”码

图4-11插“V”流程图(2)程序设计以下程序是完成HDB3编码的程序中实现插V功能的部分程序。----实现1码单极性确定和插V功能BEGINadd_v:process(clk,clr)BEGINIFclk'eventandclk='1'THEN--时钟上升沿识别信码

IFclr='1'THEN--置位端低电平有效

codeoutv<="000";cnt0<=0;ELSECASEcodeinIS--用CASE语句判别输入的信码

WHEN'1'=>--输入1码计数器置0

cnt0<=0;if(flag0=0)then

codeoutv<="110";--1的极性由flag0的值确定

flag0<=1;else

codeoutv<="010";flag0<=0;endif;WHEN'0'=>--输入信码为0时

IFcnt0=3THEN--检测到四连0需要补V时

IFfirstv=0then--第一个V的极性确定

ifflag0=0then

codeoutv<="011";flag1<=0;else

codeoutv<="111";flag1<=1;(3)程序的波形仿真图4-12是一路信码经过插V模块后的输出波形仿真图。图中,codein表示码元输入;clr表示置位信号,低电平有效;codeoutv用三位二进制码表示,codeoutv数值的意义为:000——0码、010——-1、110——+1、011——-V、111——+V。图4-12插V后输出波形仿真图2.补B模块的实现(1)建模根据HDB3的编码规则,补B模块的功能是保证附加V符号后的序列不破坏"极性交替反转"造成的无直流特性,即当相邻V符号之间有偶数个非0符号的时候,把后一小段的第一个0变换成一个非破坏符号B符号。本设计中无需上述那么复杂的判断,由上面插V后的输出的码流,我们无需检测相邻V码之间非0符号的个数,就可以很轻而易举地识别出需要加B的位置以及B的极性。根据HDB3的编码原理,V的极性总是与前面非零码的极性相同的,所以只需识别出V码的极性是否与前面非0码的极性相同。若相同,则不需要加B;若不同,则需要加B。B的极性与后面V的极性相同,也可以说与前面1码的极性相同,都可确定B码的极性。

程序中使用了元件例化语句用D触发器连接组成移位寄存器。首先把经插V处理过的信码放入到移位寄存器里,在同步时钟的作用下,同时进行是否补B的判决,等到码元从移位寄存器里出来的时候,若需要补B,则把-B/+B的表示码直接赋值给移位寄存器的第四位;若不需补B,就直接把第三位的值传到第四为输出即可,照原码输出。图4-13是补B模块的详细流程图。注:程序中“0”由“000”表示;“-B”由“001”表示;“+B”由“101”;“-1”由“010”表示;“+1”由“110”表示;“-V”由“011”表示;“+V”由“111”表示;flag2标识前一“V”码的极性;flag3标识前一非零码的极性。

图4-13补“B”模块流程图(2)程序设计

以下程序是完成HDB3编码的程序中实现补“B”功能的部分程序。----实现补B功能s0(0)<=codeoutv(0);--把由补V模块输出的信码赋值给移位寄存器的第一位

s1(0)<=codeoutv(1);s2(0)<=codeoutv(2);ds21:DFFPORTMAP(S2(0),clk,S2(1));--用元件例化语句把由同步时钟控制的四个D触发器连接起来构成四位移位寄存器

ds11:DFFPORTMAP(s1(0),clk,s1(1));

ds01:DFFPORTMAP(s0(0),clk,s0(1));

ds22:DFFPORTMAP(s2(1),clk,s2(2));ds12:DFFPORTMAP(s1(1),clk,s1(2));ds02:DFFPORTMAP(s0(1),clk,s0(2));ds23:DFFPORTMAP(s2(2),clk,s2(3));ds13:DFFPORTMAP(s1(2),clk,s1(3));ds03:DFFPORTMAP(s0(2),clk,s0(3));

bclk:clkb<=NOTclk;--由于延时的存在,将时钟反转,保证上升沿触发

add_b:PROCESS(clkb)BEGINIFclkb'eventandclkb='1'THEN

CASEcodeoutv

IS--用CASE语句实现多条件选择输入为+1时,按原码输出

WHEN"110"=>flag3<=1;s2(4)<=s2(3);s1(4)<=s1(3);s0(4)<=s0(3);WHEN"010"=>--输入为-1时,按原码输出

flag3<=0;s2(4)<=s2(3);s1(4)<=s1(3);s0(4)<=s0(3);WHEN"111"=>-输入为+V时若前一非0码的极性为负,则需要补+B,直接把+B的表示值赋给移位寄存器的第四位输出

ifflag3=0thens2(4)<='1';s1(4)<='0';s0(4)<='1';flag3<=1;else--否则不需补B,按原码输出

s2(4)<=s2(3);s1(4)<=s1(3);s0(4)<=s0(3);endif;flag2<=1;WHEN“011”=>--输入为-V时若前一非0码为负,不需补B,按原码输出

ifflag3=0thens2(4)<=s2(3);s1(4)<=s1(3);s0(4)<=s0(3);else--否则需要补-B,直接把-B的表示值赋给移位寄存器的第四位输出

s2(4)<='0';s1(4)<='0';s0(4)<='1';flag3<=0;endif;flag2<=0;WHENOTHERS=>--没在上述四种情况之列的,按原码输出

s2(4)<=s2(3);s1(4)<=s1(3);s0(4)<=s0(3);ENDCASE;

codeoutb<=s2(4)&s1(4)&s0(4);ENDIF;ENDprocessadd_b;(3)波形仿真图4-14是一路信码经过插V、补B模块后的输出波形仿真图,图中“codeoutb”是经过四位移位寄存器后的输出,所以有较大的延时。图中:codein——码元输入;clr——置位信号,低电平有效;clk——时钟输入;codeoutv10~2——codeoutv的三位二进制数码;codeoutv——补V输出;codeoutb0~2——codeoutb的三位二进制数码;codeoutb——补B后的输出,其中数值0表“0”码;数值1表示“-B”;数值2表示“-1”;数值3表示“-V”;数值5表示“+B”;数值6表示“+1”;数值7表示“+V”图4-14信码经过插V补B后的输出波形仿真图3.单/双变换控制的实现(1)建模可以看到,经过上述插V、补B两个步骤之后,输入信码已经转换成HDB3码,但是实际中HDB3码是双极性码,下面要做的工作是如何从目标芯片中输出,再经过一定的硬件电路,实现从单极性到双极性的转换。

选用四选一模拟开关CC4052实现由单极性到双极性的转换,后面将具体介绍CC40542。CC4052通过两个输入端的不同组合选通不同的通道,实现输出双极性电平。所以在程序中必须把用三位表示的+1、+V、+B、-1、-V、-B和0转换成由两位码识别,这很容易实现。因为在编好HDB3码后,我们就不需要再对+V、+B、-V、-B进行识别,它们是和+1、-1一样的正负电平,所以可以把原来的七种状态转化成+1、-1和0三种状态即可,三种状态自然只用二机制数就能识别。图4-15是输出模块的具体流程图。

图4-15输出控制码模块流程图(2)程序设计下面的程序是按上面流程图编写的程序

――实现输出模块的功能outclk:clkout<=clkafter5ns;output:PROCESS(clkout)BEGINIFclkout'eventandclkout='1'THENifcodeoutb="000"then--输入为0是输出为0

codeout<="00";elsifcodeoutb="001"orcodeoutb="010"orcodeoutb="011"then--输入为-1、-V、-B时输出-1,-1codeout<="01";--由“01”表示

else

codeout<="10";--输入为+1、+、V、+B时输出,+1,+1由“10”表示

endif;endif;endprocessoutput;(3)关于四选一模拟开关CC4052的连接本设计中使用CC4052的主要目的是将目标芯片的标识性输出转换成双极性信号,最终实现HDB3编码。表4-5清楚地表明了CC4052的功能。由目标芯片中输出的是一二维数组,实际上就是两路码元,这两路码作为CC4052的地址输入,选中不同的通道,即可实现单极性到双极性的转换。在本设计中,只用到了一组通道,输出为非归零码。图4-16是CC4052的接线图图4-16CC4052的接线图4.5.2

HDB3编码整体模块的总程序及波形仿真1.总设计程序注:由于程序太长,参见教材P93-972.波形仿真图4-17是输入信码经过输出模块,也就是整个程序后的输出波形仿真图。可以看到,输出是一个二维数组,共有有三种状态。波形仿真图中“10”表示“+1”,“01”表示“-1”,“00”表示“0”。下面将按照编码规则对原输入信码进行编码,与之进行比较。图4-17HDB3编码器波形仿真图综合4.4和4.5节,我们总结出本章介绍的两种HDB3编码器的建模方法的异同点:(1)两种方法都考虑到HDB3编码器VHDL设计的难点在于如何识别“1”、“V”、“B”符号,并以此为研究主要对象,着重解决了该问题。(2)两种方法都采用了外接单/双变换器解决正负电平信号输出问题。(3)第1种方法采用双相码作为识别标志;第2种建模方法是利用三位二进制码分别对插V和插B模块中各符号进行标识。(4)两种方法都可完整地实现HDB3编码,但两种方法都较复杂。事实上还可能找到其它的建模方法,利用VHDL语言实现HDB3编码器的设计。读者可根据自己的建模思想进行这方面的探讨。4.6

HDB3译码器的VHDL建模与程序设计4.6.1

HDB3译码器的整体模型1.整体建模译码原理:根据编码规则,破坏点V脉冲与前一个脉冲同极性。因而可从所接收的信码中找到V码,然后根据加取代节的原则,V码与前面的三位代码必然是取代码,在译码时,须全部复原为四连0。只要找到V码,不管V码前是两个“0”码,还是三个“0”码,一律把取代节清零,完成了扣V扣B功能,进而得到原二元信码序列。可实现HDB3译码的模型框图如图4-18所示。HDB3译码器包括双/单极性变换、V码检测、时钟提取、扣V扣B四部分组成。图4-18HDB3译码器模型图中双/单极性变换电路由两个正负整流电路组成。正整流电路提取正电平码部分;负整流电路提取负电平部分。V码检测电路包括+V码检测和-V码检测两部分。根据编码规则,V脉冲必然是同极性脉冲。当无V脉冲时,传号脉冲“+1”和“-1”交替出现。当连续出现两个“+1”或“-1”时,若无误码,则后一个一定是V脉冲。时钟提取电路用于提取同步时钟。扣V扣B电路在V脉冲和同步时钟的控制下,完成扣V扣B的功能。由于双/单极性变换电路涉及到双极性信号,无法在FPGA中实现,需加外围硬件电路。

2.V码检测模块的建模(1)+V码检测为了方便起见,设从正整流电路输出的信号为+B,从负整流电路输出的信号为-B。+V码检测模块-B的控制下,对输入的+B进行检测。其原理是:当+B的上升沿到来时,对输入的+B脉冲进行计数,当计数值等于2时,输出一个脉冲作为+V脉冲,同时计数器清零,而且在计数期间,一旦有-B信号为“1”电平时,立即对计数器清零,计数器重新从零开始计数。这是因为在两个+B脉冲之间,存在-B脉冲,说明第二个+B脉冲不是+V码,而只有在连续两个+B脉冲之间无-B脉冲,才能说明这两个+B脉冲在HDB3码中,是真正地同极性的,于是就可以判定第二个+B脉冲实际上是+V码,达到检测+V码的目地。+V码检测的模型框图如图4-19所示。图4-19+V模块检测框图(2)-V码检测-V码检测原理与+V码检测的类似。所不同的是,-V码检测电路在+B控制下,对来自-B信号进行计数和检测、判定,若检测到-V码,则输出-V码信号。-V码检测模型框图如图4-20所示。图4-20–V码检测模型框图3.扣V扣B模块建模从图4-18中,可看到,扣V扣B模块有三个输入信号,即时钟信号、V码信号和来自正、负整流输出的合路信号。由于该合路信号可能包含有B脉冲和V脉冲,因此需要在扣V扣B模块中,去除V和B脉冲。本模块的建模方法是,用V码检测模块所检测出的V码信号,去控制一个移位寄存器,若未碰到V脉冲,则整流输出合成信号在时钟的节拍下,顺利通过移位寄存器,当碰到有V脉冲时,该V脉冲将使移位寄存器清零。考虑到四连0,即V脉冲及其前面的三个码元应为0码,所以,可设置四位的移位寄存器,当V码清零时,同时将移存器中的四位码全变为0。不管是否有B脉冲,在此模块中,一并清零,因而无须另设扣B电路。另外移位四位寄存器起到延时四位时钟周期的作用,以使所检测出的V脉冲与信号流中的V脉冲位置对齐,保证清零的准确性。扣V扣B模块的模型框图如图4-21所示。图4-21扣V扣B模块框图4.6.2程序设计1.+V码检测模块的VHDL程序设计依据上述建模思想,编写其VHDL程序如下:

LIBRARYIEEE;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityZvis--+V码检测器的实体名

port(fb,zb:INstd_logic;

zvout:outstd_logic);endZV;architecturebhofZVissignalM:std_logic_vector(2downto0);beginprocess(zb,fb)beginiffb='1'thenM<="000";

elsifzb'eventandzb='1'then

ifM<2thenM<=M+1;

endif;endif;endprocess;process(FB,M)beginifFB='0'thenifM<2then

zvout<='0';else

zvout<=zb;endif;elseZVOUT<='0';endif;endprocess;endbh;

architecturehhofVissignalN:std_logic_vector(2downto0);beginprocess(zb,fb)begin

ifzb='1'thenN<="000";

elsiffb'eventandfb='1'then

ifN<2thenN<=N+1;

endif;endif;endprocess;

process(ZB,N)beginifZB='0'thenifN<2then

fvout<='0';else

fvout<=fb;endif;elsefVOUT<='0';endif;endprocess;endhh;2.-V码检测模块的VHDL程序设计依据上述建模思想,编写其VHDL程序如下:

LIBRARYIEEE;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityFvis---V码检测器的实体名

port(fb,zb:INstd_logic;

Fvout:outstd_logic);endFV;architecturehhofFVissignalN:std_logic_vector(2downto0);beginprocess(zb,fb)begin

ifzb='1'thenN<="000";

elsiffb'eventandfb='1'then

ifN<2thenN<=N+1;

endif;endif;endprocess;process(ZB,N)beginifZB='0'thenifN<2then

fvout<='0';else

fvout<=fb;endif;elsefVOUT<='0';endif;endprocess;endhh;3.扣V扣B模块程序设计依据扣V扣B模块的建模思想,编写其VHDL程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYKvbIS--扣V扣B模块的实体名

PORT(CLK:INSTD_LOGIC;V,datain:INSTD_LOGIC;DECODE:OUTSTD_LOGIC);ENDKvb;ARCHITECTUREBEHAVOFKvbISSIGNALA0,A1,A2,A3:STD_LOGIC;BEGINPROCESS(CLK,v)BEGINIFCLK'EVENTANDCLK='1'THENIF(v='1')THENA0<='0';A1<='0';A2<='0';A3<='0';decode<=A0;ELSIF(V='0')THENA3<=DATAIN;A2<=A3;A1<=A2;A0<=A1;DECODE<=A0;

ENDIF;ENDIF;ENDPROCESS;ENDBEHAV;4.加法器程序设计libraryieee;useieee.std_logic_1164.all;entityor1is--或门的实体名port(a,b:instd_logic;c:outstd_logic);endentityor1;architectureoneofor1isbeginc<=aorb;--非门逻辑描述endarchitectureone;5.

HDB3译码器的元件例化程序设计libraryieee;useieee.std_logic_1164.all;entityDECODEis--译码器的实体名port(FB,ZB,CLK:instd_logic;DECODE,v2,v3:outstd_logic);endentityDECODE;ARCHITECTUREHHOFDECODEIS

COMPONENTKvb--kvb

PORT(CLK:INSTD_LOGIC;V,datain:INSTD_LOGIC;DECODE:OUTSTD_LOGIC);ENDCOMPONENTKvb;COMPONENTor1

温馨提示

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

评论

0/150

提交评论