【问题标题】:Looking for verilog 2001 module declaration grammar寻找verilog 2001模块声明语法
【发布时间】:2011-02-06 21:18:42
【问题描述】:

我可以通过 google 找到几个 v2k 完整语法——但要么我失去理智,要么它们在端口声明方面都以同样的方式被破坏。 示例输入:

module foo ( 
    input x, 
     output [2:0] y);
endmodule;

我找不到可以解析该语法的语法,但他们会接受这样的东西 作为 list_of_port 中的“端口”:

         { name[3:0], name2[2:0]} 
.. or ..   .name( othername )

即我希望在模块实例化端口绑定的语法中看到的东西是为模块端口声明提供的。

例子

http://www.externsoft.ch/download/verilog.html#module_declaration

http://www.syncad.com/VeriLogger_bnf_Syntax_Verilog_2001.htm#list_of_ports

我想我可以查看 icarus 源代码或 Perl::Verilog。不过,我希望能确认上面的语法被破坏了——或者有人可以指出我错过了什么。正确语法的来源会很棒...

【问题讨论】:

    标签: parsing syntax verilog


    【解决方案1】:

    您的第一个代码块使用在 IEEE 1364-2001(Sec 12.3.3)和所有更高版本中有效的 list_of_port_declarations 语法。第一个链接的语法不完整,第二个链接看起来像是包含this construct

    您的第二个代码块绝对有效。看起来像模块定义中的实例端口的语法是显式端口结构。不经常使用,当您想要在外部呈现与内部使用不同的信号接口时使用这些。以下是几个例子:

    module mod1(portA);
    input portA; //Implicit port named portA connected to implicit wire portA
    endmodule
    

    这里,portA 是隐式的,并且继承了输入声明的属性,因为它共享相同的标识符 portA。

    module mod2(.expA(sigA));
    wire sigA;
    endmodule
    
    module top;
    wire sigB;
    mod2 modInst(.expA(sigB));
    endmodule
    

    在本例中,我们为 mod2 模块使用显式端口。 expA 在内部连接到 sigA,但正如您在实例 modInst 中看到的,我们使用外部名称来命名连接。

    module mod3 (.expA({sigC,sigD}), sigF, .expB(sigG[1],sigB[3:0]));
    output reg [3:0] sigC, sigD;
    input wire [1:0] sigG;
    input wire [7:0] sigB;
    output wire sigF;
    endmodule
    

    这也是有效的。端口 expA 假定 sigC 和 sigD 连接的宽度。与端口 expB 相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多