FANYI / FPGA设计 / INTERVIEW
Vivado/ModelSim功能仿真中,信号显示X而不是预期的0或1,面试官会要求你判断是复位、未初始化、多驱动、条件不完整,还是高阻总线导致。
面试先给结论
Verilog四值逻辑中X代表未知,Z代表高阻。X可能来自未初始化寄存器、多个驱动冲突、未覆盖的分支或不确定输入;Z多与三态驱动或未连接有关。定位应沿波形逐级追踪首次出现未知的时间点,而不是在testbench里强行把X替换成0。

01X和Z的含义不能混淆
X不等于物理电压一定处于中间值,而表示模拟器无法确定逻辑值;Z表示该网线可能处于高阻态,若没有其他驱动或上下拉,解析结果可能又表现为X。不同数据类型、X传播规则与综合后硬件表现也有差异。
02先找“首次变X”的信号
在波形界面定位第一个非预期X,查看它的所有驱动者、赋值条件、复位时序、时钟以及上一周期值。对未赋初值的寄存器,检查复位覆盖;对组合always块,检查case/default分支是否完整。
03testbench常见错误
测试激励与DUT在同一仿真时间槽同时改变,可能引入竞争;应该在清晰定义的时钟沿或合适时序点施加激励。避免多个always过程同时驱动同一个reg,也不要让关键信号在仿真一开始就悬空。
04波形排查后还要确认硬件
真实FPGA上出现功能异常时,还要考虑异步复位释放、CDC和时序收敛;功能仿真中的X并不直接告诉你实际硬件某个触发器输出了什么,但它能暴露设计初始化和逻辑完整性问题。
面试中常见失分点
把X当成0继续比较,导致仿真通过但掩盖错误。
没有检查复位覆盖,就随意在RTL里为所有内部寄存器设初值。
面试官可能继续追问
如果case语句没有default且某个状态未覆盖,会造成什么仿真和综合风险?

扫码关注































