【问题标题】:Verilog Parsing Using ANTLR grammar使用 ANTLR 语法进行 Verilog 解析
【发布时间】:2018-04-16 16:00:04
【问题描述】:

我正在尝试用 Java(使用 Netbeans)创建一个解析器,它可以将任意 Verilog 文件作为输入,并生成一个包含门的网表作为输出。网表不必优化。

我有 ANTLR 语法文件https://github.com/antlr/grammarsv4/blob/master/verilog/Verilog2001.g4

但是,我不太确定如何将它集成到我的 Java 程序中。

例如,如果我有以下 Verilog 文件作为输入,

module and3(output out, input in1, in2,in3);
  reg r_out;
  assign out = r_out;
  always@(in1, in2, in3)
    begin
      case({in3,in2,in1})
        000: out = 0;
        001: out = 1;
        010: out = 1;
        011: out = 1;
        100: out = 0;
        101: out = 1;
        110: out = 0;
        111: out = 1;
        default: out = 0;
      endcase
    end
endmodule

我想确定输入和输出端口的名称以及它们的大小。我还想识别始终块以及 case 语句块以及 Case 语句中的每个赋值。

所以我的疑问是:

1) 如何将它集成到我的 java 程序中

2) 我如何使用这个 Verilog Grammar 文件并阅读上面提到的 Verilog 代码来识别输入、输出、case 语句、assign 语句。

谢谢

【问题讨论】:

  • 您正在尝试编写一个合成 Verilog 的编译器。解析器只是整个工作的一小部分——即使你编写了自己的语法文件,它也只是你必须投入的整体工作的百分之几。如果你真的想继续,你的第一步(小)是从 Verilog 描述生成 AST。从 ANTLR 网站上的非 Verilog 示例(C 或更简单的)开始;如果您可以创建和操作 AST,那将是一个很好的起点。

标签: java parsing antlr verilog antlr4


【解决方案1】:

我最近解决了一个类似的任务。我开始使用与 ANTLR 相同的语法文件为 Verilog 创建一个 IntelliJ 插件。目前,它成功解析了 Verilog 文件并进行了一些突出显示/完成等操作。

这是我的代码https://github.com/MrTsepa/jetbrains-verilog-plugin

首先我使用一些 ANTLR 工具(嵌入在 Idea 的 ANTLR 插件中)生成 ANTLR AST 树,然后通过ANTLR adapter将该树适应 IntelliJ 的 AST 格式(PSI 树)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多