verilog 函数调用帮助

Assistance on function call in verilog

我正在尝试了解 NoC 仲裁程序代码。当我尝试使用 Xilinx 软件进行语法检查时,我收到第 "localparam ARBITER_BIN_WIDTH= log2(ARBITER_WIDTH);" 行的错误 "Function calls such as to 'log2' are not supported in constant expressions"。这条线应该做哪些改变? 我遇到问题的代码部分:

 parameter ARBITER_WIDTH    =4
      input integer number; begin   
      log2=0;   
      while(2**log2<number) begin   
        log2=log2+1;    
     end    
   end  
 endfunction // log2 

localparam ARBITER_BIN_WIDTH= log2(ARBITER_WIDTH);

参见 IEEE 标准 Verilog® 硬件描述语言 LRM,在 10.2.5,他们描述了 Log

的功能
function integer clogb2;
 input depth;
 integer i,result;
 begin
 for (i = 0; 2 ** i < depth; i = i + 1)
   result = i + 1;
   clogb2 = result;
 end
 endfunction

你能确认一下,它对你有用吗?