目录

## 题目1:rule 90规则90是具有有趣属性的一维元胞自动机。

题目2:rule 100

题目3:Conwaylife


## 题目1:rule 90
规则90是具有有趣属性的一维元胞自动机。

规则很简单。有一个一维的单元格数组(打开或关闭)。在每个时间步长中,每个单元的下一个状态是单元的两个当前邻居的异或。下表是表示此规则的更详细的方式,其中单元格的下一个状态是自身及其两个相邻项的函数:

left center right Center's next state
1 1 1 0
1 1 0 1
1 0 1 0
1 0 0 1
0 1 1 1
0 1 0 0
0 0 1 1
0 0 0 0

(“规则 90”的名称来自读取“下一个状态”列:01011010是十进制 90。

在该电路中,创建一个512单元系统(q[511:0]),并在每个时钟周期内前进一个时间步长。load输入指示系统的状态应加载数据[511:0]。假设边界(q[-1] 和 q[512])均为零(关闭)。

模块声明

module top_module(input clk,input load,input [511:0] data,output [511:0] q
);

提示:

对于 q[511:0] = 1 的初始状态,前几次迭代为:

       1101011000101001000101010101
10000000

这形成了谢尔宾斯基三角形的一半。

分析:观察上表可得,其逻辑关系为:左边的逻辑值与右边的逻辑值异或,便能得到下一个状态的值。同时要形成谢尔宾斯基三角形的一半通过观察可知第一位总是1,因此在最高位采用0^0即可。

代码如下:

module top_module(input clk,input load,input [511:0] data,output [511:0] q ); always @(posedge clk)beginif(load)q <= data;elseq <= {1'b0,q[511:1]}^{q[510:0],1'b0};end
endmodule

仿真结果如下:

题目2:rule 100

规则110是一个具有有趣属性(例如图灵完备)的一维元胞自动机。

有一个一维的单元格数组(打开或关闭)。在每个时间步长中,每个单元格的状态都会发生变化。在规则 110 中,根据下表,每个单元的下一个状态仅取决于自身及其两个相邻单元:

left center right Center's next state
1 1 1 0
1 1 0 1
1 0 1 1
1 0 0 0
0 1 1 1
0 1 0 1
0 0 1 1
0 0 0 0

(“规则 110”的名称来自读取“下一个状态”列:01101110是十进制 110。

在该电路中,创建一个512单元系统(q[511:0]),并在每个时钟周期内前进一个时间步长。load输入指示系统的状态应加载数据[511:0]。假设边界(q[-1] 和 q[512])均为零(关闭)。

模块声明

module top_module(input clk,input load,input [511:0] data,output [511:0] q
); 

提示:

对于 q[511:0] = 1 的初始状态,前几次迭代为:

       1111111101111111100011110011
11010111

分析:观察rule 100的状态转移表并不能直接观察其逻辑关系,因此可以考虑画出其卡诺图,然后通过圈1法对其逻辑表达式进行化简。其卡诺图如下图所示。设left = A,center = B,right = C,输出为Center's next state。

得出其逻辑表达式为:Center's next state = B&~C+~A&C+~B&C。

由此可得代码如下:

module top_module(input clk,input load,input [511:0] data,output [511:0] q
); always @(posedge clk)beginif(load)q <= data;elseq <= (q & ~{q[510:0],1'b0}) | (~{1'b0,q[511:1]} & {q[510:0],1'b0}) | (~q & {q[510:0],1'b0}); end
endmodule

仿真结果:

题目3:Conwaylife

康威的生命游戏是一个二维元胞自动机。

“游戏”在二维单元格网格上播放,其中每个单元格为1(活着)或0(死)。在每个时间步长中,每个单元都会根据其具有的相邻单元格的数量更改状态:

  • 0-1 邻居:单元格变为 0。
  • 2 个邻居:单元状态不变。
  • 3 个邻居:单元格变为 1。
  • 4 个以上的邻居:单元格变为 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),数学家和生命游戏元胞自动机的创造者,于2020年4月11日因COVID-19去世。

模块声明

module top_module(input clk,input load,input [255:0] data,output [255:0] q );

提示:

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

此处代码参考用Verilog实现二维细胞自动机——康威生命游戏(Conway's Game of Life)_早睡身体好~的博客-CSDN博客_conway生命游戏 verilog

module top_module(input clk,input load,input [255:0] data,output [255:0]q ); reg [255:0] q_next;//存储次态reg [3:0]sum;//记录每次遍历的和integer i;//定义正整数i,作为for循环判断的条件量always@(posedge clk)if(load)q <= data;else beginfor( i = 0;i < 256;i=i+1) begin if(i==0)//左上角sum = q[1]+q[16]+q[17]+q[240]+q[241]+q[15]+q[31]+q[255];else if(i==15)//右上角sum = q[14]+q[16]+q[0]+q[240]+q[254]+q[30]+q[31]+q[255];else if(i==240)//左下角sum = q[0]+q[15]+q[239]+q[241]+q[1]+q[224]+q[225]+q[255];else if(i==255)//右下角sum = q[0]+q[15]+q[14]+q[224]+q[238]+q[240]+q[239]+q[254];else if(0<i & i<15)//上边界sum = q[i-1]+q[i+1]+q[i+15]+q[i+16]+q[i+17]+q[i+239]+q[i+240]+q[i+241];else if(i%16==0)//左边界sum = q[i-1]+q[i+1]+q[i+15]+q[i+16]+q[i+17]+q[i-16]+q[i-15]+q[i+31];else if(i%16==15)//右边界sum = q[i-1]+q[i+1]+q[i+15]+q[i+16]+q[i-17]+q[i-16]+q[i-15]+q[i-31];else if(240<i & i<255)//下边界sum = q[i-1]+q[i+1]+q[i-17]+q[i-16]+q[i-15]+q[i-239]+q[i-240]+q[i-241];else //非边界sum = q[i-1]+q[i+1]+q[i-17]+q[i-16]+q[i-15]+q[i+15]+q[i+16]+q[i+17];case(sum) //根据邻居数量判断次态2:q_next[i]=q[i];3:q_next[i]=1;default:q_next[i]=0;endcaseendq = q_next;end
endmodule

其中值得注意的是使用quartus ii应将输出output输出语句改为:output reg  [255:0]q ); 否则将会提示你没有定义q的类型从而报错。

使用quartus ii 画出逻辑图:

由逻辑图可知,该程序全由加法器组成,看似复杂庞大,实际占用的资源并不会太多。

HDLBITS笔记30:rule 90、rule 100以及Conway‘s game of life 16*16相关推荐

  1. 30 位 90 后霸榜福布斯,有颜、有才、有头脑!

    作者 | 佩奇 责编 | 伍杏玲 出品 | 区块链大本营(blockchain_camp) 近日,福布斯发布 "Forbes 30 Under 30 Asia 2019" 金融和风 ...

  2. 五步移相法matlab程序_用MATLAB软件对逆变电路移相调压进行仿真,30°,60°,90°的波形,并用分段分析法分析其原理_学小易找答案...

    [简答题]Translate the following ad into (1) a TV comercial, and (2) a factual introduction. Marie Franc ...

  3. 某人去玩具店买小熊,小熊进价为20,卖价是30,付给老板100元,老板没有零钱,就在卖鞋的人那里换了100元零钱,找给卖家70,卖鞋的发现那100元是假币,于是找老板换回了100元,请问玩具店老板损失

    某人去玩具店买小熊,小熊进价为20,卖价是30,付给老板100元,老板没有零钱,就在卖鞋的人那里换了100元零钱,找给卖家70,卖鞋的发现那100元是假币,于是找老板换回了100元,请问玩具店老板损失 ...

  4. 服务端高并发分布式架构演进之路(阿里巴巴90秒100亿)

    服务端高并发分布式架构演进之路 阿里巴巴为什么能抗住90秒100亿? 1. 概述 本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大 ...

  5. 10-38 统计xscj表中计算机课程成绩在90至100之间的人数(包含90和100)

    统计xscj表中计算机课程成绩在90至100之间的人数(包含90和100). 表结构: create table xscj (学号 varchar(3),姓名 varchar(4),计算机 float ...

  6. JavaSE笔记 30天学Java打卡 Day06

    JavaSE笔记 30天学Java打卡 Day06 本笔记配套[零基础 快速学Java]韩顺平 零基础30天学会Java 视频一起食用 链接

  7. 学习自旋电子学的笔记01:微磁模拟软件OOMMF的教程(中文版)16章

    勉之期不止,多获由力耘.--欧阳修<送唐生 > 目录 16命令行实用程序 16.1位图文件格式转换:any2ppm. 16.2从矢量场生成数据表:avf2odt. 16.3矢量场文件格式转 ...

  8. 为什么连接xshell报错Could not connect to 172.16.16.100 (port 22): Connection failed

    连接xshell报错Could not connect to '172.16.16.100' (port 22): Connection failed. 今天小编也遇到了这个问题开启虚拟机连接xshe ...

  9. C语言--编程将递增数列10、20、30、40、50、60、70、80、90、100保存到数组中,再从键盘输入一个整数,插入到该数列中,使之成为一个递增数列。

    源代码: #include <stdio.h> #define N 50int main(){int a[N]={10,20,30,40,50,60,70,80,90,100};int n ...

最新文章

  1. gulp-sass_如果您是初学者,如何使用命令行设置Gulp-sass
  2. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用
  3. 计算机上差额如何计算公式,【】两个Excel表格之间怎么相加减 计算两个表格的差额???用什么公式??? 具体步骤怎么的...
  4. 根据端口查找是那个程序正在占用
  5. C#并行编程(5):需要知道的异步
  6. React开发(167):...数组拼接
  7. asurerp可以导出php文件吗,编译前的准备 - PHP 扩展开发及内核应用相关内容 - UDN开源文档...
  8. aws rds监控慢sql_使用AWS Lambda函数自动启动/停止AWS RDS SQL Server
  9. Atitit 延迟绑定架构法attilax总结
  10. Java程序性能优化- 让你的Java程序更快、更稳定pdf
  11. 线性时变模型预测控制推导
  12. 服务器主板维修教学视频,第60讲 超微服务器主板远程管理讲解与演示
  13. 使用tesseract-ocr进行文字识别
  14. 谷歌VR展示360度全景图
  15. PPT模板文字环绕效果怎么设置?
  16. 不用工具直接从微软官网下载Win10正式版ISO镜像的技巧
  17. 【手绘】海贼王女帝汉库克 - 附完整手绘教程
  18. AUTOCAD——倒角命令、圆角命令
  19. 一个k8s集群——跨云服务器部署
  20. 2017年总结—颓废的一年

热门文章

  1. 选择、恪守、进阶、蝶变,“向上”五年做对了什么?
  2. 街头智慧:罗杰斯的投资与人生
  3. Java语句for(String string : strs)什么意思?
  4. error: identifier “AT_CHECK“ is undefined
  5. 给你的iOS应用更换主题
  6. Android 边播放边缓存视频框架:AndroidVideoCache简析
  7. 如何围绕用户数字化运营?
  8. win10开机网络图标消失,可以联网重启资源管理器可以出来下次开机又不出现图标
  9. pdm软件linux,PowerDesigner 物理数据模型(PDM) 说明
  10. c语言佮保留俩位小数,阅读语言论文,关于性阅读障碍儿童词汇识别中字形信息作用相关参考文献资料-免费论文范文...