Chạy static timing và FDTD2D trên CPU bằng alti px
Truy vấn các thao tác PX, chạy static timing từ đầu vào của dự án, lưu và mở lại kết quả, rồi chạy fixture FDTD2D trên CPU.
Dùng Altifigence CLI 0.1.9 trên Linux để chạy các thao tác PX trên tệp trong thư mục inputs/ của dự án. Bắt đầu bằng các truy vấn khả năng, chạy static timing một xung nhịp, lưu kết quả trong kho sản phẩm đầu ra của dự án, rồi chạy fixture FDTD2D tích hợp sẵn với backend CPU.
Truy vấn các thao tác PX
Đọc các tài liệu khả năng PX đã cài đặt. Các lệnh này là truy vấn: chúng in một tài liệu JSON và không chạy công việc nào. alti px fdtd2d readiness báo cáo trạng thái sẵn sàng của FDTD2D đã cài đặt mà không chiếm giữ lease CPU.
alti px capabilities
alti px fdtd2d capabilities
alti px fdtd2d readinessXác nhận trạng thái thoát của từng lệnh là 0.
Chạy static timing
Dùng đường dẫn tuyệt đối tới dự án cục bộ và chạy các lệnh bằng tài khoản người dùng thông thường. PX đọc các tệp đầu vào từ thư mục inputs/ của dự án. Truyền tên tệp tương đối so với 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
}
}
JSONYêu cầu cung cấp cho mỗi cung một độ trễ tối thiểu và tối đa rõ ràng tính bằng nano giây, một nút nguồn và một xung nhịp lý tưởng với các ràng buộc setup và hold. Giữ ID nút và ID cung là duy nhất, và trỏ mọi cung tới các nút đã liệt kê. Một yêu cầu chứa tối đa 65536 nút và 131072 cung trong giới hạn 4194304 byte.
alti px static-timing --project "$PROJECT" timing.json > "$WORK/timing.json"
jq '{schema, operationId}' "$WORK/timing.json"Xác nhận trạng thái thoát là 0. Các trường được chọn là:
{
"schema": "altifigence.px.operation-result.v1",
"operationId": "altifigence.px.static-timing.v1"
}Kết quả mang báo cáo altifigence.px.static-timing-report.v1 với authority là non_signoff, thời điểm đến và slack của từng nút, cùng mã băm của sản phẩm đầu ra, đầu vào và yêu cầu.
Lưu và mở lại kết quả
Lưu kết quả static timing vào kho sản phẩm đầu ra PX của dự án, sau đó liệt kê các mục đã lưu và mở lại mục đó theo 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"Xác nhận trạng thái thoát của từng lệnh là 0. Store ghi một manifest có lược đồ altifigence.px.artifact-manifest.v1. entryId của nó là SHA-256 viết thường gồm 64 ký tự, và mục được giữ bên dưới .altifigence/artifacts/px trong dự án. alti px artifact show xác thực lại kết quả đã lưu và in lại với lược đồ altifigence.px.operation-result.v1.
Chạy fixture FDTD2D trên CPU
Lưu yêu cầu fixture FDTD2D tích hợp sẵn bên dưới inputs/ và chạy với 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"Xác nhận trạng thái thoát là 0. Lược đồ biên nhận là altifigence.px.fdtd2d-execute-receipt.v1. Giữ yêu cầu trong giới hạn 4096 byte. Lần chạy CPU mang tính xác định: chạy lại cùng yêu cầu sẽ in cùng biên nhận.
Xử lý lỗi PX
Khi engine static-timing gặp lỗi, hãy đọc dòng lỗi JSON trên stderr. Dòng này có lược đồ altifigence.localRunner.error.v1, một danh mục và một thông báo.
Nếu stderr báo dòng này, không đọc được tệp đầu vào tại đường dẫn đã cho bên dưới inputs/:
{"schema":"altifigence.localRunner.error.v1","category":"input_io","message":"failed to read job input"}Lưu tệp vào $PROJECT/inputs/ và truyền đường dẫn của nó tương đối so với inputs/, ví dụ timing.json.
Nếu stderr báo dòng này, yêu cầu không khớp với lược đồ của nó:
{"schema":"altifigence.localRunner.error.v1","category":"invalid_job","message":"job input is not an admitted PX operation"}Với static timing, dùng các trường, phiên bản 1, lược đồ và quy tắc đồ thị trong yêu cầu timing ở trên, rồi chạy lại lệnh. Với FDTD2D, dùng lược đồ và fixtureId trong yêu cầu fixture.
Nếu lệnh in lỗi này cho alti px fdtd2d execute, đường dẫn đầu vào không phải là đường dẫn thuần bên dưới inputs/:
PX numerical input must be a file below workspace inputs/Truyền đường dẫn tương đối so với inputs/ với dấu phân tách / và không có đoạn rỗng, . hay .., ví dụ fdtd2d.json.
Biên dịch công thức quy trình
Lưu một bước oxy hóa thành inputs/recipe.json. Chạy process-recipe để xác thực công thức và biên dịch kế hoạch của nó theo thứ tự khai báo. Lưu kết quả thao tác bằng cùng các lệnh kho sản phẩm đầu ra đã dùng cho 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}Với invalid_job, hãy so sánh tệp với ví dụ: dùng lược đồ px-recipe-1, oxidation viết thường và các trường wafer và bước đã liệt kê. Sửa tệp, rồi chạy lại process-recipe.
Tóm tắt và phân tích SPEF
Lưu SPEF bên dưới thành inputs/synthetic.spef. Bản tóm tắt báo cáo các điện trở và tụ điện đã trích xuất. Lưu cấu hình thành inputs/spef-config.json để tính độ trễ Elmore và sụt áp IR tĩnh cho net và corner đã chọn.
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.v1Với invalid_job, hãy kiểm tra rằng net, gốc, đích và các nút nguồn dòng điện đã cấu hình khớp với tên trong SPEF. Dùng các đơn vị và giả định được nêu ở trên, rồi chạy lại phân tích.
Thực thi công việc cục bộ
Để thực thi yêu cầu timing như một công việc cục bộ có giới hạn, hãy tính SHA-256 của nó và gửi tài liệu công việc qua stdin. Xác nhận trạng thái thoát là 0 và trạng thái kết quả là succeeded. Giữ URI sản phẩm đầu ra được trả về cho báo cáo đã lưu.
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"}Nếu kết quả báo px.local_runner.workspace_input, hãy lưu yêu cầu bên dưới inputs/ và tính lại SHA-256 của nó. Với px.local_runner.output_exists, hãy dùng job_id và cancellation_id mới, tạo lại công việc, rồi thực thi lại.
Truy vấn qua lệnh tương thích cục bộ
Lệnh tương thích cục bộ chấp nhận capabilities và execute sau --. Để đọc các khả năng đã cài đặt, chạy:
alti px analyze --runner local --project "$PROJECT" -- capabilitiesNếu lệnh tương thích yêu cầu một thao tác engine cục bộ, hãy đặt capabilities hoặc execute sau --.
Đọc phân tích đã commit
Với dự án đã có phân tích cấu trúc liên kết logic được commit, hãy đặt RUN_ID thành ID lần chạy của phân tích đó. Readback tải đối tượng bao phân tích và báo cáo đã lưu, xác minh netlist và báo cáo, rồi in thao tác đã xác minh kèm nguồn gốc.
alti px readback --project "$PROJECT" "$RUN_ID" > "$WORK/readback.json"
jq -r .schema "$WORK/readback.json"altifigence.px.committed-logic-topology-readback.v1Với input_io, hãy kiểm tra thư mục dự án và lần chạy đã commit được chọn bên dưới analyze/. Sửa dự án hoặc ID lần chạy rồi đọc lại.