格式错误的语句Verilog 模块myfunction(); 函数[31:0]myfunction; 输入[31:0]a; localparam字节=4; 开始 对于(i=0;i

格式错误的语句Verilog 模块myfunction(); 函数[31:0]myfunction; 输入[31:0]a; localparam字节=4; 开始 对于(i=0;i,verilog,Verilog,我不确定您在这里得到的确切错误。但是,我建议使用索引零件选择样式,如下所示: module myfunction(); function [31:0] myfunction; input [31:0] a; localparam bytes = 4; begin for(i=0; i<4;i= i+1) begin myfu

我不确定您在这里得到的确切错误。但是,我建议使用索引零件选择样式,如下所示:

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

您还应该确保所有的开始和结束都匹配。

如@alex.forencich所示,位切片将由
+:
操作符完成,因为您有非常量切片索引

另外,
input
是一个SystemVerilog关键字。因此,此处需要更改变量名。
i
需要声明。以下代码段是您代码的编译版本

myfunction[8*i +: 8] = input[8*(3-i) +: 8]
模块myfunction_mod();
函数[31:0]myfunction;
输入[31:0]a;
//为示例声明的伪input1
reg[31:0]输入1;
localparam字节=4;
开始

for(int i=0;i请给出确切的错误消息。我这样做了,错误已经消失。我得到一个新错误,如下所示:我在for循环中的myfunction行上不是常量我这样做了,错误已经消失。我得到一个新错误,如下所示:我在for循环中的myfunction行上不是常量。您可能还需要在本地定义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