LA 挑战赛:OpenLA500 的 cache 研究 前言OpenLA500 的 dcache 是一个简单的 cache,实现了 《CPU 设计实战》中 有关cache 的所有需求,因此它值得研究和学习。 体系结构cache 是内存的一部分内容拷贝,因此 CPU 访存的时候首先访问 cache,若命中就返回,若未命中就会 refill 然后返回(数据或者 write 的 OK 信息)。 cache 的三种映射方式中,组相联是最好的,它结合了全相联和直 2025-06-13 体系结构 #CPU #cache
《沉默之塔》全文 沉默之塔第一章:停滞的尘埃42号平行宇宙中。教室的窗户过滤着地球恒定的、略显苍白的阳光。彼得·阿瑞斯站在讲台前,目光扫过下方十七张年轻却过早沉寂的脸庞。他们像精密的仪器,安静地吸收着他讲授的、早已被“真理数据库”固化数百年的经典物理定律。空气里弥漫着一种惰性气体的味道,安全,却令人窒息。 在这个宇宙,语言的边界即是认知的边界——人类无法说出被自身大脑明确判定为“假”的命题。尝试说出伪命题,会遭遇生 2025-06-01 小说 #科幻
LA 挑战赛:添加系统调用异常支持 异常和中断软硬协同在 CPU (以 riscv 为例)上运行的 OS 上的应用程序(有点绕)可以发起 syscall,也就是系统调用。 当用户程序调用系统调用的时候(比如 write调用 ),实际上,走到了这里(大致描述): 12345.global writewrite: li a7, SYS_write ecall ret 首先,将系统调用号放到 a7,接着执行 ecall 2025-04-22 CPU #LoongArch #CPU #FPGA
LA 挑战赛:BRAM 的引入 BRAM理想的效果是,IFU 在当前周期上升沿给 inst_sram 发射地址后,在当前周期内就可以拿到 inst_data,但是这是理性情况下。 异步 RAM 很方便,但是实际情况是,CPU 的频率非常快,比 RAM 快得多,因此如果为了保持异步访存,就得将 CPU 的频率降低,这很明显会损失性能(暂不考虑 inst cache)。 这里就引入了 BRAM,它在当前周期给 BRAM 发射地址,下 2025-04-16 CPU #LoongArch #CPU #FPGA
LA 挑战赛:5级流水线的实现 阻塞技术解决相关引发的冲突概述阻塞技术,以 5 级流水线为例,就是将这个 5 个模块设计成单独的模块。比如对于 IDU,IFU 就是它的上游,EXU 就是它的下游。IDU 的数据来自上游,同时它要给下游 EXU 提供数据。 阻塞技术会使得每一个模块都会相互解耦,成了一个单独的模块。 模块之间如何握手呢? 设想一下,对于 IDU 而言,假设它遇到了点事情,需要阻塞,那么就会通知 IFU 不要发数据了 2025-04-15 CPU #LoongArch #CPU #FPGA
浅谈 Rust 中的移动语义与所有权机制 移动特性C++11 会通过移动语义来消除内存拷贝成本,而 rust 将这种特性发挥到极致,推出了所有权机制。 看一段代码: 12let s1 = String::from("hello");let s2 = s1; 当 s2 绑定 s1 的资源的时候,就会将 s1 的资源转移到 s2 中,这是因为一份资源只能有一个拥有者。 换句话说,s1 资源转移到 s2 中,不仅仅发生了浅 2025-04-07 编程语言 > Rust #Rust
LA 挑战赛:fpga 下板测试 使用 verilator 进行测试生成测试案例编译测试文件,之后会生成 coe 文件、mif 文件。而且,mif 文件也可以由 vivado 生成,更具体地: mif 文件是根据 coe 文件生成的。 coe 文件只会在生成 rom 模块时起作用,其作用就是根据文件内容生成相应的 mif 文件,而 rom 真正使用的是 mif 文件。 直接编辑 .mif 文件的方式不可取,因为在重新生成其他模块 2025-04-06 CPU #LoongArch #CPU #FPGA
LA 挑战赛:加上 difftest difftest之前做 ysyx 中的处理器设计的时候,使用了 基于 nemu 的 difftest。那个 difftest 的原理是: nemu 被编译成一个库,暴露出了一些接口供 CPU 调用; 仿真程序将 img 装到各自的内存; 当 CPU 执行一步的时候,REF CPU 也执行一步; 接着对比两者的所有的 寄存器包括 PC; 如果寄存器不同,那么就发出报告信息,程序员可以进行 debu 2025-04-05 CPU #LoongArch #CPU
LA 挑战赛:开篇 环境参考 chiplab 配置好环境之后,基于 loongsonEdu 的开源项目 cdp_ede_local,进行前期的增量开发,同时也参考 CPU 设计实战。后期可以顺利移植到 chiplab 中进行验证。 minicpu_env这个实验要求阅读代码,熟悉流程,并补充代码且进行 debug(代码有的地方有问题)。初次在 vivado 上仿真之后,感觉难以调试(时间漫长),于是我在本地搭建了基于 2025-04-03 CPU #LoongArch #CPU
基于 riscv32 的 OS 设计:完结 总结这十三篇博客是学习 循序渐进,学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春 的笔记,今日终于完结了。 学完之后,收获很大,如果要是做过 riscv CPU 设计那效果更佳。 如果不考虑性能(需要精巧的数据结构和算法),OS 的核心就是模式转换。soc 提供了各种设备,启动的时候,得初始化这些设备,之后就能利用这些设备了,比如 CLINT、PLIC、UART 等。 ISA 也提 2025-04-01 OS #OS #riscv