<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[a_weiming的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/a_weiming</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a_weiming]]></copyright><item><title><![CDATA[RISC-V Debug协议解读]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/120690311</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/120690311</guid><author>a_weiming</author><pubDate>Sun, 10 Oct 2021 19:26:40 +0800</pubDate><description><![CDATA[此文对RISC-V Debug协议做一个简单的介绍，具体的内容，大家可以查看协议本身内容。
https://github.com/riscv/riscv-debug-spec/blob/master/riscv-debug-stable.pdf
介绍是按目录结构进行的。
1 Introduction

All hart registers (including CSRs) can be read/written.
Memory can be accessed either from the hart’s p]]></description><category></category></item><item><title><![CDATA[riscv-sodor-rv32_3stage(3)]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/117898235</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/117898235</guid><author>a_weiming</author><pubDate>Mon, 14 Jun 2021 09:50:13 +0800</pubDate><description><![CDATA[现在分析的是consts.scala。这两个文件的主要作用是定义一些常量。
consts.scala：
package Sodor
package constants
{

import chisel3._
import chisel3.util._


trait SodorProcConstants
{
   //************************************
   // Machine Parameters

   //声明两个memory的端口。
   val NUM_ME]]></description><category></category></item><item><title><![CDATA[Rocket-chip-Dcache Flush & Discard]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/116090948</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/116090948</guid><author>a_weiming</author><pubDate>Sat, 24 Apr 2021 14:44:49 +0800</pubDate><description><![CDATA[本文介绍的是rocket-chip dcache flush和dachehe discard功能。
功能的说明可以参考文档《SiFive E76 Core Complex Manual 21G1.01.00》
CFLUSH.D.L1

Implemented 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]]></description><category></category></item><item><title><![CDATA[Rocket-chip-l2bus]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/115738002</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/115738002</guid><author>a_weiming</author><pubDate>Thu, 15 Apr 2021 20:27:08 +0800</pubDate><description><![CDATA[本文介绍的是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]]></description><category></category></item><item><title><![CDATA[Rocket-chip-PMP]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/115362780</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/115362780</guid><author>a_weiming</author><pubDate>Wed, 31 Mar 2021 22:29:50 +0800</pubDate><description><![CDATA[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，]]></description><category></category></item><item><title><![CDATA[Rocket-chip-Clock_gating]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/115188536</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/115188536</guid><author>a_weiming</author><pubDate>Wed, 24 Mar 2021 21:41:21 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[Rocket-chip-Cache]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/115058136</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/115058136</guid><author>a_weiming</author><pubDate>Sun, 21 Mar 2021 23:05:02 +0800</pubDate><description><![CDATA[关于cache的知识，大家可以看以下链接：
https://zhuanlan.zhihu.com/p/102293437?utm_source=qq
下面为验证rocket-chip icache和dcache的代码。
在这里我只验证cache起到的作用，不会分析直接映射缓存、多路组相缓存和全相连缓存在rocket-chip上的差异，也不会分析具体的miss/hit情况，也不会分析其分配策略，如果后面有做相关测试，会再补充内容。
测试代码如下：
#include "encoding.h"
#include ]]></description><category></category></item><item><title><![CDATA[Rocket-chip-RoCC(7)]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/114411409</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/114411409</guid><author>a_weiming</author><pubDate>Fri, 05 Mar 2021 20:15:41 +0800</pubDate><description><![CDATA[下面是对Blackbox模块的具体实现进行说明。
4、Blackbox
代码如下：
class BlackBoxExample(opcodes: OpcodeSet, blackBoxFile: String)(implicit p: Parameters)
    extends LazyRoCC(opcodes) {
  override lazy val module = new BlackBoxExampleModuleImp(this, blackBoxFile)
}

类BlackBoxExam]]></description><category></category></item><item><title><![CDATA[Rocket-chip-RoCC(6)]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/114228002</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/114228002</guid><author>a_weiming</author><pubDate>Sun, 28 Feb 2021 16:33:29 +0800</pubDate><description><![CDATA[下面是对CharacterCount模块的具体实现进行说明。
3、CharacterCount
类CharacterCountExample，需要输入opcodes参数，里面使用new创建CharacterCountExampleModuleImp的对象。声明atlNode为TLClientNode的类，用于TileLink协议，TLClientNode应该是作为master方的，用于发起数据的请求 。
class  CharacterCountExample(opcodes: OpcodeSet)(imp]]></description><category></category></item><item><title><![CDATA[Rocket-chip-RoCC(5)]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/113866679</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/113866679</guid><author>a_weiming</author><pubDate>Fri, 19 Feb 2021 16:21:20 +0800</pubDate><description><![CDATA[下面是对translator模块的具体实现进行说明。
2、Translator
类TranslatorExample，需要输入opcodes参数，里面使用new创建TranslatorExampleModuleImp的对象，且输入额外参数nPTWPorts，值为1。
class  TranslatorExample(opcodes: OpcodeSet)(implicit p: Parameters) extends LazyRoCC(opcodes, nPTWPorts = 1) {
  override]]></description><category></category></item><item><title><![CDATA[Rocket-chip-RoCC(4)--software]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/113359605</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/113359605</guid><author>a_weiming</author><pubDate>Thu, 28 Jan 2021 22:03:31 +0800</pubDate><description><![CDATA[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, t0


ROCC的底层汇编
我这里有两个版本，一个是很久的，另一个是较新的，较]]></description><category></category></item><item><title><![CDATA[Rocket-chip-RoCC(3)]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/112853517</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/112853517</guid><author>a_weiming</author><pubDate>Tue, 19 Jan 2021 22:15:41 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[Rocket-chip-RoCC(2)]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/111658564</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/111658564</guid><author>a_weiming</author><pubDate>Thu, 24 Dec 2020 23:44:53 +0800</pubDate><description><![CDATA[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的内容，结果如下图。

顺着找下去可]]></description><category></category></item><item><title><![CDATA[Rocket-chip-RoCC(1)]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/111600428</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/111600428</guid><author>a_weiming</author><pubDate>Wed, 23 Dec 2020 22:27:17 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[Rocket-chip-pipelinemul]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/110779020</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/110779020</guid><author>a_weiming</author><pubDate>Sun, 06 Dec 2020 22:21:25 +0800</pubDate><description><![CDATA[Rocket-chip-pipelinemul
由于电脑原因，旧电脑不能运行了，在新电脑中由于分辨率的问题，某些图的字体会特别小，大家认真点看，谢谢。
这次我们介绍的功能是pipeline-mul。
这部分没有协议的内容。
但我说明一下如何生成PipelineMultiplier模块的。
我用的是比较旧的scala代码，如果文件对不上了，那自行寻找关键字完成修改。
修改地方如下，将mulUnroll改为与总线位宽相同的值，则会自动生成PipelineMultiplier模块，至于更具体的类，大家可以以这几个]]></description><category></category></item><item><title><![CDATA[Rocket-chip-CLINT]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/106911288</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/106911288</guid><author>a_weiming</author><pubDate>Mon, 22 Jun 2020 22:23:29 +0800</pubDate><description><![CDATA[这次我们介绍的功能是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清除中断。
蓝色箭头]]></description><category></category></item><item><title><![CDATA[如何建立自己的RISC-V编译环境--汇编?]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/106771832</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/106771832</guid><author>a_weiming</author><pubDate>Mon, 15 Jun 2020 21:56:14 +0800</pubDate><description><![CDATA[如何建立自己的RISC-V编译环境–汇编?
1．RISC-V编译环境框架
这是我RISC-V编译环境的架构：
build  case  common  toolchain





一级目录
二级目录
说明




build
-
xx.hex、xx.bin、xx.dump &amp; xx.elf生成的目录。


-
Makefile
编译脚本。


-
add(例子)
生成文件，根据test.c生成的xx.hex、xx.bin、xx.dump &amp; xx.elf


project
-
各个目录的]]></description><category></category></item><item><title><![CDATA[Rocket-Chip-Local_Interrupt]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/106390615</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/106390615</guid><author>a_weiming</author><pubDate>Wed, 27 May 2020 21:10:28 +0800</pubDate><description><![CDATA[这次我们介绍的功能是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]]></description><category></category></item><item><title><![CDATA[Rocket-Chip-PLIC]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/106246629</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/106246629</guid><author>a_weiming</author><pubDate>Wed, 20 May 2020 23:17:58 +0800</pubDate><description><![CDATA[这次我们介绍的功能是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的只有一个，也就是多个中断来临时，是]]></description><category></category></item><item><title><![CDATA[Rocket-Chip-Hardware_Performance_Monitor]]></title><link>https://blog.youkuaiyun.com/a_weiming/article/details/105547789</link><guid>https://blog.youkuaiyun.com/a_weiming/article/details/105547789</guid><author>a_weiming</author><pubDate>Thu, 16 Apr 2020 00:10:02 +0800</pubDate><description><![CDATA[这次我们介绍的功能是Hardware Performance Monitor。
首先我们先看一下指令集 《The RISC-V Instruction Set Manual Volume II: Privileged Architecture Privileged Architecture Version 1.10》 是如何定义的。
文档链接：
https://riscv.org/specific...]]></description><category></category></item></channel></rss>