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

Subversion Repositories rs_encoder_decoder

[/] [rs_encoder_decoder/] [rtl/] [GF8Inverse.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 
4
// Hardware Inversion Circuit takes m-1 clockcycles
5
 
6
module GF8Inverse(clk_i, rst_i,
7
  valid_i, // Valid Input Set it to High When giving the input
8
  inv_i, // Gallios Field Inverter input 
9
  valid_o, // Valid Out High When The output is ready
10
  inv_o   // Gallios Field Inversion output
11
  );
12
  // Inputs are declared here
13
  input clk_i,rst_i;                    // Clock and Reset Declaration
14
  input valid_i;
15
  input [7:0] inv_i;
16
  output reg valid_o;
17
  output wire [7:0] inv_o;
18
  // Declaration of Wires And Register are here 
19
  reg [7:0] regSquare, regMult;
20
  reg [2:0] cnt;
21
  reg [0:0] state;
22
  wire [7:0] multSquare_o, multMult_o;
23
 
24
  assign inv_o = regMult;
25
 
26
  GF8GenMult SQUARE(
27
    .mult_i1(regSquare), // Gallios Field Generic Multiplier input 1
28
    .mult_i2(regSquare), // Gallios Field Generic Multiplier input 2
29
    .mult_o(multSquare_o));   // Gallios Field Generic Multiplier output
30
  GF8GenMult MULTIPLY(
31
    .mult_i1(multSquare_o), // Gallios Field Generic Multiplier input 1
32
    .mult_i2(regMult), // Gallios Field Generic Multiplier input 2
33
    .mult_o(multMult_o));   // Gallios Field Generic Multiplier output
34
  parameter WAIT = 1'b0;
35
  parameter PROCESS = 1'b1;
36
  // CONTROLLER TO VALIDATE THE OUTPUT
37
  always @(posedge clk_i) begin
38
          if(rst_i) begin
39
      cnt = 0;
40
      regSquare <= 0;
41
      regMult <= 0;
42
      valid_o <= 0;
43
      state <= WAIT;
44
    end
45
    else begin
46
      case(state)
47
        WAIT:    if(valid_i) begin
48
                   // State machine
49
                   state <= PROCESS;
50
 
51
                   // REGISTER
52
                   regSquare<= inv_i;
53
                   regMult[0]<= 1'b1;
54
                   regMult[1]<= 1'b0;
55
                   regMult[2]<= 1'b0;
56
                   regMult[3]<= 1'b0;
57
                   regMult[4]<= 1'b0;
58
                   regMult[5]<= 1'b0;
59
                   regMult[6]<= 1'b0;
60
                   regMult[7]<= 1'b0;
61
 
62
                   // VALIDATION
63
                   cnt = 0;
64
                   valid_o <= 0;
65
                 end else begin
66
                   // State machine
67
                   state <= WAIT;
68
 
69
                   // REGISTER
70
                   regSquare <= 0;
71
                   regMult <= 0;
72
 
73
                   // VALIDATION
74
                   valid_o <= 0;
75
                   cnt = 0;
76
                 end
77
        PROCESS: if(cnt == 7) begin
78
                   // State machine
79
                   state <= WAIT;
80
 
81
                   // REGISTER
82
                   regSquare <= regSquare;
83
                   regMult <= regMult;
84
 
85
                   // VALIDATION
86
                   cnt = 0;
87
                   valid_o <= 1;
88
                 end else begin
89
                   // State machine
90
                   state <= PROCESS;
91
 
92
                   // REGISTER
93
                   regSquare <= multSquare_o;
94
                   regMult <= multMult_o;
95
 
96
                   // VALIDATION
97
                   cnt = cnt + 1;
98
                   valid_o <= 0;
99
                 end
100
        default : state <= WAIT;
101
      endcase
102
    end
103
  end
104
endmodule

powered by: WebSVN 2.1.0

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