VHDL:"其他类似的"命令std_logic信号

时间:2017-01-07 16:22:33

标签: vhdl hardware

我想编写一个代码,其中我的W_EN(std_logic)信号在需要时设置为1(如果满足某些条件),否则(如果没有不同指定)为零。如果W_EN是std_logic_vector,我可以使用"其他"以这种方式做声明(在示例代码" W_EN"被称为" one_if_one"):

signal cnt : unsigned (1 downto 0); --incremented at every clk_cycle
signal one_if_one : std_logic;

process (cnt)
begin
one_if_one <= (others => '0');
if (cnt = "01") then
 one_if_one <= '1';
end if;
end process;

但是因为W_EN只是一个位,&#34;其他&#34;不能与它一起使用。 所以我想问你是否有一些实现命令的方法&#34;如果在过程中没有不同的指定,则设置为零&#34;。

PS:我知道我可以简单地写if的else分支,但我不想这样做,因为我的真实代码会有问题。

PPS:我目前发现的唯一解决方案是更换线路:

one_if_one <= (others => '0');

 one_if_one <= 'L';

但是这会有不同的含义,因为&#34;其他人&#34;是一个强大的。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你不需要在这里做任何特别的事情。如果在特定进程中多次分配信号,则 last 分配是实际分配的值。

process (cnt)
begin
  one_if_one <= '0';
  if (cnt = "01") then
    one_if_one <= '1';
  end if;
end process;

相当于

process (cnt)
begin
  if (cnt = "01") then
    one_if_one <= '1';
  else
    one_if_one <= '0';
  end if;
end process;

您尝试使用的others语法专门用于分配数组类型,因此它与std_logic类型的对象无关。