この例では、Tcl で日付タイムスタンプを作成する方法を紹介します。スクリプトを使用したデザインフローで日付タイムスタンプを使用すると、スクリプトがいつ実行されたかを正確に記録できます。デザインファイルに日付タイムスタンプを書き込むことで、デザインがいつ作成されたかをチップ上に保存できます。
Tcl コマンドを使って、必要な日付と時刻の要素だけを含むカスタムフォーマットの日付時刻文字列を生成できます。Tcl コマンド clock seconds を使用して、現在の時刻とクロック・フォーマットを返し、カスタムフォーマットの日付時刻文字列を生成します。日付時刻文字列のフォーマットの詳細については、日付と時刻のフォーマッティング Web ページを参照してください。そこには、例やフォーマッティング・キーワードの表も掲載されています。
ここでは、日付時間文字列の異なるフォーマッティング・オプションの例を 2 つ紹介します。
例 1
次のコマンドは、以下の要素をこの順番で含むフォーマットされた日付時刻文字列を生成します。
- 4 ディジット の年
- 2 ディジットの月 (01 ~ 12)
- 2 ディジットの日 (01 ~ 31)
- 2 ディジットの時間、24 時間表記 (00 ~ 23)
- 2 ディジットの分 (00 ~ 59)
- 2 ディジットの秒 (00 ~ 59)
クロック・フォーマット [clock seconds] -format {%Y %m %d %H %M %S}
このコマンドは、次のような文字列を生成します。
2005 01 10 15 16 55
例 2
2 番目の例では、以下の要素をこの順番で持つ、フォーマットされた日付時刻文字列を生成します。
- 短縮形の月名の後にピリオドを付ける
- 2 桁の日付の後にコンマを付ける
- 4 ディジット の年
- 時刻のフォーマットは HH:MM:SS
- AM/PM インジケーター
クロック・フォーマット [clock seconds] -format {%b. %d, %Y %I:%M:%S %p}
このコマンドは、次のような文字列を生成します。
Jan. 10, 2005 03:31:20 PM
日付時間文字列の変換
通常、ASCII の日付時刻文字列を別のフォーマット (16 進数や 2 進数など) に変換して、レジスターバンクやメモリーに格納する必要があります。ここでは、フォーマット変換の例を 2 つ紹介します。
10 進数から 16 進数
数値のみを生成する日付時刻要素を使用する場合は、変換用に 10 進数として扱うことができます。次のコマンドで生成する日付スタンプでは、年内の日付番号 (001~366)、24 時間フォーマットの時間、分の順に続きます。
set str [clock format [clock seconds] -format {%j%H%M}] set out [format "%X" $str]
このコマンドは、変数 out 内に次のような文字列を生成します。
17D40F
ASCII から 16 進数
次のコマンドは、日付時刻の文字列を生成し、16 進数文字列に変換して変数 out に格納します。16 進数の各ペアは、ASCII 文字の 16 進数コードです。
set str [clock format [clock seconds] -format {%b. %d, %Y %I:%M:%S %p}] binary scan $str "H*" out
このコマンドは、変数 out 内に次のような文字列を生成します。
4a616e2e2031302c20323030352030333a33363a303520504d