源代码:
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 同时欢迎大家一起讨论。
文章评论(0条评论)
登录后参与讨论