13.3 XST  – “错误:HDLC编译器:69  – ”<*>。v“第24行: 没有宣布。“-Altera-Intel社区-FPGA CPLD-ChipDebug

13.3 XST – “错误:HDLC编译器:69 – ”<*>。v“第24行: 没有宣布。“

描述

13.3当ALWAYS块中存在的CASE语句通过其语句访问在generate … endgenerate块中声明的reg变量时,XST Verific解析器生成以下错误消息:

“错误:HDLCompiler:69 – ”<*>。v“第24行:<TESTONE>未声明。”

以下面的代码为例:

模块测试2#

参数USE_TESTONE = 1


输入线Clk,
输入线选择,
输出reg testout
);

生成
if(USE_TESTONE == 1)
开始:TESTONE
reg testin;
结束
endgenerate

生成
如果(USE_TESTONE == 1)
开始:TESTONEFUNC
永远@(posedge Clk)
开始
情况下(选择)
0:testout <= TESTONE.testin;
1:testout <= TESTONE.testin;
ENDCASE
结束

结束

endgenerate
endmodule

在上面的代码中,testin是在TESTONE generate … engenerate block中声明的reg变量。这个reg变量被赋值给case中的testout … endcase语句,它存在于TESTONEFUNC生成… endgenerate块的always块中。当13.3 XST Verific解析器遇到case-endcase语句中存在的此语句时,它会生成以下错误消息,因为它无法找到testin reg变量:

“错误:HDLCompiler:69 – ”<*>。v“第24行:<TESTONE>未声明。”

要解决这个问题,

  1. 创建一个有线信号
  2. 将生成语句中的reg变量分配给此有线信号
  3. 在case … endcase语句中使用此连线

相同的Verilog代码转换如下,以便XST成功综合代码:

模块测试2#

参数USE_TESTONE = 1


输入线Clk,
输入线选择,
输出reg testout
);

生成
if(USE_TESTONE == 1)
开始:TESTONE
reg testin;
结束
endgenerate
电线tmp;
assign tmp = TESTONE.testin;
生成
如果(USE_TESTONE == 1)
开始:TESTONEFUNC
永远@(posedge Clk)
开始
情况下(选择)
0:testout <= tmp;
1:testout <= tmp;
ENDCASE
结束
结束
endgenerate
endmodule

在上面的代码中,tmp是用于解决此问题的电线。通过使用此解决方法,XST Verific解析器不会出错。

已针对此问题提交了CR。

请登录后发表评论

    没有回复内容