Niosにタイマー(Internal Timer Intel FPGA IP)を実装してみる ハードウェア編

FPGA

今回はNiosにタイマーを実装してみます。

使用するFPGAはDE0-Nanoボードです。

ソフトウェア編はこちらをご参照ください。

スポンサーリンク

プロジェクトのコピー

Niosにタイマーを実装してみますが、イチからQuartusのプロジェクトを作成するのは面倒なので、既存のプロジェクトをコピーしてそこにタイマーを追加してみます。

コピー元である既存のプロジェクトは過去記事をご参照ください。

まずはコピー元である既存のプロジェクトをQuartusで開き、Project -> Copy Projectを選択します。

コピー先のフォルダと、新しいプロジェクト名を指定します。

これで既存のプロジェクトがコピーできたと思います。

Internal Timer Intel FPGA IPの追加

コピーが終わったら、Platform Designerを使ってInternal Timer Intel FPGA IPを追加します。

まずは、Tools -> Platform Designerを選択します。

コピー元のプロジェクトで作成したqsysファイルがあるので、これを選択して開きます。

以下のような画面が表示されます。

これは任意の作業だと思いますが、Save asで新しい名前でqsysファイルを保存しておきます。

ここでは、nios2_timer.qsysで保存しておきました。

保存が終わったら、Processors and Peripherals -> Peripherals -> Internal Timer Intel FPGA IPを選択し、Addボタンをクリックします。

以下の画面が表示されたら、タイマー周期を設定します。

ここでは、タイマー周期を10msに設定してみました。

タイマー周期以外にも設定があるのですが、何の設定かわからなかったので、初期値のままにしておきました。

設定が終わったら、Finishをクリックします。

タイマー周期の設定が終わったら、名前をRenameで変更しておきます。

ここでは、timer_10msとしておきました。

あとは、clk、reset、s1、irqの接続をしておきます。

Internal Timer Intel FPGA IPの追加、設定が終わったら、System -> Assign Base Addressesを選択します。

元の画面に戻ったら、Generate HDLをクリックします。

以下の画面が表示されたら、お好きなHDLを選択して、Generateをクリックします。

そしたら、Finishボタンをクリックして、Platform Designerを閉じます。

上の画面のOutput Directoryで指定したパスに、nios2_timer_inst.vhdというファイルが作成されました。

ファイルの中身は以下です。

component nios2_timer is
port (
  clk_clk  : in  std_logic  := 'X';   -- clk
  led_output_external_connection_export : out std_logic_vector(7 downto 0);  -- export
  sw_input_external_connection_export   : in  std_logic_vector(1 downto 0) := (others => 'X'); -- export
  uart_0_external_connection_rxd  : in  std_logic   := 'X';             -- rxd
  uart_0_external_connection_txd  : out std_logic                        -- txd
);
end component nios2_timer;

u0 : component nios2_timer
port map (
  clk_clk  => CONNECTED_TO_clk_clk,  --  clk.clk
  led_output_external_connection_export => CONNECTED_TO_led_output_external_connection_export, -- led_output_external_connection.export
  sw_input_external_connection_export   => CONNECTED_TO_sw_input_external_connection_export,   --   sw_input_external_connection.export
  uart_0_external_connection_rxd        => CONNECTED_TO_uart_0_external_connection_rxd,        --     uart_0_external_connection.rxd
  uart_0_external_connection_txd        => CONNECTED_TO_uart_0_external_connection_txd         --                               .txd
);

これで、Internal Timer Intel FPGA IPの追加は完了です。

VHDLモジュールの作成

上でnios2_timer_inst.vhdを作成しましたが、これを組み込んだVHDLモジュールを作成します。

ここでは以下のように作成しました。

library ieee;
use ieee.std_logic_1164.all;

entity nios2_timer_10ms is
	port(
	CLK		:	in std_logic;
	RXD		:	in std_logic;
	SW_IN		:	in std_logic_vector(1 downto 0);
	TXD		:	out std_logic;
	LED_OUT	:	out std_logic_vector(7 downto 0)
	);
end nios2_timer_10ms;

architecture rtl of nios2_timer_10ms is
	component nios2_timer is
		port (
			clk_clk : in std_logic	 := 'X';					-- clk
			led_output_external_connection_export	: out	std_logic_vector(7 downto 0);								-- export
			sw_input_external_connection_export  : in std_logic_vector(1 downto 0)	:= (others => 'X');	-- export
			uart_0_external_connection_rxd : in std_logic	 := 'X'; -- rxd
			uart_0_external_connection_txd : out std_logic	   -- txd
		);
	end component nios2_timer;
	

	signal	led_output_signal	:	std_logic_vector(7 downto 0);
	signal	txd_signal			:	std_logic;


begin
	
	u0 : component nios2_timer
	port map (
			clk_clk  => CLK,						-- clk.clk
			led_output_external_connection_export	=> led_output_signal,	-- led_output_external_connection.export
			sw_input_external_connection_export  => SW_IN,	  -- sw_input_external_connection.export
			uart_0_external_connection_rxd  => RXD,  -- uart9600_external_interface.RXD
			uart_0_external_connection_txd  => txd_signal  --                            .TXD
	);
		
		LED_OUT <= led_output_signal;
		TXD <= txd_signal;
		
end rtl;

過去の記事を見ていただいた方はわかるかもしれませんが、VHDLモジュールはコピー元の既存プロジェクトと同じです。

タイマーを追加しても、外部入出力ピンや内部信号などが変わる訳ではないので、VHDLモジュールはそのままで良いみたいです。

一応、コピー元からはファイル名だけは変更しておきました。

あとは、私の好みですが、作成したVHDLを回路図で使用できるようにシンボル化します。

シンボル化は、File -> Create / Update -> Create Symbol Files for Current Fileを選択します。

シンボル化したVHDLモジュールを、最上位階層の回路図に配置しました。

これでハードウェア設計は完了です。

プロジェクトへのファイルの追加と削除

ハードウェア設計が終わったので、次はコンパイルですが、その前にやっておくことがあります。

プロジェクトへのファイルの追加と削除です。

いまプロジェクトに含まれているファイルは、コピーされたファイルです。

Platform DesignerやVHDLモジュールを作成した際、コピー元とは違うファイル名で保存したので、古いファイルと新しいファイルを入れ替えてあげる必要があります。

まずは、Project -> Add/Remove Files in Projectを選択します。

以下の画面が表示されたら、Platform Designerで作成した.qipファイルと、VHDLモジュールの.vhdファイルを、コピー元の古いファイルから新しく作ったファイルに置き換えます。

これが終わったらコンパイルをします。

以上でQuartusで作業するハードウェア設計は完了です。

Terasic DE0-NANO開発ボード 【P0082】

新品価格
¥14,520から
(2020/7/8 23:36時点)

まとめ

今回は既存プロジェクトのコピーから、タイマーのハードウェア設計までやってみました。

ソフトウェア編はこちらをご参照ください。

アドウィン ADWIN AKE-1104S キットで学ぶ!シリーズNo.4 FPGAチャレンジャー入門編:ALTERA版 キット+CDセット AKE1104S

価格:30,747円
(2020/7/8 23:41時点)
感想(0件)

タイトルとURLをコピーしました