Tcl ファイル フォーマットの仕様 - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: エンベデッド ソフトウェア開発 (UG1400)

Document ID
UG1400
Release Date
2022-04-26
Version
2022.1 日本語

各 OS およびライブラリには、MLD ファイルに関連付けられた Tcl ファイルがあります。この Tcl ファイルには、次のセクションがあります。

DRC
OS およびライブラリ パラメーターの一貫性を検証する Tcl ルーチンが含まれます。
ジェネレーション
ライブラリ パラメーターに基づいてコンフィギュレーション ヘッダーおよび C ファイルを生成する Tcl ルーチンが含まれます。

MLD デザイン ルール チェック セクション

proc mydrc { handle } { }

DRC 関数は、パラメーターが正しいことを確認する Tcl コードです。DRC プロシージャはプラットフォーム仕様フォーマット データベース (ツールによりハードウェア (XSA) およびソフトウェア (MSS) データベース ファイルを使用してビルド) に読み取りのみでアクセスし、設定したパラメーター値を読み出します。handle は、データベースの現在のライブラリに関連付けられています。DRC プロシージャは、このハンドルから OS およびライブラリのパラメーターを取得します。データベースからのその他のパラメーターも、ハンドルを要求してそのハンドルを使用することにより取得できます。

エラーに対しては、エラー ページに Tcl エラー コマンドの error msg が呼び出されます。

警告に対しては、コンソールに表示可能な文字列値が返されます。

エラーがない場合は、値は返されません。

MLD フォーマットの例

このセクションでは、MLD ファイルおよび対応する Tcl ファイルの例を使用して、MLD フォーマットを説明します。

例: ライブラリの MLD ファイル

次に、xilmfs ライブラリの MLD ファイルの例を示します。

option psf_version = 2.1.0 ;

option はツールで識別されるキーワードです。option キーワードの後に指定するオプション名は、ツールで特定のアクションを実行するための指示子となります。

この例では、MLD ファイルの psf_version は 2.1 に定義されています。これが、BEGIN LIBRARY コンストラクトの前に設定可能な唯一のオプションです。

BEGIN LIBRARY xilmfs

BEGIN LIBRARY コンストラクトは、xilmfs というライブラリの開始を定義します。

option DESC = "Xilinx Memory File System" ;
option drc = mfs_drc ;
option copyfiles = all;
option REQUIRES_OS = (standalone xilkernel freertos_zynq);
option VERSION = 2.0;
option NAME = xilmfs;

NAME オプションは、ドライバーの名前を示します。VERSIONオプションは、ドライバーのバージョンを示します。

COPYFILES オプションは、ライブラリ用にコピーするファイルを示します。この DRC オプションでは、このライブラリの処理中にツールが呼び出す Tcl プロシージャの名前を指定します。xilmfs ライブラリの処理中には、xilmfs.tcl ファイルの Tcl プロシージャ mfs_drc が呼び出されます。

PARAM name = numbytes, desc = "Number of Bytes", type = int, default =
100000, drc = drc_numbytes ;
PARAM name = base_address, desc = "Base Address", type = int, default =
0x10000, drc = drc_base_address ;
PARAM name = init_type, desc = "Init Type", type = enum, values = ("New
file system"=MFSINIT_NEW,
"MFS Image"=MFSINIT_IMAGE, "ROM Image"=MFSINIT_ROM_IMAGE), default =
MFSINIT_NEW ;
PARAM name = need_utils, desc = "Need additional Utilities?", type =
bool, default = false ;

PARAM は、設定可能なライブラリ パラメーターを定義します。各 PARAM には、NAMEDESCTYPEDEFAULTRANGE、および DRC プロパティが関連付けられています。VALUES プロパティは、ENUM 型に関連付けられている可能な値のリストを定義します。

