1、基于VHDL语言的5B6B编译系统设计基于VHDL语言的5B6B编译系统设计摘要: mBnB 码是光纤通信系统中常用的码型之一, 本次设计了一种简单实用的5B6B 编码方法, 并提出了用A ltera开发系统的硬件描述语言VHDL 实现全数字5B6B 编译码电路的设计思想和方法, 最后给出了波形仿真结果。本文给出了针对该编码方法的除数字锁相环之外的一种简单方便的VHDL 语言设计方法。关键词: 5B6B 码; FPGA; VHDL 语言; 波形仿真编码部分(Encode5B6B):一、 5B6B 编码原理 mBnB码又叫分组码,是一类冗余二进制码,常见到的有1B2B、2B3B、4B5B、5B6
2、B、8B10B等码型。它将输入的原始码流分成mB为一组的码字,然后在同样的时间内将其变换成n(nm)比特(nB)为一组的较长码字,最后以不归零或归零格式传输这些新码流。m和n均为正整数,一般是n=m+1。通过变换,线路码数率比原二进制码率提高了n/m倍。5B6B码为字母型平衡码中mBnB码的一种,其编码复杂性和比特冗余度之间是最合理的折中,因此使用较为普遍。在5B6B码中,5伟二进制码共有=32种不同的码字,而6位二进制码共有64种不同的码字,必须从64种码字中选出适宜的码字去对应5B码的32种码字。首先引入不平衡度D(Dispartty)的概念,它表示一个码字中“0”元数目减去“1”元数目的
3、差值,差值为零的码字为零不平衡度码字。由于6B码码长为偶数,所以D必为偶数,即D为0,2,-2,4,-4,6,-6。在6B码的64个码字中,有20个零平衡度码字,可以代表20个5B码字。通常情况下,根据尽量选择低不平衡度码字的原则,找出D=2,-2的码字各有12种,为了使“0”码和“1”码出现的机会相同,可以把这些码字相对应的交替使用,用以代表5B码中另外的12个码字。这样编出来的6B码流中最大同符号连续数为6,“0”码和“1”码出现的概率均等,各占50%,所以可以认为没有直流漂移。必须指出,根据不同目的(例如:直流分量最低或实现方法简单等)所提出的编码方案,所对应的编码表是不同的。在本文中,
4、出于减少最大同符号连续数的考虑,采用表一所示的5B6B 编码表,表中巧妙的调整了正,负不均码与均等吗的对应关系(例如输入码子“7”,“24”的变换),使本码表得出的6b码流中最大的同符号连续数为5,使“0”、“1”的转换概率达到了0.5915,提高了定时信息的含量。 表一中,模式1和模式2分别由19个D=0的码字和13个RDS=2,-2的码字组成。大多数mBnB 码都采用两种模式编码, 两种模式交替使码字中的不均值为零。这种编码电路多采用可编程只读存储器PROM 查找表的方法实现。下面是一种5B6B码的码表。 表一如下 所示:输入码字(5b)输出码字(6b)输入码字(5b)输出码字(6b)模式
5、一模式二模式一模式二00000011001011001016100001100011100011000011100111000011710001111001010001200010110110100010181001011101001001030001110001110001119100110100110100114001001101011001002010100110100110100500101100101100101211010101010101010160011010011010011022101100101100101107001111001110001112310111010111
6、010100801000101011101000241100011100001100090100110100110100125110010110010110011001010101010101010261101001101001101011010110010110010112711011011011001010120110010110010110028111000111000111001301101101101000101291110101110100100114011101011100001103011110011110001100150111100111000111031111110011
7、01001101 二 5B6B 的编码电路设计 5B6B 编码电路的工作原理: 为了实现5B6B 编码, 本设计是以随机码作为输入的数字信号。因此, 完整的5B6B 编码电路包括分频电路、串并转换电路、编码电路和并串转换电路组成。 (1)五分频器:五分频 序列发生器的输入时钟脉冲五分频,从而可以实现每输入5BIT的串行信号就同步转换输出出五位的并行信号,实现时钟信号的同步。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt5 isport(clk5:in std_logic; n
8、ewclk1:out std_logic);end;architecture exam of CNT5 issignal q:integer range 0 to 4;signal temp: std_logic;beginprocess(clk5) begin if clk5event and clk5=1 then -表示检测clock的上升沿 if q=4 then q=0; temp=1; else q=q+1;temp=0; end if; end if; end process; newclk1=temp; -newclk1是用于五串变五并模块和编码部分的控制时钟end exam;
9、五分频分频功能仿真波(2) 串并转换(5位串变5位并)(用循环移位实现)Clk0来一次有效,Y接收串行的数据就向右移一位,当五分频的信号clk5有效时把Y输出。编码部分五串变五并程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity SER2PAR5to5 isport(clk5:in std_logic;shift_in:in std_logic;A:out std_logic_vector(4 downto 0);end ;architecture one of SER2PAR5t
10、o5 issignal q: std_logic_vector(4 downto 0);beginp1:process(clk5)beginif clk5event and clk5=1 thenq=shift_in & q(4 downto 1);end if;end process p1;AREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGRE
11、GREGREGREGREGREGREGREGREGREGREGREGREGREGREGREG=NULL; end case; end if; END PROCESS P1; P2:PROCESS(CLK6) BEGIN IF CLK6EVENT AND CLK6=1 THEN Q=REG; END IF; END PROCESS P2; END ONE;编码仿真波形如下:(4)六分频器:六分频 序列发生器的输入时钟脉冲六分频,从而可以实现每输入6BIT的并行信号就将其转换给变量。具体程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.s
12、td_logic_unsigned.all;entity CNT6 isport(clk6:in std_logic; cnter:out std_logic);end;architecture exam of CNT6 issignal q:std_logic_vector(2 downto 0);signal temp: std_logic;beginprocess(clk6) begin if clk6event and clk6=1 then if q=101 then q=000; temp=1; else q=q+1; temp=0; end if; end if; end pro
13、cess; cnter=temp;end exam;六分频分频功能仿真波形图:(5)六位并变串转换 把编码实现的6位码,由并行转换为串行输出。library ieee;use ieee.std_logic_1164.all;entity PAR2SER6to6 isport (clk0,clk6: in std_logic;Q : in std_logic_vector(5 downto 0);shift_out : out std_logic);end PAR2SER6to6;architecture one of PAR2SER6to6 is signal N:INTEGER RANGE
14、0 TO 5; signal REG:std_logic_vector(5 downto 0); begin p1:process(clk6,Q) begin if clk6event and clk6=1 then REG=Q; end if; end process p1; PROCESS(CLK0,REG,N) BEGIN IF CLK0EVENT AND CLK0=1THEN IF N=5 THEN N=0; ELSE Nshift_outshift_outshift_outshift_outshift_outshift_outshift_out=X; end case; end pr
15、ocess; end one;六位并到串 仿真波形图:解码部分(Encode5B6B):一、解码原理 解码器与编码器基本相同,只是除去组别控制部分。 译码时,把送来的已变换的6B信号码流,每6比特并联为一组,作为PROM的地址,然后读出5B码,再经过并-串变换还原为原来的信号码流。二 5B6B 的译码电路设计解码器包括5分频电路、6分频电路、串并转换电路、解码电路和并串转换电路组成。(1)译码部分六分频器(用于产生同步时钟信号):library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT
16、6 isport(clk6:in std_logic; cnter:out std_logic);end;architecture exam of CNT6 issignal q:std_logic_vector(2 downto 0);signal temp: std_logic;beginprocess(clk6) begin if clk6event and clk6=1 then if q=101 then q=000; temp=1; else q=q+1; temp=0; end if; end if; end process; cnter=temp;end exam;六分频分频功
17、能仿真波形图:(2)串行转并行(6位串变6位并):library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity SER2PAR6to6 is port(clk6:in std_logic; shift_in:in std_logic; A:out std_logic_vector(5 downto 0);end ;architecture one of SER2PAR6to6 issignal q: std_logic_vector(5 downto 0);begin p1:process(clk6) begin if clk6event and clk6=1 then q=shift_in & q(5 downto 1); end if; end process p1; AREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREGREG