首页 > 解决方案 > 使用掩码的系统 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]);

标签: verilogmasksystem-verilog

解决方案


一个模块就像一个 VHDL实体,所以我们有一个块叫做works

module works

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

#(parameter int num = 4,

int默认值为 8 的一个:

parameter int width = 8,

int和一个大小等于参数值的 s数组num,其编号为 0 到num-1

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

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

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

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

这是一个端口:

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

其大小由两个参数width和定义num。输出是宽度(所谓的打包维度)字的数组num(所谓的打包维度)。是一种类型。类型变量可以采用以下四个值之一:0、1、X 或 Z。widthlogiclogic


推荐阅读