2016-09-08 16 views
1

したがって、コンポーネントのラッパーを作成しています。以上になる正式な会合:成分は配列のサブ要素をVHDLの特定の順序でマッピングしますか?

-- Definition in the original component 
array_1 : out std_logic_vector (1 downto 0); 
array_2 : out std_logic_vector (1 downto 0); 

Iは、上記のようなエラーを生成

-- All foo1, foo2, bar1, bar2 are defined as output std_logic in wrapper port list 
array_1 (0) => foo1, 
array_2 (0) => bar1, 
array_1 (1) => foo2, 
array_2 (1) => bar2, 

としてポートマップの配列のサブエレメントを割り当てることを試みているような配列の形でいくつかの入力を有しています一度

しかし、奇妙なことに、次のコンパイルは正常です。私は何かが欠け

array_1 (0) => foo1, 
array_1 (1) => foo2, 
array_2 (0) => bar1, 
array_2 (1) => bar2, 

アムは、私は、配列のサブ要素が一緒に関連付けられなければならないことどこにも見つけることができませんが、私は、彼らがされていない例を見つけることができません。私はちょうど後者を行うことができることを知っているが、私は興味があります。どんな助けもありがとう。

ところで、これは私が作った短い例です。元のコードは50以上の要素を持っていますが、私はこの問題を狭くしました。助けや提案をありがとう。

+3

この小さな例をMCVEに拡張すると誰もコンパイルできません... http://stackoverflow.com/help/mcve –

+0

IEEE Std 1076-1993 4.3.2.2関連はパラグラフ14 " ...明示的に宣言されたインタフェースオブジェクトまたはメンバ...後者の場合、名前付きの関連付けを使用して正式なものと実際のものを関連付ける必要があり、そのような形式の下位要素は個別に関連付けられる*と言います。さらに、明示的に宣言されたインタフェースオブジェクトのすべてのスカラサブ要素は、同じ関連リストの実際の(またはその下位要素と)正確に1度関連付けられなければならず、**そのような関連付けはすべて、その関連リスト内の連続したシーケンス**でなければなりません。 – user1155120

+0

@ user1155120:VHDL-2008の間違ったソースを混乱させてコンパイルしました。 ghdlは '--std = 08'フラグにかかわらず、このコードを拒否し、ポート" array_1 "に対する非連続的な個別の関連付けを報告します。 「それから、LRMで迷ってしまって、4.3.2.2が見つかりませんでした。それを見つけてくれてありがとう! (以前のコメントを削除する) –

答えて

3

Minimal, Complete, and Verifiable example

たちを与える
library ieee; 
use ieee.std_logic_1164.all; 

entity assoc_elements is 
    port (
     array_1 : out std_logic_vector (1 downto 0); 
     array_2 : out std_logic_vector (1 downto 0) -- ; 
    ); 
end entity; 

architecture nothing of assoc_elements is 
begin 
end architecture; 

library ieee; 
use ieee.std_logic_1164.all; 

entity element_assoc_test is 
end entity; 

architecture test of element_assoc_test is 
    signal foo1, foo2, bar1, bar2: std_logic; 
begin 
ASSOC: 
    entity work.assoc_elements 
     port map (
      -- All foo1, foo2, bar1, bar2 are defined as output std_logic in wrapper port list 
      array_1 (0) => foo1, 
      array_2 (0) => bar1, 
      array_1 (1) => foo2, 
      array_2 (1) => bar2 -- , 
     ); 
end architecture; 

GHDL -a --std = 08 assoc_elements.vhdl
assoc_elements.vhdl:30:30のための非連続的な個別の団体ポート「array_1」
ghdl:コンパイルエラー

不遜さておき、より良いエラーメッセージを与えるツール、LRMの参照に -

IEEE STD 1076から2008の6.5.7協会リスト、6.5.7.1一般パラ16:

正式なインタフェースオブジェクトをしなければなりませんそのようなインタフェースオブジェクトの明示的に宣言されたインタフェースオブジェクトまたはメンバ(5.1参照)。前者の場合、そのような形式は全体として関連していると言われています。後者の場合、名目上の関連付けは、正式なものと実際のものとを関連付けるために使用されるものとする。そのような形式の下位要素は、個別にに関連付けられたと言われています。さらに、明示的に宣言されたインタフェースオブジェクトのすべてのスカラサブ要素は、同じ関連リスト内の実際の(またはその下位要素と)正確に1度関連付けられなければならず、そのような関連付けはすべて、その関連リスト内の連続した順序で表される。インタフェースオブジェクトのスライスまたはサブ要素(またはそのスライス)を関連付ける各関連要素は、ローカルに静的な名前を持つ形式を識別する。要素の関連性は、あなたが失敗した要素の関連付けが要素によってインターリーブされながら分析しないことを示しているスニペットの場合である連続している必要がありますを教えてくれる

関連する問題