2010-10-15 4 views
3

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

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, чтобы я мог объединить эти сигналы ?

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

+1

Принадлежит на ChipHacker, но никакой возможности не предусмотрено SO. Плохо! – leppie

ответ

2

Определить подпрограмму, которые преобразуют состояние в STD_LOGIC_VECTOR.

Этой подпрограмма содержит тематическое заявление, что-то вроде:

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

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

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; 

Приветствие

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; 

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

data_plus_state <= (data, state); 
-- or: 
data_plus_state.data <= data; 
data_plus_state.state <= state; 
Смежные вопросы