verilog - 使用掩码的系统 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]);
解决方案
一个模块就像一个 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。width
logic
logic
推荐阅读
- android - 无法解析 ':app@debug/compileClasspath' 的依赖关系:无法解析 com.github.YUNEEC:Yuneec-SDK-Android:vX.YZ
- java - 是否可以使用 spring 数据存储库为不同的类创建“存在给定 id 的对象”约束注释?
- arrays - 当我提交表单时,我有一个带有名称的单个字段的表单,输出未显示相对于 model.ts
- c# - ASP.net core IQueryableUserStore如何实现
- c# - 如何在统一中制作wallrun
- java - 如何在 Java 和 Spring 中动态使用装饰器模式
- swagger - Swagger 输出过滤
- wicket - 找不到 ID 为“FooPopup”的组件
- sql - 汇总一个度量,例如上个月的收入,但与 MTD 相似的时期
- excel - 有没有办法自动将数据从 Excel 复制和粘贴到 Powerpoint?