これができない場合は、単に「いいえ」とその理由についての簡単な回答を残してください。ただし、これができないことを再確認したいと思います。
私はこのプロセスを持っています:
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;
ええ、それを適切なケースのマルチプレクサに変えることで合成を支援する理由は、私たちにとって素晴らしいことではありません。
次のようなことができます。
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...
ただし、いくつかのプロセスを変更する予定なので、さらに多くのシグナル名を作成する必要があります。そう...
私が好きな方法があるかどうか疑問に思っていました(ただし、最終的にどのように機能するかは完全にはわかりませんwhen others
):
case mode_triggered, ptr, read_state is
when '1', 0, ST_ENABLE =>
stored_events <= stored_events;