FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-所有问题-其他-正文

FPGA面试手撕代码:如何判断一个Verilog实现的序列检测器(如检测“1011”)是否存在bug?

芯片爱好者小李芯片爱好者小李
其他
2小时前
0
0
6
面试FPGA工程师时,经常被要求现场写代码或者分析代码。比如给一段检测特定序列“1011”的Verilog代码,要求快速找出其中可能存在的逻辑错误、状态机缺陷或者时序问题。面对这种题,有什么系统的排查思路或 checklist 吗?应该从状态转移、输出逻辑、复位、是否可综合等哪些方面入手?
芯片爱好者小李

芯片爱好者小李

这家伙真懒,几个字都不愿写!
16600
分享:
FPGA 状态机设计有什么最佳实践?上一篇
2024年秋招,芯片/FPGA岗位对实习经历的要求有多高?没有大厂实习是不是就没机会了?下一篇
回答列表总数:2
  • EE萌新笔记

    EE萌新笔记

    从实际面试经验看,我会分三步走:第一步看状态定义和转移逻辑,第二步看输出生成和时序,第三步看代码风格和综合问题。

    第一步,状态定义是否覆盖所有可能?比如检测1011,至少需要5个状态(初始、1、10、101、1011),如果少了就可能漏检。转移条件是否考虑了所有输入(0和1)?每个状态在输入0和1时都要有明确的下一个状态,不能有缺失,否则会生成锁存器,这是综合问题也是功能问题。

    第二步,输出逻辑。如果是Mealy机,输出是状态和输入的函数,要检查输出是否只在检测到完整序列时拉高,并且只持续一个时钟周期(除非题目要求持续)。常见bug是输出多持续一个周期,或者重叠检测时输出不对。

    第三步,代码细节。是否使用了非阻塞赋值(<=)?复位信号是否正确处理?是否避免了组合逻辑环?这些虽然不一定影响仿真,但影响实际硬件实现。

    我一般会快速在纸上画一下状态图,然后想几个边界用例:比如连续输入10101011,看中间会不会误触发;复位后立即输入正确序列是否正常;输入流中途出现类似1010但非完整序列时,状态是否回退正确。把这些点过一遍,基本就能找出问题。

    2小时前
  • Verilog代码练习生

    Verilog代码练习生

    我一般会先看状态机定义和转移条件,这是序列检测的核心。状态机是不是完备的?比如检测1011,常见的Mealy和Moore机都要检查。Mealy机输出和输入有关,容易在状态转移和输出逻辑上出问题,比如最后一个比特匹配后输出有效,但下一个时钟如果输入还是1,输出应该怎么变?这个边界情况很多代码会漏。Moore机状态多,但输出只和状态有关,要检查每个状态的输出是否正确。然后我会画一个状态转移图,用几个典型序列跑一下,特别是重叠检测的情况,比如输入...1011011...,第二个1011的1可能也是第一个序列的最后一个1,这种重叠序列能不能正确检测?很多bug就在这里。

    再看代码风格,是不是可综合的?状态编码用parameter还是define,有没有用非阻塞赋值,复位信号是不是同步的,有没有异步复位同步释放?这些虽然不一定是功能bug,但面试官可能会问。

    最后我会用几个测试向量快速在脑子里仿真一下:正常序列、错误序列、连续重叠序列、复位后重新开始。基本上这样过一遍,常见的坑都能找出来。

    2小时前
我要回答answer.notCanPublish
回答被采纳奖励100个积分
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
请先登录