基于VHDL语言的5B6B编译系统设计.docx

上传人:b****5 文档编号:7454753 上传时间:2023-05-11 格式:DOCX 页数:18 大小:376.75KB
下载 相关 举报
基于VHDL语言的5B6B编译系统设计.docx_第1页
第1页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第2页
第2页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第3页
第3页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第4页
第4页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第5页
第5页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第6页
第6页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第7页
第7页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第8页
第8页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第9页
第9页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第10页
第10页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第11页
第11页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第12页
第12页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第13页
第13页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第14页
第14页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第15页
第15页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第16页
第16页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第17页
第17页 / 共18页
基于VHDL语言的5B6B编译系统设计.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于VHDL语言的5B6B编译系统设计.docx

《基于VHDL语言的5B6B编译系统设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的5B6B编译系统设计.docx(18页珍藏版)》请在冰点文库上搜索。

基于VHDL语言的5B6B编译系统设计.docx

基于VHDL语言的5B6B编译系统设计

课题名称:

基于VHDL语言的5B6B编译系统设计

班级:

通信工程0902,0903

姓名学号:

陈莹莹200954080209

巢楚颉200954080302

肖泉200954080208

指导教师:

单老师

2011年11月7日

 

基于VHDL语言的5B6B编译系统设计

摘 要:

mBnB码是光纤通信系统中常用的码型之一,本次设计了一种简单实用的5B6B编码方法,并提出了用Altera开发系统的硬件描述语言VHDL实现全数字5B6B编译码电路的设计思想和方法,最后给出了波形仿真结果。

本文给出了针对该编码方法的除数字锁相环之外的一种简单方便的VHDL语言设计方法。

关键词:

5B6B码;FPGA;VHDL语言;波形仿真

编码部分(Encode5B6B):

一、5B6B编码原理

mBnB码又叫分组码,是一类冗余二进制码,常见到的有1B2B、2B3B、4B5B、5B6B、8B10B等码型。

它将输入的原始码流分成mB为一组的码字,然后在同样的时间内将其变换成n(n>m)比特(nB)为一组的较长码字,最后以不归零或归零格式传输这些新码流。

m和n均为正整数,一般是n=m+1。

通过变换,线路码数率比原二进制码率提高了n/m倍。

5B6B码为字母型平衡码中mBnB码的一种,其编码复杂性和比特冗余度之间是最合理的折中,因此使用较为普遍。

在5B6B码中,5伟二进制码共有

=32种不同的码字,而6位二进制码共有64种不同的码字,必须从64种码字中选出适宜的码字去对应5B码的32种码字。

首先引入不平衡度D(Dispartty)的概念,它表示一个码字中“0”元数目减去“1”元数目的差值,差值为零的码字为零不平衡度码字。

由于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%,所以可以认为没有直流漂移。

必须指出,根据不同目的(例如:

直流分量最低或实现方法简单等)所提出的编码方案,所对应的编码表是不同的。

在本文中,出于减少最大同符号连续数的考虑,采用表一所示的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)

模式一

模式二

模式一

模式二

0

00000

110010

110010

16

10000

110001

110001

1

00001

110011

100001

17

10001

111001

010001

2

00010

110110

100010

18

10010

111010

010010

3

00011

100011

100011

19

10011

010011

010011

4

00100

110101

100100

20

10100

110100

110100

5

00101

100101

100101

21

10101

010101

010101

6

00110

100110

100110

22

10110

010110

010110

7

00111

100111

000111

23

10111

010111

010100

8

01000

101011

101000

24

11000

111000

011000

9

01001

101001

101001

25

11001

011001

011001

10

01010

101010

101010

26

11010

011010

011010

11

01011

001011

001011

27

11011

011011

001010

12

01100

101100

101100

28

11100

011100

011100

13

01101

101101

000101

29

11101

011101

001001

14

01110

101110

000110

30

11110

011110

001100

15

01111

001110

001110

31

11111

001101

001101

二5B6B的编码电路设计

5B6B编码电路的工作原理:

为了实现5B6B编码,本设计是以随机码作为输入的数字信号。

因此,完整的5B6B编码电路包括分频电路、串并转换电路、编码电路和并串转换电路组成。

(1)五分频器:

五分频序列发生器的输入时钟脉冲五分频,从而可以实现每输入5BIT的串行信号就同步转换输出出五位的并行信号,实现时钟信号的同步。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt5is

port(clk5:

instd_logic;

newclk1:

outstd_logic);

end;

architectureexamofCNT5is

signalq:

integerrange0to4;

signaltemp:

std_logic;

begin

