Verilog:命名约定

时间:2019-07-14 17:11:02

标签: syntax verilog naming-conventions

1-有人可以在verilog行下面解释这个命名约定是什么意思吗? 我不知道这\add_34/....部分意味着什么?

ADDHXL \add_34/U1_1_6  (.A(n1022),.B(\add_34/carry[6] ),.CO(\add_34/carry[7] ),.S(N11));

2-还有一个问题?如果我的定义中有导线\add_34/carry[6],我应该有\add_34/carry[1]\add_34/carry[5]还是可选的?

我问了这个问题,因为编译了我的代码的一部分,我将遇到语法错误:

  

令牌“ wire”处或附近的语法错误。

这是代码段:

RandomDelay  R00001(clk,rst_n,2'b10,a34_carry_pri_delayed_7,\add_34/carry[7]);
wire N11_pri_delayed;

这是模块的定义:

module RandomDelay ( clk, reset_not, seed, input_signal, delayed_signal );
  input [1:0] seed;
  input clk, reset_not, input_signal;
  output delayed_signal;
....

1 个答案:

答案 0 :(得分:3)

您拥有的就是所谓的“转义标识符”。

当标识符以反斜杠开头时,除空格外的所有字符都被认为是名称的一部分。 (因此,标准标识符规则会显示在窗口之外。)

因此,您的情况下的标识符为“ \ add_34 / U1_1_6”。该类型的标识符通常由程序生成。
因此,这是一个有效的标识符:\wow!/neverseen[]thissort@;of#++mess

让我们看一下标识符:\add_34/carry[6]请注意,“ [6]”不是索引!被视为ASCII及其名称的一部分。
\add_34/carry[7]同样如此。 这也意味着在某处有定义:

wire \add_34/carry[6] ;
wire \add_34/carry[7] ;
// Note the space    ^ before the semicolon!

其他\ add_34 / carry [...变量可能存在或不存在,因为我们都在这里查看各个导线。

没有\ add_34 / carry [5]或\ add_34 / carry [0]完全合法

回到您的代码:

RandomDelay  R00001(clk,rst_n,2'b10,a34_carry_pri_delayed_7,\add_34/carry[7]);

因此,您必须在右括号之前放置一个空格:

RandomDelay  R00001(clk,rst_n,2'b10,a34_carry_pri_delayed_7,\add_34/carry[7] );
//                                                             ---->>> Here ^