You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

结构型4x4阵列乘法器Verilog仿真输出出现X未知态如何解决

4x4阵列乘法器未知态X问题排查及解决

问题原因

1. 信号未声明异常

  • array_multiplier模块内直接使用了接地信号a,但未提前声明a的类型,部分仿真器会将未声明信号默认判定为未初始化的X态,即便后续做了assign赋值也可能出现逻辑异常。

2. 多驱动冲突

  • 你定义了4位宽的线网wire[3:0] c2,但实例l22的进位输出和实例l23的进位输出都连接到了c2[3],两个输出端口同时驱动同一个线网,当输出值不一致时就会产生冲突,出现X态。

3. 信号悬空未驱动

  • 线网c2[2]没有被任何模块的输出端口驱动,始终处于高阻态,接入l23的进位输入后会将X态向后传递到prod[5]、prod[6]等后续输出位。
  • 第一行运算单元的进位输出c0[0]、c0[1]、c0[2]全部悬空未连接,也会导致部分场景下的逻辑异常。

解决方法

步骤1:补全信号声明

在array_multiplier模块的线网定义部分补全接地信号的声明:

wire[3:0] c0, c1, c2, c3;
wire[3:0] s0, s1, s2;
wire a; // 新增接地信号声明
assign a = 1'b0;

步骤2:修正多驱动冲突

修改l22实例的进位输出连接,从c2[3]改为c2[2],补上悬空的c2[2]的驱动:

// 修改前:BB_struct l22 (A[2], B[2], s1[3], c2[1], s2[2], c2[3]);
BB_struct l22 (A[2], B[2], s1[3], c2[1], s2[2], c2[2]);

步骤3:修正第一行运算单元的进位连线

将同一行前一个BB的进位输出接到后一个BB的进位输入,避免进位悬空:

BB_struct l00 (A[0], B[0], a, a, prod[0], c0[0]);
// l01的进位输入接l00的进位输出
BB_struct l01 (A[1], B[0], a, c0[0], s0[1], c0[1]);
// l02的进位输入接l01的进位输出
BB_struct l02 (A[2], B[0], a, c0[1], s0[2], c0[2]);
// l03的进位输入接l02的进位输出
BB_struct l03 (A[3], B[0], a, c0[2], s0[3], c0[3]);

所有连线按照4x4阵列乘法器的标准结构核对,确保所有输入线网都有明确驱动、没有多驱动冲突后,重新仿真即可消除X态。

内容的提问来源于stack exchange,提问作者CED19I027 NIMMAGADDA SREE DHYU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:39:03