描述
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>未声明。”
要解决这个问题,
- 创建一个有线信号
- 将生成语句中的reg变量分配给此有线信号
- 在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。
没有回复内容