2017-10-26 4 views
0

入力sel = '1'のたびにstd_logicベクトル '1'と '0'をトグルしたいと思います。 次の方法でこれを試しましたが、両方の行でエラーが発生します。 1と0の間でstd_logicを切り替える方法

selected <= ~selected when sel='1'; 

ERROR: Syntax error near "~"

ERROR: This construct is only supported in VHDL 1076-2008

selected <= not selected when sel='1'; 
がトグルするためのより良い方法はありますか、何ではない '関数のための正しい構文です。ここで

は、全体のアーキテクチャのためのコードです:

architecture Behavioral of selWeerg is 

signal selected : std_logic; 

begin 
process(sel,digl,sysclk) 
begin 
    if rising_edge(sysclk) then 

     selected <= ~selected when sel='1'; 

     if selected = '0' then 
      digO1<=digl(3 downto 0); 
     else 
      digO2<=digl(3 downto 0); 
     end if; 
    end if; 
end process; 
end Behavioral; 
+0

信号を割り当てたのと同じプロセスで信号を読み取ることはできません。選択したトグルコードを別のプロセスに分離して、それをテストするコードにする必要があります。 –

+0

'〜'はVHDLの演算子ではありません。あなたは 'not'が必要です。 –

答えて

1

エラーメッセージは、それが動作しませんあなたを語っている:あなたが書いているコードはありません以前のバージョンでは、VHDL-2008でサポートされています。以前のバージョンでは、プロセス内でwhen - elseのコンストラクトを使用することは不正です。どうして?知るか?おそらくVHDL-2008で合法化されたのでしょうか。

したがって、シミュレータでVHDL-2008のコンパイルを有効にするか、代わりにifステートメントを使用する必要があります。 VHDL-2008を使用することは、多くのツールがそれを理解していないため、軽く取るべき決定ではありません。

+1

なぜですか?それはAdaではないので、私は想像しています - あなたは新しいAdaのような連続したものに並行して新しいものを移植します。 Ada 2012は、新しい類似の三種類の三元を導入しました。 – EML

関連する問題