0

VHDL で 2 つのトライステート バッファーとプルアップ抵抗を備えた回路をシミュレートするコードを作成しようとしています。以下は私のコードです:

library ieee;
use ieee.std_logic_1164.all;

entity PullUpResistor is
port (
A, S, B, T : IN std_logic;  -- select one of these four inputs
TriOut : OUT std_logic -- output (no ";" after last port)
);
end entity PullUpResistor;

architecture behavioral of PullUpResistor is
begin
process(A, S, B, T) is
when (S = '1') and (T = '0') => TriOut <= A;
when (S = '0') and (T = '1') => TriOut <= B;
when (S = '0') and (T = '0') => TriOut <= 'H';
when (S = '1') and (T = '1') => TriOut <= 'X';
end process;
end architecture behavioral;

near "when": syntax error行である14行目でコンパイラエラーが発生していwhen (S = '1') and (T = '0') => TriOut <= A;ます。私の人生では、構文エラーが何であるかを理解することはできません。

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

1

2つのこと。のあとは不要isですprocess。さらに重要なことに、whenそのように使用することはできません。やりたいことを同時に行うことができます:

TriOut <=
  A when S = '1' and T = '0' else
  B when S = '0' and T = '1' else
  ...

またはプロセスで:

process (A, S, B, T)
begin
  if S = '1' and T = '0' then
    TriOut <= A;
  elsif ...

(または、2 つの組み合わせである VHDL-2008 を使用します。)

whencase ステートメントにあるかのように使用しているようです。それを念頭に置いて、(プロセスで)次のこともできます。

sel <= S & T;

case sel is
  when "10" =>
    TriOut <= A;
  when "01" =>
    TriOut <= B;
  ...

あなたができないことは、ミックスアンドマッチです。

于 2015-03-10T20:26:39.677 に答える