基于FPGA的8B10B编解码程序设计Verilog 开发

部分参考代码

(末尾附文件)

module code8_10(
input clk,
input rst_n,
input [7:0] i_data,
input  i_is_k,
output reg [9:0] o_data
    );
reg dp_out;
always@(posedge clk,negedge rst_n)
begin
if(~rst_n)
	{dp_out, o_data} <= 0;
else    
	{dp_out, o_data} <= dp_data_10bit(i_data,i_is_k,dp_out);
end
 
 function [10:0] dp_data_10bit;
        input [7:0] data_8bit;
        input is_k;
        input RD_reg; 
/***************************************************************************************************************/   		
        reg k2_8, RD_5data_6bitB;
		reg a7;
		reg number1_3, number3_1; 
		reg a, b, c, d, e;
        reg [9:0]data_10bit;
        reg disparity;
        reg [5:0] data_6bit;
        reg [3:0] data_4bit;		
        integer I;
   
        begin 
/***************************************************************************************************************/   		
          // 5B
          a = data_8bit[0];
          b = data_8bit[1];
          c = data_8bit[2];
          d = data_8bit[3];
          e = data_8bit[4];
/***************************************************************************************************************/      
         k2_8 = is_k && data_8bit[4:0] === 5'b11100;
/***************************************************************************************************************/      
         number1_3 = (((a ^ b) & !(c | d))  // 检测1个1,3个0
              | ((c ^ d) & !(a | b)));
   
         number3_1 = (((a ^ b) & (c & d))     //检测3个1,1个0
              | ((c ^ d) & (a & b)));
 /***************************************************************************************************************/     
         a7 = is_k | ((number3_1 & d & !e & RD_reg)   //3b4B编码时用来判断使用DX.P7 DX.A7
                   | (number1_3 & !d & e & !RD_reg));
/***************************************************************************************************************/   
         // 5data_6bitB
         if (k2_8)                      //K.28
           if (!RD_reg)//初始的RD为-1,0代表RD=-1
             data_6bit = 6'b111100;//iedcba
           else
             data_6bit = 6'b000011;//iedcba
         else
           case (data_8bit[4:0])//
             5'b00000 :                //D.0
               if (RD_reg)
                 data_6bit = 6'b000110;
               else
                 data_6bit = 6'b111001;
            
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值