Timing Report解析①:CSV出力で情報を整理する

Parser

〜Startpoint・Endpoint・slackをExcelで扱える形にする〜

📝 はじめに

これまでの記事では、

  • Pythonでファイルを読み込む
  • grepのように特定の行を抜き出す
  • 正規表現でslackの数値やStartpoint/Endpointを抽出する

ことを学んできました。
今回はいよいよ「実務に役立つ形」に進めます。
抽出した情報をCSVに出力してExcelで扱えるようにする のが今回のテーマです。


🎯 やりたいこと

  1. Timing Reportから
  • Startpoint
  • Endpoint
  • slack値
    をまとめる
  1. CSVファイルに保存
  2. Excelで簡単に開けるようにする

✍️ コード例

以下のスクリプトを export_csv.py として保存してください。

#```python
#export_csv.py
#Timing ReportからStartpoint・Endpoint・slackを抽出しCSVに出力する

import re
import csv

filename = "timing_sample.rpt"
output_csv = "timing_summary.csv"

with open(filename, "r", encoding="utf-8") as f:
    text = f.read()

#正規表現で抽出

start_pattern = r"Startpoint:\s(.+)" end_pattern = r"Endpoint:\s(.+)"
slack_pattern = r"slack.?([-+]?\d.?\d+)"

start_matches = re.findall(start_pattern, text)
end_matches = re.findall(end_pattern, text)
slack_matches = re.findall(slack_pattern, text, flags=re.IGNORECASE)

#CSVに書き出し

with open(output_csv, "w", newline="", encoding="utf-8") as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["Startpoint", "Endpoint", "Slack (ns)"]) # ヘッダ行

    for sp, ep, sl in zip(start_matches, end_matches, slack_matches):
        writer.writerow([sp, ep, sl])

print(f"CSV出力完了: {output_csv}")

▶️ 実行方法

ターミナルで次のコマンドを実行します。

python export_csv.py

出力メッセージ:

CSV出力完了: timing_summary.csv

📊 出力されるCSV例

timing_summary.csv をExcelで開くと次のようになります。

StartpointEndpointSlack (ns)
U1/clk (rising edge-triggered flip-flop clocked by CLK)U5/data (rising edge-triggered flip-flop clocked by CLK)0.11

🔍 解説

  • csv.writer を使うと、簡単にCSV形式で出力できる
  • writer.writerow([...]) で1行ずつ追加していく
  • zip() を使って Startpoint / Endpoint / Slack を1セットとしてまとめた

💡 応用ポイント

  • 複数パスが含まれるレポートでも、自動で行が増えて一覧化できる
  • Excelに貼り付けてフィルタやソートが可能
  • pandasを使えばさらに高度な分析も可能

✅ まとめ

  • Startpoint / Endpoint / Slack を抽出してCSVに保存できた
  • これでExcelで簡単に分析・報告資料作成ができる
  • Timing Report解析が 手作業から自動化 へと進化した
タイトルとURLをコピーしました