Mensimulasikan RTL tersimpan dan menyimpan hasilnya

Simpan permintaan simulasi RTL yang terbatas, jalankan admit dan preflight, jalankan simulasinya, lalu simpan, tampilkan daftar, dan buka kembali hasilnya di proyek Anda.

Gunakan Altifigence CLI 0.1.9 di Linux untuk mensimulasikan SystemVerilog tersimpan dengan mesin RTL yang disertakan. Perintah simulasi admit, preflight, dan run masing-masing membaca satu file permintaan di dalam proyek Anda dan mencetak JSON. Untuk membaca kontrak simulasi multi-clock empat status, jalankan alti rtl simulate-v2 capabilities.

Menyimpan permintaan simulasi

Buat folder proyek dan simpan permintaan ini di dalamnya sebagai sim.json. Gunakan persis empat kunci tingkat atas ini. Permintaan memuat sumber SystemVerilog, port dan periode clock, reset opsional, nilai register awal, dan satu vektor input per siklus.

mkdir -p "$HOME/alti-projects/demo-project"
PROJECT="$(cd "$HOME/alti-projects/demo-project" && pwd -P)"
{
  "schema": "altifigence.rtl.operation-request.v1",
  "version": 1,
  "operationId": "altifigence.rtl.simulate.v1",
  "request": {
    "top": "top",
    "sources": [
      {
        "path": "workspace/top.sv",
        "source": "module top(\n  input logic clk,\n  input logic rst,\n  input logic d,\n  output logic q\n);\n  always_ff @(posedge clk or posedge rst)\n    if (rst) q <= 1'b0;\n    else q <= d;\nendmodule\n"
      }
    ],
    "clock": {
      "port": "clk",
      "periodPs": 1000
    },
    "initialRegisterValues": [
      false
    ],
    "cycles": [
      {
        "inputs": {
          "d": [
            false
          ]
        }
      },
      {
        "inputs": {
          "d": [
            true
          ]
        }
      },
      {
        "inputs": {
          "d": [
            true
          ]
        }
      },
      {
        "inputs": {
          "d": [
            false
          ]
        }
      }
    ],
    "limits": {
      "maxCycles": 4,
      "maxTimePs": 4000
    },
    "reset": {
      "port": "rst",
      "activeLevel": "active_high",
      "assertCycles": 1
    }
  }
}

Berikan setiap input tingkat atas kecuali clock dan reset pada setiap siklus, dimulai dari bit paling tidak signifikan. Mesin menggerakkan clock dan mengaktifkan reset selama assertCycles siklus pertama. Jaga clock.periodPs dari 2 hingga 1000000000. Atur limits.maxCycles dari jumlah siklus hingga 32768, dan limits.maxTimePs dari siklus × periodPs hingga 1000000000000. File permintaan dapat berukuran hingga 272629760 byte.

Memeriksa permintaan sebelum dijalankan

alti rtl simulate admit --project "$PROJECT" sim.json
alti rtl simulate preflight --project "$PROJECT" sim.json > "$PROJECT/preflight.json"
jq -c '[.outputPorts[].name]' "$PROJECT/preflight.json"

Pastikan status keluar adalah 0 untuk setiap perintah. Admit memeriksa bentuk dan batas permintaan, lalu mengembalikan altifigence.rtl.simulation-admission.v1 dengan admitted true; untuk permintaan ini, hasilnya melaporkan cycleCount 4, transitionStepCount 8, dan simulatedTimePs 4000. Preflight juga mensintesis sumber menjadi netlist logika dan mengembalikan altifigence.rtl.simulation-preflight.v1 dengan port input, port output, dan register. Baris jq mencetak:

["q"]

Admit dan preflight adalah pemeriksaan awal. Simulasi hanya berjalan dengan run.

Menjalankan simulasi

alti rtl simulate run --project "$PROJECT" sim.json > "$PROJECT/result.json"
jq -c '.artifact.payload.summaryArtifact.payload.finalOutputsLsb0' "$PROJECT/result.json"
jq -r '.artifact.payload.waveformArtifact.payload' "$PROJECT/result.json" > "$PROJECT/wave.vcd"

Pastikan status keluar adalah 0. Hasil memiliki skema altifigence.rtl.operation-result.v1 dan operationId altifigence.rtl.simulate.v1. Artefaknya adalah tanda terima altifigence.rtl.simulation-receipt.v1 dengan preflight, jejak langkah event, bentuk gelombang VCD, ringkasan, dan asal-usul. Untuk permintaan ini, output akhirnya adalah:

{"q":[false]}

Mesin yang disertakan mensintesis desain dan menjalankannya dengan simulator langkah event dua status miliknya sendiri. wave.vcd menggunakan timescale 1ps.

Memeriksa dan mensintesis file sumber

Simpan modul yang sama sebagai file proyek, lalu hasilkan skematiknya dan sintesis. Jalur file sumber relatif terhadap proyek.

