我无法理解这段代码的含义。
我知道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]);
答案 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))
,则模拟器很高兴。