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

Subversion Repositories rs_encoder_decoder

[/] [rs_encoder_decoder/] [rtl/] [RS8CALCR08.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 farooq21
// This is a verilog File Generated
2
// By The C++ program That Generates
3
// An Gallios Field Hardware Register
4
 
5
module RS8CALCR08(clk_i, rst_i,
6
  en_i,        // Enable Signal
7
  sigma_i,     // sigma value in to calculate R0
8
  syndrom_i,   // Syndrom value from the memory
9
  loc_o,       // mem_address
10
  R_0_o,       // Valid R_o when valid_o == 1
11
  valid_o,     // When processing done
12
  done_dec_i   // input to clear all the registers
13
  );
14
  // Inputs are declared here
15
  input clk_i,rst_i,en_i;                       // Clock and Reset Declaration
16
  input [71:0] sigma_i;
17
  input [7:0] syndrom_i;
18
  input done_dec_i;
19
  output reg valid_o;
20
  output reg [7:0] R_0_o;
21
  output reg [7:0] loc_o;
22
 
23
  // Declaration of Wires And Register are here 
24
  wire [7:0] add_i1;
25
  wire [7:0] add_o;
26
  reg acc;
27
  reg [7:0] add_acc;
28
  reg [7:0] mult_i2;
29
  reg [7:0] mult_i1;
30
  reg [71:0] sigma_t;
31
 
32
  always@(posedge clk_i) begin
33
    if(rst_i) begin
34
      add_acc = 0;
35
    end
36
    else if(acc) begin
37
      add_acc = add_o;
38
    end
39
  end
40
 
41
  GF8GenMult MULT(
42
    .mult_i1(mult_i1), // Generic Multiplier input 1
43
    .mult_i2(mult_i2), // Generic Multiplier input 2
44
    .mult_o(add_i1)); // Generic Multiplier output
45
 
46
  GF8Add Add_ACC(
47
    .add_i1(add_i1),
48
    .add_i2(add_acc),
49
    .add_o(add_o));
50
 
51
 
52
  // Declaration of Register are here 
53
  reg [2:0] state;
54
 
55
  parameter INIT       = 3'b000;
56
  parameter WAIT       = 3'b001;
57
  parameter CALC_ACC   = 3'b010;
58
  parameter INVERS     = 3'b011;
59
  parameter MULT_LAST  = 3'b100;
60
  parameter DONE       = 3'b101;
61
 
62
 
63
  always @(posedge clk_i) begin
64
          if(rst_i) begin
65
      state <= INIT;
66
      loc_o <= 0;
67
      mult_i2 <= 0;
68
      mult_i1 <= 0;
69
      sigma_t <= 0;
70
      acc <= 0;
71
      valid_o <= 0;
72
      R_0_o   <= 0;
73
    end
74
    else begin
75
      case(state)
76
        INIT: begin
77
          state <= WAIT;
78
          loc_o <= 8;
79
          mult_i2 <= 0;
80
          mult_i1 <= 0;
81
          sigma_t <= 0;
82
          acc <= 0;
83
          valid_o <= 0;
84
          R_0_o   <= 0;
85
        end
86
        WAIT: begin
87
          if (en_i) begin
88
            state <= CALC_ACC;
89
          end
90
          else begin
91
            state <= WAIT;
92
          end
93
          loc_o <= 8;
94
          mult_i2 <= 0;
95
          mult_i1 <= 0;
96
          sigma_t <= sigma_i;
97
          acc <= 0;
98
          valid_o <= 0;
99
          R_0_o   <= R_0_o;
100
        end
101
        CALC_ACC: begin
102
          if (loc_o < 15) begin
103
            state <= CALC_ACC;
104
          end
105
          else begin
106
            state <= MULT_LAST;
107
          end
108
          loc_o <= loc_o + 1;
109
          mult_i1 <= syndrom_i;
110
          mult_i2 <= sigma_t[71:64];
111
          sigma_t <= sigma_t<<8;
112
          acc <= 1;
113
          valid_o <= 0;
114
          R_0_o   <= R_0_o;
115
        end
116
        MULT_LAST: begin
117
          state <= DONE;
118
          loc_o <= 0;
119
          mult_i1 <= add_acc;
120
          mult_i2 <= sigma_t[71:64];
121
          sigma_t <= sigma_t;
122
          acc <= 0;
123
          valid_o <= 1;
124
          R_0_o   <= add_i1;
125
        end
126
        DONE: begin
127
          if (done_dec_i)
128
            state <= INIT;
129
          else
130
            state <= DONE;
131
          loc_o <= 0;
132
          mult_i2 <= add_acc;
133
          mult_i1 <= sigma_t[71:64];
134
          sigma_t <= sigma_t;
135
          acc <= 0;
136
          valid_o <= 1;
137
          R_0_o   <= add_i1;
138
        end
139
        default: begin
140
          state <= INIT;
141
          loc_o <= 0;
142
          mult_i2 <= add_acc;
143
          mult_i1 <= sigma_t[71:64];
144
          sigma_t <= sigma_t;
145
          acc <= 0;
146
          valid_o <= 0;
147
          R_0_o   <= R_0_o;
148
        end
149
      endcase
150
    end
151
  end
152
 
153
endmodule

powered by: WebSVN 2.1.0

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