2010-10-15 12 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,但如此設置的選項。糟糕! – leppie 2010-10-15 13:30:20

回答

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; 
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;