7

次の方法で inout ポートを使用しているプログラムがあります。

port : inout unsigned(9 downto 0);
...
if port > 10 then
   port <= port + 1
end if;

出力を読み取ることができるように、inoutポートを使用しています(フィードバックを実現するため)。

私と先生の間で誤解があったか、先生が inout ポートの使用に強く反対しています

私は高レベルのプログラミングに慣れているので、そのようなコードを書くことは私にとって奇妙ではありません。FPGAにinoutポートを備えた回路があまりないことは承知していますが、それほど頻繁には使用しておらず、必要な機能を得るためにinoutポートをinとoutに分割するのは私の感覚に反しています。別の方法。

inout ポートの使用に関するセカンドオピニオンをお待ちしております。

4

1 に答える 1

18

双方向ポートを実装している場合は、もちろん inout を使用するのが適切です。

しかし、ポートに出力している値を読み取ることについては、先生は正しいです。それは非常に悪い習慣です。(他の何かがそのポートを駆動している場合、必要な値ではなく解決された値が表示されます)。

それが「バッファ」ポートの目的です。

残念なことに、バッファポートに対して多くの奇妙な偏見があり、それらを使用すると不必要に警告するツールもあり (通常は問題なく実装されています!)、バッファポートを外部モジュールのポートに接続する不必要に奇妙なルールがいくつかあります。

正確な詳細は覚えていませんが、次のレベルではバッファ ポートを出力ポートに直接接続できないと思いますが、VHDL-2002 以降ではこのルールが削除されています。「バッファ」ポートはより簡単に使用できるようになりましたが、まだ使用するのをためらう人もいます。

これらすべての結果として、最も一般的な解決策は、たとえばport_int読み取り可能な内部信号と、それを実際のポートにコピーする単純な割り当てステートメントを使用することです。

そのため、VHDL-2008 では、「出力」ポートに駆動される値の読み取りを禁止する制限が削除され、「出力」ポートと「バッファ」ポートを区別できなくなりました。

私の好み:バッファポートを使用してください。

これを妨げる何らかの理由がある場合 (コード スタイル ガイドや地域の一般的な意見など)、(a) ツールが VHDL-2008 をサポートしている場合は「出力」ポートを使用するか、(b) 内部信号を使用します。

于 2012-12-12T22:42:49.830 に答える