verilog中函数调用的帮助
我试图理解国家奥委会仲裁员代码。当我尝试使用Xilinx软件进行语法检查时,我得到一个错误“localparam ARBITER_BIN_WIDTH=log2(ARBITER_WIDTH);”行的“常量表达式中不支持对'log2'的函数调用”。这条线应该做些什么改变? 我面临问题的代码部分:verilog中函数调用的帮助,verilog,function-call,Verilog,Function Call,我试图理解国家奥委会仲裁员代码。当我尝试使用Xilinx软件进行语法检查时,我得到一个错误“localparam ARBITER_BIN_WIDTH=log2(ARBITER_WIDTH);”行的“常量表达式中不支持对'log2'的函数调用”。这条线应该做些什么改变? 我面临问题的代码部分: parameter ARBITER_WIDTH =4 input integer number; begin log2=0; while(2**log
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);
参数仲裁器\u宽度=4
输入整数;开始
log2=0;
虽然(2**log2参见IEEE标准Verilog®硬件描述语言LRM,见第10.2.5节,他们描述了日志的功能
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
函数整数clogb2;
输入深度;
整数i,结果;
开始
对于(i=0;2**i<深度;i=i+1)
结果=i+1;
clogb2=结果;
结束
端功能
你能确认一下吗,它对你有用吗?你能描述一下log2函数吗?没有更多的代码细节,很难说清楚,但是该工具抱怨说它不支持函数调用来获取编译时常量,比如参数;也就是说,它无法运行函数log2
来获取ARBITER\u BIN\u WIDTH
。如果它是Vivado,您应该有SystemVerilog支持,它应该允许您使用$clog2()
,以获得大致相同的功能。@Zuzu:您可以更新吗?错误“常量表达式中不支持对'log2'的函数调用”吗表达式的平均左侧和右侧与类型不匹配?是的!强烈建议位宽度必须相同。localparm支持的大小是多少?您可以将其设置为参数[31:0]仲裁器\u width=32'h4
,或参数整数仲裁器\u width=32'd4
。感谢您的帮助。