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

Subversion Repositories numbert_sort_device

[/] [numbert_sort_device/] [trunk/] [test_vga.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 leshabiruk
 
2
 
3
module  VGA_Pattern     (       //      Read Out Side
4
                                                oRed,
5
                                                oGreen,
6
                                                oBlue,
7
                                                iVGA_X,
8
                                                iVGA_Y,
9
                                                iVGA_CLK,
10
                                                //      Control Signals
11
                                                iRST_n,
12
 
13
                                                iColor_SW,
14
                                                endFrame,
15
                                                dbg_val );
16
 
17
parameter R_SZ= 64;
18
 
19
                                                //      Read Out Side
20
output  reg     [9:0]    oRed;
21
output  reg     [9:0]    oGreen;
22
output  reg     [9:0]    oBlue;
23
input   [11:0]           iVGA_X;
24
input   [11:0]           iVGA_Y;
25
input                           iVGA_CLK;
26
//      Control Signals
27
input                           iRST_n;
28
input   [9:0]                    iColor_SW;
29
input                           endFrame;
30
 
31
output wire [63:0] dbg_val;
32
wire [63:0] dbg_val_i;
33
 
34
parameter ENABLE_HEAVIES= 1;
35
 
36
reg [15:0] chrono;
37
reg endFrame2;
38
reg endFrame3;
39
 
40
wire [3:0] x;
41
wire [3:0] y;
42
 
43
 
44
wire [7:0] rv_a_2;
45
wire [7:0] gv_a_2;
46
wire [7:0] bv_a_2;
47
 
48
 
49
Test_Sorting_Stack #( 15, R_SZ   ) high_end_2( .clk( iVGA_CLK ), .rst( ~iRST_n ),
50
                                                                .iX_video( iVGA_X ), .iY_video( iVGA_Y ),
51
                                                                .oR_video( rv_a_2 ), .oG_video( gv_a_2 ), .oB_video( bv_a_2 ),
52
                                                                .tumblers( iColor_SW ), .endFrame(endFrame3),
53
                                                                .dbg_val(_)
54
                                                        );
55
 
56 4 leshabiruk
 
57 2 leshabiruk
 
58
wire [7:0] mp_test_out;
59
 
60
assign dbg_val= iColor_SW[7] ? dbg_val_i:chrono;
61
 
62
always@(posedge iVGA_CLK or negedge iRST_n)
63
begin
64
        if(!iRST_n)
65
        begin
66
                oRed    <=      0;
67
                oGreen  <=      0;
68
                oBlue   <=      0;
69
                chrono <= 0;
70
        end
71
        else
72
        begin
73
                if ( endFrame2==0 && endFrame==1 )
74
                begin
75
                        chrono<= chrono +1;
76
                        endFrame3<= 1;
77
                end
78
                else
79
                begin
80
                        endFrame3<= 0;
81
                end
82
                endFrame2<= endFrame;
83
 
84
 
85
                begin
86
//                      oBlue           <=      iVGA_X[4] ? -1: iVGA_X;
87
//                      oGreen  <=      iVGA_X[5] ? -1: iVGA_X;
88
//                      oRed            <=      iVGA_X[6] ? -1: iVGA_Y;
89
                        oBlue           <=      bv_a_2;
90
                        oGreen  <=      gv_a_2;
91
                        oRed            <=      rv_a_2;
92
                end
93
        end
94
end
95
 
96
endmodule
97
 
98
 
99
 
100
module Test_Sorting_Stack ( clk, rst,
101
                                                                iX_video, iY_video,
102
                                                                oR_video, oG_video, oB_video,
103
                                                                tumblers, endFrame, dbg_val     );
104
 
105
parameter HBIT= 15;
106
parameter R_SZ= 64;
107
 
108
input clk;
109
input rst;
110
 
111
input signed [11:0] iX_video;
112
input signed [11:0] iY_video;
113
output reg [7:0] oR_video;
114
output reg [7:0] oG_video;
115
output reg [7:0] oB_video;
116
input   [9:0]                    tumblers;
117
input endFrame;
118
output wire [63:0] dbg_val= count;
119
 
120
reg [HBIT*3+2:0]generator;
121
reg [HBIT*3+2:0]prev_generator;
122
reg prev_btn;
123
 
124
wire cell_rst= ( iX_video==1 && iY_video==1);
125
wire cell_clk= ( iX_video==1 );
126
 
127
reg err_unsorted;
128
reg err_checksum;
129
reg err_disagreement;
130
 
