📄 syndrome.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 + -