RISC-VI 研究笔记(八):AM/BSP 最小运行时与裸机程序 前言LLVM 后端能生成汇编,模拟器能执行指令,这还不足以支撑系统实验。因为真实的 C 程序不是从 main() 自己冒出来的,它需要启动代码、栈、.bss、链接脚本、平台 I/O 和停机约定。 AM/BSP 最小运行时解决的就是这个问题:让 C 程序以裸机 workload 的形式进入模拟器和 RTL。 裸机程序为什么不能直接从 main() 开始在普通操作系统里,用户程序 2026-04-20 Computer Architecture #RISC-V #bare metal #RISC-VI #AM
RISC-VI 研究笔记(七):C 模拟器与 reference model 前言ISA 实验必须有一个真值源。否则 LLVM 发出一条新指令后,很难判断错误来自哪里:是后端 pattern 选错了、MC 编码错了、模拟器语义错了,还是 RTL 实现错了。 RISC-VI 项目里的 C 模拟器承担的不是“跑个 demo”的角色,而是 reference model: 它定义 RV32R 和 RISC-VI32R 的提交级 ISA 语义。 它把程序运行结果变成结构化 JSO 2026-04-19 Computer Architecture #difftest #RISC-V #RISC-VI #simulator
RISC-VI 研究笔记(六):用静态依赖数据推导 ISA 设计 前言ISA 设计最怕变成“我觉得这条指令有用”。RISC-VI 的做法是反过来:先看 LLVM 生成的 RV32I 汇编到底暴露了哪些瓶颈,再从瓶颈里推导指令。 这种方法的重点不是跑几个命令,而是建立一条证据链: 123456C workload -> LLVM 生成 RV32I 汇编 -> 静态指令和依赖分析 -> 双发射压力分类 -> 候选 ISA 模式 -& 2026-04-18 Computer Architecture #RISC-V #RISC-VI #ISA #dependency analysis
RISC-VI 研究笔记(五):新增一条指令要改多少层 前言很多人第一次做 ISA 扩展,会以为“加一条指令”就是在模拟器里写一个 case,或者在 LLVM 里写一个 TableGen def。真正的工程现实要复杂得多。 一条指令要成为系统里稳定存在的能力,至少要被这些层同时认识: LLVM feature 和 predicate; TableGen 指令编码、操作数和属性; 指令选择 pattern 或 C++ selector; MC 汇编器和 2026-04-17 Computer Architecture #RTL #RISC-VI #LLVM #simulator
RISC-VI 研究笔记(四):LLVM 指令选择如何生成 lwxs、csel 和 bchkltu 前言定义机器指令只是第一步。LLVM 后端真正有趣的问题是:它什么时候会主动生成这些指令? 这不是字符串替换。LLVM 不会看到汇编里有 slli; add; lw 再粗暴改成 lwxs。更真实的路径是: 1234567LLVM IR -> DAG combine / legalize -> SelectionDAG 节点 -> target-specific addres 2026-04-16 Computer Architecture #RISC-V #RISC-VI #LLVM #instruction selection
RISC-VI 研究笔记(三):用 TableGen 定义一条真实机器指令 前言LLVM 后端里,一条机器指令不是一个汇编字符串。它至少要描述这些信息: 指令采用哪种编码格式; opcode、funct3、funct7 等位域如何落到 32 位机器码; 有哪些输入和输出操作数; 是否读写内存; 是否是分支或基本块 terminator; 是否有副作用; 对调度模型来说读写哪些资源; 哪些 IR/DAG pattern 可以选择到它。 这些信息大多写在 Tab 2026-04-15 Computer Architecture #RISC-VI #LLVM #backend #TableGen
RISC-VI 研究笔记(二):LLVM 后端里为什么先做 +xvi32r 前言如果要让 LLVM 支持一种“新架构”,直觉上很容易想到:那就新建一个 target,比如 riscvi32r。但 RISC-VI 的第一阶段没有这么做,而是选择继续使用 RISC-V target,并通过 +xvi32r 打开实验指令。 这不是绕路,而是一个非常典型的后端工程取舍:先把变量收窄,把目标放在指令价值验证上,而不是过早承担新 triple、新 ABI、新 driver、新 obj 2026-04-14 Computer Architecture #RISC-V #RISC-VI #LLVM #backend
RISC-VI 研究笔记(一):从 C 程序到 RISC-VI 模拟器 前言做 ISA 实验时,最容易把注意力放在“我加了几条指令”上。但从工程角度看,一条新指令真正成立,不是因为它能被手写汇编跑一次,而是因为它能穿过完整的软件栈: 12345678C 源码 -> LLVM IR -> 目标相关指令选择 -> 汇编文本 -> object -> 裸机 ELF -> flat binary -> 模拟器执行结果 2026-04-13 Computer Architecture #RISC-V #RISC-VI #LLVM #simulator
LA 框架使用指南:远程环境、工程结构与调试入口 Windows 安装 VSCode 并通过 Remote SSH 登录服务器1. 安装 VSCode 打开浏览器,访问 https://code.visualstudio.com 点击页面上的 Download for Windows 按钮,下载安装包(.exe 文件) 双击下载好的安装包,按照安装向导操作: 同意许可协议 选择安装路径(默认即可) 勾选以下选项(推荐全选): ✅ 将”通过 Cod 2026-04-12 Computer Architecture #LoongArch #LA framework #development environment
毕业设计记录(18):NES 硬件加速设计 前面几篇主要在软件侧做 NES:先移植 LiteNES,再尝试用 JIT 减少 6502 解释器的开销。但软件模拟始终有一个绕不开的问题:原本 NES 的 CPU、PPU、调色板、扫描线、手柄移位寄存器都是硬件并行工作的;放到软核 CPU 上解释执行以后,这些并行行为都变成了串行函数调用。 所以本项目又做了一条硬件路线:把 Verilog NES 核包装成 SoC 外设,让 LoongArch32 2026-02-01 Thesis Project #graduation thesis #NES #hardware acceleration