AR# 44372

|

13.3 XST - 「ERROR:HDLCompiler:69 - ''<*>.v'' Line 24: <TESTONE> is not declared.」というエラー メッセージが表示される

説明


ALWAYS ブロック内にあるCASE 文が generate ... endgenerate ブロック内で宣言されている reg 変数にアクセスするとき 13.3 XST Verific パーサーで次のようなエラー メッセージが表示されます。

ERROR:HDLCompiler:69 - ''<*>.v'' Line 24: <TESTONE> is not declared.''

ソリューション


次のコードを例にとってみましょう。

module test2 #
(
parameter USE_TESTONE = 1
)
(
input wire Clk,
input wire select,
output reg testout
);

generate
if(USE_TESTONE == 1)
begin: TESTONE
reg testin;
end
endgenerate

generate
if(USE_TESTONE==1)
begin: TESTONEFUNC
always @ (posedge Clk)
begin
case(select)
0: testout <= TESTONE.testin;
1: testout <= TESTONE.testin;
endcase
end

end

endgenerate
endmodule

上記のコードでは、testin は TESTONE generate ... engenerate ブロック内で宣言されている reg 変数です。この reg 変数は、TESTONEFUNC generate ... endgenerate ブロックの always ブロックにある case ... endcase 文の testout に割り当てられています。case ... endcase 文にあるこの文が 13.3 XST Verific パーサーで処理されると、testin reg 変数が検出できないために次のようなエラー メッセージが表示されます。

"ERROR:HDLCompiler:69 - "<*>.v" Line 24: <TESTONE> is not declared."

この問題を回避するには次の手順に従ってください。
  1. ワイヤ信号を作成します。
  2. generate 文からの reg 変数をこのワイヤ信号に割り当てます。
  3. case...endcase 文内でこのワイヤ信号を使用します。

XST でこのコードを合成するため、同じ verilog コードは次のように変換されます。

module test2 #
(
parameter USE_TESTONE = 1
)
(
input wire Clk,
input wire select,
output reg testout
);

generate
if(USE_TESTONE == 1)
begin: TESTONE
reg testin;
end
endgenerate
wire tmp;
assign tmp = TESTONE.testin;
generate
if(USE_TESTONE==1)
begin: TESTONEFUNC
always @ (posedge Clk)
begin
case(select)
0: testout <= tmp;
1: testout <= tmp;
endcase
end
end
endgenerate
endmodule

上記のコードでは、この問題の解決に使用されたワイヤが tmp です。これで XST Verific パーサーでエラーが出力されなくなります。

この問題に対して変更リクエストが提出されています。
AR# 44372
日付 05/03/2012
ステータス アクティブ
種類 一般
ツール
People Also Viewed