找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 100|回复: 10

分享课内项目: FPGA实现康威的生命游戏

[复制链接]

15

主题

37

回帖

1296

积分

版主

积分
1296
发表于 3 天前 | 显示全部楼层 |阅读模式
占楼

15

主题

37

回帖

1296

积分

版主

积分
1296
 楼主| 发表于 3 天前 | 显示全部楼层
FPGA是在可编程阵列逻辑(PAL)、通用阵列逻辑(GAL)、可擦除可编程逻辑器件(EPLD)等器件的基础上进一步发展的产物。它是一种可完成通用功能的可编程逻辑芯片,即可以对其进行编程实现某种逻辑处理功能。 [1]
通俗来说,FPGA就像一块面包板,它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA具有更高的集成度、更强的逻辑功能和更大的灵活性,目前已成为设计数字电路或系统的首选器件之一。
FPGA在许多领域都有广泛的应用,如通信、电子、视频信号处理、航空航天等,并且推出了很多强大的产品,例如:Intel(英特尔)公司的Stratix 系列 Arria 系列和Cyclone 系列产品,具有低成本、低功耗、高性能等优点。

目前,在某种程度上,FPGA板的开发在国内是不成熟的,因此楼主所在院校的FPGA主要是进口为主

15

主题

37

回帖

1296

积分

版主

积分
1296
 楼主| 发表于 3 天前 | 显示全部楼层
生命游戏(Game of Life)是由英国数学家约翰·康威(John Conway)在1970 年提出的细胞自动机模型。这个零玩家游戏基于简单的规则在二维网格上演化:每个细胞根据其八个相邻细胞的存活状态,遵循出生(0->1)、存活(1->1)或死亡(1->0)的规则决定次态。尽管规则简单,生命游戏却能展现出令人惊异的复杂行为,包括稳定结构、周期振荡器以及移动的滑翔机等模式。作为图灵完备的系统,它理论上可以模拟任何计算过程,因此在计算机科学、数学和复杂系统研究中具有重要地位。

15

主题

37

回帖

1296

积分

版主

积分
1296
 楼主| 发表于 3 天前 | 显示全部楼层
楼主的课内项目在实现了经典规则的基础上,还扩展了多种变体规则,例如 Highlife、Bacteria、Voter、Coral 等规则。

15

主题

37

回帖

1296

积分

版主

积分
1296
 楼主| 发表于 3 天前 | 显示全部楼层
本项目基于上述规则,设计并实现了一个生命游戏模拟系统。核心模块Top.v 实现了完整的游戏逻辑和显示控制功能。输入信号包括 16 位开关SW[15:0]和按钮 btn_c,用于设置游戏模式、运行速度、初始游戏地图密度、游戏暂停以及图案生成等功能。

15

主题

37

回帖

1296

积分

版主

积分
1296
 楼主| 发表于 3 天前 | 显示全部楼层
时钟信号 clk 为系统提供同步时序控制。32×24/16 位的 16 进制串
board_now 用于存储一个 32*24 的 0-1 矩阵,每个细胞状态用 1 位二进制数表
示,其中 0 代表死亡,1 代表存活。
系统支持 8 种不同的游戏规则模式,包括标准 Conway 规则、HighLife、
Vote 等变体,通过参数化的 B 规则(出生条件)和 S 规则(存活条件)实现模
式切换。例如,Vote 模式实现了模拟多数表决机制的细胞自动机规则。在该模
式下,对于空白格子,当周围存活细胞数量达到或超过 4 个,该格子将诞生新
细胞;而对于存活细胞,保持 5 个或更多存活邻居可以继续存活,记为
B45678/S5678。
游戏逻辑主要包含三个关键部分。初始化模块根据设定的密度参数随机生
成初始细胞分布,同时初始化游戏地图;次态计算模块根据当前规则计算下一
时刻的细胞状态;图案添加模块在开关由 0 置 1 时将存储为 192 位 16 进制数的
预定义几何图案(包括圆环、椭圆、三角形等)叠加到当前游戏地图中。
显示部分采用 VGA 接口,将细胞状态实时可视化输出,其中存活细胞显示
为绿色方块,死亡细胞显示为灰色方块。对应的色块数据事先用 IP 核存储为
coe 文件。

15

主题

37

回帖

1296

积分

版主

积分
1296
 楼主| 发表于 3 天前 | 显示全部楼层
gen_board 模块中采用伪随机数生成算法初始化游戏地图,支持密度设置
(0%/25%/50%/75%),实现的方法是重复 0,0.288,0.693,1.386 倍的总细胞
数的将随机位数置 1。
next_state 模块的计算全部在 mod 长和宽的意义下进行,这样可以实现环
形边界的处理。这一模块计算全部的邻居,根据 B Rule 和 S Rule 的 Lookup
table,遍历所有细胞计算存活邻居数,根据当前状态和 B/S 规则决定次态,最
后同步更新整个游戏地图,从而实现次态地图的计算。
rand 模块混合三种周期两两互素的随机序列,即 256 完系、253 完系与 163
完系,采用异或操作、乘法运算、位移操作等实现伪随机数。
add_pattern 模块预存 21 种几何图案,其中包含圆环、椭圆、三角形等,
每个图案编码为 192 位 16 进制数,随机选择图案,此后循环移位,将图案放在
屏幕随机位置,在开关由 0 变 1 时,使用异或运算实现图案叠加。
各模块通过统一的时钟域同步,采用流水线设计确保实时性。其中次态模
块每个时钟周期可完成整张地图的更新计算,图案添加模块随机添加图案到屏
幕上,随机数生成器每个周期可产生 32 位随机数。

15

主题

37

回帖

1296

积分

版主

积分
1296
 楼主| 发表于 3 天前 | 显示全部楼层
以上记录了楼主期末项目的核心逻辑。话说是否有人能回答一下,为什么密度设置(0%/25%/50%/75%),可以对应重复 0,0.288,0.693,1.386 倍的总细胞数的将随机位数置 1?

12

主题

39

回帖

981

积分

资深程序员

积分
981
发表于 前天 02:12 | 显示全部楼层
Ray 发表于 8-11-2025 22:48
以上记录了楼主期末项目的核心逻辑。话说是否有人能回答一下,为什么密度设置(0%/25%/50%/75%),可以对应 ...


读懂问题花了好久hhhhhhh
ak为第k次随机生成1后棋盘上总细胞数的期望
则有递推式:
ak+1=ak + (n-ak)/n   原来的细胞数+新生成细胞数的期望(即在棋盘上随机选中一点恰好没有细胞的概率)
解得ak=n - (n-1)^k/n^(k-1)    这里包括后面记得n是个常数不是下标就不难算,和平时习惯稍有不同
ak=0.25n
化简得(1-1/n)^k=0.75
解得k≈0.288n
以此类推

15

主题

37

回帖

1296

积分

版主

积分
1296
 楼主| 发表于 前天 08:51 | 显示全部楼层
脆脆大奶酪 发表于 8-12-2025 02:12
读懂问题花了好久hhhhhhh
记ak为第k次随机生成1后棋盘上总细胞数的期望
则有递推式:

数学大神啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RealDevClub ( 沪ICP备2024093864号-1 )

GMT+8, 8-14-2025 06:58 , Processed in 0.068986 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表