de10-nano, SoCモジュールで遊ぶ [FPGA編-04]
"SoCモジュール"での、HDMIの表示を行ってみます。
Terasic SoC System on Module Evaluation KIT
ベースとなるプロジェクトは、"TSOM_v.1.0.4_revB_SystemCD"を使いました。
この中の、"Demonstration\SoC_FPGA\TSMON_GHRD"です。
このプロジェクト一式をベースに使えば、面倒な".qsf"を作る必要がありません。
”.qsf"がそのまま使えるので変更作業は簡単で、主な変更は、単にsoc_system関連を、(de10-nano用のsoc_system関連と)総入れ替えがメインの作業となります。
soc_systemの入れ替え以外の作業では、主な注意点はTopファイルの、
"TSOM_top.v"の修正です。この時、2つのモジュールを追加する必要があります。
・I2C_HDMI_Config
・vga_pll
これらは、de10-nanoのTopファイルと見比べれば、簡単に追加できると思います。必要なファイルも"de10-nano"側のプロジェクトから持ってきます。ちなみに私の場合は、下記のように修正しています(抜粋)
wire clk_65, clk_130; // add for HDMI.
// connection of internal logics
assign LED[1: 0] = fpga_led_internal ^ {1'b0, led_level};
assign stm_hw_events = {{21{1'b0}}, SW, fpga_led_internal, fpga_debounced_buttons};
assign fpga_clk_50 = FPGA_CLK1_50;
//=======================================================
// Structural coding
//=======================================================
I2C_HDMI_Config u_I2C_HDMI_Config (
.iCLK(FPGA_CLK1_50),
.iRST_N( 1'b1),
.I2C_SCLK(HDMI_I2C_SCL),
.I2C_SDAT(HDMI_I2C_SDA),
.HDMI_TX_INT(HDMI_TX_INT)
);
vga_pll vga_pll_inst(
.refclk(fpga_clk_50), // refclk.clk
.rst(1'b0), // reset.reset
.outclk_0(clk_65), // outclk0.clk
.outclk_1(clk_130), // outclk1.clk
.locked() // locked.export
);
assign HDMI_TX_CLK = clk_65;
//=======================================================
// Structural coding
//=======================================================
soc_system u0 (
.alt_vip_itc_0_clocked_video_vid_clk ( HDMI_TX_CLK ), // input wire , alt_vip_itc_0_clocked_video.vid_clk
.alt_vip_itc_0_clocked_video_vid_data ( HDMI_TX_D ), // output wire [31:0] , vid_data
.alt_vip_itc_0_clocked_video_underflow ( ), // output wire , underflow
.alt_vip_itc_0_clocked_video_vid_datavalid ( HDMI_TX_DE ), // output wire , vid_datavalid
.alt_vip_itc_0_clocked_video_vid_v_sync ( HDMI_TX_VS ), // output wire , vid_v_sync
.alt_vip_itc_0_clocked_video_vid_h_sync ( HDMI_TX_HS ), // output wire , vid_h_sync
.alt_vip_itc_0_clocked_video_vid_f ( ), // output wire , vid_f
.alt_vip_itc_0_clocked_video_vid_h ( ), // output wire , vid_h
.alt_vip_itc_0_clocked_video_vid_v ( ), // output wire , vid_v
.clk_clk (fpga_clk_50), // clk.clk
.clk_130_clk( clk_130 ), // input wire , clk_130.clk
追記したのは、hdmiの出力設定、pllの追加、i2cの追加なのです。
これらの修正後、必要なファイルを"de10-nano"側からソースコードをコピーして、全体をコンパイルすれば、"output_files"の下に、"TSOM_top.sof"
が作られていると思います。この.sofファイルを、".rbf"ファイルに変換します。
%QUARTUS_ROOTDIR%\\bin64\\quartus_cpf -c -o bitstream_compression=on TSOM_top.sof soc_system.rbf
そうすると、"soc_system.rbf"が作られます。
さて起動確認は、前回に使った"de10-nano"の起動ディスクで可能です。
この、"de10-nano"の起動ディスクの、"soc_system.rbf"を今回作成した
".rbf"ファイルで上書きすると、SoCモジュール用の起動ディスクになります。起動すると、LEDの点滅、および、hdmiに表示されれば完成です。
次は、de10-nanoのソフト関係の作業に入ります。
まずは、u-bootを"v2021.07"に上げで行きます。
この記事が気に入ったらサポートをしてみませんか?