⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hammingdec.v

📁 hamming/汉明码的解码代码
💻 V
字号:

// ----------------------------------------------------
//   Author: Allen Leng
//   Date:   Aug.5,2005
//   Description:
//  	 Hamming code encoder (8,4) is expanding of (7,4) 
//
//	1 1 1 1 | 1 1 1 1	     1 1 1 1 | 1 1 1 1 ??
//	1 1 1 0 | 1 0 0 0	     1 0 0 0 | 1 0 1 1	
//  H=	0 1 1 1 | 0 1 0 0	 G=  0 1 0 0 | 1 1 1 0
//      1 1 0 1 | 0 0 1 0	     0 0 1 0 | 1 1 0 1
// ----------------------------------------------------

module HammingDec(Clk,Rst,Denc,Dout,NoErr,SglErr,DblErr);
    input Clk,Rst;                                               
    input [7:0] Denc;                                            
    output [3:0] Dout;                                           
    output NoErr,SglErr,DblErr;  // no error, single error, double error
    reg [3:0] Dout;                                              
    reg NoErr,SglErr,DblErr;
                                                                 
    reg [3:0] chk; // the check code (S0~S3)                     
                                                                 
    // generate the check code 
    always @ (Denc)
       begin                                                 
          chk[3] <= Denc[7] ^ Denc[6] ^ Denc[5] ^ Denc[3];           
          chk[2] <= Denc[6] ^ Denc[5] ^ Denc[4] ^ Denc[2];  
          chk[1] <= Denc[7] ^ Denc[6] ^ Denc[4] ^ Denc[1];  
          chk[0] <= ^ Denc[7:0];  // =0, even error; =1, odd error
       end    
                                     
    always @ (posedge Clk or posedge Rst)                        
        if(Rst)                                                  
            {NoErr,SglErr,DblErr,Dout} <= 7'd0;                                         
        else                                                     
           begin
               {NoErr,SglErr,DblErr} <= 3'd0;
               Dout <= Denc[7:4];                                                 
               case(chk) //[3:1]
               	  4'b0000: NoErr <= 1'b1;
               	  4'b0111: 
               	     begin
               	     	Dout[0] <= ~Denc[4];
               	     	SglErr <= 1'b1;
               	     end
               	  4'b1101: 
               	     begin
               	     	Dout[1] <= ~Denc[5];
               	     	SglErr <= 1'b1;
               	     end
               	  4'b1111: 
               	     begin
               	     	Dout[2] <= ~Denc[6];
               	     	SglErr <= 1'b1;
               	     end
               	  4'b1011: 
               	     begin
               	     	Dout[3] <= ~Denc[7];
               	     	SglErr <= 1'b1;
               	     end
               	  4'b0001: SglErr <= 1'b1;
               	  4'b0011: SglErr <= 1'b1;
               	  4'b0101: SglErr <= 1'b1;
               	  4'b1001: SglErr <= 1'b1;
               	  default: DblErr <= 1'b1;
               endcase	               	     	
           end                                                   
                                                                 
endmodule       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -