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

Subversion Repositories rs_encoder_decoder

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

powered by: WebSVN 2.1.0

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