我为什么要重新学习“一生一芯”? ysyx 更新ysyx讲义 今年 8 月份左右更新了,内容更加丰富,难度上升更加平滑。当然,我不是我 relearn 的主要原因。 主要问题我之前的 CPU 是用 Chisel 写的,由于 Chisel 掌握的不熟练,稍微学了下就开始上手,导致代码质量不高。作为有代码洁癖的人,不优化到让我满意我是绝不停下来的。 那时候由于第一次写处理器,没有一个很好的框架意识,基本都是乱乱写的,虽然功能没问题,但 2025-10-10 学习 #学习
一场面试的记录 思考与反思昨晚 8 点进行了一场线上面试,我的感觉是回答得不够好。 我并没有准备这个项目,我对 OS、软硬协同方面做了几个小时的准备,比如 OS 进入核心态时的模式、模式转换、trap_handler、syacall、context 转换等。 面试官问了我的一个 处理器项目,我对那个项目很自信,因为那是我从 0 开始写的,所以就完全没有准备。但是时间有点久了(8月15 完结到现在快两个月),有点忘 2025-10-10 面试 #面试
Rust:Box、match、ownership Box 的核心概念1. 堆分配 Box 将数据存储在堆上而不是栈上 栈上只保留指向堆数据的指针 解决栈空间有限的问题,特别是对于大对象 2. 所有权机制 Box 遵循 Rust 的所有权规则 当 Box 离开作用域时,会自动释放其内存 实现 Drop trait,确保内存安全 1234{ let b = Box::new(5); // 在堆上分配 // 使用 b... 2025-09-27 编程语言 #Rust 基础
Rust:Generics、Traitstor 一、泛型(Generics)基本概念泛型允许我们编写可复用的代码,这些代码可以处理多种类型而不需要为每种类型重写逻辑。通过泛型,我们可以创建类型参数化的函数、结构体、枚举和方法。 核心价值 代码复用:避免为不同类型重复编写相同逻辑 类型安全:编译时类型检查 零运行时开销:编译时生成具体类型代码 基本用法1. 泛型函数1234567891011121314// 比较两个值并返回较大的值fn lar 2025-09-27 编程语言 #Rust 基础
Rust:Vector 一、Vector 基础特性 动态大小:可在运行时增长或缩小 堆分配:元素存储在堆内存中 类型安全:所有元素必须是相同类型 T 所有权管理:Vector 拥有其元素的所有权 二、创建 Vector 的多种方式1. 使用 Vec::new()12let mut v: Vec<i32> = Vec::new(); // 指定类型v.push(1); // 添加元素 2. 使用 vec! 2025-09-26 编程语言 #Rust 基础
Rust:HashMap HashMapRust 的 HashMap 是一个基于哈希表的键值对集合,它提供了高效的数据查找、插入和删除操作(平均时间复杂度 O(1))。它是 Rust 标准库 std::collections 的一部分,使用前需要引入。 核心概念 **键值对 (Key-Value Pair)**: 每个元素由一个唯一的 key 和对应的 value 组成。 **所有权 (Ownership)**: 插入时 2025-09-26 编程语言 #Rust 基础
Rust:struct、enum、string、module 前言这是第二次学习 Rust,上一次学习到一半就去忙别的事情了,半年过去了,感觉忘得差不多了(不用就会忘)。为了防止再次忘记,这次一边学习一边记录。主要基于 rustlings 来学习。 structstruct 具体包括: Classic Structs(经典结构体) Tuple Structs(元组结构体) Unit-like Structs(类似单元的结构体) Classic Struc 2025-09-24 编程语言 #Rust 基础
浅谈二进制安全(一) 基于 x64 的 Linux 函数调用过程caller 在 call 以及 call 之前、callee 在 ret 以及 ret之前都会做一些事情,以有序得执行程序。 比如,对于 main 函数调用 add_ints: 123456789NOINLINE long add_ints(long x, long y, long z) { // 触发 RDI, RSI, RDX 2025-09-02 计算机安全 #二进制安全
LA 挑战赛:龙芯杯团体赛总结 时间线以下时间线根据仓库 commit 来写: 4 月 1 号,开始建立仓库并搭建开发环境 5 月中旬,完成了绝大部分指令,接入 chiplab 6 月初,开始做 cache 6 月中旬,成功通过 rtthread 等测试程序 7 月 1 号,经过不断地 debug,终于在 chiplab 仿真环境中启动 linux 7 月 24 号,成功在fpga 下板启动 linux 7 月 27 号,重构 2025-08-26 体系结构 #龙芯杯
GLCC万众一芯单元验证(四) 前言个人感觉学习 Toffee 的话,还是看 Toffee 的 官方文档 比较好。本文将会就我本人的理解,写一点需要重点理解的东西。 异步环境异步是符合真实的硬件运行逻辑的,因为芯片中的电路在每一个时钟周期后,所有的引脚信号都会更新。 1234567891011121314import toffeefrom toffee.triggers import *async my_coro(dut): 2025-08-07 体系结构 #万众一芯