BEGIN INTERFACE file
PROPERTY HEADER="xilmfs.h" ;
FUNCTION NAME=open, VALUE=mfs_file_open ;
FUNCTION NAME=close, VALUE=mfs_file_close ;
FUNCTION NAME=read, VALUE=mfs_file_read ;
FUNCTION NAME=write, VALUE=mfs_file_write ;
FUNCTION NAME=lseek, VALUE=mfs_file_lseek ;
END INTERFACE

インターフェイスには、標準関数のリストが含まれます。インターフェイスを定義するライブラリには、標準関数のリストが含まれている必要があります。また、すべての関数プロトタイプを定義するヘッダー ファイルも指定する必要があります。

PROPERTY は、BEGIN コンストラクトで定義されているコンストラクトに関連付けられているプロパティを定義します。ここでは、HEADER はインターフェイスで定義された xilmfs.h を値として含むプロパティです。FUNCTION は、インターフェイスでサポートされる関数を定義します。

file インターフェイスの openclosereadwrite、および lseek 関数の値は、mfs_file_openmfs_file_closemfs_file_readmfs_file_write、および mfs_file_lseek です。これらの関数は、ヘッダー ファイル xilmfs.h で定義されています。

BEGIN INTERFACE filesystem

BEGIN INTERFACE は、ライブラリがサポートするインターフェイスを定義します。ここでは、file はインターフェイスの名前です。

PROPERTY HEADER="xilmfs.h" ;
FUNCTION NAME=cd, VALUE=mfs_change_dir ;
FUNCTION NAME=opendir, VALUE=mfs_dir_open ;
FUNCTION NAME=closedir, VALUE=mfs_dir_close ;
FUNCTION NAME=readdir, VALUE=mfs_dir_read ;
FUNCTION NAME=deletedir, VALUE=mfs_delete_dir ;
FUNCTION NAME=pwd, VALUE=mfs_get_current_dir_name ;
FUNCTION NAME=rename, VALUE=mfs_rename_file ;
FUNCTION NAME=exists, VALUE=mfs_exists_file ;
FUNCTION NAME=delete, VALUE=mfs_delete_file ;
END INTERFACE
END LIBRARY

END は、BEGIN 文で使用されたコンストラクト名に使用されます。ここでは、ENDINTERFACE および LIBRARY コンストラクトと使用して、INTERFACE および LIBRARY コンストラクトの終了を示しています。

例: ライブラリの Tcl ファイル

次に、前のセクションで説明した xilmfs.mld ファイルに対応する xilmfs.tcl ファイルを示します。ライブラリの DRC の実行中、xilmfs ライブラリに対して mfs_drc プロシージャが呼び出されます。generate ルーチンは、MSS ファイルのライブラリ定義セグメントに基づいて、ヘッダー ファイルに定数および xilmfs ライブラリの C ファイルを生成します。

proc mfs_drc {lib_handle} {
puts "MFS DRC ..."
}
proc mfs_open_include_file {file_name} {
set filename [file join "../../include/" $file_name]
if {[file exists $filename]} {
set config_inc [open $filename a]
} else {
set config_inc [open $filename a]
::hsi::utils::write_c_header $config_inc "MFS Parameters"
}
return $config_inc
}
proc generate {lib_handle} {
puts "MFS generate ..."
file copy "src/xilmfs.h" "../../include/xilmfs.h"
set conffile [mfs_open_include_file "mfs_config.h"]
puts $conffile "#ifndef _MFS_CONFIG_H"
puts $conffile "#define _MFS_CONFIG_H"
set need_utils [common::get_property CONFIG.need_utils $lib_handle]
if {$need_utils} {
# tell libgen or xps that the hardware platform needs to provide
stdio functions
# inbyte and outbyte to support utils
puts $conffile "#include <stdio.h>"
}
puts $conffile "#include <xilmfs.h>"
set value [common::get_property CONFIG.numbytes $lib_handle]
puts $conffile "#define MFS_NUMBYTES $value"
set value [common::get_property CONFIG.base_address $lib_handle]
puts $conffile "#define MFS_BASE_ADDRESS $value"
set value [common::get_property CONFIG.init_type $lib_handle]
puts $conffile "#define MFS_INIT_TYPE $value"
puts $conffile "#endif"
close $conffile
}
例: OS の MLD ファイル

