HDLBits刷题Day20(More Circuits)

3.2.4 More Circuits
3.2.4.1 Rule 90
问题陈述:

规则90是一个具有有趣特性的一维元胞自动机。

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

请添加图片描述

(“规则90”这个名字来自于阅读“下一个状态”列:01011010是十进制90。)

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

Verilog代码:

module top_module(
    input clk,
    input load,
    input [511:0] data,
    output [511:0] q ); 
    int i;
    always @(posedge clk)
        begin
            if(load) begin
                q<=data;
            end
            else
                begin
                    q[0]<=q[1]^1'b0;
                    q[511]<=q[510]^1'b0;
                    for (i=1;i<511;i++)
                        begin
                            q[i]<=q[i-1]^q[i+1];
                        end
                end
        end
endmodule

3.2.4.2 Rule110
问题陈述:

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

有一个一维的单元格数组(开或关)。在每个时间步,每个单元格的状态都会发生变化。在规则 110
中,每个单元格的下一个状态仅取决于它自己和它的两个邻居,如下表所示:

请添加图片描述

(“规则110”这个名字来自于阅读“下一个状态”列:01101110是十进制110。)

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

Verilog代码:

module top_module(
    input clk,
    input load,
    input [511:0] data,
    output [511:0] q
); 
    wire [511:0]right;
    wire [511:0]left;
    assign right={q[510:0],1'b0};
    assign left={1'b0,q[511:1]};
    always@(posedge clk)
        begin
            if(load)
                begin
                    q<=data;
                end
            else begin
            q[511:0]<=(q[511:0]^right)|(q[511:0]&(~left));
            end
        end

endmodule

3.2.4.3 Conway’s Game of Life 16*16
问题陈述:

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

“游戏”是在二维空间上进行的,其中每个单元格不是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]为第一行,以此类推(此工具接受SystemVerilog,因此您可以根据需要使用2D向量。)

没敲出来暂时放弃…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值