私はVHDLを初めて使用し、宿題に取り組んでいます。
ジェネリックを使用した非常にシンプルなクロック分周器があります。(カウンター/ディバイダーです。)
-- the actual divider will be 2.1e6 or so (25Mhz down to 15hz)
run_divider : clk_divider
--pragma synthesis off
generic map(clkmax => 4) -- simulation
--pragma synthesis on
generic map(clkmax => 50000) -- synthesis
port map( clk_in => mclk,
reset => rst,
clk_out => divider_out );
シミュレーション/合成の分離にVHDLで#ifdefに相当するものを部分的に使用しましたか?上記のプラグマを使用します。ただし、これは合成でのみ機能しますが、シミュレーションでは構文エラーです。
外部ツール(別の回答が提案されているM4、Cプリプロセッサ)を使用する以外に、合成とシミュレーションで別々のコードを使用するためのより良い方法はありますか?合成からシミュレーションに切り替えるときに、これらの定数について心配するのをやめたいと思います。
VHDLを使用して24MHzおよび12MHzクロックを8MHzクロックに変換する方法への回答?カウンター/ディバイダーは最適なソリューションではありませんが、宿題には十分簡単です:-)
私の完全な分周器コードはここにあります: https ://github.com/linuxlizard/vhdl/blob/master/divider.vhdl
ありがとうございました!