有符号类型对使用 typedef + 打包数组的每个元素有效(与多维打包数组相比)



我有一个关于具有多个打包维度的符号属性的问题,该属性使用 typedef 分阶段定义。

基本上

logic signed [1:0][2:0] foo;

* foo[0] 没有符号(如果你期望有符号的元素,有符号是没有意义的(,因为所有整个打包数组都是有符号的,但每个元素都没有符号。

typedef logic signed [1:0] foo_t;
foo_t [2:0] foo;

* foo[0] 已签名。真奇怪..

Q1>会发生什么?为什么签名??

Q2> 是否与 逻辑签名 [1:0][2:0] foo;//??

Q3>LRM说[1:0]指数变化最快,这不是我的预期。 逻辑签名 [2:0][1:0] foo;//??

这是允许语法 (BNF( 的工件。signed 关键字将符号应用于整个标识符,而不是您正在打包的单个元素 ( logic (。除了您发现的 typedef 阶段之外,没有任何语法允许您控制每个维度的符号性

分阶段创建多维数组时,您添加的每个维度的变化速度都低于前一个维度。所以在维度上,你的 typedef 等价于

logic signed [2:0][1:0] foo;
foo_t [2:0] foo; // the [2:0] gets added to the left of [1:0]

如果使用解压缩数组,我们还可以为每个元素保留签名属性。

logic signed [1:0] foo [2:0];

但是,系统verilog似乎不支持带有解压缩数组的typedef数组。

typedef logic signed data_t [3:0];
data_t [2:0] foo;

当我尝试这样做时,编译器显示错误

"矢量的非法元素类型(矢量元素类型必须是整型("。 - 您可以对此发表任何评论。

无论如何,感谢您的回答。

相关内容

  • 没有找到相关文章

最新更新