微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > SystemVerilog如何设计和调用常数函数

SystemVerilog如何设计和调用常数函数

时间:10-02 整理:3721RD 点击:

目的:对模块的例化参数进行判断处理,并生成对应的内部常数,将这一功能封装于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却不能编译通过呢?有没有办法实现我的设计意图呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top