2017-05-03 10 views
0

アルテラのMax VとQuartusを使用していくつかの例を実行しているので、 "With Select When"ステートメントを使用するときに問題が発生します。私は以下のように簡単な2-4デコーダありますVHDL: "With Select When"ステートメントの使用時のエラーステートメント

library ieee; 
use ieee.std_logic_1164.all; 

entity lesson9 is 
    port(
     x: in std_logic_vector(1 downto 0); 
     en: in std_logic; 
     y: out std_logic_vector(3 downto 0) 
    ); 
end lesson9; 

architecture rtl of lesson9 is 

signal outputBuff: std_logic_vector(3 downto 0); 

begin 
    decoder2to4: process(x) 
    begin 
     with x select 
      outputBuff <= "0001" when "00", 
          "0010" when "01", 
          "0100" when "10", 
          "1000" when "11"; 
    end process decoder2to4; 

    y <= outputBuff; 
end rtl; 

をそして私は、エラーメッセージました:「と」

近くのテキストを。 「終了」を期待し、または「(」、または識別子です(「と」)は予約語である、

シーケンシャル文をPR私は自分のコードをチェックしようとしましたが、問題を見つけることができませんでした?

+1

使用しているQuartusのバージョンは? VHDL-2008構造を選択して使用すると、古いツールバージョンではサポートされません。また、最新のQuartusバージョンを使用している場合は、そのファイルにVHDL-2008を有効にしてください。 – FritzDC

+2

'with ... select'はVHDL-2008構造体ではありませんが、シーケンシャルコード(例えばプロセス)内で' with ... select 'を可能にすることは新しいです。あなたは 'with ... select'を並行させるためのプロセスを削除するか、あるいはあなたのツールがこれらをサポートしている場合は、2008年の機能でコンパイルを有効にする必要があります。 – Paebbels

答えて

2

with ... selectステートメントは、プロセスの外で使用される同時信号代入文である:。

architecture rtl of lesson9 is 

signal outputBuff: std_logic_vector(3 downto 0); 

begin 
    with x select 
     outputBuff <= "0001" when "00", 
         "0010" when "01", 
         "0100" when "10", 
         "1000" when "11"; 

    y <= outputBuff when en='1' else (others=>'0'); 
end rtl; 

Iはまた、出力代入文でen信号を追加した

注:私はそのコードスニペットをシミュレートしませんでした。

+4

VHDL 2008には順次選択された信号割り当てステートメントもあります。IEEE Std 1076-2008 10.5信号割り当てステートメントと10.5.4選択信号割り当てを参照してください。残念ながら、合成のために[Quartus®Prime](http://quartushelp.altera.com/current/index.htm#hdl/vhdl/vhdl_list_2008_vhdl_support.htm)でサポートされている機能はありません。 – user1155120

+2

なぜ出力文に 'en'シグナルを追加しましたか?その必要性を示唆するための質問には何もありません。 –

+1

まあ、ポートリストに 'en'入力ポートがあり、それが意図しているものを推測するのはかなり簡単です。アーキテクチャでは使用されていない入力ポートを宣言するのは確かにバグではありませんが、合成ツールやlintingツールでは不平を言うかもしれません。したがって、ポートを使用するか、ポートリストから削除することをお勧めします。 – Juergen

関連する問題