verilog代码中的语法错误

verilog代码中的语法错误,verilog,fpga,system-verilog,hdl,Verilog,Fpga,System Verilog,Hdl,我想把这个c代码转换成verilog模块,但我遇到了一些困难 void window_averaging(void) { register unsigned int i, k; for (i = 0; i < 128; i++) { // Copying first 128 output samples to the Window 0 and so on till Window 7. W[count][i] = O[i]; } for (i = 0;

我想把这个c代码转换成verilog模块,但我遇到了一些困难

void window_averaging(void) {

  register unsigned int i, k;
  for (i = 0; i < 128; i++) {
    // Copying first 128 output samples to the Window 0 and so on till Window 7.
    W[count][i] = O[i];
  }


  for (i = 0; i < 128; i++) {
    for (k = 0; k< 8; k++) {
      O[i] += W[k][i];
    }
    O[i] /= 8; // Averaging over 8 window
  } 
  count = (count++)%8; // Count = 0  after all the window elements are filled.
}
void窗口\u平均值(void){
寄存器无符号整数i,k;
对于(i=0;i<128;i++){
//将前128个输出样本复制到窗口0,依此类推,直到窗口7。
W[count][i]=O[i];
}
对于(i=0;i<128;i++){
对于(k=0;k<8;k++){
O[i]+=W[k][i];
}
O[i]/=8;//在8个窗口上求平均值
} 
count=(count++)%8;//填充所有窗口元素后,count=0。
}
Verilog:

module window_averaging(
  input      [16:0]in_noise, //input from noise cancellation
  input            clk,
  output reg [16:0]window_average // output after window averaging
  );

integer i;
integer k;
integer count = 0;
reg [16:0] store_elements[0:7][0:128]; //  2-D array for window averaging
reg [16:0] temp;

always @(posedge clk)
begin
  //  Copying first 128 output samples to the Window 0 and so on till Window 7
  for(i=0 ; i < 128 ; i = 1+1)
  begin
    store_elements[count][i] = in_noise;
  end
  for(i=0; i<128 ; i=i+1)
  begin
    for(k=0;k<8;k = k+1)
    begin
      temp = temp + store_elements[i][k];
    end
    window_average = temp/8;
    count = (count+1)%8;
  end
end
endmodule
模块窗口\u平均(
在_noise中输入[16:0],//来自噪声消除的输入
输入时钟,
输出寄存器[16:0]窗口平均//窗口平均后的输出
);
整数i;
整数k;
整数计数=0;
reg[16:0]存储元素[0:7][0:128];//用于窗口平均的二维阵列
注册[16:0]温度;
始终@(posedge clk)
开始
//将前128个输出样本复制到窗口0,依此类推,直到窗口7
对于(i=0;i<128;i=1+1)
开始
存储单元[计数][i]=在噪声中;
结束

对于(i=0;i首先,您尝试从@always块内部驱动导线,这是不允许的。如果您将导线转换为regs,则它将工作:

    module window_averaging(
    input [16:0]in_noise, //input from noise cancellation
    input clk,
    output reg [16:0]window_average // output after window averaging
    );

    integer i;
    integer k;
    integer count = 0;
    reg [16:0] store_elements[0:7][0:128]; //  2-D array for window averaging
    reg [16:0] temp;
    ...
另外,我认为要与C代码保持一致,行计数=(计数+1)%8;应该在for循环之外,如下所示:

    window_average = temp/8;
    end
    count = (count+1)%8;
    end
    endmodule

我不知道您正在使用什么进行编译,但我认为以下内容应该会给您带来错误:
对于第一个循环:

for(i=0 ; i < 128 ; i = 1+1)
记住声明
store_元素[0:7][0:128]
,所以可能是开关
i
k





这不是一个真正的答案。对不起,我还没有评论权限。

谢谢你的回复,我这样做了,错误消失了,但是当我对代码进行模拟时,我得到的输出值是未知值(X).正如Remian8985所说,您还有两个错误。当您修复这些错误时,它会起作用吗?在您的模拟中,您是否将In_noise设置为一些合理的值(而不是“X”)?
temp = temp + store_elements[i][k];