次に、スタンドアロン OS の MLD ファイルの例を示します。

option psf_version = 2.1.0 ;

option はツールで識別されるキーワードです。option キーワードの後に指定するオプション名は、ツールで特定のアクションを実行するための指示子となります。この例では、MLD ファイルの psf_version は 2.1 に定義されています。これが、BEGIN OS コンストラクトの前に設定可能な唯一のオプションです。

BEGIN OS standalone

BEGIN OS コンストラクトは、standalone という OS の開始を定義します。

option DESC = "Generate standalone BSP";
option COPYFILES = all;

DESC オプションは、MLD の説明を示します。COPYFILES オプションは、OS 用にコピーするファイルを示します。

PARAM NAME = stdin, DESC = "stdin peripheral ", TYPE =
peripheral_instance, REQUIRES_INTERFACE = stdin, DEFAULT = none; PARAM
NAME = stdout, DESC = "stdout peripheral ", TYPE = peripheral_instance,
REQUIRES_INTERFACE = stdout, DEFAULT = none ; PARAM NAME = need_xilmalloc,
DESC = "Need xil_malloc?", TYPE = bool, DEFAULT = false ;

PARAM は、設定可能な OS パラメーターを定義します。各 PARAM には、NAMEDESCTYPEDEFAULTRANGEDRC プロパティが関連付けられています。VALUES プロパティは、ENUM 型に関連付けられている可能な値のリストを定義します。

END OS

END は、BEGIN 文で使用されたコンストラクト名に使用されます。ここでは、END を OS コンストラクトと使用して、OS コンストラクトの終了を示しています。

例: OS の Tcl ファイル

次に、前のセクションで説明した standalone.mld ファイルに対応する standalone.tcl ファイルを示します。generate ルーチンは、MSS ファイルのライブラリ定義セグメントに基づいて、ヘッダー ファイルに定数および xilmfs ライブラリの C ファイルを生成します。

proc generate {os_handle} {
	global env
	set need_config_file "false"
	# Copy over the right set of files as src based on processor type
	set sw_proc_handle [get_sw_processor]
	set hw_proc_handle [get_cells [get_property HW_INSTANCE
$sw_proc_handle] ]
	set proctype [get_property IP_NAME $hw_proc_handle]
	set procname [get_property NAME $hw_proc_handle]
	set enable_sw_profile [get_property
CONFIG.enable_sw_intrusive_profiling $os_handle]
	set mb_exceptions false
	switch $proctype {
		"microblaze" {
		foreach entry [glob -nocomplain [file join $mbsrcdir *]] {
# Copy over only files that are not related to exception
handling.
# All such files have exception in their names.
file copy -force $entry "./src/"
}
	set need_config_file "true"
	set mb_exceptions [mb_has_exceptions $hw_proc_handle]
}
	"ps7_cortexa9" {
	set procdrv [get_sw_processor]
	set compiler [get_property CONFIG.compiler $procdrv]
	if {[string compare -nocase $compiler "armcc"] == 0} {
	set ccdir "./src/cortexa9/armcc"
	} else {
	set ccdir "./src/cortexa9/gcc"
	}
	foreach entry [glob -nocomplain [file join
	$cortexa9srcdir *]] {
	file copy -force $entry "./src/"
	}
	foreach entry [glob -nocomplain [file join $ccdir *]] {
	file copy -force $entry "./src/"
	}
	file delete -force "./src/armcc"
	file delete -force "./src/gcc"
	if {[string compare -nocase $compiler "armcc"] == 0} {
	file delete -force "./src/profile"
	set enable_sw_profile "false"
	}
	set file_handle [xopen_include_file "xparameters.h"]
	puts $file_handle "#include \"xparameters_ps.h\""
	puts $file_handle ""
	close $file_handle
	}
	"default" {puts "unknown processor type $proctype\n"}
}