2021.8.23
前两天出去玩了,然后在玩的过程中自己设计了一个生命游戏的写法,但是似乎并不能正确运行。自己的思路很清晰,但是仿真出来的结果还是incorrect..
(117)生命游戏。我自己的思路大概如下:设计一个函数用于判断一个元素周围的八个八个元素中1的个数,并因此判断在下一个生命周期这个元素的值是多少。
在一个16x16的环境当中,把元素分成四个边角和两种边沿这几种情况,还有在棋盘中的一般情况,然后根据这几种情况来带入上面设计的函数,然后完成设计。
棋盘的元素地址分布如下(省略棋盘中间的一般情况):
之后成功通过设置二维数组的方式完成了生命游戏这道题,还是很有意思的:
先把长度为256的向量以16为宽度平铺成一个的二维数组。
//同时考虑到这个数组的边沿是可以和另一边的边沿相接的,所以先把这个二维数组变成18x18的宽度(也就是包个边)
然后再设计一个16x16的二维数组出来,这个二维数组中的元素的值是该元素附近的8个元素中“1”的个数。
然后通过一个case结构,把生命游戏最基本的生存法则通过条件语句表现出来,再把下一个生命周期的输出存到q当中。
2021.8.24
1.有限状态机(FSM)相关知识点
世界上大部分事物都可以通过当前状态和输入输出之间的关系来描述成一个系统。如果状态是有限的话,所构成的系统就是有限状态机。
FSM有三个特征:
①状态总数(State)是有限的。
②任意时刻只处在一种状态之中。
③在某种条件(比如一次clk上升沿)下,能够从一种状态转变成另一种状态。
举例:红绿灯、游戏中的人物等等。
2.刷HDLbits
(118)设计一个有两个状态的状态机,它带有一个输入信号和一个复位信号用于异步复位。//这是一个T触发器
按照题目给的三段式写法来写,虽然代码会长一点,但能够更加方便地修改,并清晰地表现出状态机的各种参数变化和输出规则。
三段式分别指:
①状态跳转逻辑
//一个由always过程块组成的组合逻辑部分,用于描述次态(next——state)和现态、输入的关系。
②状态触发器实现
//引入了时序和复位端的部分,当异步置零的时候当前状态直接指向B状态;当无复位且时钟上升沿的时候,上一个周期的次态变成了这一周期的现态。
③输出逻辑
//把当前状态和输出联系在一起,主要用连续赋值。
(119)设计一个带有同步复位的状态机,带有一个输入信号。整体代码结构和上题类似,都是使用了三段式,就是异步复位换成了同步复位。
(120)用FSM的设计思路,设计一个带有异步复位端的JK触发器。
(121)用FSM的设计思路,设计一个带有同步复位端的JK触发器。代码和上面那个差不多,我甚至只要复制粘贴再改一两句就完成了。