OpenCores
URL https://opencores.org/ocsvn/fpga-median/fpga-median/trunk

Subversion Repositories fpga-median

[/] [fpga-median/] [trunk/] [rtl/] [common_network.v] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 9 joaocarlos
/* --------------------------------------------------------------------------------
2
 This file is part of FPGA Median Filter.
3
 
4
    FPGA Median Filter is free software: you can redistribute it and/or modify
5
    it under the terms of the GNU General Public License as published by
6
    the Free Software Foundation, either version 3 of the License, or
7
    (at your option) any later version.
8
 
9
    FPGA Median Filter is distributed in the hope that it will be useful,
10
    but WITHOUT ANY WARRANTY; without even the implied warranty of
11
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
    GNU General Public License for more details.
13
 
14
    You should have received a copy of the GNU General Public License
15
    along with FPGA Median Filter.  If not, see <http://www.gnu.org/licenses/>.
16
-------------------------------------------------------------------------------- */
17
 
18
/* +----------------------------------------------------------------------------
19
   Universidade Federal da Bahia
20
  ------------------------------------------------------------------------------
21
   PROJECT: FPGA Median Filter
22
  ------------------------------------------------------------------------------
23
   FILE NAME            : pixel_network.v
24
   AUTHOR               : João Carlos Bittencourt
25
   AUTHOR'S E-MAIL      : joaocarlos@ieee.org
26
   -----------------------------------------------------------------------------
27
   RELEASE HISTORY
28
   VERSION  DATE        AUTHOR        DESCRIPTION
29
   1.0      2013-08-13  joao.nunes    initial version
30
   -----------------------------------------------------------------------------
31
   KEYWORDS: comparator, low, high, median
32
   -----------------------------------------------------------------------------
33
   PURPOSE: Obtain the Median of a 3x3 mask.
34
   ----------------------------------------------------------------------------- */
35 2 joaocarlos
module common_network
36
#(
37
    parameter DATA_WIDTH = 8
38
)(
39
    input [DATA_WIDTH-1:0] x2_y1,
40
    input [DATA_WIDTH-1:0] x2_y0,
41
    input [DATA_WIDTH-1:0] x2_ym1,
42
    input [DATA_WIDTH-1:0] x1_y1,
43
    input [DATA_WIDTH-1:0] x1_y0,
44
    input [DATA_WIDTH-1:0] x1_ym1,
45
    input [DATA_WIDTH-1:0] x0_y1,
46
    input [DATA_WIDTH-1:0] x0_y0,
47
    input [DATA_WIDTH-1:0] x0_ym1,
48
    input [DATA_WIDTH-1:0] xm1_y1,
49
    input [DATA_WIDTH-1:0] xm1_y0,
50
    input [DATA_WIDTH-1:0] xm1_ym1,
51
 
52
    output [DATA_WIDTH-1:0] c3l,
53
    output [DATA_WIDTH-1:0] c3h,
54
    output [DATA_WIDTH-1:0] c3m,
55
    output [DATA_WIDTH-1:0] c2l,
56
    output [DATA_WIDTH-1:0] c2h,
57
    output [DATA_WIDTH-1:0] c2m,
58
    output [DATA_WIDTH-1:0] c1l,
59
    output [DATA_WIDTH-1:0] c1h,
60
    output [DATA_WIDTH-1:0] c1m,
61
    output [DATA_WIDTH-1:0] c0h,
62
    output [DATA_WIDTH-1:0] c0m,
63
    output [DATA_WIDTH-1:0] c0l
64
);
65
 
66
    // Connection signals
67
    wire [DATA_WIDTH-1:0] node_u0_hi;
68
    wire [DATA_WIDTH-1:0] node_u0_lo;
69
    wire [DATA_WIDTH-1:0] node_u1_hi;
70
    wire [DATA_WIDTH-1:0] node_u1_lo;
71
    wire [DATA_WIDTH-1:0] node_u2_hi;
72
    wire [DATA_WIDTH-1:0] node_u2_lo;
73
    wire [DATA_WIDTH-1:0] node_u3_hi;
74
    wire [DATA_WIDTH-1:0] node_u3_lo;
75
    wire [DATA_WIDTH-1:0] node_u4_hi;
76
    wire [DATA_WIDTH-1:0] node_u4_lo;
77
    wire [DATA_WIDTH-1:0] node_u5_hi;
78
    wire [DATA_WIDTH-1:0] node_u5_lo;
79
    wire [DATA_WIDTH-1:0] node_u6_hi;
80
    wire [DATA_WIDTH-1:0] node_u6_lo;
81
    wire [DATA_WIDTH-1:0] node_u7_hi;
82
    wire [DATA_WIDTH-1:0] node_u7_lo;
83
    wire [DATA_WIDTH-1:0] node_u8_hi;
84
    wire [DATA_WIDTH-1:0] node_u8_lo;
85
    wire [DATA_WIDTH-1:0] node_u9_hi;
86
    wire [DATA_WIDTH-1:0] node_u9_lo;
87
    wire [DATA_WIDTH-1:0] node_u10_hi;
88
    wire [DATA_WIDTH-1:0] node_u10_lo;
89
    wire [DATA_WIDTH-1:0] node_u11_hi;
90
    wire [DATA_WIDTH-1:0] node_u11_lo;
91
    wire [DATA_WIDTH-1:0] node_u12_hi;
92
    wire [DATA_WIDTH-1:0] node_u12_lo;
93
 
94
    // Output assignment
95
    assign c3l = node_u4_lo;
96
    assign c3h = node_u8_hi;
97
    assign c3m = node_u8_lo;
