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
你能确认一下,它对你有用吗?
我正在尝试了解 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
你能确认一下,它对你有用吗?