HDLBits (118) — 康威的生命游戏 16x16
本题链接:
https://hdlbits.01xz.net/wiki/Conwaylife
Conway's Game of Life是一个二维单元格自动机。
“游戏”是在一个二维单元格网格上进行的,每个单元格要么是1(活的),要么是0(死的)。每个单元格都会根据其相邻单元格为1的数量更改状态:
0-1 个相邻单元格为1: 单元格变成了0
2 个相邻单元格为1: 单元格的状态不会改变
3 个相邻单元格为1: 单元格变成了1
4 个以上相邻单元格为1: 单元格变成了0
这个游戏是为一个无限网格而设计的。在这个电路中,我们将使用一个16x16的网格。为了让事情变得更有趣,我们将使用一个16x16的环形,其中两边环绕到网格的另一边。例如,角单元(0,0)有8个邻居: (15,1)、(15,0)、(15,15)、(0,1)、(0,15)、(1,1)、(1,0)和(1,15)。16x16的网格由一个长度为256的向量表示,其中每一行的16个单元格由一个子向量表示: q [15:0]是第0行,q [31:16]是第1行,等等(这个工具接受 SystemVerilog,因此如果您愿意,可以使用2D 向量)
load: 在下一个时钟沿将数据加载到 q 中,以加载初始状态。
q: 游戏的 16x16 当前状态,每个时钟周期更新。
游戏状态应该每时钟周期前进一个时间步。
John Conway,Mathematician和Methive Cellular Automaton游戏的创造者,在2020年4月11日因为Covid-19去世。

题目
提示:
一个易于理解并测试一些边界条件的测试用例是blinker 256'h7。它是第0行第0-2列中的3个单元格。它在一行3个单元格和一列3个单元格(在第1列、第15行、第0行和第1行)之间振荡。

答案

康威生命游戏
康威生命游戏(英语:Conway's Game of Life),又称康威生命棋,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。
它最初于1970年10月在《科学美国人》杂志上马丁·葛登能的“数学游戏”专栏出现。
生命游戏中,对于任意细胞,规则如下:
每个细胞有两种状态 - 存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动(如图,黑色为存活,白色为死亡)
当前细胞为存活状态时,当周围的存活细胞低于2个时(不包含2个),该细胞变成死亡状态。(模拟生命数量稀少)
当前细胞为存活状态时,当周围有2个或3个存活细胞时,该细胞保持原样。
当前细胞为存活状态时,当周围有超过3个存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)
当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。(模拟繁殖)
可以把最初的细胞结构定义为种子,当所有在种子中的细胞同时被以上规则处理后,可以得到第一代细胞图。按规则继续处理当前的细胞图,可以得到下一代的细胞图,周而复始。
参考内容:
康威生命游戏 | 维基百科:
https://zh.wikipedia.org/wiki/康威生命游戏