Syntax Verilog:命名约定

Syntax Verilog:命名约定,syntax,verilog,naming-conventions,Syntax,Verilog,Naming Conventions,1-有人能解释一下在下面的verilog行中这个命名约定是什么意思吗? 我不知道这部分的意思是什么 ADDHXL \add_34/U1_1_6 (.A(n1022),.B(\add_34/carry[6] ),.CO(\add_34/carry[7] ),.S(N11)); 2-还有另一个问题?如果我的定义中有电线\add\u 34/carry[6],我应该有\add\u 34/carry[1]到\add\u 34/carry[5]还是可选的 编译部分代码后,我问了这个问题,我将面临语法错误

1-有人能解释一下在下面的verilog行中这个命名约定是什么意思吗? 我不知道这部分的意思是什么

ADDHXL \add_34/U1_1_6  (.A(n1022),.B(\add_34/carry[6] ),.CO(\add_34/carry[7] ),.S(N11));
2-还有另一个问题?如果我的定义中有电线
\add\u 34/carry[6]
,我应该有
\add\u 34/carry[1]
\add\u 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;
....

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

当标识符以反斜杠开始时,除空格外的每个字符都被认为是名称的一部分。(因此,标准标识符规则将退出窗口。)

因此,您案例中的标识符是“\add\u 34/U1\u 6”。该类型的标识符通常由程序生成。
因此,这是一个有效的标识符:
\wow/永远不要看到这类事情;#++混乱的

让我们看看标识符:
\add\u 34/carry[6]
注意“[6]”不是索引!被视为ASCII码,是名称的一部分。
对于
\add\u 34/carry[7]
,同样如此。 它还意味着在某个地方有一个定义:

wire \add_34/carry[6] ;
wire \add_34/carry[7] ;
// Note the space    ^ before the semicolon!
另一个\add_34/carry[…变量可能存在或不存在,因为我们都在这里查看单独的导线

没有\add\u 34/carry[5]或\add\u 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 ^

还应注意,如果变量声明为
wire[7:6]add_34_carry;
,则
add_34_carry[5]
也将不存在,尽管对其进行读写是有效的;读取产生默认值
1'bx
,写入不做任何操作。