OpenCores
URL https://opencores.org/ocsvn/reed_solomon_coder/reed_solomon_coder/trunk

Subversion Repositories reed_solomon_coder

[/] [reed_solomon_coder/] [trunk/] [corrector.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 cau_sse
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company: University of Hamburg, University of Kiel, Germany
4
// Engineer: Cagil Gümüs, Andreas Bahr
5
// 
6
// Create Date:    14:34:38 03/24/2016 
7
// Design Name: 
8
// Module Name:    corrector 
9
// Project Name: 
10
// Target Devices: 
11
// Tool versions: 
12
// Description: 
13
//
14
// Dependencies: 
15
//
16
// Revision: 
17
// Revision 0.01 - File Created
18
// Additional Comments: 
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
module corrector(
22
        input wire clk,
23
        input wire reset,
24
        input wire go,
25
        input wire [3:0] location1,
26
        input wire [3:0] location2,
27
        input wire [3:0] magnitude1,
28
        input wire [3:0] magnitude2,
29
        input wire [35:0] data_in,
30
        output reg [35:0] data_out,
31
        output reg ready,
32
        output reg max_error
33
    );
34
 
35
reg [35:0] data_out_reg;
36
 
37
reg go_syndrome;
38
wire ready_syndrome;
39
wire no_errors_wire;
40
reg job_done_reg;
41
 
42
        syndromecalculator syndrome2(
43
 
44
        .clk(clk),
45
        .reset(reset),
46
        .data_in(data_out_reg),
47
        .go(go_syndrome),
48
        .job_done(job_done_reg),
49
        .syndrome_1() ,
50
        .syndrome_2(),
51
        .syndrome_3(),
52
        .syndrome_4(),
53
        .no_errors(no_errors_wire),
54
        .ready(ready_syndrome)
55
         );
56
 
57
 
58
reg [3:0]        state ;                                                                                 // State Machine
59
 
60
parameter [3:0] IDLE                                     = 4'b0000,
61
                                         LOCATION                               = 4'b0001,
62
                                         FINISH                                 = 4'b0011,
63
                                         SYNDROME                               = 4'b0010;
64
 
65
always@(posedge clk or negedge reset)
66
 
67
        begin
68
 
69
        if(!reset)
70
                begin
71
 
72
                        state                           <= IDLE;
73
                        max_error                       <= 0;
74
                        ready                           <= 0;
75
                        data_out                        <= 0;
76
                        data_out_reg            <= 0;
77
 
78
                end
79
 
80
        else
81
                begin
82
                        case(state)
83
                                IDLE:
84
                                        begin
85
 
86
                                                go_syndrome <= 0;
87
                                                ready <= 0;
88
                                                max_error <= 0;
89
                                                data_out_reg <= data_in;
90
                                                if(go)
91
                                                        state <= LOCATION ;
92
                                                else
93
                                                        state <= IDLE;
94
                                        end
95
                                LOCATION:
96
                                        begin
97
                                                job_done_reg <= 0;
98
                                                case(location1)
99
                                                        //0000: data_out_reg[3:0] <= (data_out_reg[3:0]^magnitude1) 
100
                                                        4'b0001: data_out_reg[3:0]       <= (data_out_reg[3:0]    ^       magnitude1);
101
                                                        4'b0010: data_out_reg[7:4]      <= (data_out_reg[7:4]   ^       magnitude1);
102
                                                        4'b0011: data_out_reg[19:16]    <= (data_out_reg[19:16] ^       magnitude1);
103
                                                        4'b0100: data_out_reg[11:8]     <= (data_out_reg[11:8]  ^       magnitude1);
104
                                                        4'b0101: data_out_reg[35:32]    <= (data_out_reg[35:32] ^       magnitude1);
105
                                                        4'b0110: data_out_reg[23:20]    <= (data_out_reg[23:20] ^       magnitude1);
106
                                                        4'b0111: data_out_reg[7:4]      <= (data_out_reg[7:4]   ^       magnitude1);
107
                                                        4'b1000: data_out_reg[15:12]    <= (data_out_reg[15:12] ^       magnitude1);
108
                                                        4'b1001: data_out_reg[23:20]    <= (data_out_reg[23:20] ^       magnitude1);
109
                                                        4'b1010: data_out_reg[3:0]       <= (data_out_reg[3:0]    ^       magnitude1);
110
                                                        4'b1011: data_out_reg[31:28]    <= (data_out_reg[31:28] ^       magnitude1);
111
                                                        4'b1100: data_out_reg[27:24]    <= (data_out_reg[27:24] ^       magnitude1);
112
                                                        4'b1101: data_out_reg[19:16]    <= (data_out_reg[19:16] ^       magnitude1);
113
                                                        4'b1110: data_out_reg[11:8]     <= (data_out_reg[11:8]  ^       magnitude1);
114
                                                        4'b1111: data_out_reg[15:12]    <= (data_out_reg[15:12] ^       magnitude1);
115
                                                endcase
116
                                                case(location2)
117
                                                        //0000: data_out_reg[3:0] <= (data_out_reg[3:0]^magnitude1) 
118
                                                        4'b0001: data_out_reg[3:0]       <= (data_out_reg[3:0]    ^       magnitude2);
119
                                                        4'b0010: data_out_reg[7:4]      <= (data_out_reg[7:4]   ^       magnitude2);
120
                                                        4'b0011: data_out_reg[19:16]    <= (data_out_reg[19:16] ^       magnitude2);
121
                                                        4'b0100: data_out_reg[11:8]     <= (data_out_reg[11:8]  ^       magnitude2);
122
                                                        4'b0101: data_out_reg[35:32]    <= (data_out_reg[35:32] ^       magnitude2);
123
                                                        4'b0110: data_out_reg[23:20]    <= (data_out_reg[23:20] ^       magnitude2);
124
                                                        4'b0111: data_out_reg[7:4]      <= (data_out_reg[7:4]   ^       magnitude2);
125
                                                        4'b1000: data_out_reg[15:12]    <= (data_out_reg[15:12] ^       magnitude2);
126
                                                        4'b1001: data_out_reg[23:20]    <= (data_out_reg[23:20] ^       magnitude2);
127
                                                        4'b1010: data_out_reg[3:0]       <= (data_out_reg[3:0]    ^       magnitude2);
128
                                                        4'b1011: data_out_reg[31:28]    <= (data_out_reg[31:28] ^       magnitude2);
129
                                                        4'b1100: data_out_reg[27:24]    <= (data_out_reg[27:24] ^       magnitude2);
130
                                                        4'b1101: data_out_reg[19:16]    <= (data_out_reg[19:16] ^       magnitude2);
131
                                                        4'b1110: data_out_reg[11:8]     <= (data_out_reg[11:8]  ^       magnitude2);
132
                                                        4'b1111: data_out_reg[15:12]    <= (data_out_reg[15:12] ^       magnitude2);
133
                                                endcase
134
                                        state <= SYNDROME;
135
                                        end
136
                                SYNDROME:
137
                                        begin
138
                                                go_syndrome <= 1;
139
                                                if(ready_syndrome)
140
                                                        begin
141
                                                                state <= FINISH;
142
                                                        end
143
                                                else
144
                                                        begin
145
                                                                state   <= SYNDROME;
146
                                                        end
147
                                        end
148
                                FINISH:
149
                                        begin
150
                                                if(no_errors_wire)
151
                                                        max_error <= 0;
152
                                                else
153
                                                        max_error <= 1;
154
                                                data_out <= data_out_reg;
155
                                                job_done_reg <= 1;
156
                                                state <= IDLE;
157
                                                ready <= 1;
158
                                        end
159
                                default:        state <= IDLE ;
160
                        endcase
161
                end
162
end
163
 
164
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.