我已将我的状态定义如下:
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,以便我可以连接这些 两个信号?
非常感谢, 罗布
答案 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;