Khai triển CX và xuất bộ giải mã

Chuyển một định nghĩa lệnh CX nhỏ đã lưu thành bộ giải mã và tài liệu tham chiếu Markdown.

Altifigence CLI 0.1.9 trên Linux đọc mã nguồn CX gốc từ luồng nhập chuẩn cho các thao tác ISA. Bắt đầu với một lệnh ADD để có thể kiểm tra cùng lúc định dạng lệnh, toán hạng thanh ghi, mã hóa và biểu thức thực thi. Lưu mã nguồn sau thành add.cx trong thư mục làm việc của bạn. Tập thanh ghi chứa 32 thanh ghi, mỗi thanh ghi rộng 32 bit, và x0 đọc ra giá trị 0.

Chỉ đọc kết quả đã lưu khi trạng thái thoát là 0. Lưu riêng luồng lỗi chuẩn và kiểm tra các trường kết quả được mô tả bên dưới.

Lưu một lệnh 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
}

Định dạng R gán cho mỗi trường mã hóa một dải bit tường minh. ADD cố định các giá trị opcode, funct3 và funct7, còn các thanh ghi nguồn và đích chiếm những trường mang tên tương ứng. Cú pháp hợp ngữ sử dụng định dạng toán hạng x theo sau bởi chỉ số thanh ghi. Giữ tệp nguồn này làm đầu vào chung cho quá trình khai triển và cả hai lần xuất.

Khai triển và xuất

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

Chạy khai triển trước và kiểm tra kết quả JSON có ok: true trước khi xuất. Lỗi nguồn xuất hiện trong diagnostics với ok: false. Việc xuất bộ giải mã chọn SystemVerilog; việc xuất tài liệu tham chiếu chọn Markdown. Đầu ra lệnh đã lưu chứa kết quả được tạo để kiểm tra. Giữ add.cx cạnh các kết quả này để có thể truy ngược những thay đổi sau về nguồn của chúng. Nếu khai triển báo ok: false, sử dụng chẩn đoán để sửa tệp đó, chạy lại khai triển và tạo lại cả hai đầu ra từ phiên bản đã sửa.

Kiểm tra kết quả xuất

Đầu ra bộ giải mã là kết quả xuất JSON. Các trường được chọn này nhận diện tệp được tạo; content chứa văn bản SystemVerilog của tệp. Kết quả tham chiếu sử dụng filename cx_reference.md và chứa văn bản Markdown trong content.

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

Nếu thêm --disassembler vào lệnh xuất SystemVerilog tạo lỗi disassembler export supports C and Rust, hãy bỏ --disassembler và chạy lại lệnh SystemVerilog được trình bày.