mkdir -p "$PROJECT/rtl"
jq -r '.request.sources[0].source' "$PROJECT/sim.json" > "$PROJECT/rtl/top.sv"
alti rtl schematic --project "$PROJECT" --top top rtl/top.sv > "$PROJECT/schematic.json"
jq -c '{schema, source}' "$PROJECT/schematic.json"

Pastikan status keluar adalah 0. Baris jq mencetak:

{"schema":"alti-rtl-schematic.v1","source":"saved-files"}

Dokumen ini juga berisi topModule, modules, instances, nets, connections, diagnostics, dan unsupported. status-nya adalah complete atau partial; dokumen failed keluar dengan status 1.

alti rtl synth --project "$PROJECT" --top top rtl/top.sv > "$PROJECT/synth.json"
jq -c '{report: .report.schema, netlist: .netlist.schema, cells: .report.stats.cells_by_kind}' "$PROJECT/synth.json"

Pastikan status keluar adalah 0. Synth mencetak netlist logika dan laporan sintesisnya. Untuk modul ini, baris jq mencetak:

{"report":"rtl-synth-report-2","netlist":"logic-netlist-2","cells":{"dff_posedge_async_reset":1}}

Jika synth berhenti dengan alti-rtl: synth requires at least one SystemVerilog file, tambahkan jalur file sumber, seperti rtl/top.sv, setelah opsi.

Menyimpan dan membuka kembali hasil

alti rtl artifact store --project "$PROJECT" result.json > "$PROJECT/manifest.json"
ENTRY_ID="$(jq -r '.entryId' "$PROJECT/manifest.json")"
alti rtl artifact list --project "$PROJECT"
alti rtl artifact show --project "$PROJECT" "$ENTRY_ID" > "$PROJECT/reopened.json"

Store memvalidasi hasil lengkap dan menulisnya di bawah .altifigence/artifacts/rtl/ dalam proyek. Manifest altifigence.rtl.artifact-manifest.v1-nya berisi entryId, SHA-256 hasil yang tersimpan, dan relativePath results/<entryId>.json. List mencetak setiap manifest; show mencetak JSON hasil yang tersimpan. Hasil dapat berukuran hingga 67108864 byte.

Mengatasi kesalahan

Untuk RTL simulation request must be the exact altifigence.rtl.simulate.v1 envelope, berikan file persis kunci schema, version, operationId, dan request dengan nilai yang ditampilkan di atas.

Untuk RTL simulation request must be a normalized project-relative path, berikan jalur relatif terhadap proyek, seperti sim.json, tanpa ./ atau / di awal.

Mesin mencetak error permintaan setelah alti-rtl: dan keluar dengan status 2. Untuk RTL simulation resource limit exceeded for stimulus cycles: observed 5, maximum 4, naikkan limits.maxCycles menjadi jumlah siklus lalu jalankan admit lagi.

Untuk RTL simulation resource limit exceeded for simulated time ps: observed 5000, maximum 4000, naikkan limits.maxTimePs menjadi setidaknya jumlah siklus × clock.periodPs.

Untuk RTL artifact entry does not exist: yang diikuti sebuah id, salin entryId dari alti rtl artifact list lalu jalankan show lagi.

Memeriksa dan menganalisis file sumber tersimpan

Gunakan file rtl/top.sv tersimpan dari bagian sebelumnya. Periksa diagnostiknya, inspeksi cakupan pemeriksa dan hierarki, lalu baca analisis simbol native. Letakkan opsi eksekusi setelah subperintah kompiler.

alti rtl compile check --runner local --project "$PROJECT" -- rtl/top.sv --format json
alti rtl compile coverage --runner local --project "$PROJECT" -- rtl/top.sv --format json
alti rtl compile hierarchy --runner local --project "$PROJECT" -- rtl/top.sv --top top --format json
alti rtl analysis --project "$PROJECT" rtl/top.sv > "$PROJECT/analysis.json"
jq -c '{schemaVersion}' "$PROJECT/analysis.json"
{"schemaVersion":"sv-symbols.v2"}

Ejaan kompatibilitas synthesize juga menjalankan penyintesis lokal. Berikan argumen mesinnya setelah --:

alti rtl synthesize --runner local --project "$PROJECT" -- --top top rtl/top.sv > "$PROJECT/synth-compat.json"

Untuk RTL compiler execution options must follow the explicit subcommand, letakkan --runner local dan --project setelah check, coverage, atau hierarchy, seperti yang ditunjukkan di atas.

Memetakan netlist kombinasional ke sel

Simpan contoh kombinasional terpisah dan pustaka Liberty kecil. Sintesis netlist-nya, lalu petakan setiap sel logika ke sel pustaka dengan fungsi yang setara.

cat > "$PROJECT/rtl/map-example.sv" <<'SV'
module top(input logic a, input logic b, output logic y);
  logic n;
  assign n = a & b;
  assign y = ~n;
