我想编写一个代码,其中我的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;是一个强大的。
提前感谢您的帮助。
答案 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
类型的对象无关。