2021.8.28
1.继续刷HDL bits。
(127)设计一种逻辑,一个小人撞到墙的时候可以自动往相反的地方跑,如果两边都有墙被撞到的话就往前一个方向的相反方向跑动。
(128)对上一个逻辑进行延伸,引入掉落的逻辑,如果接触不到地面,就发生掉落,同时发出aaah的叫声,然后如果在掉落后再接触到地面,就再一次以之前那个方向进行跑动。
//做这题的时候要意识到,最小项之和的逻辑函数表示形式,需要里面元素的各个值都是1bit的,如果不是1bit的话,就需要用到按位的与或运算符。不然即使编译不出错,最后仿真出来的结果也不是对的。
(129)在上一题的基础上,引入了挖掘的逻辑。引入了两个状态,分别为dig_L和dig_R,让挖掘状态被取消后,按照原行进方向继续行进。而当挖掘到脚下无地面时,进入和上题一样的掉落状态。
(130)在上一题的基础上,加入掉落时间过久(高度差过大)情况下落地会导致小人死掉。在死掉的状态下小人是不能再走路、挖地板和掉落了。这道题较上题多了一个状态SPLAT表示小人死掉。
//这题的难点是怎么让电路判断小人掉落的时间超过20clk。我使用的方法是在always过程块当中加入一个计数器,然后引入一个3位的中间信号名为splatter。每一个clk上升沿就记一次数,然后计数超过20个之后,splatter反转为上升沿。然后当小人落地之后,就自动进入SPLAT状态。
//但是在编译的时候,似乎出现了以下报错,不大清楚为啥会这样:
(131)暂时跳过这个,对于这个one-hot FSM我还不是很清楚。
2.因为要开学了,所以先告一段落,到开学的时候再安排之后的学习计划。不过开学的时候要把上面那些大概再复习一遍,然后要重视高亮强调的部分,把还没解决的问题解决了。