98
    assign c2l = node_u5_lo;
99
    assign c2h = node_u9_hi;
100
    assign c2m = node_u9_lo;
101
    assign c1l = node_u6_lo;
102
    assign c1h = node_u10_hi;
103
    assign c1m = node_u10_lo;
104
    assign c0h = node_u11_hi;
105
    assign c0m = node_u11_lo;
106
    assign c0l = node_u7_lo;
107
 
108
    // Column 3
109
    node
110
    #(
111
        .DATA_WIDTH(DATA_WIDTH),
112
        .LOW_MUX(1), // enable low output
113
        .HI_MUX(1) // enable high output
114
    ) node_u0 (
115
        .data_a(x2_y1),
116
        .data_b(x2_y0),
117
 
118
        .data_hi(node_u0_hi),
119
        .data_lo(node_u0_lo)
120
    );
121
 
122
    node
123
    #(
124
        .DATA_WIDTH(DATA_WIDTH),
125
        .LOW_MUX(1), // enable low output
126
        .HI_MUX(1) // enable high output
127
    ) node_u1 (
128
        .data_a(x1_y1),
129
        .data_b(x1_y0),
130
 
131
        .data_hi(node_u1_hi),
132
        .data_lo(node_u1_lo)
133
    );
134
 
135
    node
136
    #(
137
        .DATA_WIDTH(DATA_WIDTH),
138
        .LOW_MUX(1), // enable low output
139
        .HI_MUX(1) // enable high output
140
    ) node_u2 (
141
        .data_a(x0_y1),
142
        .data_b(x0_y0),
143
 
144
        .data_hi(node_u2_hi),
145
        .data_lo(node_u2_lo)
146
    );
147
 
148
    // Column 2
149
    node
150
    #(
151
        .DATA_WIDTH(DATA_WIDTH),
152
        .LOW_MUX(1), // enable low output
153
        .HI_MUX(1) // enable high output
154
    ) node_u3 (
155
        .data_a(xm1_y1),
156
        .data_b(xm1_y0),
157
 
158
        .data_hi(node_u3_hi),
159
        .data_lo(node_u3_lo)
160
    );
161
 
162
    node
163
    #(
164
        .DATA_WIDTH(DATA_WIDTH),
165
        .LOW_MUX(1), // enable low output
166
        .HI_MUX(1) // enable high output
167
    ) node_u4 (
168
        .data_a(node_u0_lo),
169
        .data_b(x2_ym1),
170
 
171
        .data_hi(node_u4_hi),
172
        .data_lo(node_u4_lo)
173
    );
174
 
175
    node
176
    #(
177
        .DATA_WIDTH(DATA_WIDTH),
178
        .LOW_MUX(1), // enable low output
179
        .HI_MUX(1) // enable high output
180
    ) node_u5 (
181
        .data_a(node_u1_lo),
182
        .data_b(x1_ym1),
183
 
184
        .data_hi(node_u5_hi),
185
        .data_lo(node_u5_lo)
186
    );
187
 
188
    // Column 1
189
    node
190
    #(
191
        .DATA_WIDTH(DATA_WIDTH),
192
        .LOW_MUX(1), // enable low output
193
        .HI_MUX(1) // enable high output
194
    ) node_u6 (
195
        .data_a(node_u2_lo),
196
        .data_b(x0_ym1),
197
 
198
        .data_hi(node_u6_hi),
199
        .data_lo(node_u6_lo)
200
    );
201
 
202
    node
203
    #(
204
        .DATA_WIDTH(DATA_WIDTH),
205
        .LOW_MUX(1), // enable low output
206
        .HI_MUX(1) // enable high output
207
    ) node_u7 (
208
        .data_a(node_u3_lo),
209
        .data_b(xm1_ym1),
210
 
211
        .data_hi(node_u7_hi),
212
        .data_lo(node_u7_lo)
213
    );
214
 
215
    node
216
    #(
217
        .DATA_WIDTH(DATA_WIDTH),
218
        .LOW_MUX(1), // enable low output
219
        .HI_MUX(1) // enable high output
220
    ) node_u8 (
221
        .data_a(node_u0_hi),
222
        .data_b(node_u4_hi),
223
 
224
        .data_hi(node_u8_hi),
225
        .data_lo(node_u8_lo)
226
    );
227
 
228
    // Column 0
229
    node
230
    #(
231
        .DATA_WIDTH(DATA_WIDTH),
232
        .LOW_MUX(1), // enable low output
233
        .HI_MUX(1) // enable high output
234
    ) node_u9 (
235
        .data_a(node_u1_hi),
236
        .data_b(node_u5_hi),
237
 
238
        .data_hi(node_u9_hi),
239
        .data_lo(node_u9_lo)
240
    );
241
 
242
    node
243
    #(
244
        .DATA_WIDTH(DATA_WIDTH),
245
        .LOW_MUX(1), // enable low output
246
        .HI_MUX(1) // enable high output
247
    ) node_u10 (
248
        .data_a(node_u2_hi),
249
        .data_b(node_u6_hi),
250
 
251
        .data_hi(node_u10_hi),
252
        .data_lo(node_u10_lo)
253
    );
254
 
255
    node
256
    #(
257
        .DATA_WIDTH(DATA_WIDTH),
258
        .LOW_MUX(1), // enable low output
259
        .HI_MUX(1) // enable high output
260
    ) node_u11 (
261
        .data_a(node_u3_hi),
262
        .data_b(node_u7_hi),
263
 
264
        .data_hi(node_u11_hi),
265
        .data_lo(node_u11_lo)
266
    );
267
 
268
endmodule

powered by: WebSVN 2.1.0

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