Advertisement
Guest User

Untitled

a guest
Aug 29th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module ColorDetection (
  2.     input         CLK      ,
  3.     input         ENABLE1  ,
  4.     input         ENABLE2  ,
  5.     input         ENABLE3  ,
  6.     input         ENABLE4  ,
  7.     input         ENABLE5  ,   
  8.     input         ENABLE6  ,
  9.     input         ENABLE7  ,   
  10.     input         ENABLE8  ,   
  11.     input         ENABLE9  ,   
  12.     input         ENABLE10 ,
  13.     input         ENABLEALL,
  14.     input             ENABLE12 ,
  15.     input             ENABLE13 ,
  16.     input             ENABLE14 ,
  17.     input             ENABLE15 ,
  18.     input             ENABLE16 ,
  19.     input             ENABLE17 ,
  20.     input  [ 7:0] R_IN     ,
  21.     input  [ 7:0] G_IN     ,
  22.     input  [ 7:0] B_IN     ,
  23.     input  [12:0] VGA_V_CNT,
  24.     input  [12:0] VGA_H_CNT,
  25.     output [ 7:0] R_OUT    ,
  26.     output [ 7:0] G_OUT    ,
  27.     output [ 7:0] B_OUT    ,
  28.     output [ 5:0] BALL_X   ,
  29.     output [ 5:0] BALL_Y      ,
  30.     output [ 5:0] BALL_X1  ,
  31.     output [ 5:0] BALL_Y1
  32. );
  33.  
  34.     parameter MARGIN      = 1;
  35.     parameter FONT_WIDTH  = 3;
  36.     parameter FONT_HEIGHT = 5;
  37.  
  38.     reg [14:0] font[0:10] = '{
  39.         15'b111_101_101_101_111, // 0
  40.         15'b110_010_010_010_111, // 1
  41.         15'b111_001_111_100_111, // 2
  42.         15'b111_001_111_001_111, // 3
  43.         15'b101_101_111_001_001, // 4
  44.         15'b111_100_111_001_111, // 5
  45.         15'b111_100_111_101_111, // 6
  46.         15'b111_001_001_001_001, // 7
  47.         15'b111_101_111_101_111, // 8
  48.         15'b111_101_111_001_111, // 9
  49.         15'b000_000_111_000_000  // -
  50.     };
  51.  
  52.     function font_pixel;
  53.         input [3:0] digit;
  54.         input [15:0] x_pos;
  55.         input [15:0] y_pos;
  56.         begin
  57.             case (digit)
  58.                 0  : font_pixel = font[0][x_pos + y_pos * FONT_WIDTH];
  59.                 1  : font_pixel = font[1][x_pos + y_pos * FONT_WIDTH];
  60.                 2  : font_pixel = font[2][x_pos + y_pos * FONT_WIDTH];
  61.                 3  : font_pixel = font[3][x_pos + y_pos * FONT_WIDTH];
  62.                 4  : font_pixel = font[4][x_pos + y_pos * FONT_WIDTH];
  63.                 5  : font_pixel = font[5][x_pos + y_pos * FONT_WIDTH];
  64.                 6  : font_pixel = font[6][x_pos + y_pos * FONT_WIDTH];
  65.                 7  : font_pixel = font[7][x_pos + y_pos * FONT_WIDTH];
  66.                 8  : font_pixel = font[8][x_pos + y_pos * FONT_WIDTH];
  67.                 9  : font_pixel = font[9][x_pos + y_pos * FONT_WIDTH];
  68.                 10 : font_pixel = font[10][x_pos + y_pos * FONT_WIDTH];
  69.             endcase
  70.         end
  71.     endfunction
  72.  
  73.     parameter rows       = 30; //default 30
  74.     parameter rowstest   = 10;
  75.     parameter cols       = 40;  //default 40
  76.     parameter block_size = 16; // 640/40=16 480/30=16 so block_size = 16x16 350
  77.     shortint unsigned        modes  = 0;
  78.  
  79.     byte unsigned row              [cols]; // Store the count of green pixels of a single row
  80.     byte unsigned max_count_per_row[rows]; // Store the max green count per row
  81.     byte unsigned max_x_per_row    [rows]; // Store the x of the max green per row
  82.    
  83.     //opslag van kleuren
  84.     shortint unsigned blockcolors[8:0];
  85.  
  86.     // The max x/y/count so far in for loops for getting the max of the array above
  87.     shortint unsigned max_x, max_y, max_count = 0;
  88.  
  89.     // Current x/y
  90.     shortint unsigned x, y;
  91.  
  92.     // Current x/y on the grid
  93.     shortint unsigned x_grid, y_grid;
  94.     shortint unsigned prev_y_grid = rows; // Previous y on the grid
  95.     // (default = imposible so first clock tick the array is reset)
  96.  
  97.     // HSL values
  98.     shortint unsigned hue, lightness, saturation;
  99.  
  100.     // HSL tmp values
  101.     shortint unsigned max, min, delta, R, G, B;
  102.    
  103.     shortint unsigned y_block_min, y_block_max, x_block_min, x_block_max, side;
  104.    
  105.  
  106.     // Is the current pixel green or not
  107.     reg is_green = 0;
  108.    
  109.     // Is the current pixel blue or not
  110.     reg is_blue = 0;
  111.  
  112.     // Is the current pixel blue or not
  113.     reg is_red = 0;
  114.    
  115.     // Is the current pixel blue or not
  116.     reg is_white = 0;
  117.    
  118.     // Is the current pixel blue or not
  119.     reg is_yellow = 0;
  120.  
  121.     // Is the current pixel blue or not
  122.     reg is_orange = 0;
  123.    
  124.     reg is_greenblock = 0;
  125.     reg is_blueblock = 0;
  126.     shortint unsigned is_blockcolor = 0;  //0 blue, 1 green, 2  rood, 3 wit, 4 geel, 5 oranje
  127.  
  128.  
  129.     always @(posedge CLK) begin
  130. //      if (VGA_H_CNT < X_START + 155 || (VGA_H_CNT - X_START) > VGA_WIDTH - 370 ||
  131. //          VGA_V_CNT < Y_START + 52 || (VGA_V_CNT - Y_START) > VGA_HEIGHT - 320) begin
  132.         if (VGA_H_CNT < X_START || (VGA_H_CNT - X_START) > VGA_WIDTH ||
  133.             VGA_V_CNT < Y_START || (VGA_V_CNT - Y_START) > VGA_HEIGHT) begin
  134.             R_OUT <= R_IN;
  135.             G_OUT <= G_IN;
  136.             B_OUT <= B_IN;
  137.         end else begin
  138.             // Calculate the real x/y values
  139.             x = VGA_H_CNT - X_START;
  140.             y = VGA_V_CNT - Y_START;
  141.  
  142.             // Calculate the x/y on the grid
  143.             x_grid = x / block_size;
  144.             y_grid = y / block_size;
  145.            
  146.             //blokken voor detectie
  147.  
  148.            
  149.             y_block_min = 0;
  150.             y_block_max = 30;
  151.             x_block_min = 0;
  152.             x_block_max = 40;
  153.  
  154.             if (ENABLE10) begin
  155.                 y_block_min = 3;
  156.                 y_block_max = 9;
  157.                 x_block_min = 9;
  158.                 x_block_max = 15;
  159.             end else if (ENABLE12) begin
  160.                 y_block_min = 3;
  161.                 y_block_max = 9;
  162.                 x_block_min = 16;
  163.                 x_block_max = 22;
  164.             end else if (ENABLE13) begin
  165.                 y_block_min = 3;
  166.                 y_block_max = 9;
  167.                 x_block_min = 24;
  168.                 x_block_max = 30;
  169.             end else if (ENABLE14) begin
  170.                 y_block_min = 11;
  171.                 y_block_max = 17;
  172.                 x_block_min = 9;
  173.                 x_block_max = 15;
  174.             end else if (ENABLE15) begin
  175.                 y_block_min = 11;
  176.                 y_block_max = 17;
  177.                 x_block_min = 17;
  178.                 x_block_max = 23;
  179.             end
  180.            
  181.             if (y_grid >= y_block_min && y_grid < y_block_max && x_grid >= x_block_min && x_grid < x_block_max) begin //if (y_grid > 17 && y_grid < 24 && x_grid > 22 && x_grid < 29)
  182.  
  183.                 // Reset the grid to zero's
  184.                 if(y_grid != prev_y_grid) begin
  185.                     prev_y_grid = y_grid;
  186.                     for (int for_x = 0; for_x < cols; for_x++) begin
  187.                         row[for_x] = 0;
  188.                     end
  189.                 end
  190.  
  191.                 // convert 0-255 to 0-100 (normally 0-1 but no floats bruh)
  192.                 R = R_IN * 100 / 255;
  193.                 G = G_IN * 100 / 255;
  194.                 B = B_IN * 100 / 255;
  195.  
  196.                 // Calculate max/min (without helper functions, say whut)
  197.                 max = (R > G) ? (R > B ? R : B) : (G > B ? G : B);
  198.                 min = (R < G) ? (R < B ? R : B) : (G < B ? G : B);
  199.  
  200.                 delta = max - min;
  201.  
  202.                 lightness  = (max + min) / 2;
  203.                 saturation = (lightness > 50) ? (delta * 100) / (200 - max - min) : (delta * 100) / (max + min);
  204.  
  205.                 if (max == R) hue = 60 * ((G - B) / delta % 6);
  206.                 if (max == G) hue = 60 * ((B - R) / delta + 2);
  207.                 if (max == B) hue = 60 * ((R - G) / delta + 4);
  208.  
  209.                 if (max == min) begin // achromatic
  210.                     hue        = 0;
  211.                     saturation = 0;
  212.                 end
  213.  
  214.                 if (hue > 360) hue = hue - 360;
  215.                 if (hue < 0) hue = hue + 360;
  216.  
  217.                 if(ENABLEALL) begin
  218.                     is_blue = hue > 160 && hue < 200 &&  // was 160 200
  219.                         saturation > 20; //default 20
  220.                     // lightness > 10 && lightness < 90;
  221.                    
  222.                     is_green = hue > 68 && hue < 100 &&  // was 50 90
  223.                         saturation > 22; //default 20
  224.                     // lightness > 10 && lightness < 90;
  225.                    
  226.                     is_red = (hue > 320 || hue < 20) && //was 345 20
  227.                         saturation < 70 && lightness < 60; //default 20
  228.                     // lightness > 10 && lightness < 90;
  229.                    
  230.                     is_white = lightness > 95 && saturation < 50;
  231.                    
  232.                     is_yellow = hue > 35 && hue < 70 && // was 25 60
  233.                         saturation > 20; //default 20
  234.                     // lightness > 10 && lightness < 90;
  235.                    
  236.                     is_orange =  hue > 15 && hue < 35 && //was 0 35//////// 10 35 werkt, maar pakt te vaak over rood
  237.                         saturation > 60; //was 50
  238.                         // lightness > 10 && lightness < 90;
  239.                    
  240.                    
  241.                    
  242.                     //hier worden de hoeveelheid groene puntjes berekend
  243.                     // If hue is green
  244.                     // And value is still valid
  245.                     if (is_blue && row[x_grid] < 255) begin
  246.                         // Increase by one
  247.         //              row[x_grid] = 20; //default ++
  248.                         row[x_grid]++;
  249.                     end
  250. //                  if (is_green && row[x_grid] < 255) begin
  251. //                      // Increase by one
  252. //      //              row[x_grid] = 20; //default ++
  253. //                      row[x_grid]++;
  254. //                  end
  255. //                  if (is_red && row[x_grid] < 255) begin
  256. //                      // Increase by one
  257. //      //              row[x_grid] = 20; //default ++
  258. //                      row[x_grid]++;
  259. //                  end
  260.                 end
  261.  
  262.                 R_OUT <= 0;
  263.                 G_OUT <= 0;
  264.                 B_OUT <= 0;
  265.  
  266.                 if(ENABLE1 && y % block_size < FONT_HEIGHT && x_grid > 0 && x_grid < cols - 1) begin
  267.                     shortint unsigned x_tgt, block_x, block_y, dig, x_pos, y_pos;
  268.  
  269.                     // Calculate the start x/y of the block
  270.                     block_x = x_grid * block_size + 1;
  271.                     block_y = y_grid * block_size;
  272.  
  273.                     for (int i = 0; i < 3; i++) begin
  274.                         x_tgt = block_x + i * (FONT_WIDTH + MARGIN); //debug letters
  275.                         if (x >= x_tgt && x < (x_tgt + FONT_WIDTH)) begin
  276.                             byte unsigned x_pos, y_pos;
  277.  
  278.                             x_pos = (x - x_tgt);
  279.                             y_pos = (y - block_y);
  280.  
  281.                             case (i)
  282.                                 0 : dig = row[x_grid] % 1000 / 100;
  283.                                 1 : dig = row[x_grid] % 100 / 10;
  284.                                 2 : dig = row[x_grid] % 10;
  285.                             endcase
  286.  
  287.                             if (font_pixel(dig, FONT_WIDTH - 1 - x_pos, FONT_HEIGHT - 1 - y_pos)) begin
  288.                                 R_OUT <= 255;
  289.                                 G_OUT <= 255;
  290.                                 B_OUT <= 255;
  291.                             end
  292.                         end
  293.                     end
  294.                 end else if(BALL_X == x_grid && BALL_Y == y_grid && 1 == 0) begin
  295.                     // Show the hotbox
  296.                     R_OUT <= 0;
  297.                     G_OUT <= 255;
  298.                     B_OUT <= 0;
  299.                 end else if(BALL_X1 == x_grid && BALL_Y1 == y_grid && 1==0) begin
  300.                     // Show the hotbox
  301.                     R_OUT <= 0;
  302.                     G_OUT <= 0;
  303.                     B_OUT <= 255;
  304.                 end else if(~ENABLE3) begin
  305.                     R_OUT <= R_IN;
  306.                     G_OUT <= G_IN;
  307.                     B_OUT <= B_IN;
  308.                 end else if(ENABLE4 && is_green) begin  //end else if(ENABLE2 && is_green) begin
  309.                     // Show all the greens with hue 100 > hue < 140
  310.                     R_OUT <= 0;
  311.                     G_OUT <= 255;
  312.                     B_OUT <= 0;
  313.                 end else if(ENABLE5 && is_blue) begin   //end else if(ENABLE5 && is_blue) begin
  314.                     // Show all the greens with hue 100 > hue < 140
  315.                     R_OUT <= 0;
  316.                     G_OUT <= 0;
  317.                     B_OUT <= 255;
  318.                 end else if(ENABLE6 && is_red) begin
  319.                     // Show all the greens with hue 100 > hue < 140
  320.                     R_OUT <= 255;
  321.                     G_OUT <= 0;
  322.                     B_OUT <= 0;
  323.                 end else if(ENABLE7 && is_white) begin
  324.                     // Show all the greens with hue 100 > hue < 140
  325.                     R_OUT <= 255;
  326.                     G_OUT <= 255;
  327.                     B_OUT <= 255;
  328.                 end else if(ENABLE8 && is_yellow) begin
  329.                     // Show all the greens with hue 100 > hue < 140
  330.                     R_OUT <= 255;
  331.                     G_OUT <= 255;
  332.                     B_OUT <= 0;
  333.                 end else if(ENABLE9 && is_orange) begin
  334.                     // Show all the greens with hue 100 > hue < 140
  335.                     R_OUT <= 255;
  336.                     G_OUT <= 125;
  337.                     B_OUT <= 0;
  338.                
  339.                 //LINKSBOVEN
  340.                 end else if((is_blue && x == 175 && y == 150)) begin // || (is_blue && x == 101 && y == 100) || (is_blue && x == 100 && y == 101) || (is_blue && x == 101 && y == 101)
  341.                     blockcolors[0] = 0;//
  342.                 end else if ((is_green && x == 175 && y == 150)) begin //  || (is_green && x == 101 && y == 100) || (is_green && x == 100 && y == 101) || (is_green && x == 101 && y == 101)
  343.                     blockcolors[0] = 1;
  344.                 end else if ((is_red && x == 175 && y == 150)) begin // || (is_red && x == 101 && y == 100) || (is_red && x == 100 && y == 101) || (is_red && x == 101 && y == 101)
  345.                     blockcolors[0] = 2;
  346.                 end else if ((is_white && x == 175 && y == 150)) begin // || (is_white && x == 101 && y == 100) || (is_white && x == 100 && y == 101) || (is_white && x == 101 && y == 101)
  347.                     blockcolors[0] = 3;
  348.                 end else if ((is_yellow && x == 175 && y == 150)) begin // || (is_yellow && x == 101 && y == 100) || (is_yellow && x == 100 && y == 101) || (is_yellow && x == 101 && y == 101)
  349.                     blockcolors[0] = 4;
  350.                 end else if ((is_orange && x == 175 && y == 150)) begin // || (is_orange && x == 101 && y == 100) || (is_orange && x == 100 && y == 101) || (is_orange && x == 101 && y == 101)
  351.                     blockcolors[0] = 5;
  352.                 end else if (blockcolors[0] == 0 && x > 150 && x < 200 && y > 125 && y < 175) begin //is_greenblock && ~is_blueblock
  353.                 //blauw
  354.                     R_OUT <= 0;
  355.                     G_OUT <= 0;
  356.                     B_OUT <= 255;
  357.                 end else if (blockcolors[0] == 1 && x > 150 && x < 200 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  358.                 //groen
  359.                     R_OUT <= 0;
  360.                     G_OUT <= 255;
  361.                     B_OUT <= 0;
  362.                 end else if (blockcolors[0] == 2 && x > 150 && x < 200 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  363.                 //rood
  364.                     R_OUT <= 255;
  365.                     G_OUT <= 0;
  366.                     B_OUT <= 0;
  367.                 end else if (blockcolors[0] == 3 && x > 150 && x < 200 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  368.                 //wit
  369.                     R_OUT <= 255;
  370.                     G_OUT <= 255;
  371.                     B_OUT <= 255;
  372.                 end else if (blockcolors[0] == 4 && x > 150 && x < 200 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  373.                 //geel
  374.                     R_OUT <= 255;
  375.                     G_OUT <= 255;
  376.                     B_OUT <= 0;
  377.                 end else if (blockcolors[0] == 5 && x > 150 && x < 200 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  378.                 //oranje
  379.                     R_OUT <= 255;
  380.                     G_OUT <= 125;
  381.                     B_OUT <= 0;
  382.                    
  383.                 //MIDDENBOVEN
  384.                 end else if((is_blue && x == 300 && y == 150)) begin // || (is_blue && x == 101 && y == 100) || (is_blue && x == 100 && y == 101) || (is_blue && x == 101 && y == 101)
  385.                     blockcolors[1] = 0;//
  386.                 end else if ((is_green && x == 300 && y == 150)) begin //  || (is_green && x == 101 && y == 100) || (is_green && x == 100 && y == 101) || (is_green && x == 101 && y == 101)
  387.                     blockcolors[1] = 1;
  388.                 end else if ((is_red && x == 300 && y == 150)) begin // || (is_red && x == 101 && y == 100) || (is_red && x == 100 && y == 101) || (is_red && x == 101 && y == 101)
  389.                     blockcolors[1] = 2;
  390.                 end else if ((is_white && x == 300 && y == 150)) begin // || (is_white && x == 101 && y == 100) || (is_white && x == 100 && y == 101) || (is_white && x == 101 && y == 101)
  391.                     blockcolors[1] = 3;
  392.                 end else if ((is_yellow && x == 300 && y == 150)) begin // || (is_yellow && x == 101 && y == 100) || (is_yellow && x == 100 && y == 101) || (is_yellow && x == 101 && y == 101)
  393.                     blockcolors[1] = 4;
  394.                 end else if ((is_orange && x == 300 && y == 150)) begin // || (is_orange && x == 101 && y == 100) || (is_orange && x == 100 && y == 101) || (is_orange && x == 101 && y == 101)
  395.                     blockcolors[1] = 5;
  396.                 end else if (blockcolors[1] == 0 && x > 275 && x < 325 && y > 125 && y < 175) begin //is_greenblock && ~is_blueblock
  397.                 //blauw
  398.                     R_OUT <= 0;
  399.                     G_OUT <= 0;
  400.                     B_OUT <= 255;
  401.                 end else if (blockcolors[1] == 1 && x > 275 && x < 325 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  402.                 //groen
  403.                     R_OUT <= 0;
  404.                     G_OUT <= 255;
  405.                     B_OUT <= 0;
  406.                 end else if (blockcolors[1] == 2 && x > 275 && x < 325 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  407.                 //rood
  408.                     R_OUT <= 255;
  409.                     G_OUT <= 0;
  410.                     B_OUT <= 0;
  411.                 end else if (blockcolors[1] == 3 && x > 275 && x < 325 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  412.                 //wit
  413.                     R_OUT <= 255;
  414.                     G_OUT <= 255;
  415.                     B_OUT <= 255;
  416.                 end else if (blockcolors[1] == 4 && x > 275 && x < 325 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  417.                 //geel
  418.                     R_OUT <= 255;
  419.                     G_OUT <= 255;
  420.                     B_OUT <= 0;
  421.                 end else if (blockcolors[1] == 5 && x > 275 && x < 325 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  422.                 //oranje
  423.                     R_OUT <= 255;
  424.                     G_OUT <= 125;
  425.                     B_OUT <= 0;
  426.                    
  427.                 //RECHTSBOVEN
  428.                 end else if((is_blue && x == 425 && y == 150)) begin // || (is_blue && x == 101 && y == 100) || (is_blue && x == 100 && y == 101) || (is_blue && x == 101 && y == 101)
  429.                     blockcolors[2] = 0;//
  430.                 end else if ((is_green && x == 425 && y == 150)) begin //  || (is_green && x == 101 && y == 100) || (is_green && x == 100 && y == 101) || (is_green && x == 101 && y == 101)
  431.                     blockcolors[2] = 1;
  432.                 end else if ((is_red && x == 425 && y == 150)) begin // || (is_red && x == 101 && y == 100) || (is_red && x == 100 && y == 101) || (is_red && x == 101 && y == 101)
  433.                     blockcolors[2] = 2;
  434.                 end else if ((is_white && x == 425 && y == 150)) begin // || (is_white && x == 101 && y == 100) || (is_white && x == 100 && y == 101) || (is_white && x == 101 && y == 101)
  435.                     blockcolors[2] = 3;
  436.                 end else if ((is_yellow && x == 425 && y == 150)) begin // || (is_yellow && x == 101 && y == 100) || (is_yellow && x == 100 && y == 101) || (is_yellow && x == 101 && y == 101)
  437.                     blockcolors[2] = 4;
  438.                 end else if ((is_orange && x == 425 && y == 150)) begin // || (is_orange && x == 101 && y == 100) || (is_orange && x == 100 && y == 101) || (is_orange && x == 101 && y == 101)
  439.                     blockcolors[2] = 5;
  440.                 end else if (blockcolors[2] == 0 && x > 400 && x < 450 && y > 125 && y < 175) begin //is_greenblock && ~is_blueblock
  441.                 //blauw
  442.                     R_OUT <= 0;
  443.                     G_OUT <= 0;
  444.                     B_OUT <= 255;
  445.                 end else if (blockcolors[2] == 1 && x > 400 && x < 450 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  446.                 //groen
  447.                     R_OUT <= 0;
  448.                     G_OUT <= 255;
  449.                     B_OUT <= 0;
  450.                 end else if (blockcolors[2] == 2 && x > 400 && x < 450 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  451.                 //rood
  452.                     R_OUT <= 255;
  453.                     G_OUT <= 0;
  454.                     B_OUT <= 0;
  455.                 end else if (blockcolors[2] == 3 && x > 400 && x < 450 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  456.                 //wit
  457.                     R_OUT <= 255;
  458.                     G_OUT <= 255;
  459.                     B_OUT <= 255;
  460.                 end else if (blockcolors[2] == 4 && x > 400 && x < 450 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  461.                 //geel
  462.                     R_OUT <= 255;
  463.                     G_OUT <= 255;
  464.                     B_OUT <= 0;
  465.                 end else if (blockcolors[2] == 5 && x > 400 && x < 450 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  466.                 //oranje
  467.                     R_OUT <= 255;
  468.                     G_OUT <= 125;
  469.                     B_OUT <= 0;
  470.                
  471.                 //LINKSMIDDEN
  472.                 end else if (is_blue && x == 175 && y == 275) begin
  473.                     blockcolors[3] = 0;//
  474.                 end else if (is_green && x == 175 && y == 275) begin
  475.                     blockcolors[3] = 1;
  476.                 end else if (is_red && x == 175 && y == 275) begin
  477.                     blockcolors[3] = 2;
  478.                 end else if (is_white && x == 175 && y == 275) begin
  479.                     blockcolors[3] = 3;
  480.                 end else if (is_yellow && x == 175 && y == 275) begin
  481.                     blockcolors[3] = 4;
  482.                 end else if (is_orange && x == 175 && y == 275) begin
  483.                     blockcolors[3] = 5;
  484.                 end else if (blockcolors[3] == 0 && x > 150 && x < 200 && y > 250 && y < 300) begin
  485.                 //blauw
  486.                     R_OUT <= 0;
  487.                     G_OUT <= 0;
  488.                     B_OUT <= 255;
  489.                 end else if (blockcolors[3] == 1 && x > 150 && x < 200 && y > 250 && y < 300) begin
  490.                 //groen
  491.                     R_OUT <= 0;
  492.                     G_OUT <= 255;
  493.                     B_OUT <= 0;
  494.                 end else if (blockcolors[3] == 2 && x > 150 && x < 200 && y > 250 && y < 300) begin
  495.                 //rood
  496.                     R_OUT <= 255;
  497.                     G_OUT <= 0;
  498.                     B_OUT <= 0;
  499.                 end else if (blockcolors[3] == 3 && x > 150 && x < 200 && y > 250 && y < 300) begin
  500.                 //wit
  501.                     R_OUT <= 255;
  502.                     G_OUT <= 255;
  503.                     B_OUT <= 255;
  504.                 end else if (blockcolors[3] == 4 && x > 150 && x < 200 && y > 250 && y < 300) begin
  505.                 //geel
  506.                     R_OUT <= 255;
  507.                     G_OUT <= 255;
  508.                     B_OUT <= 0;
  509.                 end else if (blockcolors[3] == 5 && x > 150 && x < 200 && y > 250 && y < 300) begin
  510.                 //oranje
  511.                     R_OUT <= 255;
  512.                     G_OUT <= 125;
  513.                     B_OUT <= 0;
  514.                    
  515.                 //MIDDENMIDDEN
  516.                 end else if (is_blue && x == 300 && y == 275) begin
  517.                     blockcolors[4] = 0;//
  518.                 end else if (is_green && x == 300 && y == 275) begin
  519.                     blockcolors[4] = 1;
  520.                 end else if (is_red && x == 300 && y == 275) begin
  521.                     blockcolors[4] = 2;
  522.                 end else if (is_white && x == 300 && y == 275) begin
  523.                     blockcolors[4] = 3;
  524.                 end else if (is_yellow && x == 300 && y == 275) begin
  525.                     blockcolors[4] = 4;
  526.                 end else if (is_orange && x == 300 && y == 275) begin
  527.                     blockcolors[4] = 5;
  528.                 end else if (blockcolors[4] == 0 && x > 275 && x < 325 && y > 250 && y < 300) begin
  529.                 //blauw
  530.                     R_OUT <= 0;
  531.                     G_OUT <= 0;
  532.                     B_OUT <= 255;
  533.                 end else if (blockcolors[4] == 1 && x > 275 && x < 325 && y > 250 && y < 300) begin
  534.                 //groen
  535.                     R_OUT <= 0;
  536.                     G_OUT <= 255;
  537.                     B_OUT <= 0;
  538.                 end else if (blockcolors[4] == 2 && x > 275 && x < 325 && y > 250 && y < 300) begin
  539.                 //rood
  540.                     R_OUT <= 255;
  541.                     G_OUT <= 0;
  542.                     B_OUT <= 0;
  543.                 end else if (blockcolors[4] == 3 && x > 275 && x < 325 && y > 250 && y < 300) begin
  544.                 //wit
  545.                     R_OUT <= 255;
  546.                     G_OUT <= 255;
  547.                     B_OUT <= 255;
  548.                 end else if (blockcolors[4] == 4 && x > 275 && x < 325 && y > 250 && y < 300) begin
  549.                 //geel
  550.                     R_OUT <= 255;
  551.                     G_OUT <= 255;
  552.                     B_OUT <= 0;
  553.                 end else if (blockcolors[4] == 5 && x > 275 && x < 325 && y > 250 && y < 300) begin
  554.                 //oranje
  555.                     R_OUT <= 255;
  556.                     G_OUT <= 125;
  557.                     B_OUT <= 0;
  558.                    
  559.                 //RECHTSMIDDEN
  560.                 end else if (is_blue && x == 425 && y == 275) begin
  561.                     blockcolors[5] = 0;//
  562.                 end else if (is_green && x == 425 && y == 275) begin
  563.                     blockcolors[5] = 1;
  564.                 end else if (is_red && x == 425 && y == 275) begin
  565.                     blockcolors[5] = 2;
  566.                 end else if (is_white && x == 425 && y == 275) begin
  567.                     blockcolors[5] = 3;
  568.                 end else if (is_yellow && x == 425 && y == 275) begin
  569.                     blockcolors[5] = 4;
  570.                 end else if (is_orange && x == 425 && y == 275) begin
  571.                     blockcolors[5] = 5;
  572.                 end else if (blockcolors[5] == 0 && x > 400 && x < 450 && y > 250 && y < 300) begin
  573.                 //blauw
  574.                     R_OUT <= 0;
  575.                     G_OUT <= 0;
  576.                     B_OUT <= 255;
  577.                 end else if (blockcolors[5] == 1 && x > 400 && x < 450 && y > 250 && y < 300) begin
  578.                 //groen
  579.                     R_OUT <= 0;
  580.                     G_OUT <= 255;
  581.                     B_OUT <= 0;
  582.                 end else if (blockcolors[5] == 2 && x > 400 && x < 450 && y > 250 && y < 300) begin
  583.                 //rood
  584.                     R_OUT <= 255;
  585.                     G_OUT <= 0;
  586.                     B_OUT <= 0;
  587.                 end else if (blockcolors[5] == 3 && x > 400 && x < 450 && y > 250 && y < 300) begin
  588.                 //wit
  589.                     R_OUT <= 255;
  590.                     G_OUT <= 255;
  591.                     B_OUT <= 255;
  592.                 end else if (blockcolors[5] == 4 && x > 400 && x < 450 && y > 250 && y < 300) begin
  593.                 //geel
  594.                     R_OUT <= 255;
  595.                     G_OUT <= 255;
  596.                     B_OUT <= 0;
  597.                 end else if (blockcolors[5] == 5 && x > 400 && x < 450 && y > 250 && y < 300) begin
  598.                 //oranje
  599.                     R_OUT <= 255;
  600.                     G_OUT <= 125;
  601.                     B_OUT <= 0;
  602.                    
  603.                 //LINKSONDER
  604.                 end else if (is_blue && x == 175 && y == 400) begin
  605.                     blockcolors[6] = 0;//
  606.                 end else if (is_green && x == 175 && y == 400) begin
  607.                     blockcolors[6] = 1;
  608.                 end else if (is_red && x == 175 && y == 400) begin
  609.                     blockcolors[6] = 2;
  610.                 end else if (is_white && x == 175 && y == 400) begin
  611.                     blockcolors[6] = 3;
  612.                 end else if (is_yellow && x == 175 && y == 400) begin
  613.                     blockcolors[6] = 4;
  614.                 end else if (is_orange && x == 175 && y == 400) begin
  615.                     blockcolors[6] = 5;
  616.                 end else if (blockcolors[6] == 0 && x > 150 && x < 200 && y > 375 && y < 425) begin
  617.                 //blauw
  618.                     R_OUT <= 0;
  619.                     G_OUT <= 0;
  620.                     B_OUT <= 255;
  621.                 end else if (blockcolors[6] == 1 && x > 150 && x < 200 && y > 375 && y < 425) begin
  622.                 //groen
  623.                     R_OUT <= 0;
  624.                     G_OUT <= 255;
  625.                     B_OUT <= 0;
  626.                 end else if (blockcolors[6] == 2 && x > 150 && x < 200 && y > 375 && y < 425) begin
  627.                 //rood
  628.                     R_OUT <= 255;
  629.                     G_OUT <= 0;
  630.                     B_OUT <= 0;
  631.                 end else if (blockcolors[6] == 3 && x > 150 && x < 200 && y > 375 && y < 425) begin
  632.                 //wit
  633.                     R_OUT <= 255;
  634.                     G_OUT <= 255;
  635.                     B_OUT <= 255;
  636.                 end else if (blockcolors[6] == 4 && x > 150 && x < 200 && y > 375 && y < 425) begin
  637.                 //geel
  638.                     R_OUT <= 255;
  639.                     G_OUT <= 255;
  640.                     B_OUT <= 0;
  641.                 end else if (blockcolors[6] == 5 && x > 150 && x < 200 && y > 375 && y < 425) begin
  642.                 //oranje
  643.                     R_OUT <= 255;
  644.                     G_OUT <= 125;
  645.                     B_OUT <= 0;
  646.                    
  647.                 //MIDDENONDER
  648.                 end else if (is_blue && x == 300 && y == 400) begin
  649.                     blockcolors[7] = 0;//
  650.                 end else if (is_green && x == 300 && y == 400) begin
  651.                     blockcolors[7] = 1;
  652.                 end else if (is_red && x == 300 && y == 400) begin
  653.                     blockcolors[7] = 2;
  654.                 end else if (is_white && x == 300 && y == 400) begin
  655.                     blockcolors[7] = 3;
  656.                 end else if (is_yellow && x == 300 && y == 400) begin
  657.                     blockcolors[7] = 4;
  658.                 end else if (is_orange && x == 300 && y == 400) begin
  659.                     blockcolors[7] = 5;
  660.                 end else if (blockcolors[7] == 0 && x > 275 && x < 325 && y > 375 && y < 425) begin
  661.                 //blauw
  662.                     R_OUT <= 0;
  663.                     G_OUT <= 0;
  664.                     B_OUT <= 255;
  665.                 end else if (blockcolors[7] == 1 && x > 275 && x < 325 && y > 375 && y < 425) begin
  666.                 //groen
  667.                     R_OUT <= 0;
  668.                     G_OUT <= 255;
  669.                     B_OUT <= 0;
  670.                 end else if (blockcolors[7] == 2 && x > 275 && x < 325 && y > 375 && y < 425) begin
  671.                 //rood
  672.                     R_OUT <= 255;
  673.                     G_OUT <= 0;
  674.                     B_OUT <= 0;
  675.                 end else if (blockcolors[7] == 3 && x > 275 && x < 325 && y > 375 && y < 425) begin
  676.                 //wit
  677.                     R_OUT <= 255;
  678.                     G_OUT <= 255;
  679.                     B_OUT <= 255;
  680.                 end else if (blockcolors[7] == 4 && x > 275 && x < 325 && y > 375 && y < 425) begin
  681.                 //geel
  682.                     R_OUT <= 255;
  683.                     G_OUT <= 255;
  684.                     B_OUT <= 0;
  685.                 end else if (blockcolors[7] == 5 && x > 275 && x < 325 && y > 375 && y < 425) begin
  686.                 //oranje
  687.                     R_OUT <= 255;
  688.                     G_OUT <= 125;
  689.                     B_OUT <= 0;
  690.                    
  691.                 //RECHTSONDER
  692.                 end else if (is_blue && x == 425 && y == 400) begin
  693.                     blockcolors[8] = 0;//
  694.                 end else if (is_green && x == 425 && y == 400) begin
  695.                     blockcolors[8] = 1;
  696.                 end else if (is_red && x == 425 && y == 400) begin
  697.                     blockcolors[8] = 2;
  698.                 end else if (is_white && x == 425 && y == 400) begin
  699.                     blockcolors[8] = 3;
  700.                 end else if (is_yellow && x == 425 && y == 400) begin
  701.                     blockcolors[8] = 4;
  702.                 end else if (is_orange && x == 425 && y == 400) begin
  703.                     blockcolors[8] = 5;
  704.                 end else if (blockcolors[8] == 0 && x > 400 && x < 450 && y > 375 && y < 425) begin
  705.                 //blauw
  706.                     R_OUT <= 0;
  707.                     G_OUT <= 0;
  708.                     B_OUT <= 255;
  709.                 end else if (blockcolors[8] == 1 && x > 400 && x < 450 && y > 375 && y < 425) begin
  710.                 //groen
  711.                     R_OUT <= 0;
  712.                     G_OUT <= 255;
  713.                     B_OUT <= 0;
  714.                 end else if (blockcolors[8] == 2 && x > 400 && x < 450 && y > 375 && y < 425) begin
  715.                 //rood
  716.                     R_OUT <= 255;
  717.                     G_OUT <= 0;
  718.                     B_OUT <= 0;
  719.                 end else if (blockcolors[8] == 3 && x > 400 && x < 450 && y > 375 && y < 425) begin
  720.                 //wit
  721.                     R_OUT <= 255;
  722.                     G_OUT <= 255;
  723.                     B_OUT <= 255;
  724.                 end else if (blockcolors[8] == 4 && x > 400 && x < 450 && y > 375 && y < 425) begin
  725.                 //geel
  726.                     R_OUT <= 255;
  727.                     G_OUT <= 255;
  728.                     B_OUT <= 0;
  729.                 end else if (blockcolors[8] == 5 && x > 400 && x < 450 && y > 375 && y < 425) begin
  730.                 //oranje
  731.                     R_OUT <= 255;
  732.                     G_OUT <= 125;
  733.                     B_OUT <= 0;
  734.                    
  735. ////                end else if (x > 150 && x < 200 && y > 125 && y < 175) begin //is_blueblock && ~is_greenblock
  736. ////                    R_OUT <= 0;
  737. ////                    G_OUT <= 0;
  738. ////                    B_OUT <= 255;
  739. //              end else if (x > 275 && x < 325 && y > 125 && y < 175) begin //bovenste rij
  740. //                  R_OUT <= 0;
  741. //                  G_OUT <= 0;
  742. //                  B_OUT <= 255;
  743. //              end else if (x > 400 && x < 450 && y > 125 && y < 175) begin
  744. //                  R_OUT <= 0;
  745. //                  G_OUT <= 0;
  746. //                  B_OUT <= 255;
  747. //              end else if (x > 150 && x < 200 && y > 250 && y < 300) begin //middelste rij
  748. //                  R_OUT <= 0;
  749. //                  G_OUT <= 0;
  750. //                  B_OUT <= 255;
  751. //              end else if (x > 275 && x < 325 && y > 250 && y < 300) begin
  752. //                  R_OUT <= 0;
  753. //                  G_OUT <= 0;
  754. //                  B_OUT <= 255;
  755. //              end else if (x > 400 && x < 450 && y > 250 && y < 300) begin
  756. //                  R_OUT <= 0;
  757. //                  G_OUT <= 0;
  758. //                  B_OUT <= 255;
  759.                 end else if (x > 150 && x < 200 && y > 375 && y < 425) begin //onderste rij
  760.                     R_OUT <= 0;
  761.                     G_OUT <= 0;
  762.                     B_OUT <= 255;
  763.                 end else if (x > 275 && x < 325 && y > 375 && y < 425) begin
  764.                     R_OUT <= 0;
  765.                     G_OUT <= 0;
  766.                     B_OUT <= 255;
  767.                 end else if (x > 400 && x < 450 && y > 375 && y < 425) begin
  768.                     R_OUT <= 0;
  769.                     G_OUT <= 0;
  770.                     B_OUT <= 255;
  771.                 end
  772.                
  773.                
  774.                
  775. //              end else if (ENABLE16) begin
  776. //                  is_greenblock = 0;
  777. //              end
  778.  
  779.  
  780.                 // If this pixel is the last of the row
  781.                 // (x == max of screen and y == on last pixel of row)
  782.                 if(x == VGA_WIDTH - 1 && y % block_size == block_size - 1) begin
  783.                     max_count = 0;
  784.  
  785.                     // For every value in the row
  786.                     // HIER VALLLEN DE ACTIEVE COLUMNS AAN TE PASSEN
  787.                     for (int for_x = 0; for_x < cols; for_x++) begin //                 for (int for_x = 0; for_x < cols; for_x++) begin
  788.                         // If it's bigger than the previous found one
  789.                         if(row[for_x] > max_count &&
  790.                             row[for_x] > (block_size * block_size / 2)) begin
  791.                             // Store it
  792.                             max_count = row[for_x];
  793.                             max_x     = for_x;
  794.                         end
  795.  
  796.                         row[for_x] = 0; // Always reset the cell
  797.                     end
  798.  
  799.                     max_count_per_row[y_grid] = max_count;
  800.                     max_x_per_row[y_grid]     = max_x;
  801.  
  802.                     // On the last row
  803.                     if(y_grid == rows - 1) begin
  804.                         max_count = 0;
  805.  
  806.                         for (int for_y = 0; for_y < rows; for_y++) begin
  807.                             if(max_count_per_row[for_y] > max_count) begin
  808.                                 max_count = max_count_per_row[for_y];
  809.                                 max_y     = for_y;
  810.                                 max_x     = max_x_per_row[for_y];
  811.                             end
  812.                         end
  813.  
  814.                         // Set the new hotbox for the ball
  815.                         BALL_X = max_x;
  816.                         BALL_Y = max_y;
  817.                     end
  818.                 end
  819.                            
  820.     //          // If this pixel is the last of the row
  821.     //          // (x == max of screen and y == on last pixel of row)
  822.     //          if(x == VGA_WIDTH - 1 && y % block_size == block_size - 1) begin
  823.     //              max_count = 0;
  824.     //
  825.     //              // For every value in the row
  826.     //              // HIER VALLLEN DE ACTIEVE COLUMNS AAN TE PASSEN
  827.     //              for (int for_x = 10; for_x < 20; for_x++) begin //              for (int for_x = 0; for_x < cols; for_x++) begin
  828.     //                  // If it's bigger than the previous found one
  829.     //                  if(row[for_x] > max_count &&
  830.     //                      row[for_x] > (block_size * block_size / 2)) begin
  831.     //                      // Store it
  832.     //                      max_count = row[for_x];
  833.     //                      max_x     = for_x;
  834.     //                  end
  835.     //
  836.     //                  row[for_x] = 0; // Always reset the cell
  837.     //              end
  838.     //
  839.     //              max_count_per_row[y_grid] = max_count;
  840.     //              max_x_per_row[y_grid]     = max_x;
  841.     //
  842.     //              // On the last row
  843.     //              if(y_grid == rows - 1) begin
  844.     //                  max_count = 0;
  845.     //
  846.     //                  for (int for_y = 0; for_y < rows; for_y++) begin
  847.     //                      if(max_count_per_row[for_y] > max_count) begin
  848.     //                          max_count = max_count_per_row[for_y];
  849.     //                          max_y     = for_y;
  850.     //                          max_x     = max_x_per_row[for_y];
  851.     //                      end
  852.     //                  end
  853.     //
  854.     //                  // Set the new hotbox for the ball
  855.     //                  BALL_X = max_x;
  856.     //                  BALL_Y = max_y;
  857.     //              end
  858.     //          end
  859.             end else begin
  860.                 R_OUT <= 255;
  861.                 G_OUT <= 255;
  862.                 B_OUT <= 255;
  863.                
  864.             end
  865.         end
  866.     end
  867. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement