2016-10-07 43 views
2

私は16bit inoutバスを持つモジュールを持っています。私のトップレベルエンティティでは、私はそれらのうちの4つだけを接続したい(双方向でも)。 トライステートノードが直接トップレベルに駆動しない:それらを接続すると、直接私は内部信号VHDL双方向バスのミスマッチ

signal temp : std_logic_vector (15 downto 0); 
port map(IO16bit => temp); 
IO4bit <= temp(3 downto 0); 

介してMに接続されているが、今、私はエラーを取得

port map(IO16bit => IO4bit) 

勿論エラーになりますピン とファンアウトをORゲートに変換

ここでは双方向性が失われました。 どうすればこの問題を解決できますか?

答えて

1

あなたはport mapに範囲を使用し、その後に、残りを接続することができdummyのように:シミュレーション用にコンパイルしていますが、好みの合成ツールも受け入れることができるかどうかを確認する必要があります

signal dummy : std_logic_vector(15 downto 4) := (others => 'Z'); 
... 
port map(
    IO16bit(3 downto 0) => IO4bit, 
    IO16bit(15 downto 4) => dummy, 
... 

それを正しく処理してください。合成可能なデザインで内部の inoutポートを持つことは、しばしば問題になります。

+0

でも、ダミー信号なしでは 'IO16bit(15 downto 4)=>オープン 'となります。ダミー信号を使用する場合は、バスクラッシュを防ぐために '(others => 'Z')'でドライブしてください。 –

+0

@BrianDrummond: 'dummy'の代わりに' open'を使用すると、ModelSimはエラーを返します。 "formal" az_io "サブ要素が個別に関連付けられているときにOPENに関連付けられます。 "ダミーのための 'Z'の良い点。 –