EE萌新笔记
从实际面试经验看,我会分三步走:第一步看状态定义和转移逻辑,第二步看输出生成和时序,第三步看代码风格和综合问题。
第一步,状态定义是否覆盖所有可能?比如检测1011,至少需要5个状态(初始、1、10、101、1011),如果少了就可能漏检。转移条件是否考虑了所有输入(0和1)?每个状态在输入0和1时都要有明确的下一个状态,不能有缺失,否则会生成锁存器,这是综合问题也是功能问题。
第二步,输出逻辑。如果是Mealy机,输出是状态和输入的函数,要检查输出是否只在检测到完整序列时拉高,并且只持续一个时钟周期(除非题目要求持续)。常见bug是输出多持续一个周期,或者重叠检测时输出不对。
第三步,代码细节。是否使用了非阻塞赋值(<=)?复位信号是否正确处理?是否避免了组合逻辑环?这些虽然不一定影响仿真,但影响实际硬件实现。
我一般会快速在纸上画一下状态图,然后想几个边界用例:比如连续输入10101011,看中间会不会误触发;复位后立即输入正确序列是否正常;输入流中途出现类似1010但非完整序列时,状态是否回退正确。把这些点过一遍,基本就能找出问题。
