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

Subversion Repositories fpga-median

[/] [fpga-median/] [tags/] [fpga-filter-b1/] [rtl/] [common_network.v] - Blame information for rev 8

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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