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

Verilog向量赋值异常:wire u赋值后仍为zzzz,求解决方案

Verilog向量赋值导致u输出zzzz的原因与修复
  • 核心问题:线网多驱动冲突
    你代码里对u的每一位都做了两次assign赋值:先写了assign u[3] = 1;这类直接赋值,之后又用assign u[3] = s[3];这类依赖s的赋值。在Verilog中,wire类型线网被多个连续赋值语句驱动时,会触发冲突解析,最终结果就是高阻态Z,这就是u输出zzzz的根源。

  • 修复步骤
    删掉对u的重复驱动语句,只保留你需要的那组赋值逻辑。比如保留依赖s的assign,去掉直接赋值1/0的代码段。

  • 额外优化
    对4位wire s的赋值,单独给每一位写assign虽然合法,但更简洁规范的写法是直接整体赋值:assign s = 4'b1111;,减少冗余代码。

修改后的示例代码:

module test;
wire [3:0] s;
wire [3:0] u;

// 更简洁的整体赋值方式
assign s = 4'b1111;

// 只保留这组依赖s的赋值,移除重复的assign语句
assign u[3] = s[3];
assign u[2] = s[2] & ~|s[3];
assign u[1] = s[1] & ~|s[3:2];
assign u[0] = s[0] & ~|s[3:1];

initial begin
    $display("%d", s[3]);
    $display("%d", s[2]);
    $display("%d", s[1]);
    $display("%d", s[0]);
    $display("%d", s);

    $display("%d", u[3]);
    $display("%d", u[2]);
    $display("%d", u[1]);
    $display("%d", u[0]);
    $display("%d", u);
end
endmodule

内容的提问来源于stack exchange,提问作者Tcrumb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:16:11