endmodule
SV
cat > "$PROJECT/map-example.lib" <<'LIB'
library (neutral) {
  cell (AND2) {
    area : 2.0;
    pin (A) { direction : input; }
    pin (B) { direction : input; }
    pin (Y) { direction : output; function : "A & B"; }
  }
  cell (INV) {
    area : 1.0;
    pin (A) { direction : input; }
    pin (Y) { direction : output; function : "!A"; }
  }
}
LIB
alti rtl synth --project "$PROJECT" --top top --netlist-only rtl/map-example.sv > "$PROJECT/map-netlist.json"
alti rtl map --project "$PROJECT" --netlist map-netlist.json --liberty map-example.lib > "$PROJECT/map-report.json"
jq -c '{schema, mapped_cell_count, total_area}' "$PROJECT/map-report.json"
{"schema":"rtl-liberty-direct-map-report-0","mapped_cell_count":2,"total_area":"3.0"}

Untuk no direct Liberty cell covers generic kind diikuti jenis sel, sediakan pustaka dengan fungsi Boolean yang sesuai dan area positif, lalu jalankan ulang perintah pemetaan.

Memeriksa pilihan target dan file sumbernya

Baca kontrak analisis target dan catatan kesiapan, lalu periksa bundel file sumber. Admission mencatat pilihan Anda dan digest file sumber. Preflight struktural mengembalikan diagnostik, cakupan, dan produk hierarki.

alti rtl target-analysis capabilities
alti rtl target-analysis readiness
jq '{schema:"rtl-source-bundle.v1",sources:[.request.sources[] | {path,text:.source}],roots:[.request.sources[].path],include_dirs:[],defines:[],tops:[.request.top]}' "$PROJECT/sim.json" > "$PROJECT/target-sources.json"
DEADLINE_MS="$(( $(date +%s) * 1000 + 60000 ))"
TARGET_ARGS=(--module top --top top --targets generic-asic --primary-target generic-asic
  --tools schematic,evidence --report-detail standard --profile local-example
  --cpu-slots 1 --memory-bytes 536870912 --max-wall-time-ms 5000
  --deadline-unix-ms "$DEADLINE_MS")
alti rtl target-analysis admit "${TARGET_ARGS[@]}" < "$PROJECT/target-sources.json" > "$PROJECT/target-admission.json"
jq -c '{schema, structuralPreflightAvailable}' "$PROJECT/target-admission.json"
alti rtl target-analysis preflight "${TARGET_ARGS[@]}" < "$PROJECT/target-sources.json" > "$PROJECT/target-preflight.json"
jq -r '.schema' "$PROJECT/target-preflight.json"
{"schema":"altifigence.rtl.target-analysis-direct-admission.v1","structuralPreflightAvailable":true}
altifigence.rtl.target-analysis-direct-result.v1

local-example adalah pilihan profil yang dicatat oleh contoh ini. Jaga agar tops sama dengan --top yang diminta. Untuk target Analysis source bundle is invalid: source/root/include/define/top cardinality is invalid, periksa bahwa sources dan roots memuat file sumber dan tops memuat satu nama top tersebut.

Menjalankan kontrak simulasi empat status

Gunakan kembali sumber di sim.json dengan permintaan empat status yang memiliki pengaturan waktu. Nilainya adalah string 0, 1, X, dan Z, dimulai dari bit paling tidak signifikan. Contoh ini menggunakan satu clock, satu reset, dan jadwal input dengan pengaturan waktu.

jq '{schema:.schema,version:1,operationId:"altifigence.rtl.simulate.v2",request:{
  top:.request.top,sources:.request.sources,
  clocks:[{port:"clk",periodPs:1000,phasePs:500}],
  resets:[{port:"rst",activeLevel:"active_high",changes:[
    {timePs:0,valueLsb0:["1"]},{timePs:1000,valueLsb0:["0"]}]}],
  inputSchedules:[{port:"d",changes:[
    {timePs:0,valueLsb0:["0"]},{timePs:1000,valueLsb0:["1"]}]}],
  initialRegisterValues:["0"],
  limits:{maxCyclesPerClock:4,maxTimePs:4000,maxEvents:64}
}}' "$PROJECT/sim.json" > "$PROJECT/sim-v2.json"
alti rtl simulate-v2 admit --project "$PROJECT" sim-v2.json > "$PROJECT/v2-admission.json"
alti rtl simulate-v2 preflight --project "$PROJECT" sim-v2.json > "$PROJECT/v2-preflight.json"
alti rtl simulate-v2 run --project "$PROJECT" sim-v2.json > "$PROJECT/v2-result.json"
jq -r '.schema' "$PROJECT/v2-admission.json" "$PROJECT/v2-preflight.json"
jq -r '.artifact.payload.schema' "$PROJECT/v2-result.json"
altifigence.rtl.simulation-admission.v2
altifigence.rtl.simulation-preflight.v2
altifigence.rtl.simulation-receipt.v2

Pastikan status keluar adalah 0 pada setiap langkah. Admission memeriksa permintaan dengan pengaturan waktu; preflight menyiapkan netlist hasil sintesisnya; run menghasilkan trace, bentuk gelombang, ringkasan, dan asal-usul. Gunakan periodPs genap dan phasePs yang lebih kecil daripada periode.

Perintah engine CLI