返回介绍

17.7.4 与操作

发布于 2020-09-09 22:55:53 字数 2415 浏览 1085 评论 0 收藏 0

当我们希望两个操作数都能够匹配,但操作数序列的结束时间可以不同的时候,我们可以使用二元操作符and。

sequence_expr ::=         // 引用自附录A.2.10
    ...
  | sequence_expr and sequence_expr

语法17-6 — and操作符语法(摘录自附录A)

and的两个操作数为序列。and操作的匹配要求两个操作数必须匹配。操作数序列起始于相同的时间。当其中的一个操作数匹配的时候,它等待另外一个操作数匹配。复合序列的结束时间是匹配后一个操作数的结束时间。

如果te1te2是序列,那么对于复合序列:

te1 and te2

  • te1te2匹配的时候匹配。
  • 结束时间是te1te2中最后一个匹配的时间。
下面的例子是一个具有and操作符的序列,其中的两个操作数都是序列。

(te1 ##2 te2) and (te3 ##2 te4 ##2 te5)

图17-4 — 两个序列的与操作

图17-4中演示的操作展示了在时钟标记8处的计算尝试。在这里,两个操作数序列为(te1 ##2 te2)(te3 ##2 te4 ##2 te5)。第一个操作数序列要求te1首先被计算为真,然后te2在两个时钟标记之后被计算为真。第二个序列要求te3首先被计算为“真”,然后te4在两个时钟标记之后被计算为“真”,最后te5在两个时钟标记之后被计算为“真”。

因为两个操作数序列都是匹配的,所以这个计算尝试会产生一个匹配。单个序列匹配的结束时间是时钟标记10和时钟标记12。复合序列的结束时间是两个结束时间较晚的一个,复合序列在时钟标记12处识别了一个匹配。

在下面的例子中,第一个操作数序列具有一个串联操作符,范围为1到5:

(te1 ##[1:5] te2) and (te3 ##2 te4 ##2 te5)

第一个操作数序列要求te1被计算成“真”,并且te2在1、2、3、4或5个时钟标记之后被计算成“真”。第二个操作数序列与前一个例子相同。为了考虑复合序列匹配的所有的可能性,我们采用下列的步骤:

  1. 为与第一个序列操作数相关的五个可能的线性序列启动五个执行线程。
  2. 第二个操作数序列只有一个相关联的线性序列,所以只为它启动一个执行线程。
  3. 图17-5显示了开始于时钟标记8处的计算尝试。正像一个时间窗口中显示的那样,第一个操作数序列的所有五个线性序列都是匹配的,所以有五个第一个操作数序列的匹配,它们分别在时钟标记9、10、11、12和13处结束。第二个操作数序列在时钟标记12处结束。
  4. 第一个操作数的每一次匹配都与第二个操作数序列的单次匹配相结合,与操作的规则决定了复合序列最终匹配的结束时间。

这个计算的结果是复合序列的五个匹配,其中的四个在时钟标记12处结束,第五个在时钟标记13处结束。图17-5显示了复合序列在时钟标记12和13处结束的匹配。

图17-5 — 两个序列的与操作 ,包括一个时间范围

如果te1te2是被采样的表达式(不是序列),那么在te1te2在都被计算成“真”的时候序列(te1te2)会匹配。

图17-6中展示了一个这样的例子,它显示了在每一个时钟标记处的尝试结果。序列在时钟标记1、3、8和14处匹配,因为te1te2在这些时钟标记处同时为“真”。在所有其它的时钟标记处,序列匹配是失败的,因为在这些时钟标记上,或者te1为“假”,或者te2为“假”。

图17-6 — 两个布尔表达式的与操作

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文