process(clk5)

begin

ifclk5'eventandclk5='1'then--表示检测clock的上升沿

ifq=4then

q<=0;temp<='1';

elseq<=q+1;temp<='0';

endif;

endif;

endprocess;

newclk1<=temp;--newclk1是用于五串变五并模块和编码部分的控制时钟

endexam;

五分频分频功能仿真波

(2)串并转换(5位串变5位并)(用循环移位实现)

Clk0来一次有效,Y接收串行的数据就向右移一位,当五分频的信号clk5有效时把Y输出。

编码部分五串变五并程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitySER2PAR5to5is

port(clk5:

instd_logic;

shift_in:

instd_logic;

A:

outstd_logic_vector(4downto0));

end;

architectureoneofSER2PAR5to5is

signalq:

std_logic_vector(4downto0);

begin

p1:

process(clk5)

begin

ifclk5'eventandclk5='1'then

q<=shift_in&q(4downto1);

endif;

endprocessp1;

A<=q;

endone;

五位串变并波形仿真图:

(3)编码

根据上面的码表,确定5位码对应的6位码,利用类似查表的方法,把输入的五位数据当作rom中的地址,然后输出对应的6位码。

编码部分程序:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYPROM5_6IS

PORT(Y:

INSTD_LOGIC_VECTOR(4DOWNTO0);

CLK6,F:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(5DOWNTO0));

END;

ARCHITECTUREONEOFPROM5_6IS

SIGNALREG:

STD_LOGIC_VECTOR(5DOWNTO0);

BEGIN

P1:

PROCESS(Y,F)

BEGIN

ifF='0'then--模式一部分

caseYis

when"00000"=>REG<="110010";

when"00001"=>REG<="110011";

when"00010"=>REG<="110110";

when"00011"=>REG<="100011";

when"00100"=>REG<="110101";

when"00101"=>REG<="100101";

when"00110"=>REG<="100110";

when"00111"=>REG<="100111";

when"01000"=>REG<="101011";

when"01001"=>REG<="101001";

when"01010"=>REG<="101010";

when"01011"=>REG<="001011";

when"01100"=>REG<="101100";

when"01101"=>REG<="101101";

when"01110"=>REG<="101110";

when"01111"=>REG<="001110";

when"10000"=>REG<="110001";

when"10001"=>REG<="111001";

when"10010"=>REG<="111010";

when"10011"=>REG<="010011";

when"10100"=>REG<="110100";

when"10101"=>REG<="010101";

when"10110"=>REG<="010110";

when"10111"=>REG<="010111";

when"11000"=>REG<="111000";

when"11001"=>REG<="011001";

when"11010"=>REG<="011010";

when"11011"=>REG<="011011";

when"11100"=>REG<="011100";

when"11101"=>REG<="011101";

when"11110"=>REG<="011110";

when"11111"=>REG<="001101";

WHENOTHERS=>REG<=NULL;

endcase;

endif;

ifF='1'then--模式二部分

caseYis

when"00000"=>REG<="110010";

when"00001"=>REG<="100001";

when"00010"=>REG<="100010";

when"00011"=>REG<="100011";

when"00100"=>REG<="100100";

when"00101"=>REG<="100101";

when"00110"=>REG<="100110";

when"00111"=>REG<="000111";

when"01000"=>REG<="101000";

when"01001"=>REG<="101001";

when"01010"=>REG<="101010";

when"01011"=>REG<="001011";

when"01100"=>REG<="101100";

when"01101"=>REG<="000101";

when"01110"=>REG<="000110";

when"01111"=>REG<="001110";

when"10000"=>REG<="110001";

when"10001"=>REG<="010001";

when"10010"=>REG<="010010";

when"10011"=>REG<="010011";

when"10100"=>REG<="110100";

when"10101"=>REG<="010101";

when"10110"=>REG<="010110";

when"10111"=>REG<="010100";

when"11000"=>REG<="011000";

when"11001"=>REG<="011001";

when"11010"=>REG<="011010";

when"11011"=>REG<="001010";

when"11100"=>REG<="011100";

when"11101"=>REG<="001001";

when"11110"=>REG<="001100";

when"11111"=>REG<="001101";

WHENOTHERS=>REG<=NULL;

endcase;

endif;

ENDPROCESSP1;

P2:

PROCESS(CLK6)

BEGIN

IFCLK6'EVENTANDCLK6='1'THEN

Q<=REG;

ENDIF;

ENDPROCESSP2;

ENDONE;

编码仿真波形如下:

(4)六分频器:

