VHDLで「ドントケア」信号を指定するにはどうすればよいですか。
ロジックデザインコースでは、たとえば、カルノーマップまたはQuine–McCluskeyアルゴリズムを使用することにより、ロジック関数を最小化することが可能であることを学びました。また、それを学んだ「Do n't Care」値が最小化の可能性を高める。 たとえば、レジスタファイルを取得します。するときの信号は本当に重要ではありません信号です。したがって、「Do n't Care」値を割り当てて、次のようなロジックでより最適化できるようにする必要があります。write_addresswrite_datawrite_enable'0'これらの信号を駆動(レジスタファイル自体ではない)でます。 合成ツールで可能な最適化の余地を増やすために、VHDLでこのような「Do n't Care」値を指定する正しい方法は何ですか? これまでのところ、次のような適切なものを見つけました。しかし、私はそれぞれのアプローチの長所と短所が何であるか本当にわかりません: 単に信号を割り当てない。これはうまくいくようです。ただしrecord、レコード定数を完全に指定する必要があるため(少なくともModelsimでそう指示されているため)、何らかのタイプの「何もしない定数」を定義する場合は機能しないことがわかりました。 std_logic_1164パッケージには、値定義'-' -- Don't careのためにstd_ulogic。これは、明示的な「ドントケア」に対する意味的に正しい選択のように見えますが、どこでも使用されたことはありません(無関係なVHDL-2008 case?コンストラクトを除く)。 Modelsimはこの値'X'を使用して未定義の信号を表示します。しかし、合成ツールが明示的なものを理解しているかどうかはわかりません'X'割り当てを「ドントケア」としてません。 わかりやすくするために過度に簡略化したコードスニペットを示します。ここでは、ドントケア信号を初期化しました。 '-'ます。 ご覧のとおり、信号にcontrol.reg_write_addressは3つの異なる値を設定できます:"----"、instruction(11 downto 8);およびinstruction(3 downto 0);。これ'-'は、「ドントケア」と解釈される場合、2入力マルチプレクサに合成されると予想されます。の(others => '0')代わりにを使用して信号を初期化した'-'場合、ツールは代わりに3入力マルチプレクサーを生成する必要があります。 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package mytypes is type control_signals_t is record write_enable : std_logic; write_address : std_ulogic_vector(3 downto 0); read_address : std_ulogic_vector(3 …