原创 扩展汉明码的verilog hdl 实现

2008-4-24 13:59 3548 5 5 分类: FPGA/CPLD

源代码:


module mhammingd16(hamin,dataout,ce,de,inter);
input [21:0] hamin;
output [15:0]dataout;
output ce;
output de;
output inter;
reg ce;
reg de;
reg inter;
reg [5:0] syndrome;
reg [15:0]dataout;
always@(hamin)
begin
 syndrome[0]=hamin[6] ^ hamin[7] ^ hamin[9] ^ hamin[10] ^ hamin[14] ^ hamin[15] ^ hamin[16] ^ hamin[19] ^ hamin[0] ;
 syndrome[1]=hamin[6] ^ hamin[8] ^ hamin[9] ^ hamin[11] ^ hamin[12] ^ hamin[14] ^ hamin[17] ^ hamin[20] ^ hamin[1] ;
 syndrome[2]=hamin[7] ^ hamin[8] ^ hamin[10] ^ hamin[11] ^ hamin[13] ^ hamin[15] ^ hamin[18] ^ hamin[21] ^ hamin[2] ;
 syndrome[3]=hamin[6] ^ hamin[7] ^ hamin[8] ^ hamin[12] ^ hamin[13] ^ hamin[16] ^ hamin[17] ^ hamin[18] ^ hamin[3] ;
 syndrome[4]=hamin[9] ^ hamin[10] ^ hamin[11] ^ hamin[12] ^ hamin[13] ^ hamin[19] ^ hamin[20] ^ hamin[21] ^ hamin[4] ;
 syndrome[5]=hamin[14] ^ hamin[15] ^ hamin[16] ^ hamin[17] ^ hamin[18] ^ hamin[19] ^ hamin[20] ^ hamin[21] ^ hamin[5] ;
  if(syndrome==6'b0)
   begin
    ce="1"'b0;de=1'b0;
   inter="1"'b0; 
    dataout[15:0]=hamin[21:6];
   end
   else
    case(syndrome[5:0])
     6'b001011:
     begin
    ce="1"'b0;
    de="1"'b1;
    inter="1"'b0;
    dataout[0]=~hamin[6];
    dataout[15:1]=hamin[21:7];
     end
     6'b001101:
  begin
     ce="1"'b0;
    de="1"'b1;
    inter="1"'b0;
    dataout[1]=~hamin[7];
    dataout[0]=hamin[6];
    dataout[15:2]=hamin[21:8];
    end
     6'b001110:
 begin
    ce="1"'b0;
    de="1"'b1;inter=1'b0;
    dataout[2]=~hamin[8];
    dataout[1:0]=hamin[7:6];
    dataout[15:3]=hamin[21:9];
 end
     6'b010011:
 begin
    ce="1"'b0;
    de="1"'b1;inter=1'b0;
    dataout[3]=~hamin[9];
    dataout[2:0]=hamin[8:6];
    dataout[15:4]=hamin[21:10];
      end
     6'b010101:
     begin
    ce="1"'b0;
    de="1"'b1;inter=1'b0;
    dataout[4]=~hamin[10];
    dataout[3:0]=hamin[9:6];
    dataout[15:5]=hamin[21:11];
     end
     6'b010110:
    begin
    ce="1"'b0;
    de="1"'b1;inter=1'b0;
    dataout[5]=~hamin[11];
    dataout[4:0]=hamin[10:6];
    dataout[15:6]=hamin[21:12];
    end
     6'b011010:
     begin
    ce="1"'b0;
    de="1"'b1;inter=1'b0;
    dataout[6]=~hamin[12];
    dataout[5:0]=hamin[11:6];
    dataout[15:7]=hamin[21:13];
    end
     6'b011100:
     begin
     ce="1"'b0;
     de="1"'b1;inter=1'b0;
    dataout[7]=~hamin[13];
    dataout[6:0]=hamin[12:6];
    dataout[15:8]=hamin[21:14];
    end
     6'b100011:
    begin
    ce="1"'b0;
    de="1"'b1;inter=1'b0;
    dataout[8]=~hamin[14];
    dataout[7:0]=hamin[13:6];
    dataout[15:9]=hamin[21:15];
     end
     6'b100101:
    begin
    ce="1"'b0;
    de="1"'b1;inter=1'b0;
    dataout[9]=~hamin[15];
    dataout[8:0]=hamin[14:6];
    dataout[15:10]=hamin[21:16];
    end
     6'b101001:
    begin
    ce="1"'b0;
    de="1"'b1;
    inter="1"'b0;
    dataout[10]=~hamin[16];
    dataout[9:0]=hamin[15:6];
    dataout[15:11]=hamin[21:17];
    end
  6'b101010:
  begin
 ce=1'b0;
    de="1"'b1;
    inter="1"'b0;
 dataout[11]=~hamin[17];
    dataout[10:0]=hamin[16:6];
    dataout[15:12]=hamin[21:18];
     end
     6'b101100:
    begin
    ce="1"'b0;
    de="1"'b1;
    inter="1"'b0;
    dataout[12]=~hamin[18];
    dataout[11:0]=hamin[17:6];
    dataout[15:13]=hamin[21:19];
    end
     6'b110001:
    begin
    ce="1"'b0;
    de="1"'b1;
    inter="1"'b0;
    dataout[13]=~hamin[19];
    dataout[12:0]=hamin[18:6];
    dataout[15:14]=hamin[21:20];
    end
     6'b110010:
      begin
    ce="1"'b0;
    de="1"'b1;
    inter="1"'b0;
    dataout[14]=~hamin[20];
    dataout[13:0]=hamin[19:6];
    dataout[15]=hamin[21];
      end
     6'b110100:
     begin
    ce="1"'b0;
    de="1"'b1;
    inter="1"'b0;
    dataout[15]=~hamin[21];
    dataout[14:0]=hamin[20:6];
     end
     6'b000001, 6'b000010, 6'b000100, 6'b001000, 6'b010000, 6'b100000 :
      begin
      ce="1"'b1;
      de="1"'b0;
     inter="1"'b0;
     dataout[15:0]=hamin[21:6];
      end
     default:
      begin
      inter="1"'b1;
      dataout="16"'b0;
      end
    endcase
  end
 endmodule


能过纠一位错,并能检超过两位的错!!!


欢迎大家莅临参观指导


另外本来也正在做CRC 同时欢迎大家一起讨论。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条