code wiki / _hdl_build / rv64im_min_sim_smoke.nx

rv64im_min_sim_smoke.nx

buildroot/runtime/_hdl_build/rv64im_min_sim_smoke.nx

9640 B221 linesdepth 5pulls 17 transitivereach 0 importersview sourcekind smoketopic rv64im
docsdependenciesstructsconstsfunctions

about

rv64im_min_sim_smoke.nx -- end-to-end smoke for the RV64IM-min sim. Hand-codes a tiny RV64IM program that writes "OK\n" via the UART MMIO + poweroffs via the SiFive finisher. Runs it on the simulator (which ties decoder + ALU + regfile + CSR + CLINT + UART together) and asserts the captured UART byte stream matches "OK\n". This is the first integration test that exercises every module shipped in nishi-silicon. If this passes, the path from "NishiHDL DSL declared" to "RV64IM program executes" is proven -- the remaining steps to FPGA bring-up are: ELF loader, kernel boot, then nishi-synth + Yosys. Hand-coded program (RV64IM, position-independent, starts at PC): lui a0, 0x10000 ; a0 = 0x10000000 (UART base) addi a1, zero, 'O' ; a1 = 0x4F sb a1, 0(a0) ; UART THR <- 'O' addi a1, zero, 'K' ; a1 = 0x4B sb a1, 0(a0) ; UART THR <- 'K' addi a1, zero, '\n' ; a1 = 0x0A sb a1, 0(a0) ; UART THR <- '\n' lui a0, 0x100 ; a0 = 0x100000 (finisher base) lui a1, 0x5 ; a1 = 0x5000 addi a1, a1, 0x555 ; a1 = 0x5555 sw a1, 0(a0) ; finisher <- 0x5555 -> sim halts Encoded as 32-bit little-endian instruction words below.

dependencies 10 imports · 0 importers

nx_syscalls.nx nishi_hdl_primitives.nx rv64im_min_decoder.nx rv64im_min_alu.nx rv64im_min_regfile.nx rv64im_min_csr.nx rv64im_min_clint.nx rv64im_min_uart.nx rv64im_min_sim.nx nx_gate_verdict.nx rv64im_min_sim_smoke.nx

imports: nx_syscalls.nxnishi_hdl_primitives.nxrv64im_min_decoder.nxrv64im_min_alu.nxrv64im_min_regfile.nxrv64im_min_csr.nxrv64im_min_clint.nxrv64im_min_uart.nxrv64im_min_sim.nxnx_gate_verdict.nx

imported by: nobody (leaf or entry point)

structs

none

consts

61const SMOKE_MEM_BASE: i64 = 0x80000000
62const SMOKE_MEM_SIZE: i64 = 4096
63const SMOKE_TX_CAP: i64 = 256

functions

44func smoke_wnum(fd: i64, v: i64) -> i64
66func smoke_write32(buf: *u8, off: i64, value: i64) -> i64
76func smoke_load_program(mem: *u8) -> i64
135func main() -> i64