Quartus IIでQsysで作成したモジュールを組み込む

再びこちら。

FPGA ボードで学ぶ組込みシステム開発入門 ?Altera編?

FPGA ボードで学ぶ組込みシステム開発入門 ?Altera編?

本書では、SOPC Builderで各種IPを組み込んだモジュールを作成したあと、それを含んだトップモジュールは回路図エディタで作成している。
Verilogを勉強しているところなので、このトップモジュールもVerilogで書いてみることにした。

トップモジュールを作成する

プロジェクトで新しいVerilogファイルを作成する、名前は"nios2pio.v"。

module nios2pio(
	input wire in_clk, 
	input wire [9:0] in_switch, 
	input wire [2:0] in_button, 
	output wire [9:0] out_led, 
	output wire [7:0] seven_segment_0, 
	output wire [7:0] seven_segment_1, 
	output wire [7:0] seven_segment_2, 
	output wire [7:0] seven_segment_3);
endmodule

上記で使用しているポートは、筆者がひな形にしていて、ピンアサインメントを事前に作成してあるものだ。
ピンアサインメントの作成方法と、インポートの方法はこちら

Qsysで作成したqsysファイルとverilogファイルをプロジェクトに追加する

"Project" -> "Add/Remove Files in Project..."を選択すると、下記のダイアログが開く。

"File name:"横の"..."ボタンを押してファイルを指定し、"Add"ボタンで追加する。
qsysファイルはプロジェクトのルートに、verilogファイルは(qsysのファイル名/synthesis)の下にあるはずだ。
追加が終わったら、OKでダイアログを抜ける。

Qsysで作成したモジュールをトップレベルのモジュールに追加する

"nios2pio.v"を以下のように修正する。

module nios2pio(
	input wire in_clk, 
	input wire [9:0] in_switch, 
	input wire [2:0] in_button, 
	output wire [9:0] out_led, 
	output wire [7:0] seven_segment_0, 
	output wire [7:0] seven_segment_1, 
	output wire [7:0] seven_segment_2, 
	output wire [7:0] seven_segment_3);
	// modules
	nios2pio_qsys nios2pio_qsys(
		.clk_clk(in_clk),
		.reset_reset_n(in_button[0]),
		.pio_0_external_connection_export(seven_segment_0),
		.pio_1_external_connection_export(in_switch[3:0])
	);
	//
	assign seven_segment_1 = 8'b1111_1111;
	assign seven_segment_2 = 8'b1111_1111;
	assign seven_segment_3 = 8'b1111_1111;
	assign out_led = 9'b0_0000_0000;
endmodule

ここで出てくる"nios2pio_qsys"がQsysで作成したモジュールになる。
設定により名前は異なる可能性があるので、上記でプロジェクトに追加したverilogファイルを開き、モジュールの宣言を確認する。
ちなみに筆者の環境ではそのVerilog("nios2pio_qsys.v")は以下のようになっている。

module nios2pio_qsys (
		input  wire       clk_clk,                          //                       clk.clk
		input  wire       reset_reset_n,                    //                     reset.reset_n
		output wire [7:0] pio_0_external_connection_export, // pio_0_external_connection.export
		input  wire [3:0] pio_1_external_connection_export  // pio_1_external_connection.export
	);


以上で終了だ。
あとは通常通りコンパイルすれば、Cyclone IIIに焼くことができるsofファイルが作成される。