alti pxでCPU上のスタティックタイミングとFDTD2Dを実行する
PX操作を照会し、プロジェクトの入力からスタティックタイミングを実行し、結果を保存して再度開き、CPUでFDTD2Dフィクスチャを実行します。
Linux上のAltifigence CLI 0.1.9を使用して、プロジェクトのinputs/フォルダー内のファイルに対してPX操作を実行します。まず機能クエリを実行し、シングルクロックのスタティックタイミングを実行して、結果をプロジェクトのアーティファクトストアに保存し、組み込みのFDTD2DフィクスチャをCPUバックエンドで実行します。
PX操作を照会する
インストール済みのPX機能文書を読み取ってください。これらのコマンドはクエリであり、JSON文書を出力するだけでジョブは実行しません。alti px fdtd2d readinessは、CPUリースを取得せずに、インストール済みのFDTD2Dの準備状況を報告します。
alti px capabilities
alti px fdtd2d capabilities
alti px fdtd2d readiness各コマンドの終了ステータスが0であることを確認してください。
スタティックタイミングを実行する
ローカルプロジェクトの絶対パスを使用し、通常のユーザーとしてコマンドを実行してください。PXはプロジェクトのinputs/フォルダーから入力ファイルを読み取ります。inputs/からの相対ファイル名を指定してください。
set -euo pipefail
PROJECT="$(cd "$HOME/alti-projects/demo-project" && pwd -P)"
WORK="$(mktemp -d)"
mkdir -p "$PROJECT/inputs"
cat > "$PROJECT/inputs/timing.json" <<'JSON'
{
"schema": "altifigence.px.static-timing-request.v1",
"version": 1,
"delayModel": "explicit_arc_min_max",
"cornerModel": "single_caller_resolved",
"libraryModel": "none",
"graph": {
"nodeIds": ["in", "mid", "out"],
"sourceNodeId": "in",
"sourceMinArrivalNs": 0.0,
"sourceMaxArrivalNs": 0.0,
"arcs": [
{"id": "a1", "fromNodeId": "in", "toNodeId": "mid", "minDelayNs": 0.1, "maxDelayNs": 0.2},
{"id": "a2", "fromNodeId": "mid", "toNodeId": "out", "minDelayNs": 0.3, "maxDelayNs": 0.4}
]
},
"constraints": {
"clockPeriodNs": 1.0,
"setupTimeNs": 0.05,
"holdTimeNs": 0.02,
"setupMarginNs": 0.0,
"holdMarginNs": 0.0
}
}
JSONリクエストでは、各アークに最小遅延と最大遅延をナノ秒単位で明示し、ソースノードを一つ、セットアップ制約とホールド制約を持つ理想クロックを一つ指定します。ノードIDとアークIDは一意にし、すべてのアークが一覧にあるノードを指すようにしてください。リクエストには、4194304バイト以内で最大65536ノードと131072アークを含められます。
alti px static-timing --project "$PROJECT" timing.json > "$WORK/timing.json"
jq '{schema, operationId}' "$WORK/timing.json"終了ステータスが0であることを確認してください。選択したフィールドは次のとおりです。
{
"schema": "altifigence.px.operation-result.v1",
"operationId": "altifigence.px.static-timing.v1"
}結果には、authorityがnon_signoffのaltifigence.px.static-timing-report.v1レポート、各ノードの到着時間とスラック、およびアーティファクト、入力、リクエストのダイジェストが含まれます。
結果を保存して再度開く
スタティックタイミングの結果をプロジェクトのPXアーティファクトストアに保存し、保存されたエントリーを一覧表示して、IDを指定してエントリーを再度開きます。
alti px artifact store --project "$PROJECT" "$WORK/timing.json" > "$WORK/entry.json"
jq '{schema, entryId}' "$WORK/entry.json"
ENTRY="$(jq -r .entryId "$WORK/entry.json")"
alti px artifact list --project "$PROJECT" | jq -r '.[].entryId'
alti px artifact show --project "$PROJECT" "$ENTRY" > "$WORK/shown.json"
jq '{schema, operationId}' "$WORK/shown.json"各コマンドの終了ステータスが0であることを確認してください。ストアはスキーマaltifigence.px.artifact-manifest.v1のマニフェストを書き込みます。そのentryIdは64文字の小文字のSHA-256で、エントリーはプロジェクトの.altifigence/artifacts/pxの下に保持されます。alti px artifact showは保存された結果を再検証し、スキーマaltifigence.px.operation-result.v1で再度出力します。
CPUでFDTD2Dフィクスチャを実行する
以下の組み込みFDTD2Dフィクスチャのリクエストをinputs/の下に保存し、CPUバックエンドで実行してください。
cat > "$PROJECT/inputs/fdtd2d.json" <<'JSON'
{
"schema": "altifigence.px.fdtd2d-execute-request.v1",
"fixtureId": "px.fdtd2d.owned-pattern-19x13-96.v1"
}
JSON
alti px fdtd2d execute --backend cpu --project "$PROJECT" \
fdtd2d.json > "$WORK/fdtd2d.json"
jq -r .schema "$WORK/fdtd2d.json"終了ステータスが0であることを確認してください。レシートのスキーマはaltifigence.px.fdtd2d-execute-receipt.v1です。リクエストは4096バイト以内にしてください。CPUでの実行は決定的で、同じリクエストをもう一度実行すると同じレシートが出力されます。
PXエラーに対処する
static-timingエンジンの失敗時には、stderrのJSONエラー行を読み取ってください。スキーマaltifigence.localRunner.error.v1、カテゴリー、メッセージが含まれます。
stderrに次の行が報告された場合、inputs/配下の指定されたパスで入力ファイルを読み取れませんでした。
{"schema":"altifigence.localRunner.error.v1","category":"input_io","message":"failed to read job input"}ファイルを$PROJECT/inputs/に保存し、timing.jsonのようにinputs/からの相対パスを指定してください。
stderrに次の行が報告された場合、リクエストがスキーマに一致していません。
{"schema":"altifigence.localRunner.error.v1","category":"invalid_job","message":"job input is not an admitted PX operation"}スタティックタイミングでは、上記のタイミングリクエストのフィールド、バージョン1、スキーマ、グラフの規則を使用し、コマンドをもう一度実行してください。FDTD2Dでは、フィクスチャのリクエストにあるスキーマとfixtureIdを使用してください。
alti px fdtd2d executeで次のエラーが出力された場合、入力パスがinputs/配下の単純なパスではありません。
PX numerical input must be a file below workspace inputs/inputs/からの相対パスを、/区切りで、空の区間や.、..の区間を含めずに指定してください。例えばfdtd2d.jsonです。
プロセスレシピをコンパイルする
酸化ステップを一つ、inputs/recipe.jsonとして保存してください。process-recipeを実行してレシピを検証し、宣言順の計画をコンパイルしてください。タイミングと同じアーティファクトストアのコマンドで、その操作結果を保存してください。
cat > "$PROJECT/inputs/recipe.json" <<'JSON'
{"schema":"px-recipe-1","name":"oxide","wafer":{"substrate_doping_cm3":1000000000000000,"depth_um":0.25,"mesh_nodes":51},"steps":[{"kind":"oxidation","label":"oxide","params":{"ambient":"dry","temp_c":1000,"time_s":10,"pressure_atm":1,"initial_oxide_nm":0}}]}
JSON
alti px process-recipe --project "$PROJECT" recipe.json > "$WORK/recipe-result.json"
jq '{operationId, steps: .artifact.payload.stepCount}' "$WORK/recipe-result.json"{"operationId":"altifigence.px.process-recipe.v1","steps":1}invalid_jobの場合は、ファイルを例と比較してください。スキーマpx-recipe-1、小文字のoxidation、記載されたウェハーとステップのフィールドを使用してください。ファイルを修正し、process-recipeをもう一度実行してください。
SPEFを要約して解析する
以下のSPEFをinputs/synthetic.spefとして保存してください。Summaryは抽出した抵抗とコンデンサーを報告します。選択したネットとコーナーのElmore遅延および静的IRドロップを計算するには、設定をinputs/spef-config.jsonとして保存してください。
cat > "$PROJECT/inputs/synthetic.spef" <<'SPEF'
*SPEF "IEEE 1481 subset"
*DESIGN "synthetic"
*C_UNIT 1 FF
*R_UNIT 1 OHM
*NAME_MAP
*1 VDD
*2 VDD:src
*3 VDD:n1
*4 VDD:n2
*5 SIG:agg
*PORTS
*2 I
*D_NET *1 10.0
*CONN
*P *2 I
*I *3 B
*I *4 B
*CAP
1 *2 1.0
2 *3 2.0
3 *4 3.0
4 *4 *5 4.0
*RES
1 *2 *3 100.0
2 *3 *4 50.0
*END
SPEFcat > "$PROJECT/inputs/spef-config.json" <<'JSON'
{"schema":"altifigence.px.spef-configured-analysis-config.v1","version":1,"spefArtifactId":"synthetic-spef","corner":{"model":"single_caller_resolved","name":"nominal"},"units":{"capacitance":"farad","resistance":"ohm","current":"ampere","time":"second","voltage":"volt"},"assumptions":{"couplingCapacitance":"reported_not_folded_into_elmore_load","elmoreTopology":"connected_resistor_tree","irDrop":"static_linear_resistor_network"},"elmore":{"net":"VDD","root":"VDD:src","target":"VDD:n2"},"irDrop":{"net":"VDD","ground":"VDD:src","currents":[{"node":"VDD:n2","currentA":0.001}]}}
JSON
alti px spef-summary --project "$PROJECT" synthetic.spef > "$WORK/spef-summary.json"
alti px spef-analyze --project "$PROJECT" synthetic.spef spef-config.json > "$WORK/spef-analysis.json"
jq -r .operationId "$WORK/spef-summary.json" "$WORK/spef-analysis.json"altifigence.px.spef-summary.v1
altifigence.px.spef-configured-analysis.v1invalid_jobの場合は、設定されたネット、ルート、ターゲット、電流源ノードがSPEFの名前と一致していることを確認してください。上に示した単位と前提を使用し、解析をもう一度実行してください。
ローカルジョブを実行する
タイミングリクエストを制限付きのローカルジョブとして実行するには、そのSHA-256を計算し、ジョブ文書をstdinで渡してください。終了ステータスが0で、結果のステータスがsucceededであることを確認してください。保存されたレポートの、返されたアーティファクトURIを保持してください。
DIGEST="$(sha256sum "$PROJECT/inputs/timing.json" | cut -d ' ' -f 1)"
cat > "$WORK/timing-job.template.json" <<'JSON'
{"schema":"altifigence.engine.job.v1","job_id":"timing-job-1","operation":{"engine_id":"px","operation_id":"static-timing","contract_id":"px.static-timing.v1"},"execution_placement":"local","device_preference":{"selection":{"mode":"class","value":"cpu"},"fallback":"deny"},"resources":{"cpu_slots":1,"memory_bytes":268435456,"device_slots":0,"device_memory_bytes":0,"max_wall_time_ms":60000},"inputs":[{"artifact_id":"timing-request","role":"static_timing_request","artifact_schema":"altifigence.px.static-timing-request.v1","uri":"workspace://inputs/timing.json","sha256":"REPLACE_WITH_DIGEST"}],"cancellation":{"cancellation_id":"cancel-timing-job-1"}}
JSON
jq --arg digest "$DIGEST" '.inputs[0].sha256 = $digest' "$WORK/timing-job.template.json" > "$WORK/timing-job.json"
alti px execute --project "$PROJECT" < "$WORK/timing-job.json" > "$WORK/job-result.json"
jq '{schema, status}' "$WORK/job-result.json"{"schema":"altifigence.engine.result.v1","status":"succeeded"}結果がpx.local_runner.workspace_inputと報告した場合は、リクエストをinputs/の下に保存し、そのSHA-256を再計算してください。px.local_runner.output_existsの場合は、新しいjob_idとcancellation_idを使用してジョブを再生成し、もう一度実行してください。
ローカル互換コマンドで照会する
ローカル互換コマンドは、--の後にcapabilitiesとexecuteを受け付けます。インストール済みの機能を読み取るには、次を実行してください。
alti px analyze --runner local --project "$PROJECT" -- capabilities互換コマンドがローカルエンジンの操作を求める場合は、--の後にcapabilitiesまたはexecuteを指定してください。
コミット済みの解析を読み取る
コミット済みの論理トポロジー解析をすでに含むプロジェクトでは、RUN_IDをその解析の実行IDに設定してください。Readbackは保存された解析エンベロープとレポートを読み込み、ネットリストとレポートを検証して、検証済みの操作を来歴とともに出力します。
alti px readback --project "$PROJECT" "$RUN_ID" > "$WORK/readback.json"
jq -r .schema "$WORK/readback.json"altifigence.px.committed-logic-topology-readback.v1input_ioの場合は、プロジェクトのディレクトリと、analyze/配下の選択したコミット済み実行を確認してください。プロジェクトまたは実行IDを修正し、もう一度読み取ってください。