VHDL:Inoutポートに値を設定するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1510633

  •  19-09-2019
  •  | 
  •  

質問

私はテストしようとしています 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」を割り当てるべきだったので、それは私が得たものではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top