AR# 52302

Vivado 合成 - 定数以外の (ダイナミック) 範囲記述のサポート

説明

Vivado 合成で定数以外の (ダイナミック) 範囲記述がサポートされない場合、次のようなエラー メッセージが表示されます。

ERROR: [Synth 8-561] range expression could not be resolved to a constant.

ERROR: [Synth 8-27] complex assignment not supported.

ソリューション

Vivado 合成では両範囲の変数が必ずサポートされるわけではありません。

大規模なロジック コンストラクトを回避するため、スタティックな値に関連するダイナミック範囲および若干の定数以外のダイナミック範囲しかツールで処理されません。

次に、サポートされるコンストラクトの例を示します。

output_reg (v_high downto v_low) <= input_reg(v_high downto v_low);

output_reg (v_high downto v_high-15) <= input_reg(15 downto 0);

次に示すコンストラクトはサポートされません。

if (data_reg(v_high-1 downto 0) = all_zeros(v_high-1 downto 0)) then

output_reg(63 downto v_low) <= input_reg(63-v_low downto 0);

data_reg(63 downto v_low) <= (others => '0');

output_reg(v_high + v_low  - 1 downto v_low) <= input_reg(v_high - 1 downto 0);

次に示すコンストラクトは 2016.x でサポートされる予定です。

output_reg (V_WIDTH*2 -1 downto v_low*8)  <= input_reg(WIDTH*2 - v_low*8 -1 downto 0);

ダイナミック範囲への割り当てでは通常、ツールは範囲が同じサイズのものになるかどうかを算定しようとします。両範囲に同じインデックスを使用する、または両範囲のインデックスの 1 つに定数が使用されている場合、ツールは一般にサイズを算定しデザインを合成することができます。 

しかし、インデックスが非常に複雑な場合、サイズが同じであるかをツールは算定することができなくなる可能性があります。インデックスの構造が複雑にならないようにしてください。

全体的に見て、コードの記述方法が上述のエラー メッセージの原因となるダイナミック範囲記述である場合、これらの複雑なダイナミック範囲を回避できるか、またスタティックな値に置き換えることができるかどうかを検討してください。

AR# 52302
日付 04/04/2016
ステータス アクティブ
種類 既知の問題
ツール