【发布时间】:2017-12-14 12:58:12
【问题描述】:
假设我们有一个 128 位的寄存器:
reg [127:0] line;
而我们先从中选出一个32位的字,再从这个字中选出字节,均使用切片:
word = line[(127-32*byte_addr[3:2])-:32];
byte = word[7:0];
效果很好。但是,如果我不想将两个运算符组合在同一行中,似乎是不允许的。
mybyte = line[(127-32*byte_addr[3:2])-:32][7:0]; //all the hell breaks loose
很遗憾,我在 SV 3.1a 规范中找不到明确的规则来禁止这一点。
【问题讨论】:
-
您遇到的错误究竟是什么?您正在使用哪些工具?
-
"语法错误。令牌是 '['" VCS。
-
错误是正确的。由于
line被声明为一维数组,因此您只能在其上使用单个索引选择器。 -
不是切片的结果是向量,也可以切片?那么,基本上,slice 算子不组成,line[][] 被解释为多维访问,会产生错误?
-
SystemVerilog 3.1a 规范已过时。看我的回答