Состояние до std_logic - PullRequest
       25

Состояние до std_logic

3 голосов
/ 15 октября 2010

Я определил свое состояние следующим образом:

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;

Кто-нибудь знает, как я могу согласовать состояниев std_logic_vector, чтобы я мог объединить эти два сигнала?

Большое спасибо, Роб

Ответы [ 3 ]

2 голосов
/ 15 октября 2010

Определить подпрограмму, которая преобразует состояние в 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;
1 голос
/ 17 октября 2010

Кажется, вы хотите поместить два (или более) сигнала в один сигнал (или порт).

Для этого нужно не объединить сигналы, а поместить ихв записи.Преимущество заключается в том, что семантика ( означает ) каждой части сигнала четко выражена.Таким образом, вам не нужно кодировать (и позже декодировать) каждый элемент данных.

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;

Затем вы можете поместить два сигнала в один сигнал записи:

data_plus_state <= (data, state);
-- or:
data_plus_state.data <= data;
data_plus_state.state <= state;
1 голос
/ 15 октября 2010

Подпрограмма и ответ по делу будут работать очень хорошо. Если вы хотите что-то в очереди, вы можете использовать это.

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;

Приветствия

...