11个版本
0.1.6 | 2021年4月29日 |
---|---|
0.1.5 | 2020年11月10日 |
0.1.4 | 2020年10月27日 |
0.1.3 | 2020年7月6日 |
0.0.5 | 2020年3月3日 |
#2589 in 解析实现
25KB
698 代码行
svinst
此工具以SystemVerilog文件作为输入,并输出该文件中声明的模块以及在这些模块声明中实例化的模块。它使用sv-parser,并从svlint中改编。
如果您想从Python访问此功能,请参阅pysvinst。
目的
Verilog语言具有定义配置和库的功能。然而,这些功能在开源工具中支持不佳,甚至在某些商业综合工具中也是如此。通过提取文件中定义和实例化的模块列表,用户可以通过在Verilog之外构建自己的设计层次结构来解决这个问题,然后将该文件列表返回到模拟器/综合工具。
安装
您可以从发行版标签下载适用于您系统的二进制文件。此方法不需要安装Rust。
或者,您可以使用Cargo安装包
> cargo install svinst
用法
svinst
二进制文件接受一个或多个SystemVerilog文件作为输入,并打印出这些文件中定义和实例化的模块的YAML格式表示
> svinst verilog/test.sv
files:
- file_name: "verilog/test.sv"
defs:
- mod_name: "A"
insts:
- mod_name: "B"
insts:
- mod_name: "C"
insts:
- mod_name: "A"
inst_name: "I0"
- mod_name: "B"
inst_name: "I1"
- mod_name: "D"
insts:
- mod_name: "X"
inst_name: "I0"
- mod_name: "Y"
inst_name: "I1"
如果有任何解析错误,svinst
的返回码不为零,错误信息将发送到stderr
> svinst verilog/broken.sv > /dev/null
parse failed: "verilog/broken.sv"
verilog/broken.sv:5:10
|
5 | endmodule
|
> echo $?
1
也可以通过命令行上的-INCLUDE_PATH
选项指定要包含的文件。可以指定多个包含路径;通过单独的-
选项分别传递。
> svinst verilog/inc_test.sv -i verilog/
files:
- file_name: "verilog/inc_test.sv"
defs:
- mod_name: "inc_top"
insts:
- mod_name: "mod_name_from_inc_sv"
inst_name: "I0"
也可以从命令行设置预处理器定义。在此示例中,第一个define
具有名称和值,用于从define
变量控制实例化模块的名称。第二个定义只有名称,并且只有在定义后才会实例化第二个模块。
> svinst verilog/def_test.sv -d MODULE_NAME=module_name_from_define -d EXTRA_INSTANCE
files:
- file_name: "verilog/def_test.sv"
defs:
- mod_name: "def_top"
insts:
- mod_name: "module_name_from_define"
inst_name: "I0"
- mod_name: "module_from_ifdef"
inst_name: "I1"
还可以使用full-tree
选项生成SystemVerilog文件(s)的完整语法树。输出仍然是YAML格式
> svinst verilog/simple.sv --full-tree
files:
- file_name: "verilog/simple.sv"
syntax_tree:
- SourceText:
- Description:
- ModuleDeclaration:
- ModuleDeclarationAnsi:
- ModuleAnsiHeader:
- ModuleKeyword:
- Keyword:
- Token: "module"
Line: 1
- ModuleIdentifier:
- Identifier:
- SimpleIdentifier:
- Token: "A"
Line: 1
- Symbol:
- Token: ";"
Line: 1
- Keyword:
- Token: "endmodule"
Line: 2
依赖关系
~6.5MB
~124K SLoC