本文共 1435 字,大约阅读时间需要 4 分钟。
题目:Rule 90是一个一维的有趣的元胞自动机。规则很简单,在每一个时间步长,每一个元胞的下一个状态为与这个元胞相邻两个元胞的异或。规则如下表:
module top_module( input clk, input load, input [511:0] data, output [511:0] q ); integer i; always@(posedge clk)begin if(load) q <= data; else begin q[0] <= 1'b0 ^ q[1]; for(i = 0; i < 510; i = i + 1)begin if(q[i]^q[i+2]) q[i+1] <= 1'b1; else q[i+1] <= 1'b0; end q[511] <= q[510] ^ 1'b0; end endendmodule
这里主要注意你的for循环不要超出定义的数组范围。还有一种方法,简洁但是不易明白:
module top_module( input clk, input load, input [511:0] data, output [511:0] q ); always @(posedge clk) began if(load) began q <= data; end else began q <= { 1'b0, q[511:1]} ^ {q[510:0], 1'b0}; end endendmodule
题目:
Rule 110是一个一维的有趣的元胞自动机。规则很简单,在每一个时间步长,每一个元胞的下一个状态为与这个元胞相邻两个元胞的异或。规则如下表:module top_module( input clk, input load, input [511:0] data, output [511:0] q); always@(posedge clk)begin if(load)begin q <= data; end else begin q <= ~q & { q[510:0], 1'b0} | ~{ 1'b0, q[511:1]} & {q[510:0], 1'b0} | ~{ 1'b0, q[511:1]} & q | q & ~{ q[510:0], 1'b0}; end endendmodule
这道题目博主太菜,目前还没有做出来,感觉有很多种相邻的情况啊。。。
转载地址:http://yejj.baihongyu.com/