我在 Verilog 上用 for 定义错误
I have error in `define on the Verilog with for
...
'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;
...
我想用exactly define!
我的定义与寄存器 "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.
您的代码中存在多个语法错误。这是更正后的 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,而不是指望别人帮你做。它不仅可以为其他人节省一些工作,还可以帮助您更清楚地解释您的问题,您可能会在准备问题时自己找到答案。
我做了这样的修改,一切都正常合成了:...
...
'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 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;
...
我想用exactly define! 我的定义与寄存器 "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.
您的代码中存在多个语法错误。这是更正后的 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,而不是指望别人帮你做。它不仅可以为其他人节省一些工作,还可以帮助您更清楚地解释您的问题,您可能会在准备问题时自己找到答案。
我做了这样的修改,一切都正常合成了:...
...
'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
它有帮助,但这也违反了定义的语法,嗯,它有效。