首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么系统verilog max()和min()函数返回一个队列,而不是一个元素?

为什么系统verilog max()和min()函数返回一个队列,而不是一个元素?
EN

Stack Overflow用户
提问于 2017-11-17 04:48:04
回答 3查看 12.7K关注 0票数 5

我注意到关于SV LRM (1800-2012) 7.12 (数组操作方法)中的max()和min()函数的有趣之处。我在一个虚拟的SV文件中尝试了max()和min()函数

代码语言:javascript
复制
int a[3] = {0,5,5};
int q[$];
int b;
q = a.max(); // legal
b = a.max(); // illegal

非法语句错误为

代码语言:javascript
复制
Incompatible complex type assignment
Type of source expression is incompatible with type of target expression.
Mismatching types cannot be used in assignments, initializations and
instantiations. The type of the target is 'int', while the type of the
source is 'int$[$]'.

因此,我注释掉了非法声明,并对其进行了测试。它编译并运行良好,但我希望能更深入地了解为什么该函数返回一个队列而不是单个元素-我打印出了q的内容和大小,但大小仍然是1,5只打印了一次。那么让max()和min()函数返回一个队列是不是有点多余呢?

EN

回答 3

Stack Overflow用户

发布于 2017-11-17 05:46:40

克里斯·斯皮尔和格雷格·汤姆布什合著的"SystemVerilog for Verification“一书在第2.6.2章对这一主题进行了很好的解释,下面是我引用的内容:

“数组定位器方法在未打包的数组中查找数据。起初,您可能想知道为什么这些方法返回一个值队列。毕竟,数组中只有一个最大值。但是,当您从空队列或动态数组中请求值时,SystemVerilog需要一个队列。”

票数 6
EN

Stack Overflow用户

发布于 2017-11-17 05:51:27

with ()条件没有匹配项时,它返回一个队列来处理空队列。empty queue返回值是区分真正匹配和不匹配的一种方法。

考虑下面的代码。查找大于5的a的最小值。a有数据,但其条目都没有大于5的值。b为空,因此它将返回一个空。c将返回7。

代码语言:javascript
复制
int a[3] = '{0,5,5};
int b[$] = '{};
int c[4] = '{0,15,5,7};
int q[$];
q = a.min() with (item > 5); // no items >5, will return an empty queue
q = b.min();                 // queue is empty, will return an empty queue
q = c.min() with (item > 5); // will return a queue of size 1 with value 7
票数 2
EN

Stack Overflow用户

发布于 2021-11-01 16:04:18

我认为根据Greg's answer的示例结果是不正确的。

根据系统Verilog语言:

  • min()返回具有最小值的元素,或者返回表达式计算结果为minimum.

  • max()返回具有最大值的元素,或者返回表达式计算结果为maximum.

因此,当计算带有表达式的时,结果值将为:

代码语言:javascript
复制
a.min() with (item > 5); {0,0,0} -> Minimum is 0 and corresponding item is 5.
c.min() with (item > 5); {0,1,0,1}-> Minimum is 0 and corresponding item is 5.

由于示例演示了min的用法,因此结果将为:

代码语言:javascript
复制
q = a.min() with (item > 5); // A queue of size 1 with value 5. 
q = c.min() with (item > 5); //A queue of size 1 with value 5.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47338777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档