系统Verilog使用掩码

时间:2018-05-10 12:10:10

标签: verilog mask system-verilog

我无法理解这段代码的含义。 我知道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]);

2 个答案:

答案 0 :(得分:0)

模块就像VHDL 实体,因此我们有一个名为works的块:

module works

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

#(parameter int num = 4,

int,默认值为8:

parameter int width = 8,

以及大小等于参数int的{​​{1}}的数组,其编号为0到num

num-1

parameter int bits [num] = '{4, 4}) 是一个赋值模式,是VHDL 聚合的(粗略)等价物。所以,这段代码试图将这个数组的两个值初始化为整数4.麻烦的是这段代码可能是非法的。数组'{4,4}可以是任意大小(取决于参数bits的值),此数组是所谓的解压缩数组。在SystemVerilog(以及Verilog)中,打包数组的赋值大小和形状必须匹配(就像在VHDL中一样)。除非num的值为2,否则此赋值任一方的此大小将不匹配。如果要将解压缩数组的所有元素初始化为同一内容,则可以使用(更像是VHDL num):

others

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

这是一个端口:

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

其大小由两个参数(output logic [width-1:0] mask [num]); width定义。输出是宽度为num的单词num(所谓的解压缩维度)的数组(所谓的压缩维度) 。 width是一种类型。类型logic的变量可以采用以下四个值中的一个:0,1,X或Z.

答案 1 :(得分:-2)

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

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

向量之后是[num]意味着它是一个数字数字'向量。总数是宽度为x num位的二维数组。 这种语法很常见,你会经常看到它。

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

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

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

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