私はそのようなエンティティインスタンスの塊を持っています:
GPIO : entity L_PicoBlaze.pb_GPIO_Adapter
generic map (
[...]
)
port map (
Clock => CPU_Clock, -- Clock : in STD_LOGIC;
Reset => '0', -- Reset : in STD_LOGIC; -- line 645
[...]
);
- ISE XST 14.7
- Quartus II 13.x
- ISE iSim 14.7
また、Vivado 2013.x でデザインを正常にコンパイルしたことも確かです!!!
Vivado (2014.4) Synth で、次の 3 つの型解決が可能であるという'0'
エラーメッセージが表示され
ます。ここに 3 つの可視タイプが一致します ["D:/git/.../PicoBlaze/System.vhdl":645]
リセットは次のように宣言されます。
Reset : in STD_LOGIC
この問題は、修飾式を使用して解決できます。
GPIO : entity L_PicoBlaze.pb_GPIO_Adapter
generic map (
[...]
)
port map (
Clock => CPU_Clock,
Reset => STD_LOGIC'('0'), -- line 645
[...]
);
これは (a) 見栄えが悪く、(b) は Synth のバグだと思います。
ISE XST およびその他のツールは、正しいリテラル タイプを決定するためにリバース/バックワード タイプ推論を行っていると思います。
誰もこの問題に遭遇しましたか?
ポート マップに '0'、x"00..00"、または "00..00" を記述した場合、コーディング スタイルが悪いのでしょうか?
編集 1 - 最小限で完全な例:
library IEEE;
use IEEE.std_logic_1164.all;
entity top is
port (
Clock : in STD_LOGIC;
Reset : in STD_LOGIC;
OUTPUT : out STD_LOGIC
);
end entity;
architecture rtl of top is
begin
toggle : entity work.TFF
port map (
Clock => Clock,
Reset => '0', -- line 17
Q => Output
);
end;
-- a simple toggle flip flop
library IEEE;
use IEEE.std_logic_1164.all;
entity TFF is
port (
Clock : in STD_LOGIC;
Reset : in STD_LOGIC;
Q : out STD_LOGIC
);
end entity;
architecture rtl of TFF is
signal Q_r : STD_LOGIC := '0';
begin
process(Clock)
begin
if rising_edge(Clock) then
if (Reset = '1') then
Q_r <= '0';
else
Q_r <= not Q_r;
end if;
end if;
end process;
Q <= Q_r;
end;
Vivado 2014.4 エラー メッセージ:
[Synth 8-2396] near character '0' ; ここに 3 つの可視タイプが一致します ["D:/Temp/OverloadTest/overload.vhdl":17]
編集2:
実際の例を見つけました。エンティティ tff の宣言をトップレベルの宣言の前に置いただけです。[Synth 8-2396 ] near ..... visible types match hereという Vivado からのエラー メッセージは、コンポーネント / ファイル全体への参照が見つからないという不器用な方法です。
ファイル リスト (>300) を再確認して、不足しているファイルやコンポーネントがないか確認するのに時間がかかります。