基于FP GA的HDB3码的编码器与译码器设计(软件设计)
2.3 HDB3码的译码规则
HDB3码的译码是编码的逆过程,其译码相对于编码较简单。从其编码的原理可
知,每一个破坏符号V总是与前一个非0符号同极性,因此,在HDB3码序列中,容易识别V符号,同时也肯定V符号及其前面的3个符号必是连0符号,这样就恢复成了4个连0码,然后再将所有的-1变成+1后便得到了原消息代码。举例如表2.1所示:
表2.1 HDB3码的译码规则
HDB3 +1 0 -1 0 +1 -1 0 破坏符V,B 译码 0 0 -1 +1 0 0 +1 -1 0 +1 1 -V +B +V 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 2.4 HDB3码的检错能力
HDB3码具有较强的检错能力,当数据序列用HDB3码传输时,若传输过程中出现单个误码,其极性交替变化规律将受到破坏,因而在接收端根据HDB3码这一独特规律特性,可检出错误并纠正错误,同时HDB3码方便提取位定时信息。因而HDB3码作为数据传输的一种码型,应用广泛,成为ITU推荐使用的码型之一。
12
基于FP GA的HDB3码的编码器与译码器设计(软件设计)
第三章 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所示
4连“0”的检出加V补BNRZHDB3AMI编码时延
图3.1 HDB3编码器实现原理框图
加B00V还是000V,可根据如下表3.1所示的相关极性关系进行判断
13
基于FP GA的HDB3码的编码器与译码器设计(软件设计)
表3.1 取代节极性判决
V的前一个“1”的极性 V的极性 两个V之间“1”奇偶个的+ + 偶数个 - - 偶数个 + + 奇数个 - - 奇数个 数的判断 取代节 B00V -BOO-V 000V 000-V 3.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码元 +1 0 -1 自定单极性标识 01 00 11
因此在最后,还须接外部电路,把单极性转换为双极性输出。比如利用一个四选一的数据选择器CC4052(其功能如表3.2所示),二维数组作为CC4052的的选择地址,在输出端out可以得到符合规则的“+1”、“-1”、“0”变化波形
14
基于FP GA的HDB3码的编码器与译码器设计(软件设计)
表3.2 CC4052功能表
输入 INH L L L L H A1 L L H H X A0 L H L H X IO/O导通通道 ??O/I O/O1??O/I /O2??O/I /O3??O/I 无 把得到的两个输出的分别接到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 is
Port(clk :in std_logic; ---系统时钟输入 Datain :in std_logic; ---基带信号输入
Plusvout :out std_logic_vector(1 downto 0); ---插“V”处理后输出 End hdb3plusv;
Architecture behave of hdb3plusv is
15
基于FP GA的HDB3码的编码器与译码器设计(软件设计)
Signal plusvregh : std_logic_vector(3 downto 0); Signal plusvreg1 : std_logic_vector(3 downto 0); Signal dataregn : std_logic_vector(2 downto 0); Begin Process(clk) Begin
If clk’event and clk=’1’ then If datain=’1’ then
Dataregn<=’0’ & dataregn(2 downto 1); Else
Dataregn<=’1’ & dataregn(2 downto 1);
End if; End process; Process(clk) Begin
If cld’event 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);
16