FPGAセレクタ回路の記述法による違い
process文外にif elseでセレクタ回路を記述した場合と、process文内でcase when文で記述した場合に組まれる回路をRTL Viewerで見てみた記録です。
・同時処理文(process文外)
LED0 <= DIPSW0 when(sel = "00") else
DIPSW1 when(sel = "01") else
DIPSW2 when(sel = "10") else
DIPSW3 when(sel = "11") else
'0';
・process文
process(sel) begin
case sel is
when "00" => LED0 <= DIPSW0;
when "01" => LED0 <= DIPSW1;
when "10" => LED0 <= DIPSW2;
when "11" => LED0 <= DIPSW3;
when others => LED0 <= '0';
end case;
end process;
やっぱり両方とも記述そのままの回路って感じですね。ソースの可読性もRTLの見やすさとしてもセレクタ信号が2bit以上であればprocess文で書いたほうが良さそうです。ちなみにロジック規模は両方とも2LEで同じでした。
脱初心者のために、どういう記述をしたらどういう回路が合成されるかまで意識して設計していきたいです。