RISC-V
文章平均质量分 89
小wang的IC自习室
这个作者很懒,什么都没留下…
展开
-
零、RISC-V SoC软核代码笔记详解——前言
前言:过去几年RISC-V飞速发展,这股从美国兴起的RISC-V大流愈演愈烈。由于目前中国IC行业受到国外不同程度的排挤,在国内大力发展RISC-V这个完全开源的精简指令集架构,显得尤为重要。而目前国内很多芯片的龙头企业都已经进军RISC-V架构的芯片领域,如紫光展锐、华为海思、阿里平头哥等。从市场角度来说,RISC-V还是有很多事情要做的,其生态建设,高端场景应用都需要进一步发展。所以推动RISC-V的教学和发展就愈发重要。如果想要拿RISC-V架构的SoC来参加FPGA开发或者数字IC设计相关的原创 2022-04-27 14:57:31 · 10045 阅读 · 6 评论 -
十一、RISC-V SoC外设注解——UART接口 时序设计 代码讲解(终篇)
十一、RISC-V外设解析——UART模块(终篇)上一篇博文中注释了TIMER模块,现在来介绍UART模块。终于迎来了最后一篇关于RISC-V SoC软核注解的博文,在本篇的最后会上传额外添加详细注释的工程代码,完全开源,如有需要可自行下载。目录1. 结构2.基础知识3. UART模块3.1 输入和输出端口3.2 程序注解4.后记1. 结构如下图,UART模块也是通过总线与内核进行交互的。2.基础知识(1)UART是指通用异步收发传输。(2)同..原创 2022-03-08 20:45:49 · 4219 阅读 · 4 评论 -
十、RISC-V SoC外设——timer定时器 代码讲解
上一篇博文中注释了SPI外设模块,现在来介绍timer定时器模块。目录1. 结构2. timer模块2.1 输入和输出端口2.2程序注解3.总结参考:1. 结构如下图,TIMER模块也是通过总线与内核进行交互的。该模块的主要功能是通过计数器达到计数阈值,来触发定时器中断。2. timer模块2.1 输入和输出端口inputwireclk,inputwirerst, //内核给外设inputwir...原创 2022-03-08 13:43:22 · 5326 阅读 · 1 评论 -
九、RISC-V SoC外设——SPI接口 代码讲解
3.SPI模块 3.1基础知识SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线。 SPI通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据传输速率较快;缺点是没有指定的流控制,没有应答机制确认数据是否接收。 一主多从(无论有多少个从设备,都共同使用这3条总线;而每个从设备都有独立的这一条 CS_N 信号线,低电平有效)如下图所示:CPOL/CPHA及通讯模式 SPI通讯协议一共有四种通讯模式,模式 0、模式原创 2022-03-08 09:46:07 · 3199 阅读 · 0 评论 -
八、RISC-V SoC外设——GPIO接口 代码讲解
八、RISC-V外设解析——GPIO&SPI前几篇博文中注释了RISC-V的内核CPU部分,从这篇开始来介绍RISC-V总线上挂载的外设部分。结构如下图,我们之前介绍的RISC-V内核部分,是图中左上角的RISC-V处理器核。而内核和所有的外设都挂载在总线上,内核通过总线和外设进行数据交互。这六个外设中,RAM和ROM外设已经在之前的博文中进行了解析,因此不再赘述。现在我们来介绍外设中的GPIO外设。2.GPIO模块2.1 输入和输出端口inputwireclk,...原创 2022-03-08 09:46:11 · 5511 阅读 · 0 评论 -
七、RISC-V SoC内核——总线 代码讲解
上一篇博文中注释了中断模块,现在来介绍总线模块rib.v:(这个RIB总线协议为工程原作者自定义的总线协议)目录1. rib.v功能2. rib总线接口注解3. 总线工作机制3.1. 总线仲裁机制3.2. 主设备选择访问从设备4. 对RIB总线的理解参考:1. rib.v功能设想一下一个没有总线的SoC,处理器核与外设之间的连接是怎样的。可能会如下图所示:可见,处理器核core直接与每个外设进行交互。假设一个外设有一条地址总线和一条数据总线,总共有N..原创 2022-03-06 16:40:06 · 6732 阅读 · 2 评论 -
六、RISC-V SoC内核——通用寄存器 代码讲解
tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。上一篇博文中注释了中断模块,现在来介绍通用寄存器reg.v模块:目录1. reg在内核中的位置2.RISC-V通用寄存器3. reg.v4.主要功能5. 代码注释参考:1. reg在内核中的位置如下图,绿色的方块是通用寄存器reg,从位置上可以看出,通用寄存器在功能上,主要承担译码和执行部分的临时数据存储:2.R...原创 2022-03-07 11:24:35 · 4510 阅读 · 4 评论 -
五、RISC-V SoC内核——中断 代码讲解
tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。上一篇博文中注释了执行模块,现在来介绍中断模块:目录1. 中断结构图2. csr_reg 控制与状态寄存器2.1 中断和异常概述2.2 csr_reg.v基础知识2.3 csr_reg.v注解3. clint.v 模块注解3.1 接口定义3.2 程序内容4. ctrl.v模块(跳转和流水线暂停)4.1 ctrl接口定义原创 2022-03-07 10:01:41 · 10215 阅读 · 4 评论 -
四、RISC-V SoC内核注解——除法(试商法)代码讲解
inyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。上一篇博文中注释了执行模块,现在来介绍执行模块中的除法模块:这个软核内部的除法单元是在div.v文件中实现。采用试商法来实现除法运算,试商法的计算过程如下:注意要点:1.每次除法运算至少需要33个时钟周期才能完成,用状态机来实现;2.主要需要判断并执行的指令有4种类:wire op_div = (op_r == `INST_DIV); /原创 2022-03-06 16:32:25 · 3799 阅读 · 3 评论 -
三、RISC-V SoC内核——执行 代码讲解
tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。上一篇博文中注释了译码模块,现在来介绍执行模块:目录1. 执行模块的注解2. ex.v(组合逻辑电路)2.2 乘法操作注解3. ram.v功能:存储临时数据。1. 执行模块的注解RISC-V内核的执行部分:涉及到ex.v、ram.v、div.v等模块。其中div.v会在下一章节详细叙述。执行部分详细结构图:接下来分模块对.原创 2022-03-06 16:24:23 · 4434 阅读 · 6 评论 -
二、RISC-V SoC内核注解——译码 代码讲解
tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。上一篇博文中注释了取值模块,现在来介绍译码模块:目录1. 译码模块的整体介绍2. RISCV指令RV32I、RV32M介绍3. 译码模块的注解3.1 id.v(组合逻辑电路)3.2 id_ex.v(时序逻辑电路)1. 译码模块的整体介绍RISC-V内核的译码部分:涉及到id.v、id_ex.v、ctrl.v、clint.v、...原创 2022-03-06 11:37:12 · 6639 阅读 · 2 评论 -
一、RISC-V SoC内核——取指 代码讲解
RISC-V内核结构——取指:tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。在注解工程中的“取指”代码之前,先回顾一下CPU执行指令的简略过程(以三级流水线为例):CPU内部主要由:寄存器(Register):多种寄存器各司其职,有程序计数器(即程序指针PC,Program Counter),用来记录要执行的指令的地址;指令寄存器,用来暂存指令内容;数据寄存器,一般为通用寄存器,用来保存指令执行原创 2022-02-20 18:38:40 · 8995 阅读 · 5 评论