進行 CX 詳細化並匯出解碼器

將已儲存的小型 CX 指令定義轉換為解碼器與 Markdown 參考文件。

Linux 上的 Altifigence CLI 0.1.9 會從標準輸入讀取原生 CX 原始碼,以進行 ISA 作業。先從單一 ADD 指令開始,方便一併檢查指令格式、暫存器運算元、編碼與執行運算式。將下列原始碼儲存為工作目錄中的 add.cx。暫存器檔包含 32 個暫存器,每個寬度為 32 位元,且讀取 x0 時會得到零。

讀取已儲存的結果之前,請先確認結束狀態為 0。另行保留標準錯誤輸出,並檢查下文說明的結果欄位。

儲存 CX 指令

arch CX-Core {
    word = 32 bits
    address = 32 bits
    endian = little
}
regfile gpr {
    count = 32
    width = 32 bits
    x0 = hardwired 0
}
format R = 32 bits {
    funct7 @ 31..25
    rs2 @ 24..20
    rs1 @ 19..15
    funct3 @ 14..12
    rd @ 11..7
    opcode @ 6..0
}
operand gpr (5 bits) {
    reads gpr[@]
    writes gpr[@]
    asm "x{@}"
}
instruction ADD uses R {
    reads rs1, rs2 : gpr
    writes rd : gpr
    encode opcode=0b0110011, funct3=0b000, funct7=0b0000000
    asm "add {rd}, {rs1}, {rs2}"
    exec rd <- rs1 +wrap rs2
}

R 格式會為每個編碼欄位指定明確的位元範圍。ADD 固定 opcode、funct3 和 funct7 的值,而來源暫存器與目的暫存器則使用各自的具名欄位。其組合語言寫法使用運算元格式 x,後接暫存器索引。請保留此原始碼檔案,作為詳細化與兩項匯出作業的共用輸入。

進行詳細化與匯出

alti isa elaborate < add.cx
alti isa export-decoder --language sv < add.cx > decoder-result.txt
alti isa export-reference --format md --title "ADD reference" < add.cx > reference-result.txt

先執行詳細化,並確認其 JSON 結果為 ok: true,再進行匯出。原始碼錯誤會顯示於 diagnostics,並伴隨 ok: false。解碼器匯出選擇 SystemVerilog;參考文件匯出選擇 Markdown。已儲存的命令輸出包含可供檢查的產生結果。請將 add.cx 與這些結果一併保留,以便將後續變更追溯至其原始碼。如果詳細化回報 ok: false,請根據診斷修正該檔案,重新執行詳細化,並從修正後的版本重新產生兩份輸出。

檢查匯出結果

解碼器輸出是一份 JSON 匯出結果。這些選出的欄位可識別產生的檔案;content 包含其 SystemVerilog 文字。參考文件結果的 filename 為 cx_reference.md,並在 content 中包含 Markdown 文字。

{"schema":"cx-export/1","ok":true,"kind":"decoder","format":"sv","filename":"cx_decoder.sv","mime_type":"text/x-systemverilog","word_bits":32,"instruction_count":1}

如果在 SystemVerilog 匯出中加入 --disassembler 後出現錯誤 disassembler export supports C and Rust,請移除 --disassembler,並重新執行所示的 SystemVerilog 命令。