VHDL实现生命游戏

        之前,帮别人用VHDL实现了一个生命游戏的逻辑电路,觉得很有意思,所以分享出来大家一起学习。

1,github代码地址:https://github.com/zgw598243565/Game_of_Life

2,B站代码详解地址:https://www.bilibili.com/video/BV1fS4y1V7PJ?spm_id_from=333.999.0.0

        生命游戏(Game of Life)是由英国数学家John Horton Conway于1970年发明的细胞单元自动机模型。该模型中,每个细胞单元cell具有2个状态(活着alive或者死亡dead),通常由一个2状态状态机来表示,而宇宙universe是由无数细胞单元cell构成的二维正交网格。在生命宇宙的演进中,每个细胞单元将其当前状态(alive或dead)传递给其8个邻近单元(NW,N,...,SW,W),同样它也会接受其8个邻近单元的状态。每个细胞单元的下个状态取决于其当前状态及其邻近的状态,规则如下:

(1)若活细胞单元具有0或1个活邻居,则将死亡;

(2)若活细胞单元具有2或3个活邻居,则可以存活;

(3)若活细胞单元具有4或更多活邻居,则将死亡;

(4)若死细胞单元刚好具有3个活邻居,则将转为活细胞。

图 1 

        图1显示了一小部分宇宙空间(9x8),从一个特定的初始状态开始,随时间向前演进了4次状态。图上半部分显示了两个连续状态转化之间的中间状态,下半部分无中间状态。

设计要求:

(1) 为单个细胞单元cell设计可综合的VHDL硬件模型。cell单元的接口信号参考表2进行定义。

NameDirectionDescription
clkInputGlobal clock
srstnInputGlobal synchronous active low reset (force to 0:dead)
ceInputClock enable
loadInputWhen set,take W as next state
NWInputCurrent state of the north-west neightbour(0:dead,1:live)
NInputCurrent state of the north neightbour(0:dead,1:live)
NEInputCurrent state of the north-east neightbour(0:dead,1:live)
EInputCurrent state of the east neightbour(0:dead,1:live)
SEInputCurrent state of the south-east neightbour(0:dead,1:live)
SInputCurrent state of the south neightbour(0:dead,1:live)
SWInputCurrent state of the south-west neightbour(0:dead,1:live)
WInputCurrent state of the west neightbour(0:dead,1:live)
stateOutputCurrent state of CELL(0:dead,1:live)

表 2 

CELL模型工作于时钟信号clk的上升沿;接口信号中srstn为同步复位信号,低电平有效,优先级高于ce和load;时钟使能信号ce为高电平有效,优先级高于load,若ce为低电平,细胞单元停止工作;装载信号load也为高电平有效,若load为高电平,细胞单元将把其西边单元(W)的状态作为其下一个状态。

(2)基于上面设计的CELL单元,为一个rxc(r 行 c 列)的球环形宇宙空间,设计一个可综合的VHDL硬件模型,自行定义模型接口并提供仿真结果。下图3所示为一个3x3的球环形宇宙,坐标(i,j)代表该位置的细胞单元,图中虚线连接表示构成一个封闭球环。

图 3 

要求1:该宇宙空间的最左列细胞单元能被外部输入的状态值进行初始化,即装载load。

要求2:该宇宙空间的细胞单元状态值能够通过最右列的细胞单元进行依次输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值