131
wire [HBIT:0] data_in= generator;
132
wire [HBIT:0] _data_out;
133
wire [HBIT:0] _d_out_3;
134
 
135
reg [HBIT:0] last_data;
136
reg [31:0]   stack_sum;
137
reg [15:0]   stack_pos_count;
138
reg [31:0]   old_sum;
139
 
140
//      tumblers[4] ? increasing order : decreasing order
141
  wire [HBIT:0] _data_in= tumblers[4] ? -1-data_in : data_in;
142
  Sorting_Tree #(HBIT,R_SZ) ctree ( clk, ~cell_clk, is_input, _data_in, _d_out_3        );
143
  wire [HBIT:0] d_out_3 = tumblers[4] ? -1-_d_out_3  : _d_out_3;
144 4 leshabiruk
  Sorting_Stack #(HBIT,R_SZ) cstack ( clk, ~cell_clk, is_input, _data_in, _data_out     );
145 2 leshabiruk
  wire [HBIT:0] data_out= tumblers[4] ? -1-_data_out : _data_out;
146
 
147
reg [11:0]count;
148
wire is_input= !cell_rst && count<R_SZ;
149
wire is_enable=!cell_rst && count<R_SZ*2;
150
 
151
always@( posedge clk or posedge rst )
152
begin
153
        if ( rst )
154
        begin
155
                generator<= 32'h12345678;
156
                prev_generator <= 32'h12345678;
157
                err_unsorted<= 0;
158
                err_checksum<= 0;
159
                err_disagreement<= 0;
160
                last_data<= -1;
161
                stack_sum<= 0;
162
                stack_pos_count<=0;
163
        end
164
        else
165
        if ( cell_rst )
166
        begin
167
                count<= 0;
168
                stack_pos_count<= 0;
169
                if ( count )
170
                begin
171
                        err_checksum<= ( tumblers[0] &err_checksum ) | ( stack_sum !=0 );
172
                        stack_sum<= 0;
173
                        old_sum<= stack_sum;
174
                end
175
                prev_btn <= tumblers[2];
176
                if ( tumblers[1] && !( tumblers[2] && ~prev_btn ) )
177
                begin
178
                        generator <= prev_generator;
179
                end
180
                else
181
                begin
182
                        prev_generator <= generator;
183
                end
184
        end
185
        else
186
        begin
187
 
188
                if ( cell_clk )
189
                begin
190
                        if ( is_input )
191
                        begin
192
                                last_data <= -1;
193
                                stack_sum <= stack_sum + data_in;
194
                                stack_pos_count<= stack_pos_count+ (data_in==0 ? 0:1);
195
                        end
196
                        else if ( is_enable )
197
                        begin
198
                                stack_sum <= stack_sum - data_out;
199
                                last_data<= data_out;
200
                                stack_pos_count<= stack_pos_count- (data_out==0 ? 0:1);
201
                                err_unsorted<=      ( tumblers[0] & err_unsorted)     |
202
                                                                                                        ( tumblers[4] && ( last_data > data_out ))|
203
                                                                                                        ( ~tumblers[4] && ( last_data < data_out ));
204
                                err_disagreement<=  ( tumblers[0] & err_disagreement) | ( data_out != d_out_3 );
205
                        end
206
                        generator<= generator*11 + ( generator >> 16 );
207
                        count<= count +1;
208
                end
209
 
210
//              oR_video<= (is_input ? data_in[HBIT:HBIT-9] : data_out[HBIT:HBIT-9]) > iX_video && !err_unsorted ? -1:0;
211
//              oG_video<= stack_sum[HBIT:HBIT-9] > iX_video ? -1:0;
212
                oR_video<= (is_input ? show_data_in : show_d_out_3 ) > iX_video ? -1:(8'h0-err_unsorted);
213
                oG_video<= (is_input ? show_data_in : show_data_out) > iX_video ? -1:(8'h0-err_checksum);
214
                oB_video<= (is_input ?            0 : show_data_out) > iX_video ? -1:(8'h0-err_disagreement);
215
        end
216
end
217
 
218
wire [9:0] show_data_in = tumblers[3] ? data_in [9:0] : data_in [HBIT:HBIT-9];
219
wire [9:0] show_data_out= tumblers[3] ? data_out[9:0] : data_out[HBIT:HBIT-9];
220
wire [9:0] show_d_out_3 = tumblers[3] ? d_out_3 [9:0] : d_out_3 [HBIT:HBIT-9];
221
 
222
endmodule
223
 
224
 
225
 

powered by: WebSVN 2.1.0

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