Quartus® II Tcl の例: 日付タイムスタンプ

author-image

投稿者:

この例では、Tcl で日付タイムスタンプを作成する方法を紹介します。スクリプトを使用したデザインフローで日付タイムスタンプを使用すると、スクリプトがいつ実行されたかを正確に記録できます。デザインファイルに日付タイムスタンプを書き込むことで、デザインがいつ作成されたかをチップ上に保存できます。

Tcl コマンドを使って、必要な日付と時刻の要素だけを含むカスタムフォーマットの日付時刻文字列を生成できます。Tcl コマンド clock seconds を使用して、現在の時刻とクロック・フォーマットを返し、カスタムフォーマットの日付時刻文字列を生成します。日付時刻文字列のフォーマットの詳細については、日付と時刻のフォーマッティング Web ページを参照してください。そこには、例やフォーマッティング・キーワードの表も掲載されています。

ここでは、日付時間文字列の異なるフォーマッティング・オプションの例を 2 つ紹介します。

例 1

次のコマンドは、以下の要素をこの順番で含むフォーマットされた日付時刻文字列を生成します。

  1. 4 ディジット の年
  2. 2 ディジットの月 (01 ~ 12)
  3. 2 ディジットの日 (01 ~ 31)
  4. 2 ディジットの時間、24 時間表記 (00 ~ 23)
  5. 2 ディジットの分 (00 ~ 59)
  6. 2 ディジットの秒 (00 ~ 59)
クロック・フォーマット [clock seconds] -format {%Y %m %d %H %M %S}

このコマンドは、次のような文字列を生成します。

2005 01 10 15 16 55

例 2

2 番目の例では、以下の要素をこの順番で持つ、フォーマットされた日付時刻文字列を生成します。

  1. 短縮形の月名の後にピリオドを付ける
  2. 2 桁の日付の後にコンマを付ける
  3. 4 ディジット の年
  4. 時刻のフォーマットは HH:MM:SS
  5. 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