如何消除Yosys合成输出中模块/信号名的反斜杠\?
解决Yosys生成带反斜杠信号名的问题
问题背景
使用示例Verilog代码及Yosys脚本合成后,输出的Verilog中出现\gen_submod.sub_output这类带反斜杠的信号名,导致Verilator等工具无法兼容,需要让Yosys生成无反斜杠的合法标识符。
配置层面解决方案
无需修改源码,通过调整Yosys脚本即可解决:
方案1:展开层次结构
在脚本中添加flatten命令,将子模块逻辑内联到顶层,消除层次化信号名:
read_verilog -sv example.v hierarchy -top top flatten write_verilog -noattr -norename cleaned.v
执行后,层次化的gen_submod.sub_output会被转换为顶层普通信号名,自然无需反斜杠包裹。
方案2:批量重命名层次化信号
使用rename命令将信号名中的点替换为下划线,规避特殊字符:
read_verilog -sv example.v hierarchy -top top rename -hierarchy -pattern "\.(.*)" -replace "_\1" write_verilog -noattr -norename cleaned.v
该命令会把gen_submod.sub_output转换为gen_submod_sub_output,符合Verilog合法标识符规则。
源码修改方案(配置无法满足时)
如果上述配置无法适配需求,可修改Yosys源码调整标识符输出逻辑:
- 找到Yosys源码中负责Verilog输出的文件
backends/verilog/verilog_backend.cc - 定位到处理层次化信号名输出的代码段,该部分当前会对包含点的名称添加反斜杠
- 修改逻辑:将层次化名称中的点直接替换为下划线,而非用反斜杠包裹整个名称,例如把
gen_submod.sub_output转换为gen_submod_sub_output
验证方法
修改脚本或源码后重新执行合成,检查输出的cleaned.v确认无反斜杠信号名,再用Verilator等目标工具验证兼容性。
内容的提问来源于stack exchange,提问作者cryptobeginner
相关产品推荐
相关产品推荐

