返回介绍

10.4.4 通过名字传递参数

发布于 2020-09-09 22:55:49 字数 882 浏览 1106 评论 0 收藏 0

SystemVerilog允许任务和函数的参数通过名字或位置进行传递。这就允许指定非连续的缺省参数,并能够方便地指定调用中传递的参数。例如:

function int fun(int j=1, string s="no");
    ...
endfunction

fun函数可以用如下方式调用:

fun(.j(2), .s("yes")); // fun(2, "yes");
fun(.s("yes"));        // fun(1, "yes");
fun(, "yes");          // fun(1, "yes");
fun(.j(2));            // fun(2, "no");
fun(.s("yes"), .j(2)); // fun(2 , "yes");
fun(.s(), .j());       // fun(1 , "no");
fun(2);                // fun(2, "no");
fun();                 // fun(1, "no");

如果自变量具有缺省值,那么它们当作模块实例的参数一样地对待。如果自变量没有缺省值,那么它们必须被指定一个值,否则编译器应该发布一个错误。

如果在一个子例程的调用中既使用了通过位置传递又使用了通过名字传递,那么所有位置自变量必须在命名自变量的前面。下面,使用上面相同的例子:

fun(.s("yes"), 2); // 非法
fun(2, .s("yes")); // 正确

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

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

发布评论

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