实施1:
logic [2:0][3:0] reg0; // Packed
always_ff@(clk_a)
reg0[1:0] <= in0[1:0];
always_ff@clk_b)
reg0[3:2] <= in1[1:0];
实施2:
logic [2:0] reg0 [3:0]; // unpacked
always_ff@(clk_a)
reg0[1:0] <= in0[1:0];
always_ff@clk_b)
reg0[3:2] <= in1[1:0];
为什么工具为实现1提供了多驱动程序错误?
答案 0 :(得分:2)
区别在于LRM认为变量。您不能对来自不同进程的同一变量进行多次分配。打包数组被认为是变量,如果是解包数组,则被认为是每个元素。这种限制的原因更多的是有效的模拟实现,而不是真正的硬件实现,并且在LRM的其他地方(即通过引用传递)中使用了构成变量的区别。