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;
....
答案 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 ^