AR# 14047

|

XST - 「ERROR:Xst:827 - file_name Line xx: Signal xx cannot be synthesized, bad synchronous description.」というエラー メッセージが表示される

説明

キーワード : VHDL, Verilog, synchronous, flip, flop, flip-flop, register, memory, process, always, 同期, フリップフロップ, レジスタ, メモリ, プロセス, 合成

レジスタ、フリップフロップ、メモリなどの同期エレメントを推論しようとすると、次のようなエラー メッセージが表示されます。

"ERROR:Xst:827 - file_name (Line xx). Signal xx cannot be synthesized, bad synchronous description."

このエラー メッセージは、次のような VHDL コードを使用した場合に発生します。

:
:
process (c, r) is begin
if r'event and r = '1' then
q <= '0';
elsif c'event and c = '1' then
q <= d;
end if;
end process;
:
:

or

:
:
process (c, r) is begin
if (r = '1' ) then
q <= '0';
if c'event and c = '1' then
q <= d;
end if;
end if;

end process;
:
:

ソリューション

VHDL コードの構文が正しくても、XST では各種の同期エレメントの推論に定義済みのテンプレートが使用されます。

同期エレメントの記述は、'event 属性に基づいています。XST で同期エレメントが推論されるようにするには、process の最上位の if 文に 'event 属性を含める必要があります。また、process 内に 'event 文を組み込まないようにする必要があります。次に、例を示します。

例 1:

:
:
synchronous_description : process (clk, reset) is begin
if clk'event and clk = '1' then -- topmost if statement
if reset = '1' then -- synchronous reset
q <= '0';
else
q <= d;
end if;
end if;
end process;
:
:

上記の例では、'event 文が組み込まれていません。また、'event 文は最上位の if 文の一部になっています。最上位の if 文の次の行は、同期リセットを推論するための記述です。必要に応じて、さらに if 文を追加できます。

例 2:

:
:
synchronous_description : process (clk, reset) is begin
if reset = '1' then -- asynchronous reset
q <= '0'; -- you can have embedded if statements if you need to
elsif clk'event and clk = '1' then -- still the topmost if statement
q <= d; -- you can put your case statements here or
end if; -- embed more if statements but not
end process; -- any more 'event statements
:
:

上記の例では、'event 文が組み込まれていません。また、'event 文は elsif 文に含まれているため、最上部の if 文の一部であると見なすことができます。必要に応じて、最上位の if 文の下にさらに VHDL コードを追加できます。

推論テンプレートは ISE テンプレートおよび『XST ユーザー ガイド』(http://japan.xilinx.com/support/software_manuals.htm) にも含まれています。
AR# 14047
日付 12/15/2012
ステータス アクティブ
種類 一般
People Also Viewed