1

我已经尝试使用以下代码:

module try;
int a[8];
initial
begin
a = 8'hCC;
$display(a);
end
endmodule

这给出了错误:

Incompatible complex type assignment
  Type of source expression is incompatible with type of target expression. 
  Mismatching types cannot be used in assignments, initializations and 
  instantiations. The type of the target is 'bit$[0:7]', while the type of the
  source is 'bit[7:0]'.
4

1 回答 1

1

至少在您的代码中,您不能将数组分配a为具有值 8'hCC 作为aint 数组 ( int a[8]) 但即使您要定义abit a[8]or logic a[8],您仍然无法执行您尝试执行的那种分配. Verilog 作为两种类型的“数组”(尽管为了清楚起见,我喜欢将打包数组称为“向量”,将未打包数组称为“数组”)。可以在此处找到有关两者之间差异的更多信息:

系统verilog中的打包与解包向量

简而言之,解包数组的内部表示不能保证数组元素之间的关系,即每个元素都是独立的,并且内存中元素之间的间距取决于实现。因此,尝试用 like 语句分配两个相邻元素a = 8'hCC是非法的且未定义(即使a是 type bit,第二个 08'hCC也可能位于anda[1]之间或之间的某个位置)。这就是存在打包数组的原因。未打包的数组有它们的位置,通常在测试台中或定义一堆不相交的重复信号;但是您应该将打包数组用于您尝试执行的分配类型(确保邻接);所以你改为。a[0]a[1]bit [7:0] a

于 2014-11-13T17:28:52.027 回答