【问题标题】:Syntax errors in the verilog codeverilog 代码中的语法错误
【发布时间】:2014-10-15 08:58:38
【问题描述】:

我想将此 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.
}

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

我得到的错误是“(”和“=”附近的语法错误。我对verilog有点陌生,谁能帮助我如何继续。

【问题讨论】:

    标签: verilog fpga system-verilog hdl


    【解决方案1】:

    首先,您尝试从不允许的 @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 代码一致,行数 = (count+1)%8;应该像这样在for循环之外:

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

    【讨论】:

    • 感谢您的回复,我这样做了,错误消失了,但是当我对代码进行模拟时,我得到的输出值是未知值 (X)。
    • 正如 Remian8985 所说,您还有两个错误。当你解决这些问题时,它会起作用吗?在您的模拟中,您是否将 in_noise 设置为一些合理的值(不是“X”)?
    【解决方案2】:

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

    for(i=0 ; i < 128 ; i = 1+1)
    

    改成i= i+1


    另外,排队:

    temp = temp + store_elements[i][k];
    

    记住声明 store_elements[0:7][0:128] ,所以可以切换 ik




    这真的不是答案。抱歉,我还没有评论权限。

    【讨论】:

      猜你喜欢
      • 2013-11-30
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多