FPGA IMPLEMENT 1Gb/10Gb ETH(二.3)

   // reverse the bits
   genvar i;
   generate q6_loop
   for (I <= 0; I < 6; I <= I + 1)
     assign q10[I] = b6[I];
   endgenerate 

   // calculate the running disparity after the 5B6B block encode 计算6b的输出极性
always@(posedge clk)
begin
   if(rst)
	 pdes6 <=disparity_pos_in;
   else 
   if (k28)
     pdes6 <= !disparity_pos_in;
   else
     case (d8[4:0])
             5'b00000 : pdes6 <= !disparity_pos_in;
             5'b00001 : pdes6 <= !disparity_pos_in;
             5'b00010 : pdes6 <= !disparity_pos_in;
             5'b00011 : pdes6 <= disparity_pos_in;
             5'b00100 : pdes6 <= !disparity_pos_in;
             5'b00101 : pdes6 <= disparity_pos_in;
             5'b00110 : pdes6 <= disparity_pos_in;
             5'b00111 : pdes6 <= disparity_pos_in;
             5'b01000 : pdes6 <= !disparity_pos_in;
             5'b01001 : pdes6 <= disparity_pos_in;
             5'b01010 : pdes6 <= disparity_pos_in;
             5'b01011 : pdes6 <= disparity_pos_in;
             5'b01100 : pdes6 <= disparity_pos_in;
             5'b01101 : pdes6 <= disparity_pos_in;
             5'b01110 : pdes6 <= disparity_pos_in;
             5'b01111 : pdes6 <= !disparity_pos_in;
             5'b10000 : pdes6 <= !disparity_pos_in;
             5'b10001 : pdes6 <= disparity_pos_in;
             5'b10010 : pdes6 <= disparity_pos_in;
             5'b10011 : pdes6 <= disparity_pos_in;
             5'b10100 : pdes6 <= disparity_pos_in;
             5'b10101 : pdes6 <= disparity_pos_in;
             5'b10110 : pdes6 <= disparity_pos_in;
             5'b10111 : pdes6 <= !disparity_pos_in;
             5'b11000 : pdes6 <= !disparity_pos_in;
             5'b11001 : pdes6 <= disparity_pos_in;
             5'b11010 : pdes6 <= disparity_pos_in;
             5'b11011 : pdes6 <= !disparity_pos_in;
             5'b11100 : pdes6 <= disparity_pos_in;
             5'b11101 : pdes6 <= !disparity_pos_in;
             5'b11110 : pdes6 <= !disparity_pos_in;
             5'b11111 : pdes6 <= !disparity_pos_in;
             default  : pdes6 <= disparity_pos_in;
     endcase // case(d8[4:0])
end

always@(posedge clk)//根据输出6b的极性和输入数据的d3,计算输出的4b输出
begin
   if(rst)
	b4 <= 0;
   else case (d8[7:5])
     3'b000 :                     //D/K.x.0
             if (pdes6)
               b4 <= 4'b0010;
       else
               b4 <= 4'b1101;
     3'b001 :                     //D/K.x.1
             if (k28 && !pdes6)
               b4 <= 4'b0110;
             else
               b4 <= 4'b1001;
     3'b010 :                     //D/K.x.2
             if (k28 && !pdes6)
               b4 <= 4'b0101;
             else
               b4 <= 4'b1010;
     3'b011 :                     //D/K.x.3
             if (!pdes6)
               b4 <= 4'b0011;
             else
               b4 <= 4'b1100;
     3'b100 :                     //D/K.x.4
             if (pdes6)
               b4 <= 4'b0100;
             else
               b4 <= 4'b1011;
     3'b101 :                     //D/K.x.5
             if (k28 && !pdes6)
               b4 <= 4'b1010;
             else
               b4 <= 4'b0101;
     3'b110 :                     //D/K.x.6
             if (k28 && !pdes6)
               b4 <= 4'b1001;
             else
               b4 <= 4'b0110;
     3'b111 :                     //D.x.P7
             if (!a7)
                 if (!pdes6)
                 b4 <= 4'b0111;
                           else
                 b4 <= 4'b1000;
             else                   //D.y.A7 K28.7
                 if (!pdes6)
                 b4 <= 4'b1110;
                           else
                 b4 <= 4'b0001;
     default :
             b4 <= 4'bXXXX;
   endcase
end
   // Reverse the bits
   generate q4_loop
   for (I <= 0; I < 4; I <= I + 1)
    assign  q10[I+6] = b4[I];
   endgenerate

always@(posedge clk)   // Calculate the running disparity after the 4B group 输出极性
begin
   if(rst)
	disparity_pos_out<=pdes6;
   else 
   case (d8[7:5])
     3'b000  : disparity_pos_out <= ~pdes6;
     3'b001  : disparity_pos_out <= pdes6;
     3'b010  : disparity_pos_out <= pdes6;
     3'b011  : disparity_pos_out <= pdes6;
     3'b100  : disparity_pos_out <= ~pdes6;
     3'b101  : disparity_pos_out <= pdes6;
     3'b110  : disparity_pos_out <= pdes6;
     3'b111  : disparity_pos_out <= ~pdes6;
     default : disparity_pos_out <= pdes6;
   endcase
end

endmodule

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值