From 09a4baf6624dfb2039f07b1db45c6aad275cebfe Mon Sep 17 00:00:00 2001
From: vagle <vagilevente@gmail.com>
Date: Fri, 14 Dec 2018 13:16:55 +0100
Subject: [PATCH] some edgy commit

---
 .../sources_1/new/game_of_life.vhd            | 44 +++++++++++++++++--
 1 file changed, 40 insertions(+), 4 deletions(-)

diff --git a/game_of_life_v2/game_of_life_v2.srcs/sources_1/new/game_of_life.vhd b/game_of_life_v2/game_of_life_v2.srcs/sources_1/new/game_of_life.vhd
index fe5b329..c3739fb 100644
--- a/game_of_life_v2/game_of_life_v2.srcs/sources_1/new/game_of_life.vhd
+++ b/game_of_life_v2/game_of_life_v2.srcs/sources_1/new/game_of_life.vhd
@@ -85,6 +85,11 @@ signal frame_sig : std_logic_vector(11 downto 0);
 signal shift_register_top : std_logic_vector(0 to cell_number-1);
 signal shift_register_middle : std_logic_vector(0 to cell_number-1);
 signal actual_register : std_logic_vector(0 to 0);
+
+--signal copy_shift_register_top : std_logic_vector(0 to cell_number-1);
+--signal copy_shift_register_middle : std_logic_vector(0 to cell_number-1);
+--signal copy_actual_register : std_logic_vector(0 to 0);
+
 signal neighbours : std_logic_vector(0 to 8);
 signal neighbours_count : unsigned(3 downto 0);
 signal frame_counter : unsigned(6 downto 0);
@@ -162,17 +167,46 @@ begin
             if switch_mode = '1' and frame_counter = 0 and horizontal_counter(2 downto 0) = 0 and horizontal_counter(9 downto 3) < cell_number and vertical_counter(2 downto 0) = 0 and vertical_counter(9 downto 3) < cell_number then
                 shift_register_top <= shift_register_top(1 to cell_number-1) & shift_register_middle(0);
                 
-                --if horizontal_counter(9 downto 3) /= 0 and horizontal_counter(9 downto 3) < cell_number+1 and vertical_counter(9 downto 3) /= 0 and vertical_counter(9 downto 3) < cell_number+1 then
-                if horizontal_counter(9 downto 3) < cell_number and vertical_counter(9 downto 3) < cell_number then
+                if horizontal_counter(9 downto 3) /= 0 and horizontal_counter(9 downto 3) < cell_number-1 and vertical_counter(9 downto 3) /= 0 and vertical_counter(9 downto 3) < cell_number-1 then
+                --if horizontal_counter(9 downto 3) < cell_number and vertical_counter(9 downto 3) < cell_number then
+                    --copy_shift_register_top <= shift_register_top(1 to cell_number-1) & shift_register_middle(0);
                     shift_register_middle <= shift_register_middle(1 to cell_number-1) & actual_register;
+                    --copy_shift_register_middle <= shift_register_middle(1 to cell_number-1) & actual_register;
                     neighbours <= neighbours(3 to 8) & shift_register_top(0) & shift_register_middle(0) & actual_register;
                     neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
                     actual_register(0) <= cells(to_integer((vertical_counter(9 downto 3))* to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)));
+                    --copy_actual_register(0) <= cells(to_integer((vertical_counter(9 downto 3))* to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)));
                 else
                     shift_register_middle <= shift_register_middle(1 to cell_number-1) & actual_register;
                     neighbours <= neighbours(3 to 8) & shift_register_top(0) & shift_register_middle(0) & actual_register;
-                    neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
-                    actual_register <= (others => '0');
+                    
+                    -- left top corner
+                    if horizontal_counter(9 downto 3) = 0 and vertical_counter(9 downto 3) = 0 then
+                        neighbours_count <= neighbours_count + unsigned(neighbours(8 to 8)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
+                    -- right top corner
+                    elsif horizontal_counter(9 downto 3) = cell_number-1 and vertical_counter(9 downto 3) = 0 then
+                        neighbours_count <= neighbours_count - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2));
+                    -- left bottom corner
+                    elsif horizontal_counter(9 downto 3) = 0 and vertical_counter(9 downto 3) = cell_number-1 then
+                        neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) - unsigned(neighbours(3 to 3)) - unsigned(neighbours(4 to 4)) - unsigned(neighbours(5 to 5)) + unsigned(neighbours(6 to 6)) + unsigned(neighbours(7 to 7)) + unsigned(neighbours(8 to 8)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0));
+                    -- right bottom corner
+                    elsif horizontal_counter(9 downto 3) = cell_number-1 and vertical_counter(9 downto 3) = cell_number-1 then
+                        neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1));
+                    -- top edge
+                    elsif vertical_counter(9 downto 3) = 0 then
+                        neighbours_count <= neighbours_count - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
+                    -- left edge
+                    elsif horizontal_counter(9 downto 3) = 0 then
+                        neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2)) - unsigned(neighbours(3 to 3)) - unsigned(neighbours(4 to 4)) - unsigned(neighbours(5 to 5)) + unsigned(neighbours(6 to 6)) + unsigned(neighbours(7 to 7)) + unsigned(neighbours(8 to 8)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0)) + unsigned(actual_register);
+                    -- right edge
+                    elsif horizontal_counter(9 downto 3) = cell_number-1 then
+                        neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) - unsigned(neighbours(2 to 2));
+                    -- bottom edge
+                    elsif vertical_counter(9 downto 3) = cell_number-1 then
+                        neighbours_count <= neighbours_count - unsigned(neighbours(0 to 0)) - unsigned(neighbours(1 to 1)) + unsigned(shift_register_top(0 to 0)) + unsigned(shift_register_middle(0 to 0));
+                    end if;
+                    
+                    actual_register(0) <= cells(to_integer((vertical_counter(9 downto 3))* to_unsigned(cell_number,8) + horizontal_counter(9 downto 3)));
                 end if;
                 
                 if vertical_counter(9 downto 3) >= 2 and horizontal_counter(9 downto 3) >= 2 then
@@ -251,6 +285,8 @@ begin
             -- position changing
             if vertical_counter = VERTICAL_SYNC_PULSE-1 then
                 vertical_counter <= (others => '0');
+                neighbours_count <= (others => '0');
+                neighbours <= (others => '0');
                 if frame_counter = 63 then
                     frame_counter <= (others => '0');
                 else
-- 
GitLab