文档介绍:基于VHDL的3B4B线路编码/解码实现
摘要:
mBnB 码是光纤通信系统中常用的码型之一, 本次设计了一种简单实用的3B4B 编码方法, 并提出了用A ltera开发系统的硬件描述语言VHDL 实现全数字3B4B 编译码电路的设计思想和方法, 最后给出了波形仿真结果。本文给出了针对该编码方法的除数字锁相环之外的一种简单方便的VHDL 语言设计方法。
关键词: 3B4B 码; FPGA; VHDL 语言; 波形仿真
编码部分(Encode3B4B):
一、 3B4B 编码原理
大多数mBnB 码都采用两种模式编码, 两种模式交替使码字中的不均值为零。这种编码电路多采用可编程只读存储器PROM 查找表的方法实现。下面介绍一种3B4B码, 可用更为简单的电路实现, 其编码规则具体说明如下:
先将输入的数字信号每3 b 为一码字, 在同样长的时间间隔内变换成4 b 一组的输出码字。
①变换后4 b 的一个码字中, 第1 与第4 比特位分别由变换前3 b 码字中的第1 与第3 比特位取反而得到;
②变换前的第1 与第2 比特位分别作为变换后的第2与第3 比特位。其编码情况如表1 所示。
表1 3B4B 编码表 3B
000
001
010
011
100
101
110
111
4B
1001
1000
1011
1010
0101
0100
0111
0110
二 3B4B 的编码电路设计
3B4B 编码电路的工作原理:
为了实现3B4B 编码, 本设计是以随机码作为输入的数字信号。因此, 完整的3B4B 编码电路包括分频电路、串并转换电路、编码电路和并串转换电路组成,
如图1 所示。
图1
1:分频模块:
a 三分频序列发生器的输入时钟脉冲三分频,从而可以实现每输入3BIT的串行信号就同步转换输出出三位的并行信号,实现时钟信号的同步。
b 四分频序列发生器的输入时钟脉冲四分频,从而可以实现每输入4BIT的并行信号就把转换给变量
if clk4'event and clk4='1' then
REG<=Q;
2:串并转换模块(用循环移位实现)
Clk0来一次有效,Y接收串行的数据就向右移一位,当三分频的信号clk3有效时把Y输出。
architecture one of SER2PAR is
signal q: std_logic_vector(2 downto 0);
begin
p1:process(clk0)
variable n:integer:=0;
begin
if clk0'event and clk0='1' then
q<=shift_in & q(2 downto 1);
end if;
end process p1;
p2:process(clk3)
begin
if clk3'event and clk3='1' then
Y<=q;
end if;
end process p2;
3:编码
根据自己的码表,确定3位码对应的4位码,利用类似查表的方法,把输入的三位数据当作rom中的地址,然后输出对应的4位码。
ARCHITECTURE ONE OF PROM IS
SIGNAL REG:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
P1:PROCESS(Y,F)
BEGIN
if F='0' then
case Y is
when "000"=>REG<="1011";--11
when "001"=>REG<="1110";--14
when "010"=>REG<="0101";--5
when "011"=>REG<="0110";--6
when "100"=>REG<="1001";--9
when "101"=>REG<="1010";--10
when "110"=>REG<="0111";--7
when "111"=>REG<="1101";--13
WHEN OTHERS=>REG<=NULL;
end case;
end if;
if F='1' then
case Y is
when "000"=>REG<="0100";--4
when "001"=>REG<="0001";--1
when "010"=>REG<="0101";--5
when "011"=>REG<="0110";--6
when "100"=>REG<="1001";--9