用Verilog实现最简一维细胞自动机(one-dimensional cellular automaton)

本文主要是介绍用Verilog实现最简一维细胞自动机(one-dimensional cellular automaton),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先,我们通过观察上表可以很容易的发现一个规律,center的下一个状态由center的左邻居和右邻居异或而成。center的下一个状态列:01011010,转换为十进制即为90,所以我们将其命名为rule 90.

知道了下一状态产生的规则后,我们就根据其规则实现下面这个电路:

在这个电路中,我们创造512个细胞系统(q[511:0]),在每个时钟周期前进一个步长。load输入将输出q加载为data[511:0],假设边界q[-1]和q[522]都为0.

我们将每一位用左邻居和右邻居的异或表示出来,发现512位太长无法一一枚举,所以观察规律后直接使用按位异或^。左邻居可以不用在最前面添0,按位异或会默认从最低位对齐,高位多出来的用0补齐然后进行计算。代码如下:

module top_module(input clk,input load,input [511:0] data,output [511:0] q ); always@(posedge clk)if (load)q <= data;else//q <= {q[510],q[511]^q[509],q[510]^q[508],……,q[2]^q[0],q[1]}//      left              right//    neighbour         neighbourq <= {1'b0,q[511:1]}^{q[510:0],1'b0};
endmodule

通过找到规则,我们可以很轻易的用Verilog语言来实现rule 90电路,但是如果是更复杂一点的呢。再介绍更复杂规则之前,我们要了解这是什么。

最简一维细胞自动机

乌尔姆(Stanislaw M. Ulam)和冯·诺伊曼(John von Neumann)为了研究机器人自我复制的可能性,在上个世纪50年代提出一种叫做细胞自动机(Cellular Automaton)的离散型动力系统(Discrete Dynamical Systems)。细胞自动机是研究复杂系统行为的理论框架之一,也是人工智能在这个领域的雏形之一。

1982年Wolfram发表了第一篇关于细胞自动机的学术论文,由此开始了对细胞自动机的研究。Wolfram着重研究空间维度为二维的细胞自动机。细胞可能具有的状态只有两种,用颜色表示成黑色或白色。全体细胞中的每一个只根据上一迭代过程中与该细胞紧相邻的三个细胞的状态来决定自己下一步的状态,所有细胞在根据上一步结果确定自己在这一步中将有的状态后,全体细胞同时改变自己的状态到新状态。其结果和细胞自动机的初始条件很有关系。被这样设定的细胞自动机叫做一维细胞自动机。

考虑并排的三个格子,它们分别被赋予黑白两种状态。考虑各种可能的排列方式,我们不难得到共有8种组合状态。这8种组合状态的每一种都各自决定下一个细胞是黑色或白色,这样算下来的排列总共有256种可能性。因此在Wolfram考虑的细胞自动机种类中,细胞改变状态的规则有256种。Wolfram把这256种规则一一编号。譬如下面的图就代表110号规则:

用文字来叙述就是:当某细胞的上一行相邻三个细胞为全黑、全白或者左侧一个细胞为黑时,该细胞为白色,否则为黑色。设定一个简单的细胞初始状态,譬如在第一行只有一个黑色细胞,根据规则110,细胞自动机就可以自动把其余的细胞变成黑色或保留白色。下图就是根据规则110运行了前20步的情况,在这里似乎看不出什么有趣的东西。但运行到几百步后,就出现了一些有趣的特征,一些结构开始既不是周期性地也不是完全随机地出现在画面上。下图是按规则110运行到700步的情况。

https://www.cnblogs.com/easoncheng/p/3782460.html

言归正传,我们如何使用Verilog来实现这一规则呢,rule 110真值表的形式如下:

 更加贴近HDL语言的描述方式是,当left为1时,center ^ right;left为0时,center | right。用代码描述即为

 center <= left ? center ^ right :center | right ;

使用条件语句可以很轻易的描述rule 110,但是在Verilog代码实际编写过程中,我们无法一位一位的进行判断然后进行异或操作或者与操作,于是可以把思路从行为级描述转变到结构级描述,通过使用最基础的与门、或门和异或门来实现上述电路。

q <=( (q[511:0]^{q[510:0],1'b0}) & q[511:1] ) |  ( (q[511:0]|{q[510:0],1'b0}) & (~q[511:1]) );

左邻居是q[511:1],中间是q[511:0],右邻居是{q[510:0],1'b0},通过结构描述即可实现rule 110.


引思

一维细胞自动机通过对下一状态编号,一共有256种规则,其中可以划分为4大类,rule 110在2000年被证明是图灵完备(Turing-complete)的……这是一系列非常晦涩难懂却生动有趣的知识。

抛开细胞自动机这个载体,在集成电路设计领域看来,我们可以直接将上述表格当做真值表,通过画卡洛图、化简真值表达式等一系列方式来用一个公式表示一种规则,最后画出门级电路图,实现所有的rule 0~255电路。

这篇关于用Verilog实现最简一维细胞自动机(one-dimensional cellular automaton)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/283694

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal