Luyoung
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
RISC-VI 研究笔记(八):AM/BSP 最小运行时与裸机程序

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

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 设计

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 研究笔记(五):新增一条指令要改多少层

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

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 定义一条真实机器指令

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

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 模拟器

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 框架使用指南:远程环境、工程结构与调试入口

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 硬件加速设计

毕业设计记录(18):NES 硬件加速设计

前面几篇主要在软件侧做 NES:先移植 LiteNES,再尝试用 JIT 减少 6502 解释器的开销。但软件模拟始终有一个绕不开的问题:原本 NES 的 CPU、PPU、调色板、扫描线、手柄移位寄存器都是硬件并行工作的;放到软核 CPU 上解释执行以后,这些并行行为都变成了串行函数调用。 所以本项目又做了一条硬件路线:把 Verilog NES 核包装成 SoC 外设,让 LoongArch32
2026-02-01
Thesis Project
#graduation thesis #NES #hardware acceleration
12345…31

搜索

Hexo Fluid
总访问量 次 总访客数 人