使用掩码的 System Verilog

System Verilog using mask

我无法理解这段代码的含义。 我知道 VHDL 并且需要系统 verilog。我不知道bits [num] = '{4, 4})(output logic [width-1:0] mask [num]);

的意思

请解释一下

module works
  #(parameter int num = 4,
   parameter int width = 8,
   parameter int bits [num] = '{4, 4})
   (output logic [width-1:0] mask [num]);

output logic [width-1:0] mask [num]

[width-1:0] mask 是宽度位的向量。如果宽度为 8,这将是一个 8 位向量:[7:0] mask.

向量后跟[num]表示它是'num'个向量的数组。总数是一个宽度 x num 位的二维数组。 这种语法很常见,你会经常看到它。

我不得不寻找 '{4,4} 模式(我在我的 System Verilog 小册子中找不到它),正如 Matthew 所说,它是对数组的赋值。所以,我最初的解释是错误的。

现有代码的问题是我的 Verilog 模拟器在使用默认值时会抛出一条错误消息。 num 是 4 并且 '{4,4} 只有两个元素。这在启动时出现错误:

ERROR: [VRFC 10-666] expression has 2 elements; expected 4 [...

如果我将 num 设置为 2 #(.num(2)) 模拟器会很高兴。

A module 就像一个 VHDL entity,所以我们有一个块叫做 works:

module works

一个参数就像一个VHDL通用。在 SystemVerilog 中,我们不说 generic,而是说 #。因此,我们有一个包含三个参数(泛型)的块,一个 int(32 位有符号整数,如 VHDL 整数),默认值为 4:

#(parameter int num = 4,

默认值为 8 的 int:

parameter int width = 8,

和一个大小等于参数值numint数组,编号为0到num-1:

parameter int bits [num] = '{4, 4})

'{4,4} 是一个 分配模式 并且是 VHDL 聚合 的(粗略)等价物。因此,此代码试图将此数组的两个值初始化为整数 4。问题是 此代码可能是非法的。数组 bits 可以是任意大小(取决于参数 num 的值),这个数组就是所谓的 未压缩数组 。在 SystemVerilog(和 Verilog)中,打包数组赋值的大小和形状都必须匹配(就像在 VHDL 中一样)。除非 num 的值为 2,否则此赋值任一侧的大小将不匹配。如果要将解压缩数组的所有元素初始化为相同的东西,可以使用 key (很像 VHDL others):

parameter int bits [num] = '{default:4})

https://www.edaplayground.com/x/5w8y

这是一个端口:

(output logic [width-1:0] mask [num]);

其大小由widthnum两个参数定义。输出是 num(所谓的 unpacked 维度)的数组,宽度为 width(所谓的 packed维度)。 logic 是一种类型。 logic 类型的变量可以取四个值之一:0、1、X 或 Z。