我在`上在Verilog上定义有错误

时间:2018-11-20 10:39:09

标签: verilog hdl

...
'define ZERO_INIT2D(VECT,SD_WIDTH) for(integer i=0;i<(SD_WIDTH);i=i+1) (VECT)[i]=0;
...`

...
reg [31:0] rrr [7:0];
...
always @(negedge clk)
begin
        ZERO_INIT2D(rrr,8)
        //for(integer i=0;i<8;i=i+1) rrr[i]=0;// if using it. All works fine
        Buffer_reg = 111;
        Start_addr = 0;
        Counter=0;
...

我要使用精确定义! 我的定义与寄存器“ Buffer_reg”无关。为什么会出现以下错误?

ERROR:HDLCompiler:806 - "MEMORY_m.v" Line 170: Syntax error near "Buffer_reg".
ERROR:ProjectMgmt - 1 error(s) found while parsing design hierarchy.

2 个答案:

答案 0 :(得分:0)

您的代码中存在几个语法错误。这是一个MCVE,它们已被更正:

module M;

//|                                                                      |  
//V                                                                      V 
  `define ZERO_INIT2D(VECT,SD_WIDTH) for(integer i=0;i<(SD_WIDTH);i=i+1) VECT[i]=0;

  reg [31:0] rrr [7:0];

  always @*
    begin
//    |
//    V   
      `ZERO_INIT2D(rrr,8)
    end

endmodule

https://www.edaplayground.com/x/3Db3


提出问题时,最好自己准备一份MCVE,而不是期望那些能帮助您的人。它不仅可以节省其他人的工作,而且可以帮助您更清楚地说明问题,并且可以在准备问题时亲自找出答案。

答案 1 :(得分:0)

我进行了此类更改,所有内容均正常合成:...

... 'define ZERO_INIT2D(VECT,SD_WIDTH) for(integer i=0;i<SD_WIDTH;i=i+1) VECT[i]=0; ...

我不知道为什么,但

  

(VECT)-> VECT

     

(SD_WIDTH)-> SD_WIDTH

它有帮助,但这也违反了define的语法,很好,它可以工作。