HDLBits (118) — 康威的生命游戲 16x16
本題鏈接:
https://hdlbits.01xz.net/wiki/Conwaylife
Conway's Game of Life是一個二維單元格自動機。
“游戲”是在一個二維單元格網(wǎng)格上進行的,每個單元格要么是1(活的),要么是0(死的)。每個單元格都會根據(jù)其相鄰單元格為1的數(shù)量更改狀態(tài):
0-1?個相鄰單元格為1: 單元格變成了0
2 個相鄰單元格為1: 單元格的狀態(tài)不會改變
3 個相鄰單元格為1: 單元格變成了1
4?個以上相鄰單元格為1: 單元格變成了0
這個游戲是為一個無限網(wǎng)格而設計的。在這個電路中,我們將使用一個16x16的網(wǎng)格。為了讓事情變得更有趣,我們將使用一個16x16的環(huán)形,其中兩邊環(huán)繞到網(wǎng)格的另一邊。例如,角單元(0,0)有8個鄰居: (15,1)、(15,0)、(15,15)、(0,1)、(0,15)、(1,1)、(1,0)和(1,15)。16x16的網(wǎng)格由一個長度為256的向量表示,其中每一行的16個單元格由一個子向量表示: q [15:0]是第0行,q [31:16]是第1行,等等(這個工具接受 SystemVerilog,因此如果您愿意,可以使用2D?向量)
load: 在下一個時鐘沿將數(shù)據(jù)加載到 q 中,以加載初始狀態(tài)。
q: 游戲的 16x16 當前狀態(tài),每個時鐘周期更新。
游戲狀態(tài)應該每時鐘周期前進一個時間步。
John Conway,Mathematician和Methive Cellular Automaton游戲的創(chuàng)造者,在2020年4月11日因為Covid-19去世。

題目
提示:
一個易于理解并測試一些邊界條件的測試用例是blinker 256'h7。它是第0行第0-2列中的3個單元格。它在一行3個單元格和一列3個單元格(在第1列、第15行、第0行和第1行)之間振蕩。

答案

康威生命游戲
康威生命游戲(英語:Conway's Game of Life),又稱康威生命棋,是英國數(shù)學家約翰·何頓·康威在1970年發(fā)明的細胞自動機。
它最初于1970年10月在《科學美國人》雜志上馬丁·葛登能的“數(shù)學游戲”專欄出現(xiàn)。
生命游戲中,對于任意細胞,規(guī)則如下:
每個細胞有兩種狀態(tài) -?存活或死亡,每個細胞與以自身為中心的周圍八格細胞產(chǎn)生互動(如圖,黑色為存活,白色為死亡)
當前細胞為存活狀態(tài)時,當周圍的存活細胞低于2個時(不包含2個),該細胞變成死亡狀態(tài)。(模擬生命數(shù)量稀少)
當前細胞為存活狀態(tài)時,當周圍有2個或3個存活細胞時,該細胞保持原樣。
當前細胞為存活狀態(tài)時,當周圍有超過3個存活細胞時,該細胞變成死亡狀態(tài)。(模擬生命數(shù)量過多)
當前細胞為死亡狀態(tài)時,當周圍有3個存活細胞時,該細胞變成存活狀態(tài)。(模擬繁殖)
可以把最初的細胞結構定義為種子,當所有在種子中的細胞同時被以上規(guī)則處理后,可以得到第一代細胞圖。按規(guī)則繼續(xù)處理當前的細胞圖,可以得到下一代的細胞圖,周而復始。
參考內容:
?康威生命游戲?|?維基百科:
https://zh.wikipedia.org/wiki/康威生命游戲