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

Yosys技术问询:如何移除Verilog中的无用内部连线wire

问题

原始Verilog代码:

module demo(input a, output b);
    wire c;
    assign c = ~a;
    assign b = c;
endmodule

执行以下Yosys命令尝试移除无用内部连线c:

read_verilog demo.v
opt
clean
write_verilog demo_opt.v

但生成的代码中仍保留了c:

/* Generated by Yosys 0.24+25 (git sha1 a27a297eb, x86_64-w64-mingw32-g++ 9.2.1 -Os) */
Dumping module `\demo'.

(* cells_not_processed =  1  *)
(* src = "demo.v:1.1-10.10" *)
module demo(a, b);
  (* src = "demo.v:3.15-3.16" *)
  input a;
  wire a;
  (* src = "demo.v:4.16-4.17" *)
  output b;
  wire b;
  (* src = "demo.v:7.10-7.11" *)
  wire c;
  assign b = ~ (* src = "demo.v:8.16-8.18" *) a;
  assign c = b;
endmodule

如何通过Yosys彻底移除无用的内部连线c?

解决方案

核心问题是Yosys默认保留的源文件属性标记(如src注释),会限制基础优化命令对未使用信号的清理。可以通过以下几种方式解决:

方法1:添加purge命令

purge专门用于清理未被驱动或未被使用的网线、寄存器,在基础优化后执行即可:

read_verilog demo.v
opt
clean
purge
write_verilog demo_opt.v

方法2:清除属性标记后再优化

用strip移除所有Verilog属性,让优化命令不受标记约束:

read_verilog demo.v
strip
opt
clean
write_verilog demo_opt.v

方法3:使用更彻底的优化命令

替换opt为opt_full(包含更激进的逻辑优化),再配合purge确保清理干净:

read_verilog demo.v
opt_full
clean
purge
write_verilog demo_opt.v

执行任意方案后,生成的代码都会移除c,最终效果如下:

/* Generated by Yosys ... */
module demo(a, b);
  input a;
  output b;
  assign b = ~a;
endmodule

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:15:31