从硬件角度看,以下两个逻辑实现之间有什么区别?

时间:2017-08-07 08:48:57

标签: system-verilog hdl

实施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提供了多驱动程序错误?

1 个答案:

答案 0 :(得分:2)

区别在于LRM认为变量。您不能对来自不同进程的同一变量进行多次分配。打包数组被认为是变量,如果是解包数组,则被认为是每个元素。这种限制的原因更多的是有效的模拟实现,而不是真正的硬件实现,并且在LRM的其他地方(即通过引用传递)中使用了构成变量的区别。