見出し画像

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"に上げで行きます。

この記事が気に入ったらサポートをしてみませんか?