RISC-V & rocket-chip
文章平均质量分 79
Xxxxxxx..
时间不多了~
展开
-
RISC-V Debug协议解读
此文对RISC-V Debug协议做一个简单的介绍,具体的内容,大家可以查看协议本身内容。https://github.com/riscv/riscv-debug-spec/blob/master/riscv-debug-stable.pdf介绍是按目录结构进行的。1 IntroductionAll hart registers (including CSRs) can be read/written.Memory can be accessed either from the hart’s p原创 2021-10-10 19:26:40 · 5922 阅读 · 3 评论 -
riscv-sodor-rv32_3stage(3)
现在分析的是consts.scala。这两个文件的主要作用是定义一些常量。consts.scala:package Sodorpackage constants{import chisel3._import chisel3.util._trait SodorProcConstants{ //************************************ // Machine Parameters //声明两个memory的端口。 val NUM_ME原创 2021-06-14 09:50:13 · 359 阅读 · 2 评论 -
Rocket-chip-Dcache Flush & Discard
本文介绍的是rocket-chip dcache flush和dachehe discard功能。功能的说明可以参考文档《SiFive E76 Core Complex Manual 21G1.01.00》CFLUSH.D.L1Implemented as state machine in L1 data cache, for cores with data caches.Only available in M-mode.When rs1 = x0, CFLUSH.D.L1 writes bac原创 2021-04-24 14:44:49 · 1632 阅读 · 0 评论 -
Rocket-chip-l2bus
本文介绍的是rocket-chip l2_frontend_bus的作用。在介绍l2_frontend_bus前,需要有的基础知识:AHB-Lite、AHB和AXI4协议的总线基础。具体的协议文档可以上ARM官网下载。在l2_frontend_bus功能说明中,不会对AXI4、AHB和TileLink协议进行讲解,默认大家都已经知道这些协议的核心内容。rocket-chip在总线上可以生成三种协议,分别是AHB、AXI4和TileLink。默认采用的是AXI4,AHB和TileLink的底层scal原创 2021-04-15 20:27:08 · 1381 阅读 · 0 评论 -
Rocket-chip-PMP
pmp(Physical Memory Protection CSRs)的介绍可以看:《The RISC-V Instruction Set Manual Volume II: Privileged Architecture》重点内容在这里提一下:32位CPU最多具有8个可配置的pmp,配置寄存器分别为pmp0cfg,pmp1cfg,pmp2cfg,pmp3cfg,pmp4cfg,pmp5cfg,pmp6cfg和pmp7cfg,它们都是8-bit的,而pmpcfg0管理着mp0cfg-mp3cfg,原创 2021-03-31 22:29:50 · 1579 阅读 · 0 评论 -
Rocket-chip-Clock_gating
rocket-chip某些模块具有clock gating的功能,在进行等待状态时,会关闭该模块的时钟。下面看一下sifive的一些介绍《SiFive U74-MC Manual v19.05》。第一张是目录说明。第二张是dcache flush的操作说明。第三张是feature disable CSR寄存器的介绍,关闭时钟的操作就是这个CSR寄存器。再看一下scala代码。在tile/CustomCSRs.scala中有定义。0x7c1为chickenCSRId,其中bit[0]为di原创 2021-03-24 21:41:21 · 474 阅读 · 0 评论 -
Rocket-chip-Cache
关于cache的知识,大家可以看以下链接:https://zhuanlan.zhihu.com/p/102293437?utm_source=qq下面为验证rocket-chip icache和dcache的代码。在这里我只验证cache起到的作用,不会分析直接映射缓存、多路组相缓存和全相连缓存在rocket-chip上的差异,也不会分析具体的miss/hit情况,也不会分析其分配策略,如果后面有做相关测试,会再补充内容。测试代码如下:#include "encoding.h"#include原创 2021-03-21 23:05:02 · 1677 阅读 · 10 评论 -
Rocket-chip-RoCC(7)
下面是对Blackbox模块的具体实现进行说明。4、Blackbox代码如下:class BlackBoxExample(opcodes: OpcodeSet, blackBoxFile: String)(implicit p: Parameters) extends LazyRoCC(opcodes) { override lazy val module = new BlackBoxExampleModuleImp(this, blackBoxFile)}类BlackBoxExam原创 2021-03-05 20:15:41 · 824 阅读 · 8 评论 -
Rocket-chip-RoCC(6)
下面是对CharacterCount模块的具体实现进行说明。3、CharacterCount类CharacterCountExample,需要输入opcodes参数,里面使用new创建CharacterCountExampleModuleImp的对象。声明atlNode为TLClientNode的类,用于TileLink协议,TLClientNode应该是作为master方的,用于发起数据的请求 。class CharacterCountExample(opcodes: OpcodeSet)(imp原创 2021-02-28 16:33:29 · 814 阅读 · 2 评论 -
Rocket-chip-RoCC(5)
下面是对translator模块的具体实现进行说明。2、Translator类TranslatorExample,需要输入opcodes参数,里面使用new创建TranslatorExampleModuleImp的对象,且输入额外参数nPTWPorts,值为1。class TranslatorExample(opcodes: OpcodeSet)(implicit p: Parameters) extends LazyRoCC(opcodes, nPTWPorts = 1) { override原创 2021-02-19 16:21:20 · 975 阅读 · 2 评论 -
Rocket-chip-RoCC(4)--software
ROCC软件代码介绍前情提要:需要注意的是custom0~3均采用R类指令格式。RISC-V各指令类别如下图所示。mstatus的XS域需要打开mstatus的XS域。我是在底层汇编*.S文件中打开的,代码如下:其中MSTATUS_XS在encoding.h有定义。 # enable accelerator if present li t0, MSTATUS_XS csrs mstatus, t0ROCC的底层汇编我这里有两个版本,一个是很久的,另一个是较新的,较原创 2021-01-28 22:03:31 · 1233 阅读 · 0 评论 -
Rocket-chip-RoCC(3)
rocket-chip-rocc下面是对accumulator、translator、counter和blackbox这四个模块的具体实现进行说明。1、Accumulator类AccumulatorExample,需要输入opcodes和n参数,里面使用new创建AccumulatorExampleModuleImp的对象。class AccumulatorExample(opcodes: OpcodeSet, val n: Int = 4)(implicit p: Parameters) exte原创 2021-01-19 22:15:41 · 1633 阅读 · 0 评论 -
Rocket-chip-RoCC(2)
rocket-chip-rocc关于rocc的内容很多,我会分多章进行讲解。初步规划以下面章节为划分。1. 协议,自定义指令说明。2. rocket-chip RoCC各模块的scala代码说明。3. 软件代码编译实现。4. rocket-chip RoCC各模块硬件实现和硬件仿真。第二部分rocket-chip RoCC各模块的scala代码说明。1) Rocket-chip中的定制CSR寄存器利用grep指令搜索scala中关于0x7c0和0x7c1的内容,结果如下图。顺着找下去可原创 2020-12-24 23:44:53 · 2603 阅读 · 0 评论 -
Rocket-chip-RoCC(1)
rocket-chip-rocc关于rocc的内容很多,我会分多章进行讲解。初步规划以下面章节为划分。1. 协议,自定义指令说明。2. rocket-chip RoCC各模块的scala代码说明。3. 软件代码编译实现。4. rocket-chip RoCC各模块硬件实现和硬件仿真。第一部分介绍的定制CSR寄存器和定制指令的协议内容。1) CSR寄存器扩展在The RISC-V Instruction Set Manual Volume II: Privileged Architectur原创 2020-12-23 22:27:17 · 2710 阅读 · 0 评论 -
Rocket-chip-pipelinemul
Rocket-chip-pipelinemul由于电脑原因,旧电脑不能运行了,在新电脑中由于分辨率的问题,某些图的字体会特别小,大家认真点看,谢谢。这次我们介绍的功能是pipeline-mul。这部分没有协议的内容。但我说明一下如何生成PipelineMultiplier模块的。我用的是比较旧的scala代码,如果文件对不上了,那自行寻找关键字完成修改。修改地方如下,将mulUnroll改为与总线位宽相同的值,则会自动生成PipelineMultiplier模块,至于更具体的类,大家可以以这几个原创 2020-12-06 22:21:25 · 503 阅读 · 6 评论 -
Rocket-chip-CLINT
这次我们介绍的功能是CLINT中断。首先我们先看一下指令集《The RISC-V Instruction Set Manual Volume II: Privileged Architecture Privileged Architecture Version 1.10》是如何定义的。文档链接:https://riscv.org/specifications/privileged-isa/再看看E3关于CLINT的说明。红色箭头是一个软件中断位,配置为1会产生中断,配置为0清除中断。蓝色箭头原创 2020-06-22 22:23:29 · 1086 阅读 · 2 评论 -
如何建立自己的RISC-V编译环境--汇编?
如何建立自己的RISC-V编译环境–汇编?1.RISC-V编译环境框架这是我RISC-V编译环境的架构:build case common toolchain一级目录二级目录说明build-xx.hex、xx.bin、xx.dump & xx.elf生成的目录。-Makefile编译脚本。-add(例子)生成文件,根据test.c生成的xx.hex、xx.bin、xx.dump & xx.elfproject-各个目录的原创 2020-06-15 21:56:14 · 4117 阅读 · 0 评论 -
Rocket-Chip-Local_Interrupt
这次我们介绍的功能是local中断。首先我们先看一下指令集《The RISC-V Instruction Set Manual Volume II: Privileged Architecture Privileged Architecture Version 1.10》是如何定义的。文档链接:https://riscv.org/specifications/privileged-isa/由上面的定义中,我们能挖掘出3点重要的内容。local interrupt是不经过PLIC的,分别有sof原创 2020-05-27 21:10:28 · 692 阅读 · 3 评论 -
Rocket-Chip-PLIC
这次我们介绍的功能是PLIC中断。首先我们先看一下指令集《The RISC-V Instruction Set Manual Volume II: Privileged Architecture Privileged Architecture Version 1.10》是如何定义的。文档链接:https://riscv.org/specifications/privileged-isa/PLIC是全局的中断单元,用于I/O设备,入口可以很多个,但上报给CORE的只有一个,也就是多个中断来临时,是原创 2020-05-20 23:17:58 · 2184 阅读 · 2 评论 -
Rocket-Chip-Hardware_Performance_Monitor
这次我们介绍的功能是Hardware Performance Monitor。首先我们先看一下指令集 《The RISC-V Instruction Set Manual Volume II: Privileged Architecture Privileged Architecture Version 1.10》 是如何定义的。文档链接:https://riscv.org/specific...原创 2020-04-16 00:10:02 · 1583 阅读 · 0 评论 -
Rocket-Chip-Rom
这篇是介绍关于rocket-chip rom的内容,也叫bootrom。bootrom的具体scala代码为:***/rocket-chip/src/main/scala/devices/tilelink/BootROM.scala***在rocket-chip功能说明篇中,我生成了一个CPU,我打算按照我的配置,一点一点的说明这些功能是如何使用的,有些功能还会介绍如何修改相应的scala代码...原创 2020-04-04 01:35:45 · 1886 阅读 · 4 评论 -
Rocket-Chip功能说明
我根据自己的需求,配置了一个rocket-chip,我需要的硬件功能有以下(源代码为2020.03.17的src文件):指令集支持32位的IMAC,通用寄存器为32个。支持4KB-ICache和4KB-DCache。硬件断点数量为2。PMP区域为8个。硬件性能计数器为2个。带有DCache flush功能。带有clock gtae功能。乘法器为pipeline形式。local ...原创 2020-03-26 23:14:00 · 3043 阅读 · 7 评论 -
riscv-sodor-rv32_3stage(2)
现在分析的是arbiter.scala。因为instruction 和data共用一个memory,所以需要用到arbiter来进行仲裁:package Sodor{import chisel3._import chisel3.util._import Common._// arbitrates memory accessclass SodorMemArbiter(implic...原创 2020-03-23 23:37:54 · 542 阅读 · 0 评论 -
riscv-sodor-rv32_1stage(5)_rtl & simulation
为了更直观学习riscv-sodor-rv32-1stage的代码,我直接用它们自带的仿真进行分析。首先看得是riscv-sodor-rv32-1stage的整体框图:然后看的是core层次的框图:接下来我们以它们自带的memdian例子来说明riscv-sodor-rv32-1stage是如何运作的。先看下面的图:我们先看黄色箭头,黄色箭头是什么意思呢?第一个黄色箭头指的是Sim...原创 2020-03-23 23:07:22 · 791 阅读 · 5 评论 -
如何配置一个自定义的rocket-chip?
如何配置一个自定义的rocket-chip?这节的主要内容是教大家如何自由配置一个rocket-chip。以下是我对rocket-chip修改后实现的特殊功能(部分我会以例子的形式进行说明):1、 将reset_vector信号引到顶层,可以根据该信号使rocket-chip从不同地址启动。2、 在rocket-chip的顶层引出一套采用Tilelink的SRAM,这套SRAM按物理地址访...原创 2019-02-19 22:13:04 · 6201 阅读 · 31 评论 -
Chisel3 & Scala & Rocket-chip verilog的生成
Chisel3 & Scala & Rocket-chip verilog的生成首先弄清楚这三者的关系。Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性[1]。Chisel(Constructing Hardware In a Scala Embedded Language)是一种嵌入在高阶编程...原创 2019-02-18 22:25:42 · 6680 阅读 · 47 评论 -
RISC-V & rocket-chip目录
目录大家好,为了使更多人认识和研究RISC-V与rocket-chip,我将分享我学习RISC-V和rocket-chip的资料。有部分是官方的开源资料,有部分是我个人对RISC-V和rocket-chip的研究。资源来源于网络和我自己的实验,若有侵权行为,请您联系我1300466447@qq.com。若有关于rocket-chip的问题与合作也可以联系我。关于rocket-chip的项目,我...原创 2018-11-28 23:47:13 · 7582 阅读 · 5 评论 -
chisel3的安装与使用
3.6 chisel3的安装与使用chisel3的安装教程:https://github.com/freechipsproject/chisel3/tree/3d8064a9f2fd49bffb402b91131087c19ca7d6fc1、 先安装java,下面是以Ubuntu为例子。sudo apt-get install default-jdk2、 安装sbt,安装sbt过程中可...原创 2019-02-18 20:40:39 · 3658 阅读 · 0 评论 -
riscv-tests的使用
3.4 riscv-tests的使用3.4.1 riscv-tests目录的作用。riscv-tests目录放的是isa、debug、mt和benchmarks的测试文件、底层相关驱动、及其编译的文件,用于测试rocket-chip cpu的性能,可以适当地理解为系统验证,即通过编写C/汇编实现cpu性能的评估。riscv-tests目录的编译依赖于riscv-gnu-toolchain目录,...原创 2019-01-21 22:30:05 · 10883 阅读 · 17 评论 -
riscv-isa-sim的使用
3.3 riscv-isa-sim的使用主要资料来源:https://github.com/riscv/riscv-isa-sim/tree/d48f107dba6a96fb827cb47fdf290261feadeb35riscv-isa-sim是一个RISC-V指令的仿真器,riscv-isa-sim的正常运行需要依赖riscv-pk和riscv-fesvr工具。前面有对这些工具的说明。...原创 2018-12-18 23:46:41 · 4510 阅读 · 0 评论 -
rocket-chip项目的具体内容
3、rocket-chip项目的具体内容3.1 rocket-chip的项目框架rocket-chip项目的下载网址:rocket-chiprocket-chip项目的内容太多了,有部分我也还没完全弄得,弄懂的我才好贴出来:...原创 2018-11-28 00:38:09 · 6686 阅读 · 2 评论 -
RISC-V & rocket-chip
RISC-V & rocket-chip大家好,为了使更多人认识和研究RISC-V与rocket-chip,我将分享我学习RISC-V和rocket-chip的资料。有部分是官方的开源资料,有部分是我个人对RISC-V和rocket-chip的研究。资源来源于网络和我自己的实验,若有侵权行为,请您联系我1300466447@qq.com。若有关于rocket-chip的问题与合作也可以联...原创 2018-11-26 00:11:37 · 4936 阅读 · 6 评论 -
rocket-chip工具链的编译与使用
3.2 rocket-chip工具链的编译与使用主要资料来源:https://github.com/riscv/riscv-tools/tree/2faac3398af956cea9f1cbdc64b0575f807fc6a8rocket-chip工具链的编译步骤:1、 先配置好ubuntu的环境,github上的教程都是基于ubuntu的,这就是Linux系统推荐ubuntu的原因。安装...原创 2018-12-04 23:56:32 · 4355 阅读 · 6 评论 -
RISC-V矢量指令集学习记录(1)
RISC-V矢量指令集学习记录指令集草案:https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc关于这篇博客:1、这是我RISC-V矢量指令集的学习记录,不是翻译,所以有错误的地方请联系我。2、更新时间不定时,按心情更新,也按我学习进度更新。3、最近都比较忙,暂时没有时间继续学习。1、 Introduction这个文...原创 2019-04-03 22:54:43 · 9063 阅读 · 2 评论 -
rocket-chip流水线、ICache & DCache的结构
rocket-chip流水线、ICache & DCache的结构这篇非原创,图片来源于以下网站。https://www.lowrisc.org/docs/tagged-memory-v0.1/rocket-core/我觉得这三张图很重要,所以单独转发了,更详细的说明可以参考上面的网址。rocket-chip流水线的结构:rocket-chip ICache的结构:rock...转载 2019-05-07 23:46:04 · 4815 阅读 · 2 评论 -
如何建立自己的RISC-V编译环境--C_Code?
如何建立自己的RISC-V编译环境?1.RISC-V编译环境框架这是我RISC-V编译环境的架构:build case common toolchain一级目录二级目录说明build-xx.hex、xx.bin、xx.dump & xx.elf生成的目录。-Makefile编译脚本。-test生成文件,根据test.c生成的xx...原创 2019-04-03 22:48:01 · 6157 阅读 · 0 评论 -
riscv-sodor-rv32_3stage(1)
学习了1阶和2阶risc-v处理器后,现在学习3阶的,3阶的没有找到图。按照惯例,我们一个个scala文件进行说明。先进行说明的是alu.scala(算术逻辑单元(arithmetic and logic unit) 是能实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU):package Sodorimport chisel3._import chisel3.util._impor...原创 2019-08-26 22:06:19 · 783 阅读 · 0 评论 -
riscv-sodor-rv32_2stage(2)
riscv-sodor-rv32_2stage(2)接着分析的是dpath.scala。riscv-sodor-rv32_2stage dpath.scala与riscv-sodor-rv32_1stage dpath.scala的差异在于取指后加了一级执行的寄存器。当在执行的时候,取指寄存器可以预先取指,这样能提高系统的效率。如果没有执行阶段的寄存器(riscv-sodor-rv32_1st...原创 2019-08-22 21:00:29 · 642 阅读 · 0 评论 -
riscv-sodor-rv32_1stage(4)
riscv-sodor-rv32_1stage(4)下面进行说明的是consts.scala & package.scala。这两个文件的主要作用是定义一些常量。consts.scala:trait SodorProcConstants{ // for debugging, print out the commit information. // can be comp...原创 2019-08-06 21:25:18 · 517 阅读 · 0 评论 -
Rocket-Chip复位向量的修改
rocket-chip复位向量的修改rocket-chip系统复位后是从bootrom中进行启动的,这章我们将详细分析rocket-chip是如何调用bootrom模块的,最后还会对复位向量进行修改,即让rocket-chip不再从bootrom开始启动,而是从我们想要的地址进行启动。bootrom模块的调用:首先关注的scala文件是 /src/main/scala/system/Exam...原创 2019-06-26 22:37:09 · 2061 阅读 · 3 评论