在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2886|回复: 0

[求助] SystemVerilog如何设计和调用常数函数

[复制链接]
发表于 2016-8-8 15:45:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 JohnYork 于 2016-8-8 15:58 编辑

目的:对模块的例化参数进行判断处理,并生成对应的内部常数,将这一功能封装于package中以便于复用。设计的示例代码如下:




  1. package pkg;
  2. function bit[15:0] bitgen(int bit1idx);
  3.     automatic bit[15:0] res = '0;
  4.     if (bit1idx >= 0 && bit1idx < 16)
  5.         res[bit1idx] = 1'b1;
  6.     return res;
  7. endfunction
  8. function bit bit2test(bit[15:0] bits2test);    if ((bits2test&bitgen(2)) != 0)        return 1'b1;    return 1'b0;endfunction
  9. endpackage
  10. module mod2test #(    parameter para2test = 16'h000F);    localparam bit2set_flag = pkg::bit2test(para2test);    initial begin        if (bit2set_flag == 0)            $error("bit2 of para2test is not set!);    endendmodule


复制代码

这些代码在modelsim中编译时报错,大概意思是:

1.不能在pkg命名空间找到bit2test函数
2.参数para2test必须是常数

查询了SystemVerilog相关的标准,大概意思似乎是应用在常数表达式中的函数不能是“DPI”函数,函数的参数必须赋给常值。但在上面的代码中,para2test应该是编译时确定的值,对运行时来说应该可以作为常值对待,为什么modelsim却不能编译通过呢?有没有办法实现我的设计意图呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 12:35 , Processed in 0.014262 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表