返回介绍

7.10 内建方法

发布于 2020-09-09 22:55:47 字数 853 浏览 1091 评论 0 收藏 0

SystemVerilog引入了类和方法调用语法,其中一个任务或函数通过使用圆点符号(.)调用。

object.task_or_function()

object唯一地识别了任务或函数操作的数据。因此,为了加入传统上只能通过系统任务或函数才能实现的功能,方法的概念被自然地扩展到内建类型。与系统任务不同,内建方法不使用$作为前缀,因为它们不需要特殊前缀来避免与用户定义标识符的冲突。这样,方法语法对语言进行了扩展而无需加入新的关键字,也不会将全局命名空间与系统任务相混淆。

与系统任务不同,内建方法不会被用户通过PLI任务重新定义。因此,对内建方法调用来说,只有不会被用户重新定义的函数是一个很好的候选。

通常,当一个特定的功能适用于所有数据类型,或者适用于一个特定数据类型的时候,相对于系统任务来说,内建方法是首选的。例如:

dynamic_array.size, associative_array.num, and string.len

这些内建方法具有相似的概念,然而,它们却代表不同的东西。一个动态数组具有一个尺寸、一个联合数组包含指定书目的元素,一个字符串具有一个指定的长度。如果对它们使用相同的系统任务,例如$length,则会缺乏清晰性和直观性。

内建方法只能与一个特定数据类型关联。因此,如果某些功能具有一个简单的边带效应(例如$stop或$reset)或者它不针对特定的数据操作(例如,$random),那么必须使用一个系统任务。

当一个函数或任务内建方法调用没有指定参数的时候,在任务/函数名字之后的空括号,(),是可选的。对于要求参数的任务或函数,如果所有的参数都指定为缺省值,那么这个规则也是适用的。对于一个方法而言,这条规则使得简单调用就好像是对象或内建类型的属性一样。在10.4.5节中为函数和任务定义了相似的规则。

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

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

发布评论

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