2010-10-15 5 views
3

J'ai défini mon état comme suit:Etat std_logic

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

Maintenant, je voudrais utiliser ces informations d'état pour former un autre signal

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

.... 
data_plus_state <= data & state; 

Est-ce que quelqu'un sait comment je peux l'état de concert en un std_logic_vector pour que je puisse concaténer ces deux signaux?

Un grand merci, Rob

+1

Appartient sur ChipHacker, mais aucune option fournie par SO. Mauvais SO! – leppie

Répondre

2

Définir un sous-programme qui convertissent à l'état std_logic_vector.

Ce contient une déclaration subprogram de cas, quelque chose comme:

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

La réponse et le cas serait subprogram très bien fonctionner. Si vous vouliez quelque chose en ligne, vous pouvez l'utiliser.

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; 

Vive

1

Il semble que vous voulez mettre deux (ou plus) signaux en un signal (ou port).

La manière d'aller ici n'est pas concaténant les signaux, mais plutôt de les mettre dans un enregistrement. L'avantage est que la sémantique (signifiant) de chaque partie du signal est clairement exprimée. De cette façon, vous n'avez pas besoin d'encoder (et de décoder plus tard) chaque élément de données.

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; 

Ensuite, vous pouvez mettre les deux signaux en un seul signal d'enregistrement:

data_plus_state <= (data, state); 
-- or: 
data_plus_state.data <= data; 
data_plus_state.state <= state;