← eetop.cn_数字IC设计工程师笔试面试经典100题(大部分有答案)

推荐答案 测试一下

画出可以检测10010串的状态图,并verilog实现之。(威盛)

编程题 中等 笔试真题

参考答案

本题要求设计一个序列检测器,检测目标序列"10010"。采用Moore型有限状态机,每个状态代表已匹配的部分序列。定义状态:S0(初始,无匹配)、S1(已匹配'1')、S2(已匹配'10')、S3(已匹配'100')、S4(已匹配'1001')、S5(检测到完整序列'10010',输出1)。考虑重叠:当处于S5时,若输入为1,则下一状态转移至S1(因为"]"10010"的结尾"10"可与下一个"1"组成"1001"的开头一部分),若输入为0,则转移至S0;其他状态均根据输入更新匹配情况,例如S4时输入0则到S5,输入1则回到S1(因为"1001"末尾"1"可作为新序列开头)。状态转移图可用文字描述。Verilog实现采用三段式状态机:第一段时序逻辑描述状态更新(always @(posedge clk or negedge rst_n));第二段组合逻辑描述次态转移(always @(*) case (state) ... endcase);第三段组合逻辑或时序逻辑描述输出(Moore型输出可直接用assign out = (state == S5))。注意复位时进入S0。代码示例如下: module seq_detector_10010( input clk, input rst_n, input din, output reg dout ); parameter S0=3'd0, S1=3'd1, S2=3'd2, S3=3'd3, S4=3'd4, S5=3'd5; reg [2:0] state, next_state; always @(posedge clk or negedge rst_n) if(!rst_n) state <= S0; else state <= next_state; always @(*) case(state) S0: next_state = din ? S1 : S0; S1: next_state = din ? S1 : S2; S2: next_state = din ? S3 : S0; S3: next_state = din ? S4 : S0; S4: next_state = din ? S1 : S5; S5: next_state = din ? S1 : S0; default: next_state = S0; endcase always @(posedge clk or negedge rst_n) if(!rst_n) dout <= 1'b0; else dout <= (state==S5); endmodule 注意:也可用Mealy型实现,输出组合逻辑与输入相关,但Moore型更常见。易错点:遗漏S5后的重叠转移;编码时状态数不足;输出未与时钟同步导致毛刺。

涉及知识点

  • 有限状态机设计方法
  • 序列检测与重叠处理
  • Moore型与Mealy型区别
  • Verilog三段式状态机写法
  • 状态图与状态转移表绘制
← 上一题
登录后反馈错题
下一题 →