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

Subversion Repositories rs_encoder_decoder

[/] [rs_encoder_decoder/] [rtl/] [GF8Fir8t.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
// Gallios Field Based FIR Filter
4
// And uses GF Adder and Multiplier
5
 
6
module GF8Fir8t(clk_i, rst_i,
7
  en_i,         // Gallios Field FIR Filter enable 1
8
  fir_i,        // Gallios Field FIR Filter input 1
9
  sel_i,        // Gallios Field FIR Filter input 1
10
  coeff_i,      // Concatinated Coefficient Input
11
  fir_o,        // Gallios Field FIR out
12
  done_dec_i    // Done Decoding
13
  );
14
  // Inputs are declared here
15
  input clk_i,rst_i;                    // Clock and Reset Declaration
16
  input en_i;             // Enable The input 
17
  input sel_i;             // Enable The input 
18
  input done_dec_i;
19
  input [7:0] fir_i;
20
  input [71:0] coeff_i;
21
 
22
  output wire [7:0] fir_o;
23
  // Declaration of Wires And Register are here 
24
  wire [7:0] mult_o[0:8];
25
  wire [7:0] add_o [0:7];
26
  wire [7:0] output_mux;
27
  wire [7:0] input_mux;
28
  reg [7:0] shift_reg[0:8];
29
 
30
  assign input_mux = sel_i ? mult_o[8] : fir_i;
31
  assign output_mux = sel_i ? add_o[6] : shift_reg[8];
32
  assign fir_o = sel_i ? mult_o[8] : add_o[7];
33
 
34
 
35
  // Sequential Body
36
  always @(posedge clk_i) begin
37
    if ((rst_i)||(done_dec_i)) begin
38
      shift_reg[0] <= 0;
39
      shift_reg[1] <= 0;
40
      shift_reg[2] <= 0;
41
      shift_reg[3] <= 0;
42
      shift_reg[4] <= 0;
43
      shift_reg[5] <= 0;
44
      shift_reg[6] <= 0;
45
      shift_reg[7] <= 0;
46
      shift_reg[8] <= 0;
47
    end
48
    else if(en_i) begin
49
      shift_reg[0] <= input_mux;
50
      shift_reg[1] <= shift_reg[0];
51
      shift_reg[2] <= shift_reg[1];
52
      shift_reg[3] <= shift_reg[2];
53
      shift_reg[4] <= shift_reg[3];
54
      shift_reg[5] <= shift_reg[4];
55
      shift_reg[6] <= shift_reg[5];
56
      shift_reg[7] <= shift_reg[6];
57
      shift_reg[8] <= shift_reg[7];
58
    end
59
  end
60
 
61
  GF8GenMult MULT0(
62
    .mult_i1(coeff_i[71:64]), // Generic Multiplier input 1
63
    .mult_i2(shift_reg[0]), // Generic Multiplier input 2
64
    .mult_o(mult_o[0]));   // Generic Multiplier output
65
 
66
  GF8GenMult MULT1(
67
    .mult_i1(coeff_i[63:56]), // Generic Multiplier input 1
68
    .mult_i2(shift_reg[1]), // Generic Multiplier input 2
69
    .mult_o(mult_o[1]));   // Generic Multiplier output
70
 
71
  GF8GenMult MULT2(
72
    .mult_i1(coeff_i[55:48]), // Generic Multiplier input 1
73
    .mult_i2(shift_reg[2]), // Generic Multiplier input 2
74
    .mult_o(mult_o[2]));   // Generic Multiplier output
75
 
76
  GF8GenMult MULT3(
77
    .mult_i1(coeff_i[47:40]), // Generic Multiplier input 1
78
    .mult_i2(shift_reg[3]), // Generic Multiplier input 2
79
    .mult_o(mult_o[3]));   // Generic Multiplier output
80
 
81
  GF8GenMult MULT4(
82
    .mult_i1(coeff_i[39:32]), // Generic Multiplier input 1
83
    .mult_i2(shift_reg[4]), // Generic Multiplier input 2
84
    .mult_o(mult_o[4]));   // Generic Multiplier output
85
 
86
  GF8GenMult MULT5(
87
    .mult_i1(coeff_i[31:24]), // Generic Multiplier input 1
88
    .mult_i2(shift_reg[5]), // Generic Multiplier input 2
89
    .mult_o(mult_o[5]));   // Generic Multiplier output
90
 
91
  GF8GenMult MULT6(
92
    .mult_i1(coeff_i[23:16]), // Generic Multiplier input 1
93
    .mult_i2(shift_reg[6]), // Generic Multiplier input 2
94
    .mult_o(mult_o[6]));   // Generic Multiplier output
95
 
96
  GF8GenMult MULT7(
97
    .mult_i1(coeff_i[15:8]), // Generic Multiplier input 1
98
    .mult_i2(shift_reg[7]), // Generic Multiplier input 2
99
    .mult_o(mult_o[7]));   // Generic Multiplier output
100
 
101
  GF8GenMult MULTLAST(
102
    .mult_i1(coeff_i[7:0]), // Generic Multiplier input 1
103
    .mult_i2(output_mux), // Generic Multiplier input 2
104
    .mult_o(mult_o[8]));   // Generic Multiplier output
105
 
106
  //////////  ADDER TREE ////////// 
107
  GF8Add Add_0(
108
    .add_i1(mult_o[0]),
109
    .add_i2(mult_o[1]),
110
    .add_o(add_o[0]));
111
 
112
  GF8Add Add1(
113
    .add_i1(add_o[0]),
114
    .add_i2(mult_o[2]),
115
    .add_o(add_o[1]));
116
 
117
  GF8Add Add2(
118
    .add_i1(add_o[1]),
119
    .add_i2(mult_o[3]),
120
    .add_o(add_o[2]));
121
 
122
  GF8Add Add3(
123
    .add_i1(add_o[2]),
124
    .add_i2(mult_o[4]),
125
    .add_o(add_o[3]));
126
 
127
  GF8Add Add4(
128
    .add_i1(add_o[3]),
129
    .add_i2(mult_o[5]),
130
    .add_o(add_o[4]));
131
 
132
  GF8Add Add5(
133
    .add_i1(add_o[4]),
134
    .add_i2(mult_o[6]),
135
    .add_o(add_o[5]));
136
 
137
  GF8Add Add6(
138
    .add_i1(add_o[5]),
139
    .add_i2(mult_o[7]),
140
    .add_o(add_o[6]));
141
 
142
  GF8Add Add7(
143
    .add_i1(add_o[6]),
144
    .add_i2(mult_o[8]),
145
    .add_o(add_o[7]));
146
 
147
  //////////////////// 
148
endmodule

powered by: WebSVN 2.1.0

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