六分频序列发生器的输入时钟脉冲六分频,从而可以实现每输入6BIT的并行信号就将其转换给变量。

具体程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityCNT6is

port(clk6:

instd_logic;

cnter:

outstd_logic);

end;

architectureexamofCNT6is

signalq:

std_logic_vector(2downto0);

signaltemp:

std_logic;

begin

process(clk6)

begin

ifclk6'eventandclk6='1'then

ifq="101"then

q<="000";temp<='1';

elseq<=q+1;temp<='0';

endif;

endif;

endprocess;

cnter<=temp;

endexam;

六分频分频功能仿真波形图:

(5)六位并变串转换

把编码实现的6位码,由并行转换为串行输出。

libraryieee;

useieee.std_logic_1164.all;

entityPAR2SER6to6is

port(

clk0,clk6:

instd_logic;

Q:

instd_logic_vector(5downto0);

shift_out:

outstd_logic);

endPAR2SER6to6;

architectureoneofPAR2SER6to6is

signalN:

INTEGERRANGE0TO5;

signalREG:

std_logic_vector(5downto0);

begin

p1:

process(clk6,Q)

begin

ifclk6'eventandclk6='1'then

REG<=Q;

endif;

endprocessp1;

PROCESS(CLK0,REG,N)

BEGIN

IFCLK0'EVENTANDCLK0='1'THEN

IFN=5THENN<=0;

ELSEN<=N+1;

ENDIF;

ENDIF;

caseNis

when0=>shift_out<=REG(0);

when1=>shift_out<=REG

(1);

when2=>shift_out<=REG

(2);

when3=>shift_out<=REG(3);

when4=>shift_out<=REG(4);

when5=>shift_out<=REG(5);

whenothers=>shift_out<='X';

endcase;

endprocess;

endone;

六位并到串仿真波形图:

解码部分(Encode5B6B):

一、解码原理

解码器与编码器基本相同,只是除去组别控制部分。

译码时,把送来的已变换的6B信号码流,每6比特并联为一组,作为PROM的地址,然后读出5B码,再经过并-串变换还原为原来的信号码流。

二5B6B的译码电路设计

解码器包括5分频电路、6分频电路、串并转换电路、解码电路和并串转换电路组成。

(1)译码部分六分频器(用于产生同步时钟信号):

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityCNT6is

port(clk6:

instd_logic;

cnter:

outstd_logic);

end;

architectureexamofCNT6is

signalq:

std_logic_vector(2downto0);

signaltemp:

std_logic;

begin

process(clk6)

begin

ifclk6'eventandclk6='1'then

ifq="101"then

q<="000";temp<='1';

elseq<=q+1;temp<='0';

endif;

endif;

endprocess;

cnter<=temp;

endexam;

六分频分频功能仿真波形图:

(2)串行转并行(6位串变6位并):

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitySER2PAR6to6is

port(clk6:

instd_logic;

shift_in:

instd_logic;

A:

outstd_logic_vector(5downto0));

end;

architectureoneofSER2PAR6to6is

signalq:

std_logic_vector(5downto0);

begin

p1:

process(clk6)

begin

ifclk6'eventandclk6='1'then

q<=shift_in&q(5downto1);

endif;

endprocessp1;

A<=q;

endone;

串行转并行功能仿真波形图:

(3)译码

译码程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityPROM6_5is

port(

clk5:

instd_logic;

Q:

instd_logic_vector(5downto0);

Y:

outstd_logic_vector(4downto0));

endPROM6_5;

architectureoneofPROM6_5is

signalREG:

std_logic_vector(4downto0);

begin

process(clk5,Q)

begin

ifclk5'eventandclk5='1'then

caseQis

when"110010"=>REG<="00000";

when"100001"=>REG<="00001";

when"100010"=>REG<="00010";

when"100011"=>REG<="00011";

when"100100"=>REG<="00100";

when"100101"=>REG<="00101";

when"100110"=>REG<="00110";

when"000111"=>REG<="00111";

when"101000"=>REG<="01000";

when"101001"=>REG<="01001";

when"101010"=>REG<="01010";

when"001011"=>REG<="01011";

when"101100"=>REG<="01100";

when"000101"=>REG<="01101";

when"000110"=>REG<="01110";

when"001110"=>REG<="01111";

when"111001"=>REG<="10000";

when"010010"=>REG<="10010";

when"010011"=>REG<="10011";

when"110100"=>REG<="10100";

when"010101"=>REG<="10101";

When"010110"=>REG<="10110";

when"010100"=>REG<="10111";

when"011000"=>REG<="11000";

when"011001"=>REG<="11001";

when"

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2