#system-verilog #verilog #parser #yaml

app svinst

确定SystemVerilog文件中声明的和实例化的模块,生成YAML文件作为输出

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 解析实现

MIT 协议

25KB
698 代码行

svinst

License: MIT Actions Status codecov Crates.io Join the chat at https://gitter.im/sgherbst/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