2017-04-13 4 views
0

私はavalonメモリマップされたインターフェイスを介してcount_x 32ビットのデータをHPSに取得する必要があります。 1番目と2番目のケースは正常に機能しました。そして私はHPSにデータを持っています。しかし、3番目のケースではWHEN '2' => avs_s0_readdata < = count_x(31 downto 0);として「2」が宣言されていませんそれはどういう意味ですか? VhdlはAltera quartus 16.1で完了し、HPSシステムはQsysで実行されました。HPS FPGA Avalonメモリマップされたインターフェイスで3番目のケースに書き込むときのエラー

architecture behavior of encorder is 
signal count : STD_LOGIC_VECTOR(31 DOWNTO 0); 
signal countx : STD_LOGIC_VECTOR(31 DOWNTO 0); 
signal count_y : STD_LOGIC_VECTOR(31 DOWNTO 0):= x"00000000"; 


begin 

    PROCESS(avs_s0_read) 
    BEGIN 
    IF avs_s0_read = '1' THEN 
    CASE(avs_s0_address) IS 


WHEN '2' => avs_s0_readdata <= count_x(31 downto 0); 

WHEN others => avs_s0_readdata <= x"00000000"; 
END CASE; 
ELSE 
avs_s0_readdata <= x"00000000"; 

END IF; 
END PROCESS;` 
+1

ようこそ。時間を割いてお手伝いする人を助けることができます。あなたのコードは不完全です。 'avs_s0_address'はどんな型であるのか分かりません(' '2''は' character''型です.'vs_s0_address'はその型ではありません)。 [MCVE](http://stackoverflow.com/help/mcve)を投稿してください。 –

+1

avs_s0_addressの宣言を見ることなく、 '2'はその型の列挙値ではないように見えます。 [最小限の、完全で検証可能な例](https://stackoverflow.com/help/mcve)を入力してください。あなたの問題は重複することはできません(または、誰かが構文の問題を示さないスニペットの周りの例を考案する可能性があることを強く指摘してください)。型がstd_logic(基本型std_ulogic)の場合、列挙値は文字リテラル 'U'、 'X'、 '0'、 '1'、 'Z'、 'W'、 'L'、 'H' 、および ' - ' if条件がエラーを生成しなかったことに注意してください。 – user1155120

+0

もう1つのツールで、よりわかりやすいエラーメッセージが表示されることがあります。 - 'encorder.vhdl:34:6:error:文字リテラル '2'とタイプstd_ulogic'を一致させることができません。 std_logicは、std_ulogic - ( 'U'、 'X'、 '0'、 '1'、 'Z'、 'W'、 'L'、 'H'、 ' - ')の解決されたサブタイプです。 '2'は、std_logicの値を表さないcase文の有効な選択肢ではありません。 – user1155120

答えて

1

avs_s0_addressはSTD_LOGICタイプです。このタイプには、可能な値として '2'が含まれていないため、宣言されていないと言われています。 STD_LOGICは、通常、1ビットの2つの論理値のみを記述するために使用され、 '0'と '1'はすべてのオプションを見つけることができます。here

Avalonでは動作しません(私はザイリンクスFPGAを使用します) 、私はそれがどのように動作するかは正確にはわかりませんが、あなたのアドレスバスは1ビット長いようです。この入力のタイプはおそらくstd_logic_vectorでなければならないので、アドレスバスのビットが2ビット以上になるようにしてください。その後、あなたは整数型の信号を追加することができます

signal avs_s0_address_int : integer; 

を、建築本体に、あなたはこのような行を追加することができますで比較することが容易である整数型でアドレス値を持つために

avs_s0_address_int <= to_integer(unsigned(avs_s0_address)); 

case文。

+0

この回答がうまくいく場合は、そのまま受け入れてください。 – Staszek

関連する問題