自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (3)
  • 收藏
  • 关注

原创 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 5138 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 328 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 1519

原创 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 1097

原创 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 1426

原创 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 402

原创 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 1499 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 765 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 757 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 733 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 1161

原创 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 1530

原创 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 2433

原创 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 2567

原创 Rocket-chip-pipelinemul

Rocket-chip-pipelinemul由于电脑原因,旧电脑不能运行了,在新电脑中由于分辨率的问题,某些图的字体会特别小,大家认真点看,谢谢。这次我们介绍的功能是pipeline-mul。这部分没有协议的内容。但我说明一下如何生成PipelineMultiplier模块的。我用的是比较旧的scala代码,如果文件对不上了,那自行寻找关键字完成修改。修改地方如下,将mulUnroll改为与总线位宽相同的值,则会自动生成PipelineMultiplier模块,至于更具体的类,大家可以以这几个

2020-12-06 22:21:25 481 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 993 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 3901

原创 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 637 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 2091 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 1457

原创 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 1781 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 2946 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 518

原创 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 701 5

原创 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 738

原创 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 589

原创 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 459

原创 riscv-sodor-rv32_2stage(1)

riscv-sodor-rv32_2stage(1)介绍了1阶的RISC-V处理器,现在在1阶的基础上介绍2阶的。先贴一张2阶RISC-V处理器的架构图。惯例,我们一个个scala文件来分析,先分析的是cpath.scala,2阶的cpath.scala和1阶的很相似,只有几个地方做了修改,最主要的变动是:1) 删除了cs_alu_fun变量。2) 增加了if_kill控制信号。pa...

2019-08-05 21:48:06 482

原创 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 1987 3

原创 riscv-sodor-rv32_1stage(3)

riscv-sodor-rv32_1stage(3)下面进行说明的是core.scala、tlie.scala & top.scala。这三个文件的主要作用是一层层调用,同时将调用的模块一一互连,最后生成顶层的模块,这类似于verilog的层次化结构,同时将例化的各模块一一互连。//core.scala说明package Sodor{import chisel3._impor...

2019-06-17 23:04:21 745

原创 riscv-sodor-rv32_1stage(2)

riscv-sodor-rv32_1stage(2)接riscv-sodor-rv32_1stage(1)的内容,先放rv32_1stage的结构图:下面进行说明的是dpath.scala:package Sodor{import chisel3._import chisel3.util._import Constants._import Common._import C...

2019-06-12 23:40:46 956

原创 riscv-sodor-rv32_1stage(1)

riscv-sodor-rv32_1stage这是我对riscv-sodor处理器的学习过程。1、 什么是riscv-sodor?维基:https://github.com/ucb-bar/riscv-sodor/wikiGithub: https://github.com/ucb-bar/riscv-sodorriscv-sodor处理器是教学处理器,相比于rocket-chip会更容...

2019-06-05 23:39:11 1979 4

原创 Linux系统中VCS、Dve & Verdi的使用

1. 资料来源:1)http://bbs.eetop.cn/thread-633801-1-1.html2)https://blog.csdn.net/Chi_Hong/article/details/862980483)https://blog.csdn.net/qq_40829605/article/details/853457952. Linux系统中VCS、Dve & Ve...

2019-06-02 17:22:55 16122 4

转载 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 4565 2

原创 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 8651 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 5998

原创 如何配置一个自定义的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 6031 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 6489 47

原创 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 3608

原创 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 10344 17

rocket-chip_20.03.26.rar

rocket-chip RTL,带有以下功能: 2) 支持4KB-ICache和4KB-DCache。 3) 硬件断点数量为2。 4) PMP区域为8个。 5) 硬件性能计数器为2个。 6) 带有DCache flush功能。 7) 带有clock gtae功能。 8) 乘法器为pipeline形式。 9) local interrupt为16个。 10) PLIC入口2个。 11) 带有CLINT中断。 12) 带有JTAG DEBUG接口。 13) 带有frontend接口(AXI4/AHB)。 14) 带有memory接口(AXI4/AHB)。 15) 带有mmio接口(AXI4/AHB)。 16) 带有rom。 17) 带有ROCC接口。

2020-03-26

CRC校验码生成说明

CRC校验码生成,简单地列举了一个CRC校验码生成的过程,说明CRC生成的过程和原理。希望对大家有用。

2015-04-08

SD卡初始化流程说明

SD卡初始化流程,简单说明了SD卡初始化的指令与步骤。本人是基于FPGA写的。对SD卡初始化的指令作了说明。

2015-03-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除