ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

verilog的filelist中-v -y +incdir+ +libext+ +liblist+作用

verilog的filelist中-v -y +incdir+ +libext+ +liblist+作用

1.这些参数的含义和作用

在 Verilog 的 filelist 文件中,-v、-y、+libext+和+incdir+都是指导仿真或综合工具如何查找文件的指令,+liblist+是一个用于指定库搜索顺序的选项。它们各有不同的用途。

+incdir+:指定包含目录

这个指令用于告诉工具去哪里寻找`include语句所引用的文件。

  • 作用:当代码中有`include "xxx.svh"时,工具会在+incdir+指定的目录列表中搜索这个文件。

  • 语法:+incdir+目录路径。可以指定多个路径,用+连接,例如+incdir+../rtl/ +incdir+../tb/。

-y:指定库目录

这个指令用于指定搜索库文件(通常是模块定义)的目录。

  • 作用:当工具遇到一个在源文件中找不到定义的模块时,会去-y指定的目录里搜索该模块对应的文件。

  • 语法:-y 目录路径。通常需要配合+libext+一起使用,以指定文件扩展名。

+libext+:指定库文件扩展名

这个指令用于告诉工具在-y指定的库目录中,哪些扩展名的文件可以作为源文件被搜索。

  • 作用:默认情况下,工具可能只查找.v文件。使用+libext+可以增加搜索范围,例如让它也查找.sv文件。

  • 语法:+libext+.v+.sv。这表示在库目录中同时查找.v和.sv文件。

-v:指定库文件

这个指令用于直接指定一个具体的库文件(通常包含模块定义)。

  • 作用:与-y指定目录不同,-v后面跟的是文件名。工具会从这个文件中查找需要的模块定义。

  • 语法:-v 文件名.v。

+liblist+的核心作用

+liblist+用于告诉工具(如 VCS)在解析模块实例时,应该按照什么顺序去搜索哪些库。它通常与 Verilog 的配置文件(Configuration File)配合使用,用于管理复杂的库映射关系。

当你的设计被划分到多个不同的库(Library)中时,+liblist+可以精确控制解析某个实例或使用默认配置时,模块定义的查找路径。

2. -v和 -top 在编译elaborate时的区别

-v 和 -top 解决的是完全不同阶段的问题:两者虽然最终都可能表现为“某些文件没被 elaborate”,但原因和机制完全不同。-v管“去哪找文件”,-top管“从哪个模块开始构建整个设计的层级”

在文件是否被elaborate上也是有一些区别的:

1.编译(分析)阶段照跑:-top只是跳过elaborate,未引用模块仍会被完整解析,做语法和基本语义检查。语法错,宏没定义这类compile错误照样报。而-v的库文件里未被引用的模块完全静默。所以如果哪个库文件本身编译就不干净(比如依赖别的include),用普通路径+ ‘-top’的方式,编译还是会挂,但是-v路径就没事

2.没有覆盖语义:想用行为模型替换库里的某个模块,靠的是‘后加载的库覆盖先加载的库’。普通源文件出现重复定义,不管有没有-top,一般都会直接报duplicate definition的错误。替换模型这条路只有库走的通

3.不影响编译开销:大库的所有模块都会被解析,省不了时间和内存,-v就可以

3.-v与libcell及libcell如何在verdi中trace

-v指定的verilog file在编译之后,verilog打开之后是一个lib cells类型,trace libcell和普通的verilog file编译之后的instance不一样,需要做如下操作:

1.在instance窗口右键找到“Display Lib-Cells” ,这样才能看到libCell的内部代码

2.libcell和外部的接口不能直接trace output 连线的driver和input 连线的load,只能选中libcell output pin(是pin而不是连线)来trace driver,选中libcell input pin(是pin而不是连线)来trace load

另外如果需要像普通verilog一样 trace代码,可以用verdi直接打开这些仿真行为模型的.v,或者删掉file前面的-v

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进