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 2

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

powered by: WebSVN 2.1.0

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