部分参考代码
(末尾附文件)
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;