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 4

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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