0
entity address_decoder is
PORT(address : in STD_LOGIC_VECTOR ( 0 to 3 );
  decoded_address : out integer range 0 to 15);
end address_decoder;

architecture dataflow of address_decoder is
begin
PROCESS(address)
begin
    if address = "0000" then decoded_address <= '0';
    elsif address = "0001" then decoded_address <= '1';
    elsif address = "0010" then decoded_address <= '2';
    elsif address = "0011" then decoded_address <= '3';
    elsif address = "0100" then decoded_address <= '4';

これは来ているエラーです

ERROR:HDLParsers:800 デコードされたアドレスのタイプは、'0' のタイプと互換性がありません。ERROR:HDLParsers:800 decoded_address のタイプは、'1' のタイプと互換性がありません。ERROR:HDLParsers:800 デコードされたアドレスのタイプは、'2' のタイプと互換性がありません。ERROR:HDLParsers:800 デコードされたアドレスのタイプは、'3' のタイプと互換性がありません。ERROR:HDLParsers:800 デコードされたアドレスのタイプは、'4' のタイプと互換性がありません。

アドレスとdecoded_addressが2つの異なるデータ型であるためですか? このエラーを取り除く方法について何か考えはありますか?

4

2 に答える 2

0

@David Koontzの回答を除いて、代わりにcaseステートメントを使用できます。

case address is when "0000" => decoded_address <= 0; when "0001" => decoded_address <= 1; when "0010" => decoded_address <= 2; when "0011" => decoded_address <= 3; when others => decoded_address <= 4; end case;

すべての条件をカバーすることを決して忘れませんでした。


ところで、それが講義の課題かどうかはわかりませんが、使用できます

decoded_address <= to_integer(unsigned(address));

もちろん、追加する必要があります use ieee.numeric_std.all

于 2014-12-31T12:08:03.907 に答える