如果这无法做到,请给我一个简单的“否”,或许还有一个简短的答案,说明原因,但我想仔细检查一下,这不能做到。
我有这个过程:
process(clk_p)
begin
if rising_edge(clk_p) then
if rst_i = '1' then
stored_events <= (others => '0');
else
if mode_triggered = '1' and ptr = 0 and read_state = ST_ENABLE then
stored_events <= stored_events;
elsif mode_triggered = '1' then
stored_events <= stored_events + 1;
elsif ptr = 0 and read_state = ST_ENABLE then
stored_events <= stored_events - 1;
end if;
end if;
end if;
end process;
是的,这不是很好,我们为什么要通过将其变成适当的 case 多路复用器来帮助合成。
你可以这样做:
sel(0) <= '1' when mode_triggered= = '1' else '0';
sel(1) <= '1' when ptr = 1 else '0';
sel(2) <= '1' when read_state = ST_ENABLE else '0';
case sel is
when "111" =>
stored_events <= stored_events; -- and so on...
虽然由于我要更改几个进程,但我 cba 会制作更多的信号名称。所以...
我想知道是否有某种我可以喜欢的方式(尽管不完全确定决赛的when others
结果):
case mode_triggered, ptr, read_state is
when '1', 0, ST_ENABLE =>
stored_events <= stored_events;