AR# 10075

7.1i XST - 「ERROR:Xst:899 - "file_name", line #: The logic for "net_name" does not match a known FF or Latch template」というエラー メッセージが表示される

説明

キーワード : Verilog, ISE, XST, VLG, 4200, condition, identifier, 3.1i, 4.1i, 5.1i, 6.1i, clock statement, always block, 識別子, 条件, クロック, ステートメント

重要度 : 標準

概要 :
XST でサポートされているクロックの構文を教えてください。

XST では、Verilog の always ブロックにおける複雑な条件チェックの使用はサポートされていません。 たとえば、次のようなコードではエラーが発生します。

always @( negedge input1 or negedge input2 or posedge clock )
begin
if ( ~input1 | ~input2 )
begin
output1 <= 1'b1;
output2 <= 1'b0;
end
else
begin
output1 <= input1;
output2 <= input2 & input1;
end
end

"ERROR:Xst:899 - "file_name", line #: The logic for "net_name" does not match a known FF or Latch template."

HDL からハードウェアを推論する場合、どのタイプのハードウェアが必要であるかを決めておくことが重要です。 『XST ガイド』 には HDL で推論できる FPGA/CPLD ハードウェアのあらゆるタイプの基本テンプレートが含まれています。
http://www.xilinx.co.jp/support/software_manuals.htm
テンプレートを使用して HDL コードを設計すると、理想のハードウェアを推論できます。

ソリューション

1

このエラーを回避するには、組み合わせロジックを always ブロックの外で実行し、複雑なクロックの構文をセンシティビティ リストから削除します。そして次のように always ブロックのセンシティビティ リストで中間信号を使用します。

assign temp = ~input1 | ~input2;
always @( posedge temp or posedge clock )
begin
if ( temp )
begin
output1 <= 1'b1;
output2 <= 1'b0;
end
else
begin
output1 <= input1;
output2 <= input2 & input1;
end
end

2

上記の例以外でも、always ブロック内のリセット ファンクションが推論されるレジスタに影響を及ぼさない場合に、このエラーが発生することがあります。

module misc(clk,rst,in1,out1);
input clk,rst,in1;
output[1:0] out1;
reg[1:0] out1;

always @(posedge clk or posedge rst)
begin
if (rst)
out1[1] = in1;
else
out1 = {in1,in1};
end
endmodule

change to:

module misc(clk,rst,in1,out1);
input clk,rst,in1;
output[1:0] out1;
reg[1:0] out1;

always @(posedge clk or posedge rst)
begin
if (rst)
out1[1] = 0;
else
out1 = {in1,in1};
end
endmodule

3

このエラーは、Cool Runner-II 以外のすべてのデバイスで両エッジで動作するフリップフロップを推論した場合にも発生します。 両エッジで動作するフリップフロップを持つデバイスは Cool Runner-II のみです。

:
always @(posedge clk or negedge clk)
:
AR# 10075
日付 09/22/2011
ステータス アーカイブ
種類 一般