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

Verilog中直接将wire赋值给输出LED无法通过Yosys综合的问题

问题:Verilog直接将wire赋值给输出端口为何编译失败?

以下代码编译失败,退出时返回错误码-6:

module and_gate (
    input   [1:0]   io_button,
    output  [2:0]   io_led
);

wire wire1;
assign wire1 = io_button[0];
assign io_led[0] = wire1;

endmodule

但仅将输出赋值改为取反操作后,即可正常编译:

module and_gate (
    input   [1:0]   io_button,
    output  [2:0]   io_led
);

wire wire1;
assign wire1 = io_button[0];
assign io_led[0] = ~wire1;

endmodule

是否Verilog不允许在不对wire做任何修改的情况下,直接将其赋值给输出端口?


解答

Verilog本身完全允许直接将wire信号原样赋值给输出端口,这种写法属于标准合规的语法,不存在禁止性规则。

你遇到的编译失败并非语法限制导致,更可能是以下常见原因:

  • 综合工具的冗余逻辑检查:部分综合工具会将这种“无逻辑变化的直接传递”判定为冗余路径,若工具开启了严格的冗余逻辑报错选项,就会触发编译失败。而添加取反操作后,路径存在实际逻辑运算,工具不会将其标记为冗余。
  • 工具版本或配置差异:不同版本的编译/综合工具对冗余逻辑的处理策略不同,旧版本工具可能对这类无运算的代码兼容性较差;另外,若工具配置了“禁止空逻辑路径”的规则,也会触发错误。
  • 未完全驱动的端口:你的代码中io_led是3位输出,但仅驱动了第0位,剩余两位未赋值。不过这一点在两个版本代码中一致,通常只会触发警告而非编译失败,所以优先级低于前两种原因。

建议检查编译工具的配置选项,关闭冗余逻辑强制报错的设置,或者尝试更新工具版本来解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:54:30