2

私はそのようなエンティティインスタンスの塊を持っています:

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) を再確認して、不足しているファイルやコンポーネントがないか確認するのに時間がかかります。

4

2 に答える 2

1

これは必ずしもあなたの質問に答えるとは限りませんが、コメントチェーンであなたの質問に対処します:

したがって、Vivado 2013.4 にも同じ問題があります :( ... 空のプロジェクトを使用し、ソース ファイルを 1 つ追加しました (上記参照)。その後、[Run Synthesis] をクリックします。また、次の TCL コマンドで VHDL-2008 を有効にしようとしました: set_property vhdl_version vhdl_2008 [current_fileset] 合成を再度実行 -> 変更なし ザイリンクスへの連絡方法 Web ケースは廃止されました ... フォーラムですか?

AR# 62291を参照してくださいopen Webcase。アクションを介して新しい Web ケースの質問を開くことができるようです。

元のスニペットから書いたテスト ケースでは、偶然にも、テスト ケースとテスト対象の直接エンティティ インスタンス化ユニット (ラベルGPIO)の間で宣言/仕様の順序が正しくなっています。

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

entity pb_GPIO_Adapter is
    generic (foo: natural := 42);
    port (
    Clock:  in      std_logic;
    Reset:  in      std_logic;
    dummy:  out     std_logic
    );
end entity;

architecture foo of pb_GPIO_Adapter is

begin
DUMB:
    process (Clock, Reset)
        variable dumbit:    std_logic := '0';
    begin
        if Reset = '1' then
            dumbit := '0';
        elsif rising_edge(Clock) then
            dumbit := not dumbit;
        end if;
        dummy <= dumbit;
    end process;
end architecture;

library ieee;
use ieee.std_logic_1164.all;

entity fum is
end entity;

architecture fie of fum is
    signal dummy:       std_logic;
    signal CPU_Clock:   std_logic := '0';
    signal Reset:       std_logic;
begin
GPIO: 
    entity work.pb_GPIO_Adapter -- work substituted for L_PicoBlaze
        generic map (
           foo => 42
        )
    port map (
        Clock    => CPU_Clock,         -- Clock : in STD_LOGIC;
        Reset    => '0',               -- Reset : in STD_LOGIC;
        dummy    => dummy
    );
CLOCK:
    process
    begin
        wait for 10 ns;
        CPU_Clock <= not CPU_Clock;
        if Now > 200 ns then
            wait;
        end if;
    end process;
end architecture;

私は自然に(私にとって)分析順序が正しいことに注意してください。最小検証可能かつ完全な例で注文を上げるつもりでしたが、コメントで長さが省略されました。また、長いコメントの質問と回答の連鎖は検索できないことに注意してください。そこで収集されたものは、他のスタックオーバーフロー ユーザーにとって何のメリットもありません。

AR# 62291 (Vivado 2014.3 の場合) を見ると、ソリューションの下に表示されます -

このエラーは、RTL ファイルが同期されておらず、信号のタイプが正しく宣言されていないために発生します。

この言語は VHDL 用語ではないことに注意してください。

これは、ザイリンクスの以前の難解な XST エラー メッセージとまったく同じであり、合成前に少なくともデザイン仕様を分析して精緻化する必要があることを示しています。もっと良いものを期待できたでしょう。少なくとも、ザイリンクスのエラー コード ([Synth 8-2396] など) で情報を見つける方が、一部の競合他社よりも簡単です。

とにかく、MVCe で同じものを取得し、コンテンツの分析順序が間違っているということは、骨の折れる作業で修正できることを示しています。

また、 AR# 62291のリンクには、ログインして新しい Webcase の質問を開くことができるWebCase サポート ページopen Webcaseに移動するというラベルの付いたアクション アイテムがあることにも注意してください。

設計で分析順序の問題を見つけて修正すれば、ビジネスに戻ることができると思います。

この話の教訓は、Web 上のザイリンクス サポートが、比較的新しい Vivado の問題に対する最初の連絡先であるべきだということです。

タグを使用して回答付きの質問を作成するには、独自の質問に回答することもできます。現在、タグ付きの質問は 6 つしかありません。より多くの質問と回答を引き付けるのに役立つ可能性があります。(Vivado でタグ付けされた 6 つの質問のいずれも回答を受け入れていません)。

于 2014-12-18T18:27:00.613 に答える