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

📄 syndrome.v

📁 rs的译码器
💻 V
字号:
                      
//                                                                                 
//Design       : Reed-Solomon decoder RS(204,188) in QAM                           
//                                                                                 
//File Name    : syndrome.v                                                        
//                                                                                 
//Perpose      : compute the syndromes from the received symbols                   
//                                                                                 
//Limitations  : None                                                              
//                                                                                 
//Errors       : None known                                                        
//                                                                                 
//Include Files: None                                                              
//                                                                                 

                                                                                   
//synopsys translate_off                                                           
`include  "timescale.v"                                                            
//synopsys translate_on                                                            

module syndrome ( clk           ,
                  n_rst         ,
                  phase1        ,
                  clken         ,
                  data_in_valid ,
                  data_in_start ,
                  symbol        ,
                  data_out_valid,
                  syndrome_out  ,
                  syndrome0     ,
                  syndrome1     ,
                  syndrome2     ,
                  syndrome3     ,
                  syndrome4     ,
                  syndrome5     ,
                  syndrome6     ,
                  syndrome7     ,
                  syndrome8     ,
                  syndrome9     ,
                  syndrome10    ,
                  syndrome11    ,
                  syndrome12    ,
                  syndrome13    ,
                  syndrome14    ,
                  syndrome15     
                 );


input             clk           ;
input             n_rst         ;
input             clken         ;
input             phase1        ;
input             data_in_valid ;
input             data_in_start ;
input  [7:0]      symbol        ;
output            data_out_valid;
output            syndrome_out  ;
output [7:0]      syndrome0     ;
output [7:0]      syndrome1     ;
output [7:0]      syndrome2     ;
output [7:0]      syndrome3     ;
output [7:0]      syndrome4     ;
output [7:0]      syndrome5     ;
output [7:0]      syndrome6     ;
output [7:0]      syndrome7     ;
output [7:0]      syndrome8     ;
output [7:0]      syndrome9     ;
output [7:0]      syndrome10    ;
output [7:0]      syndrome11    ;
output [7:0]      syndrome12    ;
output [7:0]      syndrome13    ;
output [7:0]      syndrome14    ;
output [7:0]      syndrome15    ;

reg    [7:0]      symbol_counter ;
wire   [7:0]      symbol_buffer  ;
reg               data_out_valid ;
reg               syndrome_out   ;

//inferring some auxiliary registers
always@(posedge clk or negedge n_rst)
  begin
    if ( n_rst == 1'b0 )
      data_out_valid <= 1'b0;
    else if( phase1 == 1'b1 && clken == 1'b1 )
      data_out_valid <= data_in_valid;
    else;
  end

always@(posedge clk or negedge n_rst)
  begin
    if ( n_rst == 1'b0 )
      symbol_counter <= 8'h0;
    else if ( data_in_valid == 1'b0 && clken == 1'b1 && phase1 == 1'b1 )
      symbol_counter <= 8'h0;
    else if ( data_in_valid == 1'b1 && data_in_start == 1'b0 && symbol_counter == 8'h0 && clken == 1'b1 && phase1 == 1'b1 )
      symbol_counter <= 8'h0;
    else if ( data_in_valid == 1'b1 && symbol_counter == 8'hcb && clken == 1'b1 && phase1 == 1'b1 )
      symbol_counter <= 8'h0;
    else if ( clken == 1'b1 && phase1 == 1'b1 )
      symbol_counter <= symbol_counter + 1;
    else;
  end

//always@(posedge clk or negedge n_rst)
//  begin
//    if ( n_rst == 1'b0 )
//      symbol_buffer <= 8'h0;
//    else if ( data_in_start == 1'b0 && symbol_counter == 8'h0 && clken == 1'b1 && phase1 == 1'b1 )
//      symbol_buffer <= 8'h0;
//    else if ( data_in_valid == 1'b1 && clken == 1'b1 && phase1 == 1'b1 )
//      symbol_buffer <= symbol;
//    else if ( clken == 1'b1 && phase1 == 1'b1 )
//      symbol_buffer <= 8'h0;
//    else;
//  end

assign symbol_buffer = ( symbol_counter != 8'h0 || data_in_start == 1'b1 ) ? symbol : 8'h0 ; 

always@(posedge clk or negedge n_rst)
  begin
    if ( n_rst == 1'b0 )
      syndrome_out <= 1'b0;
    else if ( symbol_counter == 8'hcb && data_out_valid == 1'b1 && clken == 1'b1 && phase1 == 1'b1 )
      syndrome_out <= 1'b1;
    else if ( clken == 1'b1 && phase1 == 1'b1 )
      syndrome_out <= 1'b0;
    else;
  end

//interconnection wires of syndrome core
wire   [7:0]      p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15;
wire   [7:0]      D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15;  

//Syndrome computation block0
const_mul_w0       syndrome_M0   ( .a  (syndrome0 ), .b    (p0           ), .sel(syndrome_out) ); // w^0
parallel_adder_8   syndrome_A0   ( .a  (p0        ), .b    (symbol_buffer), .c(D0) );
D_reg8_decoder     syndrome_DFF0 ( .clk(clk       ), .n_rst(n_rst        ), .D(D0), .q(syndrome0), .clken(clken), .phase1(phase1) );

//Syndrome computation block1
const_mul_w1       syndrome_M1   ( .a  (syndrome1 ), .b    (p1           ), .sel(syndrome_out) ); // w^1
parallel_adder_8   syndrome_A1   ( .a  (p1        ), .b    (symbol_buffer), .c(D1) );
D_reg8_decoder     syndrome_DFF1 ( .clk(clk       ), .n_rst(n_rst        ), .D(D1), .q(syndrome1), .clken(clken), .phase1(phase1) );

//Syndrome computation block2
const_mul_w2       syndrome_M2   ( .a  (syndrome2 ), .b    (p2           ), .sel(syndrome_out) ); // w^2
parallel_adder_8   syndrome_A2   ( .a  (p2        ), .b    (symbol_buffer), .c(D2) );
D_reg8_decoder     syndrome_DFF2 ( .clk(clk       ), .n_rst(n_rst        ), .D(D2), .q(syndrome2), .clken(clken), .phase1(phase1) );

//Syndrome computation block3
const_mul_w3       syndrome_M3   ( .a  (syndrome3 ), .b    (p3           ), .sel(syndrome_out) ); // w^3
parallel_adder_8   syndrome_A3   ( .a  (p3        ), .b    (symbol_buffer), .c(D3) );
D_reg8_decoder     syndrome_DFF3 ( .clk(clk       ), .n_rst(n_rst        ), .D(D3), .q(syndrome3), .clken(clken), .phase1(phase1) );

//Syndrome computation block4
const_mul_w4       syndrome_M4   ( .a  (syndrome4 ), .b    (p4           ), .sel(syndrome_out) ); // w^4
parallel_adder_8   syndrome_A4   ( .a  (p4        ), .b    (symbol_buffer), .c(D4) );
D_reg8_decoder     syndrome_DFF4 ( .clk(clk       ), .n_rst(n_rst        ), .D(D4), .q(syndrome4), .clken(clken), .phase1(phase1) );

//Syndrome computation block5
const_mul_w5       syndrome_M5   ( .a  (syndrome5 ), .b    (p5           ), .sel(syndrome_out) ); // w^5 
parallel_adder_8   syndrome_A5   ( .a  (p5        ), .b    (symbol_buffer), .c(D5) );
D_reg8_decoder     syndrome_DFF5 ( .clk(clk       ), .n_rst(n_rst        ), .D(D5), .q(syndrome5), .clken(clken), .phase1(phase1) );

//Syndrome computation block6
const_mul_w6       syndrome_M6   ( .a  (syndrome6 ), .b    (p6           ), .sel(syndrome_out) ); // w^6
parallel_adder_8   syndrome_A6   ( .a  (p6        ), .b    (symbol_buffer), .c(D6) ); 
D_reg8_decoder     syndrome_DFF6 ( .clk(clk       ), .n_rst(n_rst        ), .D(D6), .q(syndrome6), .clken(clken), .phase1(phase1) );

//Syndrome computation block7
const_mul_w7       syndrome_M7   ( .a  (syndrome7 ), .b    (p7           ), .sel(syndrome_out) ); // w^7 
parallel_adder_8   syndrome_A7   ( .a  (p7        ), .b    (symbol_buffer), .c(D7) );
D_reg8_decoder     syndrome_DFF7 ( .clk(clk       ), .n_rst(n_rst        ), .D(D7), .q(syndrome7), .clken(clken), .phase1(phase1) );

//Syndrome computation block8
const_mul_w8       syndrome_M8   ( .a  (syndrome8 ), .b    (p8           ), .sel(syndrome_out) ); // w^8
parallel_adder_8   syndrome_A8   ( .a  (p8        ), .b    (symbol_buffer), .c(D8) );
D_reg8_decoder     syndrome_DFF8 ( .clk(clk       ), .n_rst(n_rst        ), .D(D8), .q(syndrome8), .clken(clken), .phase1(phase1) );

//Syndrome computation block9
const_mul_w9       syndrome_M9   ( .a  (syndrome9 ), .b    (p9           ), .sel(syndrome_out) ); // w^9 
parallel_adder_8   syndrome_A9   ( .a  (p9        ), .b    (symbol_buffer), .c(D9) );        
D_reg8_decoder     syndrome_DFF9 ( .clk(clk       ), .n_rst(n_rst        ), .D(D9), .q(syndrome9), .clken(clken), .phase1(phase1) );

//Syndrome computation block10
const_mul_w10      syndrome_M10  ( .a  (syndrome10), .b    (p10          ), .sel(syndrome_out) ); // w^10
parallel_adder_8   syndrome_A10  ( .a  (p10       ), .b    (symbol_buffer), .c(D10) );
D_reg8_decoder     syndrome_DFF10( .clk(clk       ), .n_rst(n_rst        ), .D(D10), .q(syndrome10), .clken(clken), .phase1(phase1));

//Syndrome computation block11
const_mul_w11      syndrome_M11  ( .a  (syndrome11), .b    (p11          ), .sel(syndrome_out) ); // w^11
parallel_adder_8   syndrome_A11  ( .a  (p11       ), .b    (symbol_buffer), .c(D11) );        
D_reg8_decoder     syndrome_DFF11( .clk(clk       ), .n_rst(n_rst        ), .D(D11), .q(syndrome11), .clken(clken), .phase1(phase1));

//Syndrome computation block12
const_mul_w12      syndrome_M12  ( .a  (syndrome12), .b    (p12          ), .sel(syndrome_out) ); // w^12
parallel_adder_8   syndrome_A12  ( .a  (p12       ), .b    (symbol_buffer), .c(D12) );        
D_reg8_decoder     syndrome_DFF12( .clk(clk       ), .n_rst(n_rst        ), .D(D12), .q(syndrome12), .clken(clken), .phase1(phase1));

//Syndrome computation block13
const_mul_w13      syndrome_M13  ( .a  (syndrome13), .b    (p13          ), .sel(syndrome_out) ); // w^13
parallel_adder_8   syndrome_A13  ( .a  (p13       ), .b    (symbol_buffer), .c(D13) );
D_reg8_decoder     syndrome_DFF13( .clk(clk       ), .n_rst(n_rst        ), .D(D13), .q(syndrome13), .clken(clken), .phase1(phase1));

//Syndrome computation block14
const_mul_w14      syndrome_M14  ( .a  (syndrome14), .b    (p14          ), .sel(syndrome_out) ); // w^14
parallel_adder_8   syndrome_A14  ( .a  (p14       ), .b    (symbol_buffer), .c(D14) );
D_reg8_decoder     syndrome_DFF14( .clk(clk       ), .n_rst(n_rst        ), .D(D14), .q(syndrome14), .clken(clken), .phase1(phase1));

//Syndrome computation block15
const_mul_w15      syndrome_M15  ( .a  (syndrome15), .b    (p15          ), .sel(syndrome_out) ); // w^15
parallel_adder_8   syndrome_A15  ( .a  (p15       ), .b    (symbol_buffer), .c(D15) );
D_reg8_decoder     syndrome_DFF15( .clk(clk       ), .n_rst(n_rst        ), .D(D15), .q(syndrome15), .clken(clken), .phase1(phase1));

endmodule

⌨️ 快捷键说明

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