如何在Synopsys VCS中获取原始RTL Verilog及预处理输出文件
刚好平时用VCS做验证经常碰到这两个需求,给你详细说下具体操作:
首先要明确:VCS本身不会修改你的原始RTL文件,但如果你的需求是收集VCS实际加载的所有原始RTL文件(比如用了-y、+incdir+这类库路径,不确定实际用到哪些文件时),或者把所有原始RTL合并成一个单一文件,可以这么做:
生成所有加载的RTL文件列表:
运行VCS时加上-list选项,指定输出列表的文件名:vcs -f your_file_list.f -lca -list used_rtl_files.txt生成的
used_rtl_files.txt会包含VCS解析设计时实际读取的所有RTL文件的完整路径,你可以根据这个列表去复制或者手动合并原始文件。直接生成合并后的原始RTL文件:
要是想一步到位得到合并后的原始RTL(内容和输入文件完全一致,没有任何预处理),可以用-write选项:vcs -f your_file_list.f -lca -write merged_raw_rtl.v这个文件是VCS按照设计依赖顺序把所有输入RTL合并后的版本,方便你整体查看原始设计。
这个需求在调试宏定义冲突、参数传递问题时特别有用,VCS提供了专门的选项来实现:
使用
-write_pp生成完全展开的设计文件:
这个选项会同时处理两部分内容:一是C风格预处理器的内容(比如define宏、include文件),二是Verilog的parameter参数(包括实例化时的参数覆盖、defparam修改),最终输出一个所有宏和参数都被填充完成的单一Verilog文件:vcs -f your_file_list.f -lca -write_pp expanded_design.v拿到这个文件后,你就能清晰看到每个模块的实际参数值、宏展开后的代码,排查问题会方便很多。
仅展开宏和include(不处理参数):
如果你只需要查看宏和include的展开结果,不需要处理参数替换,可以用-E选项(和GCC的-E逻辑类似):vcs -E -f your_file_list.f -o preprocessed_only.v这个命令会跳过编译步骤,只做预处理器的工作,输出结果里只有宏和include被展开,参数还是保持原始定义。
内容的提问来源于stack exchange,提问作者user5888527




