本题是一道常规的FSM设计题,记录的目的是状态机的状态中出现了忽略输入的状态。
经过分析不难发现,此题的FSM需要四个状态,分别是:IDLE状态(初始状态,也可以表示接收到了一个0的状态)、已接收1状态(S1),已接收1x状态(S2,x表示不关心in[3]输入)以及已接收1xx状态(S3)。由此我们可以画出如下所示Moore型状态机的状态转移图。
需要注意的是题目中时序图描述中的这一句话:
Note that this is not the same as a 1xx sequence recognizer.Overlapping sequences are not allowed here…
也就是说这不是一个“1xx”序列检测器,并不检测重叠序列,只有在状态走过1xx并输出done = 1之后才重新开始判断下一个状态是回到IDLE还是直接进入S1,即使in[3]的输入序列是“1111”,也不会重复输出1,对于状态图来说就是S3不会出现指向自身的状态转换。
最后给出题目的Verilog HDL:
module top_module(
input clk,
input [7:0] in