代码之家  ›  专栏  ›  技术社区  ›  Viktorinox

使用赋值时verilog_模式自动注册输入行为

  •  0
  • Viktorinox  · 技术社区  · 7 年前

    我想知道下面的情况是否可能。
    我有:

    module a(
    input [2:0] a_i
    );
    endmodule
    
    module b ();
    
     /*AUTOREGINPUTS*/
    
     a u_a(/*AUTOINST*/)
    endmodule
    

    它扩展到:

     module b ();
    
     /*AUTOREGINPUTS*/
     reg [2:0] a_i;
     a u_a(/*AUTOINST*/
           .a_i(a_i))
    endmodule
    

    但是如果我修改添加行 assign a_i = '0; AUTOREGINPUTS 不再即使我在做作业,有没有办法扩展它?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Unn    7 年前

    简单的回答是因为当你跑步的时候 verilog-auto 填补 /*AUTOREGINPUT*/ 将通过添加 assign a_i = '0; ,你在申报 a_i .

    在Verilog中,不需要显式变量声明,如果在某些情况下未声明,则将采用默认的nettype。因此,如果我有以下几点:

    module x;
      assign myVar = '0;
    endmodule
    

    myVar wire )。您可以在系统Verilog LRM(IEEE1800-2009第6.10节)中阅读更多内容。避免生成隐式声明变量的输入错误的一个建议是使用 `default_nettype 宏到 none (即 `default_nettype none 在每个文件的顶部);这样做会强制显式声明所有变量,否则编译器/合成器将抛出错误。

    verilog-mode emacs中的模式知道隐式声明,因此不会自动生成任何声明。因此,当您添加 assign 声明,您正在声明 阿尤伊 阿尤伊 .

    为了避免这种情况,我只能建议在分配任何要自动生成的变量之前运行生成器。我不确定它是否能处理 `默认类型为无

    还要注意,它应该是 /*自动注册输入*/ /*AUTOREGINPUTS*/

    推荐文章