5B6B 码译码器的设计与实现 1 《光纤通信》大作业--5B6B 码译码器的设计与实现学院: 电子信息学院班级: 通信工程 092 班姓名: 学号: -1- 5B6B 码译码器的设计与实现一、 5B6B 译码原理 5B6B 译码是编码过程的逆过程,译码的输入是 6B 码流。在 5B6B 码中, 5 位字符共有 32 种不同的组合码字。而 6 位字符共有 64 种不同组合的码字,其中 WDS=0 有 20 个, WDS=+2 有 15 个, WDS=-2 有 15 个, 共 50个|WDS| 最小的码字可供选择。设置一种码表,正组负组交替使用。表中正组选用 20个 WDS=0 和 12个 WDS=+2 ,负组选用 20个 WDS=0 和12 个 WDS=-2 。二、 5B6B 码表设计三、序列产生模块程序设计与仿真该模块的主要功能是产生一个24 位的序列. 当按键 cout= 0时,make_6 b 模块清零, 输出是 24 位的全零; 当按键 cout=1 、2、3、4、5、6、9、 10时, 分别输出一份是 24 位的序列;当按键 cout=7 时输出高阻态值;当 cout= 8 时,输出禁码"1111111111111**********"; 序列产生模块 make_6b 代码 library ieee; use ; entity make_6b is port ( clk1 : in std_logic; decode_ymin: out std_logic_vector(23 downto 0); decode_6bin: out std_logic_vector(23 downto 0); cout: in integer range 10 downto 0); end; architecture decode_bf5_3 of make_6b is signal datainte_a: integer range 10 downto 1; signal datastd_b: std_logic_vector(23 downto 0); begin por1: process(clk1,cout) begin if cout=0 then decode_ymin<="000000000000000000000000"; elsif clk1'event and clk1='1' then datainte_a<=cout; case datainte_a is when 6 => --datainte_a<=1; datastd_b<= "0101010101010**********"; when 5 => --datainte_a<=datainte_a+1; datastd_b<="101010101010101010101010"; when 4 => --datainte_a<=datainte_a+1; datastd_b<="1100110011001**********"; when 3 => --datainte_a<=datainte_a+1; datastd_b<="001100110011001100110011"; when 2 => --datainte_a<=datainte_a+1; datastd_b<="100110011001100110011001"; when 1 => --datainte_a<=datainte_a+1; datastd_b<="0110011001100**********"; when 7 => datastd_b<="ZZZZZZZZZZZZZZZZZZZZZZZZ"; when 8 => datastd_b<="1111111111111**********"; when 9 => datastd_b<="010100001011001101001110"; when 10 => datastd_b<="1001110001110**********"; end case; decode_ymin<= datastd_b; decode_6bin<= datastd_b; end if; end process; -3- end decode_bf5_3 ; 编译成功后,创建的元件 make_6b 逻辑框图图1 make_6b 框图仿真成功后,仿真图形如下: 图2 make_6b cout
5B6B码译码器的设计与实现1 来自beplayapp体育下载www.apt-nc.com转载请标明出处.