Syntax Verilog:命名约定
1-有人能解释一下在下面的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]还是可选的 编译部分代码后,我问了这个问题,我将面临语法错误
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
,写入不做任何操作。