
		TOPPERS/HRMP3カーネル
		ZYBO依存部 ユーザーズマニュアル

		対応バージョン: Release 3.0.0
		最終更新: 2019年3月29日

このドキュメントは，TOPPERS/HRMP3カーネルのZYBOターゲット依存部を使用す
るために必要な事項を説明するものである．

----------------------------------------------------------------------
 TOPPERS/HRMP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     High Reliable Multiprocessing Profile Kernel

 Copyright (C) 2008-2019 by Embedded and Real-Time Systems Laboratory
             Graduate School of Information Science, Nagoya Univ., JAPAN
 
 上記著作権者は，以下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェ
 ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
 変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
 (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
     権表示，この利用条件および下記の無保証規定が，そのままの形でソー
     スコード中に含まれていること．
 (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
     用できる形で再配布する場合には，再配布に伴うドキュメント（利用
     者マニュアルなど）に，上記の著作権表示，この利用条件および下記
     の無保証規定を掲載すること．
 (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
     用できない形で再配布する場合には，次のいずれかの条件を満たすこ
     と．
   (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
       作権表示，この利用条件および下記の無保証規定を掲載すること．
   (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
       報告すること．
 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
     また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
     免責すること．
 
 本ソフトウェアは，無保証で提供されているものである．上記著作権者お
 よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
 に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
 アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
 の責任を負わない．
 
 $Id: target_user.txt 1074 2018-11-25 01:32:04Z ertl-hiro $
----------------------------------------------------------------------

○目次

１．ZYBOターゲット依存部の概要
	1.1 対応するターゲットシステムとターゲット略称
	1.2 ターゲット依存部の構成
	1.3 依存している個別パッケージのバージョン番号
	1.4 開発環境と動作確認条件
	1.5 メモリマップ
２．ターゲット定義事項の規定
	2.1 割込み優先度と割込み番号
	2.2 オーバランハンドラ機能拡張のサポートに関する規定
３．ドライバ関連の情報
	3.1 タイマドライバ
	3.2 シリアルインタフェースドライバ
	3.3 システムログの低レベル出力
４．システム構築手順と実行手順
	4.1 システム構築
	4.2 デバッガの使用方法
５．リファレンス
	5.1 ディレクトリ構成・ファイル構成
	5.2 バージョン履歴


１．ZYBOターゲット依存部の概要

ZYBOターゲット依存部（GNU開発環境向け）は，TOPPERS/HRMP3カーネルを，
Xilinx社のZynq-7000（Cortex-A9）を搭載したZYBOボード上で動作させる環境
を構築するためのものである．

また，実ターゲットシステムに代えて，Qemuを用いて実行することもできる．
Qemuで実行する場合には，コンパイルオプションに「-DTOPPERS_USE_QEMU」を
追加する必要がある．

1.1 対応するターゲットシステムとターゲット略称

ZYBOターゲット依存部の動作確認は，実機（Degilent ZYBO Zynq-7000
ARM/FPGA SoC Trainer Board）を用いて行っている．ZYBOに関する情報は，以
下のウェブサイトにある．

	https://japan.xilinx.com/products/boards-and-kits/1-4azfte.html
	
また，Qemu上でも動作確認を行っている．動作確認を行ったQemuは以下のレポ
ジトリからダウンロードすること．

	https://github.com/TOPPERS-ContributedSoftware/qemu

HRMP3をサポートしているのは，以下のブランチである．
   
	stable-2.12_toppers
	 https://github.com/TOPPERS-ContributedSoftware/qemu/tree/stable-2.12_toppers

Qemu上で実行するためのコマンドは次の通り．

	qemu-system-arm -M xilinx-zynq-a9 -semihosting -m 512M \
					-serial null -serial mon:stdio -nographic -smp 2 -kernel fmp

ターゲット略称等は次の通り．

	ターゲット略称：zybo_gcc
	システム略称：zybo
	開発環境略称：gcc

1.2 ターゲット依存部の構成

ZYBOターゲット依存部（GNU開発環境向け）は，チップ依存部としてZynq7000
チップ依存部（GNU開発環境向け）を，コア依存部としてARMコア依存部（GNU
開発環境向け）を使用している．

	target/
		zybo_gcc/			ZYBOターゲット依存部

	arch/
		arm_gcc/common/		ARMコア依存部
		arm_gcc/zynq7000/	Zynq-7000チップ依存部
		arm_gcc/doc/		ARM依存部に関するドキュメント
		gcc/				GCC開発環境依存部

1.3 依存している個別パッケージのバージョン番号

ZYBOターゲット依存部（バージョン 3.1.0）の個別パッケージが依存している
個別パッケージと，動作確認を行ったバージョンは次の通り．

	個別パッケージの名称	バージョン	個別パッケージファイル名
	------------------------------------------------------------------
	ターゲット非依存部		3.1.0		hrmp3-3.1.0.tar.gz

1.4 開発環境と動作確認条件

開発環境として，以下のURLからプリビルド版をダウンロードすることができ
るGNU ARM Embedded Toolchainを用いている（Cortex-MとCortex-R向けの開発
環境であるが，Cortex-A向けにも使用できる）．

	https://developer.arm.com/open-source/gnu-toolchain/gnu-rm

動作確認を行ったバージョンは次の通り．

	gcc: 7.3.1 20180622
	binutils（objcopy，objdump）：2.30.0.20180329

また，Xilinx社のSDKに付属のコンパイラとIDEを用いることもできる．

	https://japan.xilinx.com/products/design-tools/embedded-software/sdk.html

動作確認を行ったバージョンは次の通り．

	Xilinx SDK 2018.2

1.5 メモリマップ

以下のメモリマップを想定している．

	0x00000000 - 0x1fffffff：外付けDDR（512MB）… 最初の1MBは使用しない
	0x40000000 - 0xbfffffff：プログラマブルロジック領域
	0xe0000000 - 0xfdffffff：周辺デバイス等
	0xfffc0000 - 0xffffffff：オンチップメモリ（OCM）領域

外付けDDRの先頭の1MBは使用せず，プログラムを0x00100000番地からダウンロー
ドする設定としている．

メモリマップを変更する場合には，target_mem.cfgを変更する必要がある．


２．ターゲット定義事項の規定

ZYBOターゲット依存部は，ARMコア依存部とZynq7000チップ依存部を用いて実
装されている．ARMコア依存部およびZynq7000依存部におけるターゲット定義
事項の規定については，「ARM依存部 ユーザーズマニュアル」を参照すること．


３．ドライバ関連の情報

3.1 タイマドライバ

以下の構成でタイマーを使用している．

 (a) プライベートタイマとウォッチドッグで高分解能タイマを実現
 (b) グローバルタイマで高分解能タイマを実現
 (c) プライベートタイマでタイムウィンドウタイマを実現
 

3.2 シリアルインタフェースドライバ

シリアルインタフェースドライバでは，Zynq-7000が内蔵する2つのUARTポート
をサポートしている．

ZYBOでUSB経由で接続できるポートは，UART1である．サンプルプログラムでは，
ログタスクおよびサンプルプログラムが使うポートがポート1となっているた
め，ポート1をUART1に，ポート2をUART0に対応させている．

各ポートは，以下の通りに設定している．

	ボーレート：115200bps
	データ：8ビット
	パリティ：なし
	ストップビット：1ビット

3.3 システムログの低レベル出力

システムログの低レベル出力は，シリアルインタフェースドライバが用いてい
るのと同じUARTを用い，ポーリングにより文字を出力する方法で実現している．


４．システム構築手順と実行手順

4.1 システム構築

ZYBO用のHRMP3カーネルを構築する手順は，「TOPPERS/HRMP3カーネル ユーザー
ズマニュアル」の「３．クイックスタートガイド」の章に記述されている通り
である．

シリアルドライバを使用する際には以下のオプションでシリアルドライバと各
種システムサービスをビルド対象とする．

configure.rb -T zybo_gcc -w -S "syslog.o banner.o serial.o chip_serial.o logtask.o xuartps.o"
                         
Xilinx SDKでビルドする場合は，ワークスペースを作成し，zybo_sdkフォルダ
にあるプロジェクトをインポートすることで，サンプルプログラムがビルド可
能である．

4.2 JTAG経由でのダウンロード及び実行

Xilinx SDK 付属のxsctを用いることでコマンドライン経由でのダウロード及
び実行が可能である．以下はWSLでの実行方法の例である．

1.ビルドした実行ファイルをfmp.elfとして xilinx_sdk 以下にコピー．

2.xilinx_sdk に移動

 $cd xilinx_sdk
 
3.xsctの呼び出し．
 
$cmd.exe /mnt/c/Xilinx/SDK/2018.2/bin/xsct.bat -interactive ./jtag.tcl

ダウロードするファイルの指定はjtag.tcl内で行う．

５．リファレンス

5.1 ディレクトリ構成・ファイル構成

	target/zybo_gcc/
		E_PACKAGE				簡易パッケージのファイルリスト
		MANIFEST				個別パッケージのファイルリスト
		Makefile.target			Makefileのターゲット依存部
		target_cfg1_out.h		cfg1_out.cのリンクに必要なスタブの定義
		target_check.trb		kernel_check.trbのターゲット依存部
		target_ipi.cfg			プロセッサ間割込みのコンフィギュレーションファイル
		target_ipi.h			プロセッサ間割込みのターゲット依存部
		target_kernel.cfg		カーネル実装のコンフィギュレーションファイル
		target_kernel.h			kernel.hのターゲット依存部
		target_kernel.trb		kernel.trbのターゲット依存部
		target_kernel_impl.c	カーネル実装のターゲット依存部
		target_kernel_impl.h	カーネル実装のターゲット依存部に関する定義
		target_mem.cfg			ターゲットのメモリ構成に関する定義
		target_mem.trb			パス4の生成スクリプトのターゲット依存部
		target_opt.trb			パス3の生成スクリプトのターゲット依存部
		target_pcb.h			プロセッサコントロールブロックの定義の
								のターゲット依存部
		target_rename.def		ターゲット依存部の内部識別名のリネーム定義
		target_rename.h			ターゲット依存部の内部識別名のリネーム
		target_sericl.cfg		シリアルドライバのコンフィギュレーションファイル
		target_sericl.h			シリアルドライバのターゲット依存定義
		target_sil.h			sil.hのターゲット依存部
		target_svc.h			ソフトウェア割込みによるサービスコール
								呼び出しのターゲット依存部
		target_stddef.h			t_stddef.hのターゲット依存部
		target_syssvc.h			システムサービスのターゲット依存定義
		target_test.h			テストプログラムのターゲット依存定義
		target_timer.cfg		タイマドライバのコンフィギュレーションファイル
		target_timer.h			タイマドライバを使用するための定義
		target_unrename.h		ターゲット依存部の内部識別名のリネーム解除
		target_user.txt			ターゲット依存部のユーザーズマニュアル
		zybo.h					ターゲットのハードウェア資源の定義
		xilinx_sdk				Xilinx SDK 用のプロジェクトファイル

5.2 バージョン履歴
2019/03/29
・Release 3.0.0 対応．
 
以上
