質問
私はテストしようとしています VHDL コンポーネントですが、私はこの1つのインアウトポートを取得して行動を与えることができないようです。 「1」から「」までのすべてにポートを設定しようとしましたが、シミュレーションでは「u」として表示されます。何が間違っているかもしれませんか?
解決
Inoutポートの場合(たとえば、RAM):
....
port(
data :inout std_logic_vector (DATA_WIDTH-1 downto 0);
....
-- Memory Write Block
-- Write Operation : When we = 1, cs = 1
MEM_WRITE: process (address, cs, we, data, address_1, cs_1, we_1, data_1) begin
if (cs = '1' and we = '1') then
mem(conv_integer(address)) <= data;
end if;
end process;
-- Tri-State Buffer control
data <= data_out when (cs = '1' and oe = '1' and we = '0') else (others=>'Z');
-- Memory Read Block
MEM_READ: process (address, cs, we, oe, mem) begin
if (cs = '1' and we = '0' and oe = '1') then
data_out <= mem(conv_integer(address));
else
data_out <= (others=>'0');
end if;
end process;
条件でinoutのデータの読み取りと書き込みを割り当てます。データが読み取られると、別のモジュールによって駆動されます。それが書くとき、それは内部によって駆動されます。
- 別のモジュール(信号のように)によって駆動されると、たとえばすべての「z」とベクトル「0101010」の間でデータが解決されます。データは「0101010」として駆動されます。
- 他のケースでは、他のモジュールはすべての「z」によってデータを駆動する必要があり、その後、内部信号はその値をデータに配置できます。
他のヒント
「z」には明示的なドライバーが必要です。
「1」から「」までのすべてにポートを設定しようとしましたが、シミュレーションでは「u」として表示されます。
Inoutポートの割り当て/読み取りに関する適切な回答があれば、上記の引用されたテキストは、2つの別々の場所で割り当てられているポートに関連する可能性があるため、「U」として解決されます。
INOUTポートを使用するとき、VHDLステートメントがIOBUFを推測するには明らかに複雑すぎた場合、IOBUFの代わりにOBUFをインスタンス化する合成ツールに噛まれました。以下は、私を噛む状況の単純化された例(すべての信号がstd_logicであると仮定)です。
data_a <= '1' when assert_a = '1' else '0';
data_b <= 'Z' when float_b = '1' else '0';
data_inout <= data_a when choose_a = '1' else data_b;
私の障害の場合、合成はdata_inoutのOBUFを生成しました。 IOBUFがchoice_a = '0'とfloat_b = '1'のケースを処理することを期待していたでしょう。なぜなら、それはdata_inoutに「z」を割り当てるべきだったので、それは私が得たものではありません。
所属していません StackOverflow