4

私は自分の状態を次のように定義しました。

type state_type is (s0, s1, s2, s3);
signal state   : state_type;

ここで、この状態情報を使用して別の信号を形成したいと思います

signal data : std_logic_vector(3 downto 0);
signal data_plus_state : std_logic_vector(5 downto 0);

....
data_plus_state <= data & state;

これらの 2 つの信号を連結できるように、状態を std_logic_vector に変換する方法を知っている人はいますか?

どうもありがとう、ロブ

4

3 に答える 3

2

状態をstd_logic_vectorに変換するサブプログラムを定義します。

そのサブプログラムには、次のようなcaseステートメントが含まれています。

case state is
  when s0 => return <std_logic_vector value for s0>;
  when s1 => return <std_logic_vector value for s1>;
  when s2 => return <std_logic_vector value for s2>;
  when s3 => return <std_logic_vector value for s3>;
end case;
于 2010-10-15T14:04:54.513 に答える
2

サブプログラムとケースの回答は非常にうまく機能します。ラインで何かが必要な場合は、これを使用できます。

signal state_slv : std_logic_vector(1 downto 0);

state_slv <= "00" when state = s0 else
             "01" when state = s1 else
             "10" when state = s2 else
             "11";

data_plus_state <= data & state_slv;

乾杯

于 2010-10-15T14:55:13.723 に答える
1

2つ(またはそれ以上)の信号を1つの信号(またはポート)に入れたいようです。

ここに行く方法は、信号を連結することではなく、むしろそれらを記録に入れることです。利点は、信号の各部分のセマンティクス(意味)が明確に表現されることです。このようにして、すべてのデータ要素をエンコード(および後でデコード)する必要はありません。

type state_type is (s0, s1, s2, s3);
signal state   : state_type;
signal data : std_logic_vector(3 downto 0);
type data_plus_state_type is record
    data : std_logic_vector(3 downto 0);
    state: state_type;
end record data_plus_state_type;
signal data_plus_state : data_plus_state_type;

次に、2つの信号を1つのレコード信号に入れることができます。

data_plus_state <= (data, state);
-- or:
data_plus_state.data <= data;
data_plus_state.state <= state;
于 2010-10-17T18:54:00.207 に答える