Menjalankan static timing dan FDTD2D di CPU dengan alti px

Lakukan kueri operasi PX, jalankan static timing dari input proyek, simpan dan buka kembali hasilnya, lalu jalankan fixture FDTD2D di CPU.

Gunakan Altifigence CLI 0.1.9 di Linux untuk menjalankan operasi PX pada file di folder inputs/ proyek Anda. Mulai dengan kueri kapabilitas, jalankan static timing satu clock, simpan hasilnya di penyimpanan artefak proyek, dan jalankan fixture FDTD2D bawaan dengan backend CPU.

Melakukan kueri operasi PX

Baca dokumen kapabilitas PX yang terinstal. Perintah ini adalah kueri: perintah mencetak dokumen JSON dan tidak menjalankan tugas apa pun. alti px fdtd2d readiness melaporkan kesiapan FDTD2D yang terinstal tanpa mengambil lease CPU.

alti px capabilities
alti px fdtd2d capabilities
alti px fdtd2d readiness

Pastikan status keluar adalah 0 untuk setiap perintah.

Menjalankan static timing

Gunakan jalur absolut ke proyek lokal Anda dan jalankan perintah sebagai pengguna biasa. PX membaca file input dari folder inputs/ proyek. Berikan nama file relatif terhadap 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

Permintaan memberikan setiap arc penundaan minimum dan maksimum yang eksplisit dalam nanodetik, satu node sumber, dan satu clock ideal dengan batasan setup dan hold. Jaga agar ID node dan ID arc unik, dan arahkan setiap arc ke node yang terdaftar. Permintaan memuat hingga 65536 node dan 131072 arc dalam 4194304 byte.

alti px static-timing --project "$PROJECT" timing.json > "$WORK/timing.json"
jq '{schema, operationId}' "$WORK/timing.json"

Pastikan status keluar adalah 0. Kolom yang dipilih adalah:

{
  "schema": "altifigence.px.operation-result.v1",
  "operationId": "altifigence.px.static-timing.v1"
}

Hasil membawa laporan altifigence.px.static-timing-report.v1 dengan authority non_signoff, waktu kedatangan dan slack untuk setiap node, serta digest artefak, input, dan permintaan.

Menyimpan dan membuka kembali hasil

Simpan hasil static timing di penyimpanan artefak PX proyek, lalu tampilkan daftar entri yang tersimpan dan buka kembali entri tersebut berdasarkan ID-nya.

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"

Pastikan status keluar adalah 0 untuk setiap perintah. Store menulis manifest dengan skema altifigence.px.artifact-manifest.v1. entryId-nya adalah SHA-256 huruf kecil sepanjang 64 karakter, dan entri disimpan di bawah .altifigence/artifacts/px dalam proyek. alti px artifact show memvalidasi ulang hasil yang tersimpan dan mencetaknya lagi dengan skema altifigence.px.operation-result.v1.

Menjalankan fixture FDTD2D di CPU

Simpan permintaan fixture FDTD2D bawaan di bawah inputs/ dan jalankan dengan backend 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"

Pastikan status keluar adalah 0. Skema tanda terima adalah altifigence.px.fdtd2d-execute-receipt.v1. Batasi permintaan hingga 4096 byte. Eksekusi CPU bersifat deterministik: menjalankan permintaan yang sama lagi mencetak tanda terima yang sama.

Mengatasi kesalahan PX

Untuk kegagalan mesin static-timing, baca baris error JSON di stderr. Baris ini memiliki skema altifigence.localRunner.error.v1, kategori, dan pesan.

Jika stderr melaporkan baris ini, file input tidak dapat dibaca pada jalur yang diberikan di bawah inputs/:

{"schema":"altifigence.localRunner.error.v1","category":"input_io","message":"failed to read job input"}

Simpan file di $PROJECT/inputs/ dan berikan jalurnya relatif terhadap inputs/, misalnya timing.json.

Jika stderr melaporkan baris ini, permintaan tidak sesuai dengan skemanya:

{"schema":"altifigence.localRunner.error.v1","category":"invalid_job","message":"job input is not an admitted PX operation"}

Untuk static timing, gunakan kolom, versi 1, skema, dan aturan graf dalam permintaan timing di atas, lalu jalankan perintah lagi. Untuk FDTD2D, gunakan skema dan fixtureId dalam permintaan fixture.

Jika perintah mencetak error ini untuk alti px fdtd2d execute, jalur input bukan jalur biasa di bawah inputs/:

PX numerical input must be a file below workspace inputs/

Berikan jalur relatif terhadap inputs/ dengan pemisah / dan tanpa segmen kosong, ., atau .., misalnya fdtd2d.json.

Mengompilasi resep proses

Simpan satu langkah oksidasi sebagai inputs/recipe.json. Jalankan process-recipe untuk memvalidasi resep dan mengompilasi rencananya sesuai urutan deklarasi. Simpan hasil operasinya dengan perintah penyimpanan artefak yang sama dengan yang digunakan untuk timing.

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}

Untuk invalid_job, bandingkan file dengan contoh: gunakan skema px-recipe-1, oxidation huruf kecil, serta kolom wafer dan langkah yang tercantum. Perbaiki file, lalu jalankan ulang process-recipe.

Merangkum dan menganalisis SPEF

Simpan SPEF di bawah sebagai inputs/synthetic.spef. Ringkasan melaporkan resistor dan kapasitor yang diekstrak. Simpan konfigurasi sebagai inputs/spef-config.json untuk menghitung penundaan Elmore dan penurunan tegangan IR statis untuk net dan corner yang dipilih.

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
SPEF
cat > "$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.v1

Untuk invalid_job, periksa bahwa net, root, target, dan node sumber arus yang dikonfigurasi sesuai dengan nama SPEF. Gunakan satuan dan asumsi yang ditunjukkan di atas, lalu jalankan ulang analisis.

Menjalankan tugas lokal

Untuk menjalankan permintaan timing sebagai tugas lokal terbatas, hitung SHA-256-nya dan kirim dokumen tugas melalui stdin. Pastikan status keluar adalah 0 dan status hasil adalah succeeded. Simpan URI artefak yang dikembalikan untuk laporan tersimpan.

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"}

Jika hasil melaporkan px.local_runner.workspace_input, simpan permintaan di bawah inputs/ dan hitung ulang SHA-256-nya. Untuk px.local_runner.output_exists, gunakan job_id dan cancellation_id baru, buat ulang tugas, lalu jalankan lagi.

Melakukan kueri melalui perintah kompatibilitas lokal

Perintah kompatibilitas lokal menerima capabilities dan execute setelah --. Untuk membaca kapabilitas yang terinstal, jalankan:

alti px analyze --runner local --project "$PROJECT" -- capabilities

Jika perintah kompatibilitas meminta operasi mesin lokal, letakkan capabilities atau execute setelah --.

Membaca analisis yang telah di-commit

Untuk proyek yang sudah memuat analisis topologi logika yang di-commit, atur RUN_ID ke ID eksekusi analisis tersebut. Readback memuat envelope analisis dan laporan yang tersimpan, memverifikasi netlist dan laporan, serta mencetak operasi yang diverifikasi dengan asal-usul.

alti px readback --project "$PROJECT" "$RUN_ID" > "$WORK/readback.json"
jq -r .schema "$WORK/readback.json"
altifigence.px.committed-logic-topology-readback.v1

Untuk input_io, periksa direktori proyek dan eksekusi terpilih yang telah di-commit di bawah analyze/. Perbaiki proyek atau ID eksekusi, lalu baca lagi.

Perintah engine CLI