AR# 33034

11.x XST - Virtex-6 と Spartan-6 に対し std_logic タイプのハイフン (-) が XST で 異なって解釈される

説明

キーワード : interpretation, don't, care, 解釈, ドントケア

Virtex-6 および Spartan-6 デバイスに対し、XST でstd_logic タイプのハイフンが古いデバイスを使用した場合とは異なって解釈されます。なぜですか。

ソリューション

古いデバイスの場合、XST では std_logic タイプのハイフン (-) はドントケアとして解釈されます。 次の例では、XST で sel = "1-" のハイフン (-) がドントケアとして解釈されています。

ファイル : ex_0011.vhd
コンパイル ライブラリ : work

library ieee;
use ieee.std_logic_1164.all;

entity ex_0011 is
port(sel: in std_logic_vector(1 downto 0);
res: out std_logic
);
end ex_0006;

architecture bhv of ex_0006 is
begin
res <= '1' when sel = "1-" else '0';
end;

この結果、XST で次のネットリストが生成されます。

古いデバイスを使用した場合の XST のコード
古いデバイスを使用した場合の XST のコード


11.2 では、XST で Virtex-6 および Spartan-6 ファミリ用に新しい VHDL/Verilog 解析が導入されました。この詳細は (Xilinx Answer 32927) を参照してください。

Virtex-6 および Spartan-6 ファミリを使用している場合、XST ではハイフン (-) がドントケアとして解釈されません。このため「sel = "1-"」は False と評価され、XST で次のネットリストが生成されます。これは VHDL LRM に準拠しています。

Virtex-6 および Spartan-6 を使用した場合の XST のコード
Virtex-6 および Spartan-6 を使用した場合の XST のコード



「sel = "1-"」がドントケアとして解釈されるよう、numeric_std パッケージから std_match ファンクションを使用することができます。

ファイル : ex_0011.vhd
コンパイル ライブラリ : work

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity ex_0011 is
port(sel: in std_logic_vector(1 downto 0);
res: out std_logic
);
end ex_0006;

architecture bhv of ex_0006 is
begin
res <= '1' when std_match(sel,"1-") else '0';
end;

この場合、インプリメンテーションは古いデバイスのパーサ インプリメンテーションのようになります。

AR# 33034
日付 12/15/2012
ステータス アクティブ
種類 一般