说明std_logic

时间:2010-10-15 13:29:12

标签: vhdl fpga

我已将我的状态定义如下:

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;

有没有人知道如何将Concert状态转换为std_logic_vector,以便我可以连接这些 两个信号?

非常感谢, 罗布

3 个答案:

答案 0 :(得分: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 :(得分: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;

干杯

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

然后你可以将两个信号放在一个记录信号中:

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