Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity life_cell is
port (clk : in std_logic;
neighbor : in std_logic_vector(7 downto 0);
state_out: out std_logic);
end entity life_cell;
architecture rtl of life_cell is
signal state : std_logic := '0';
signal sum1s, sum2s : unsigned(2 downto 0);
signal sum : unsigned(3 downto 0);
begin
process(neighbor)
variable sum1, sum2 : unsigned(2 downto 0);
begin
sum1 := "000";
sum2 := "000";
for i in 0 to 3 loop
if neighbor(i) = '1' then
sum1 := sum1 + 1;
end if;
end loop;
for i in 4 to 7 loop
if neighbor(i) = '1' then
sum2 := sum2 + 1;
end if;
end loop;
sum1s <= sum1;
sum2s <= sum2;
sum <= resize(sum1,4)+resize(sum2,3);
end process;
process(clk, sum1s)
begin
if sum1s(2) = '1' then
state <= '0';
elsif rising_edge(clk) then
if sum2s(2) = '1' then --or sum1s(2) = '1'
state <= '0';
else
if (sum = to_unsigned(3,4)) or (sum = to_unsigned(2,4) and state = '1') then
state <= '1';
else
state <= '0';
end if;
end if;
end if;
end process;
state_out <= state;
end;
Правда, не знаю что делать, если приложений, которые используют устройство будет несколько, на сколько будет затратно переключать контекст.
Сумбурные размышления о будущем технологии FPGA