【操作系统】RISC-V PLIC总结
本文是对【操作系统】xv6操作系统中按下键盘回车后发生的事情一文的补充阅读。如果你对PLIC(Platform-Level Interrupt Controller,平台级中断控制器)感到困惑,不妨先阅读这篇文章,了解PLIC的基本概念和工作原理。 什么是PLIC?在现代计算机系统中,CPU需要与各种外部设备(如键盘、鼠标、硬盘、网络卡等)进行通信。这些设备往往需要主动向CPU报告某些事件,比如键盘被按下、数据传输完成等。为了实现这种主动通知,设备会发出中断信号。 然而,在一个复杂的系统中,可能有数十甚至数百个设备同时发出中断请求。如果所有中断信号都直接涌向CPU,会导致混乱。因此,需要一个专门的硬件来管理和协调这些中断请求。这个硬件就是PLIC(Platform-Level Interrupt Controller,平台级中断控制器)。 通俗地理解,PLIC就像公司的秘书,中断目标就像公司的老板,而外部中断请求就像要拜访老板的访客。由于访客众多,如果没有处理就让他们全挤在老板办公室,会非常嘈杂。于是,老板聘请了一个秘书,规定所有访客都要在秘书那里登记。秘书会根据访客的重要性排序...
欢迎来到潘业成的博客
欢迎来到我的博客!我是潘业成,一名热爱计算机软硬件技术的程序员,致力于既会做网站与应用,也懂芯片与板卡。如果你也对计算机系统原理和实践感兴趣,请关注我! 关于我 高中时期我是江苏的一名普通文科生,那时江苏高考满分480分,18年高考我考了304分,在全省排名中下游,去了一个普通的三本,南京邮电大学通达学院。填报志愿时,我突然发现自己想学一点炫酷的东西,于是在一众金融、师范、管理专业中勉强找到了一个和信息挂点勾的专业————信息管理与信息系统。 大一上学期有一门C语言程序设计的课程,我发现用这个可以做点有趣的事情,比如写个让别人电脑关机的程序、或者控制键盘和鼠标让他不断给QQ好友轰炸信息。一学期结束,我惊奇的发现,我的绩点竟然是专业第4,而我只是按时上课,作业也常常是临时赶的或者抄的。大二开学,辅导员在群里发转专业的通知,其中规定,绩点前5%可以无条件转入我校的任意专业。我还记得那时我们寝室是8415还是8409来着,室友问我“你要转吗?”。 那时是2018年,周围朋友都说,南邮的王牌专业是通信工程,而我觉得计算机专业好像听起来更酷一些,我有点兴趣的编程知识似乎也是在计算机专业...
【操作系统】xv6操作系统中按下键盘回车后发生的事情
xv6概述与学习价值xv6是麻省理工学院为MIT 6.S081操作系统课程设计的教学操作系统。总代码量约1万行,主要使用C语言编写,辅以少量汇编代码。它涵盖操作系统核心机制:进程调度、文件系统、中断处理、设备驱动等。 xv6基于Unix V6系统改进设计,”x”表示可扩展(eXtensible)。相比简单嵌入式OS如uC/OS,xv6更接近现代操作系统架构。早期版本基于x86架构,2020年后推出RISC-V版本,本文分析该版本。 学习xv6的价值体现在多个方面: 深入理解系统实现:通过阅读和修改代码,掌握操作系统核心原理,包括: I/O机制:printf如何输出到屏幕 输入处理:键盘按键如何被捕获和处理 进程管理:操作系统如何调度和管理进程 软硬件接口:软件与硬件的交互方式 应聘技能提升:操作系统知识是嵌入式开发、固件开发、芯片运行时等岗位的核心要求,可以作为简历上的项目备战招聘。 系统设计思维培养:操作系统是典型的系统设计课程,我们需要了解其中的系统设计思想,为解决复杂问题提供思路。 本文通过分析按下键盘回车键后的完整执行流程,展示xv6的中...
【操作系统】手撸xv6操作系统——types.h_param.h_memlayout.h_riscv.h_defs.h头文件解析
概要main.c中引入了types.h/param.h/memlayout.h/riscv.h/defs.h头文件,各文件主要功能如下: 123456789101112131415161718192021// 数据类型重命名:// uint/ushort/uchar/uint8/uint16/uint32/uint64/pde_t 的定义#include "types.h"// 参数定义:// params.h 通过一系列宏定义,统一指定了操作系统内核中进程、CPU、文件、设备、文件系统等核心模块的最大值,// 为内核各功能模块的运行提供统一的参数配置依据#include "param.h"// 内存布局:// 定义QEMU virt平台下RISC-V架构的物理内存(硬件设备、内核RAM)与虚拟内存(内核栈、用户空间、trampoline/trapframe)布局,// 以及中断控制器等硬件地址常量,为内核内存管理和硬件交互提供地址映射依据#include "memlayout.h"...
【操作系统】手撸xv6操作系统——entry.S和start.c解析
entry.S解析和调试代码分析entry.S是xv6上电后执行的第一段代码,用于设置每个CPU的栈指针并跳转到start函数,每个CPU拥有4KB的栈空间。 123456789101112.section .text_entry: la sp, stack0 li a0, 1024*4 csrr a1, mhartid addi a1, a1, 1 mul a0, a0, a1 add sp, sp, a0 # jump to start() in start.c call startspin: j spin 整段代码的作用是令sp = stack0的地址 + 4096 × (当前运行的CPU核心编号 + 1)。la sp,stack0,la是load address,将stack0的地址赋值到sp寄存器,在RISC-V架构中sp是栈指针寄存器。li a0,1024*4,li是load immediate,加载立即数4096到a0。csrr a1,mhartid,是...
【片上网络专题讨论一】 片上总线的发展历程
闲言稍叙我在研二的2023年10月开始接触片上网络,中间也学习过一段时间超标量CPU设计,也算都是相关的课题。随着研究生毕业,也许以后不一定能再用到这块的知识,就想着趁着最近有时间,把这块的知识整理整理输出到社区,发挥一点余热也好过留在我的脑子里,在岁月的橱柜中逐渐吃灰。相比于写学位论文所要求的格式完美、结果丰满,我可能更喜欢写博客,因为可以更加充分和完整地表述在研究过程中经历的种种思考,而不是只是给出一个完美的答案。我希望用相对口语化的表述来讲清楚我理解的片上总线以及片上网络,并无偿分享所做的片上网络仿真器设计以及电路设计,因此这个系列会带有比较多的个人观点,可能有许多未必正确,有兴趣的朋友点个关注不迷路。 片上总线的发展随着芯片上晶体管数量的变多,对于连接片上各模块的总线要求也在提高。高带宽、高可靠、低延迟、可扩展、低功耗是片上总线关心的重点指标。 首先出现的总线应当是点到点互联,也就是将需要通信的模块直接连起来,比如CPU和内存之间用一个512bits的总线连接。从芯片后端物理实现的角度来说,总线的本质是金属,可以传导信号。但是点到点互联的问题是,在不进行数据传输的时候,显...
PyTorch 深度学习常用函数总结
近期要做AI编译器相关工作,需要把PyTorch入门下,在Google的Colab云平台上跑了LeNet/ResNet/GoogleNet/MobileNet,通过豆包整理了下所涉及到的函数,形成本文。 PyTorch 深度学习常用函数总结一、PyTorch 核心操作(基础张量与自动求导)1. 张量创建与操作 函数 / 方法 功能描述 参数说明 返回值 示例 torch.tensor(data) 从数据(列表、数组等)创建张量 data:输入数据;dtype:数据类型(如torch.float32,默认自动推断);device:设备(CPU/GPU) 多维张量(torch.Tensor) torch.tensor([[1,2],[3,4]]) → 形状为(2,2)的张量 torch.zeros(shape) 创建全零张量 shape:张量形状(如(2,3));dtype:数据类型 形状为shape的全零张量 torch.zeros((2,3)) → tensor([[0.,0.,0.],[0.,0.,0.]]) ...
【异常处理】Clion IDE中cmake时头文件找不到 头文件飘红
如图所示是我的clion项目目录 我自定义的data_structure.h和func_declaration.h在unit_test.c中无法检索到 cmakelists.txt配置文件如下所示: 123456789101112131415161718192021222324252627282930cmake_minimum_required(VERSION 3.30)project(noc C)#设置头文件的目录include_directories(${CMAKE_SOURCE_DIR}/header)set(CMAKE_C_STANDARD 11)add_executable(noc header/func_declaration.h header/data_structure.h src/design/router.c src/design/main.c src/design/memory_oper.c src/design/io_utils.c src...
【IC设计】Chisel构建工具Mill的安装(mill脚本执行过慢怎么办?)
背景Chisel传统的项目构建工具是sbt,但是最近我需要学习Rocket Chip SoC Generator中的BOOM处理器核,而Rocket Chip的项目所使用的项目构建工具是Mill,所以我需要安装下mill工具。 安装过程sbt和mill的区别是,sbt工具在项目目录中的配置文件是build.sbt,mill工具在项目目录中的配置文件是build.sc在mill官方文档中给出了一行命令来安装这个工具,链接点我 1sh -c "curl -L https://github.com/com-lihaoyi/mill/releases/download/0.11.12/0.11.12 > ~/.local/bin/mill && chmod +x ~/.local/bin/mill" 这行命令本质上是去github上下载了mill安装的一个shell脚本,存放在~/.local/bin/mill下,然后按理说我们需要执行这个脚本,但不推荐这么做!! 实际上该脚本核心是去maven下载mill的可执行j...
【IC设计】复旦微行业分析
参加复旦微电子杯·FPGA赛道期间,由于后续可能拿奖会发offer,阅读了相关行研报告,初步了解下这个公司。 概述复旦微电子公司,前身是复旦大学在1993年成立的复旦高技术公司,1998年7月复旦微电子成立于复旦大学逸夫楼,于2000年8月成功在香港创业板上市,和复旦大学有良好的合作关系。截止2023年4月,复旦微没有能控股的股东,其中上海国资委占股13%(国有控股),复旦大学占股13%,大股东是香港中央结算有限公司。 管理人员多数毕业于复旦,技术背景和管理经验丰富。 公司产品线齐全,包括安全与识别芯片(业务占比27.58%)、非挥发存储器(业务占比26.57%)、智能电表芯片(业务占比16.8%)、FPGA(22.07%)四大类产品线,并通过控股子公司为客户提供芯片测试服务(业务占6.18%)。 各产品线安全与识别芯片: 复旦微电安全与识别产品线依托自主研发的射频、存储器和安全防攻击技术,已形成了 RFID 与传感芯片、智能卡与安全芯片、智能识别设备芯片等多个产 品系列。产品覆盖存储卡、高频/ 超高频标签、NFC TAG、接触式/非接触式/双界...
【IC设计】Cache基础入门(地址映射方式、hit_miss的判断、替换策略、一致性问题)
Cache基础 为什么要学习Cache?本人是研究NoC总线的,NoC主要应用于大量CPU core的互联,NoC的本质在于利用存储资源构建路由拓扑,将主从机挂在路由器下,实现将计算和通信解耦合。单个路由节点的设计并不复杂,本质就是路由计算+交叉开关,总线的关键难度在于验证,要支持缓存一致性,并且在拓扑复杂、异构负载的情况下保证高可靠性。因此,学习Cache是精通NoC总线的前置知识,这里补充一下相关基础。时间有限,没有绘制精美的图片,有兴趣深入的可以读本文的【参考文献】 CPU所计算的数据要从内存中取,计算的结果要写入到内存。内存价格低,容量大,读写速度慢cache价格高,容量小,读写速度快。因此,CPU和内存间往往会加Cache,来加速存取数据的速度。 Cache line:Cache和Memory之间数据传输的最小单位,因为从memory中取数据到cache不会一个byte一个byte取,效率太低。通常一个Cache line是32byte或64byte,在CHI-E中一个Cache line是64 byte 内存地址A的数据存在Cache的什么位置?——Cache和...
【IC设计】跨时钟异步处理系列——单比特跨时钟
建立时间和保持时间 所谓的建立时间或者保持时间都是在描述一种时钟变化的边沿上的数据状态。 建立时间:在时钟的有效沿(以上升沿为例)到来之前,数据的输入端信号必须保持稳定的最短时间 保持时间:在时钟的有效沿(以上升沿为例)到来之后,数据的输入端信号必须保持稳定的最短时间 单比特信号的跨时钟处理慢时钟域的信号传输到快时钟域打两拍快时钟域的信号传输到慢时钟域 如图所示,第一行是脉冲信号,第二行是慢时钟域的时钟。如果从快时钟域要同步一个脉冲信号到慢时钟域,容易出现上升沿没有采样到脉冲信号的情况。 方案一 脉冲展宽+同步 (打拍打拍,进行或) 代码123456789101112131415161718192021222324252627282930313233343536373839404142module fast2slow_cdc ( input i_clk_f , input i_pluse_f , input i_rst_n , input i_clk_s , output o_pluse_s )...
【IC设计】Chisel API之Arbiter和RRArbiter的使用
介绍仲裁器在NoC路由器中是重要的组成部分,虚通道仲裁和交叉开关仲裁都需要使用仲裁器。Chisel提供了Arbiter和RRArbiter仲裁器Arbiter是基础的低位优先仲裁器,RRArbiter初始情况下也是低位优先仲裁(也可以配置成高位优先),但在某个通道仲裁胜出后,下一次仲裁会从获胜通道的下一个通道开始轮询,如果检测到有请求就授权。举例:假设有3个通道的请求,wire [2:0] req。第一轮仲裁,初始情况下0优先级最高,1其次,2最低。假设1和2同时请求资源,0没有请求,那么根据低位优先的原则,通道1获胜。第二轮仲裁,仲裁器会记住上次获胜的通道1,然后下一次0和2同时请求资源,我们需要从通道1的下一个通道进行轮询,那么通道0获胜。第三轮仲裁,仲裁器会记住上次获胜的通道0,然后从通道2开始轮询… Chisel的Valid和Ready流控Ready-Valid接口是一种简单的控制流接口,包含: data:发送端向接收端发送的数据; valid:发送端到接收端的信号,用于指示发送端是否准备好发送数据; ready:接收端到发送端的信号,用于指示接收端是否准备好接收数据;...
【IC设计】昇腾910架构学习
本文内容是参考华为公开资料形成的个人观点,无侵权行为,内容仅供学习! 昇腾910是华为的AI训练卡,基于7nm EUV工艺,其中有16个基于ARMv8定制的CPU,32个Ascend-Max AI加速器,使用4*6的无缓存NoC Mesh进行互联,使用HBM(High Bandwidth Memory)进行存储,提供128通道的视频译码器。 指标: 四个HBM总带宽1.2TB/s 相邻节点(我的理解是Ascend-Max核)带宽为1024bit*2GHz=256GB/s 昇腾910每秒提供256万亿次fp16浮点运算,512万亿次int8运算 LLC总吞吐量为4TB/s
【IC设计】时序分析面试题总结(亚稳态、建立_保持裕量计算、最高时钟频率计算、时序违例解决办法)
这篇文章旨在总结【数字IC设计】秋招面试过程中在【时序分析】方面的重点知识,另外还会开一个帖子总结在跨时钟方面的重点知识,这两块是非常重要的面试题,需要系统总结下来,持续更新。 基本概念亚稳态亚稳态(metastable)指的是触发器在时钟上升沿前后一段时间内无法达到确定的状态,在这个时间区间内输入如果不能保持稳定,采样到的数据不一定是正确的数值。 建立时间和保持时间建立时间:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的最小时间。保持时间:触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的最小时间。 常见问题1.为什么触发器要满足建立时间和保持时间? 因为触发器内部数据的形成是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在 0 和 1 之间变化,这时需要经过一个恢复时间,其输出才能稳定,但稳定后的值并不一定是你的输入值。这就是为什么要用两级触发器来同步异步输入信号。这样做可以防止由于异步输入信号对于本级时钟可能不满足建立保持时间而使本级触发器产生的亚稳态传播到后面逻辑中,导致亚稳态的传播。(比较...