module myfunction();
function [31:0] myfunction;
input [31:0] a;
localparam bytes = 4;
begin
for(i=0; i<4;i= i+1)
begin
myfunction[8*i + 7: 8*i] = input[(3 - i*8) + 7 : (3 -i)*8];
end
endfunction
endmodule
我在for循环中的myfunction上遇到格式错误的语句错误。我对verilog很新。请帮我解决错误
答案 0 :(得分:2)
正如@ alex.forencich所示,位切片由+:
运算符完成,因为你有非常量切片索引。
此外,input
是 SystemVerilog关键字。因此,此处需要更改变量名称。需要声明i
。以下代码段是代码的编译版本。
module myfunction_mod();
function [31:0] myfunction;
input [31:0] a;
// Dummy input1 declared for sample
reg [31:0] input1;
localparam bytes = 4;
begin
for(int i=0; i<4;i= i+1) // declare i
begin
// Note input1 here
myfunction[8*i +: 8] = input1[8*(3-i) +: 8];
// Else use a here
// myfunction[8*i +: 8] = a[8*(3-i) +: 8];
end
end
endfunction
endmodule
这将解决编译错误。我的另一个评论是,尽可能保持不同的功能名称和模块名称。这将有助于层次结构问题。
答案 1 :(得分:1)
我不确定你到底发生了什么错误。但是,我建议使用索引部分选择样式,如下所示:
myfunction[8*i +: 8] = input[8*(3-i) +: 8]
您还应确保所有开始和结束都匹配。