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

推荐答案 测试一下

用 FSM实现 101101的序列检测模块。(南山之桥)

编程题 中等 笔试真题

参考答案

设计一个Mealy型有限状态机,检测输入序列中是否出现'101101'。允许重叠检测,即检测到序列后,下一个状态可继续从重叠部分开始。定义状态:S0(无匹配)、S1(匹配'1')、S2(匹配'10')、S3(匹配'101')、S4(匹配'1011')、S5(匹配'10110')。输入x,输出y。当状态为S5且输入为1时,输出y=1并转移到S3(重叠部分'101'的起始);否则输出y=0。状态转移:从S0,若x=1则到S1,否则S0;S1若x=0则S2,否则S1;S2若x=1则S3,否则S0;S3若x=1则S4,否则S2(因为末尾'10'与当前'10'重叠);S4若x=0则S5,否则S1(末尾'1'与S1重叠);S5若x=1则输出1并到S3,否则S0。状态编码可使用二进制或独热码,注意未使用状态要确保进入有效态(如复位到S0)。关键点:重叠处理、状态数最小化、避免毛刺(输出由组合逻辑产生,也可改为Moore型但需更多状态)。易错点:未正确处理S3和S4的重叠;忽略复位;输出条件错误。给出Verilog代码示例:always @(posedge clk or negedge rst_n) if(!rst_n) state<=S0; else case(state) ... endcase; assign y=(state==S5 && x==1)?1:0;

涉及知识点

  • 有限状态机设计方法
  • 序列检测重叠与非重叠
  • 状态转移图与状态表
  • Mealy与Moore型状态机比较
  • Verilog时序逻辑实现
  • 未使用状态处理与复位
← 上一题
登录后反馈错题
下一题 →